Mercurial > hg
annotate mcabber/mcabber/xmpp_iqrequest.c @ 2111:9023a6f2bf6c
Misc. style updates
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 11 May 2014 17:18:18 +0200 |
parents | c7e9950fa741 |
children | fc7a758ebbde |
rev | line source |
---|---|
1599 | 1 /* |
2 * xmpp_iqrequest.c -- Jabber IQ request handling | |
3 * | |
1729
e6e89b1d7831
Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents:
1719
diff
changeset
|
4 * Copyright (C) 2008-2010 Frank Zschockelt <mcabber@freakysoft.de> |
e6e89b1d7831
Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents:
1719
diff
changeset
|
5 * Copyright (C) 2005-2010 Mikael Berthe <mikael@lilotux.net> |
1599 | 6 * |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or (at | |
10 * your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, but | |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
20 * USA | |
21 */ | |
1598 | 22 |
1604
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
23 #include <string.h> |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
24 #include <stdlib.h> |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
25 #include <sys/time.h> |
1604
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
26 |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
27 #include "xmpp_helper.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
28 #include "xmpp_iq.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
29 #include "screen.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
30 #include "utils.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
31 #include "settings.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
32 #include "hooks.h" |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
33 #include "hbuf.h" |
2104
c7e9950fa741
Added option to enable carbons (set carbons = 1 in mcabberrc)
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2103
diff
changeset
|
34 #include "carbons.h" |
1604
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
35 |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
36 extern LmMessageNode *bookmarks; |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
37 extern LmMessageNode *rosternotes; |
351427ef0b4b
Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents:
1599
diff
changeset
|
38 |
1598 | 39 static LmHandlerResult cb_roster(LmMessageHandler *h, LmConnection *c, |
40 LmMessage *m, gpointer user_data); | |
41 static LmHandlerResult cb_version(LmMessageHandler *h, LmConnection *c, | |
42 LmMessage *m, gpointer user_data); | |
43 static LmHandlerResult cb_time(LmMessageHandler *h, LmConnection *c, | |
44 LmMessage *m, gpointer user_data); | |
45 static LmHandlerResult cb_last(LmMessageHandler *h, LmConnection *c, | |
46 LmMessage *m, gpointer user_data); | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
47 static LmHandlerResult cb_ping(LmMessageHandler *h, LmConnection *c, |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
48 LmMessage *m, gpointer user_data); |
1598 | 49 static LmHandlerResult cb_vcard(LmMessageHandler *h, LmConnection *c, |
50 LmMessage *m, gpointer user_data); | |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
51 static LmHandlerResult cb_disco_info(LmMessageHandler *h, LmConnection *c, |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
52 LmMessage *m, gpointer user_data); |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
53 |
29 | 54 |
1598 | 55 static struct IqRequestHandlers |
56 { | |
57 const gchar *xmlns; | |
58 const gchar *querytag; | |
59 LmHandleMessageFunction handler; | |
60 } iq_request_handlers[] = { | |
2017 | 61 {NS_ROSTER, "query", &cb_roster}, |
62 {NS_VERSION, "query", &cb_version}, | |
63 {NS_XMPP_TIME,"time", &cb_time}, | |
64 {NS_LAST, "query", &cb_last}, | |
65 {NS_PING, "ping", &cb_ping}, | |
66 {NS_VCARD, "vCard", &cb_vcard}, | |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
67 {NS_DISCO_INFO, "query", &cb_disco_info}, |
1598 | 68 {NULL, NULL, NULL} |
69 }; | |
1254
401639413340
More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents:
1224
diff
changeset
|
70 |
1006 | 71 // Enum for vCard attributes |
72 enum vcard_attr { | |
73 vcard_home = 1<<0, | |
74 vcard_work = 1<<1, | |
75 vcard_postal = 1<<2, | |
76 vcard_voice = 1<<3, | |
77 vcard_fax = 1<<4, | |
78 vcard_cell = 1<<5, | |
79 vcard_inet = 1<<6, | |
80 vcard_pref = 1<<7, | |
81 }; | |
683 | 82 |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
83 static LmHandlerResult cb_disco_info(LmMessageHandler *h, LmConnection *c, |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
84 LmMessage *m, gpointer user_data) |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
85 { |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
86 LmMessageNode *ansqry; |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
87 LmMessageNode *feature; |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
88 |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
89 ansqry = lm_message_node_get_child(m->node, "query"); |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
90 |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
91 feature = lm_message_node_get_child(ansqry, "feature"); |
2111 | 92 for (; feature; feature = feature->next) { |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
93 const char *v = lm_message_node_get_attribute(feature, "var"); |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
94 |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
95 if (!g_strcmp0(v, NS_CARBONS_2)) { |
2104
c7e9950fa741
Added option to enable carbons (set carbons = 1 in mcabberrc)
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2103
diff
changeset
|
96 carbons_available(); |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
97 } |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
98 } |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
99 |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
100 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
101 } |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
102 |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
103 static LmHandlerResult cb_ping(LmMessageHandler *h, LmConnection *c, |
1706 | 104 LmMessage *m, gpointer user_data) |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
105 { |
1706 | 106 struct timeval *timestamp = (struct timeval *)user_data; |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
107 struct timeval now; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
108 time_t dsec; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
109 suseconds_t dusec; |
1706 | 110 const gchar *fjid; |
1707 | 111 gchar *bjid, *mesg = NULL; |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
112 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
113 gettimeofday(&now, NULL); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
114 dsec = now.tv_sec - timestamp->tv_sec; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
115 if (now.tv_usec < timestamp->tv_usec) { |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
116 dusec = now.tv_usec + 1000000 - timestamp->tv_usec; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
117 --dsec; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
118 } else |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
119 dusec = now.tv_usec - timestamp->tv_usec; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
120 |
1706 | 121 // Check IQ result sender |
122 fjid = lm_message_get_from(m); | |
123 if (!fjid) | |
124 fjid = lm_connection_get_jid(lconnection); // No from means our JID... | |
125 if (!fjid) { | |
126 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); | |
127 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
128 } | |
129 | |
130 bjid = jidtodisp(fjid); | |
131 | |
132 switch (lm_message_get_sub_type(m)) { | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
133 case LM_MESSAGE_SUB_TYPE_RESULT: |
1707 | 134 mesg = g_strdup_printf("Pong from <%s>: %d second%s %d ms.", fjid, |
135 (int)dsec, dsec > 1 ? "s" : "", | |
136 (int)(dusec/1000L)); | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
137 break; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
138 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
139 case LM_MESSAGE_SUB_TYPE_ERROR: |
1800
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
140 display_server_error(lm_message_node_get_child(m->node, "error"), |
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
141 fjid); |
1707 | 142 mesg = g_strdup_printf("Ping to <%s> failed. " |
143 "Response time: %d second%s %d ms.", | |
144 fjid, (int)dsec, dsec > 1 ? "s" : "", | |
145 (int)(dusec/1000L)); | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
146 break; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
147 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
148 default: |
1706 | 149 g_free(bjid); |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
150 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
151 break; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
152 } |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
153 |
1707 | 154 if (mesg) |
155 scr_WriteIncomingMessage(bjid, mesg, 0, HBB_PREFIX_INFO, 0); | |
156 g_free(mesg); | |
1706 | 157 g_free(bjid); |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
158 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
159 } |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
160 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
161 // Warning!! xmlns has to be a namespace from iq_request_handlers[].xmlns |
1598 | 162 void xmpp_iq_request(const char *fulljid, const char *xmlns) |
1215
80c095886fb5
Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents:
1213
diff
changeset
|
163 { |
1598 | 164 LmMessage *iq; |
165 LmMessageNode *query; | |
166 LmMessageHandler *handler; | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
167 gpointer data = NULL; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
168 GDestroyNotify notifier = NULL; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
169 GError *error = NULL; |
1598 | 170 int i; |
683 | 171 |
1598 | 172 iq = lm_message_new_with_sub_type(fulljid, LM_MESSAGE_TYPE_IQ, |
173 LM_MESSAGE_SUB_TYPE_GET); | |
2017 | 174 for (i = 0; iq_request_handlers[i].xmlns && |
175 strcmp(iq_request_handlers[i].xmlns, xmlns) != 0 ; ++i) | |
1598 | 176 ; |
177 query = lm_message_node_add_child(iq->node, | |
178 iq_request_handlers[i].querytag, | |
179 NULL); | |
180 lm_message_node_set_attribute(query, "xmlns", xmlns); | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
181 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
182 if (!g_strcmp0(xmlns, NS_PING)) { // Create handler for ping queries |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
183 struct timeval *now = g_new(struct timeval, 1); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
184 gettimeofday(now, NULL); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
185 data = (gpointer)now; |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
186 notifier = g_free; |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
187 } else if (!g_strcmp0(xmlns, NS_DISCO_INFO)) { |
2111 | 188 gchar *servername = get_servername(settings_opt_get("jid"), |
189 settings_opt_get("server")); | |
2103
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
190 lm_message_node_set_attribute(iq->node, "to", servername); |
1210a22726d3
We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents:
2017
diff
changeset
|
191 g_free(servername); |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
192 } |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
193 |
1598 | 194 handler = lm_message_handler_new(iq_request_handlers[i].handler, |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
195 data, notifier); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
196 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
197 lm_connection_send_with_reply(lconnection, iq, handler, &error); |
1598 | 198 lm_message_handler_unref(handler); |
199 lm_message_unref(iq); | |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
200 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
201 if (error) { |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
202 scr_LogPrint(LPRINT_LOGNORM, "Error sending IQ request: %s.", error->message); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
203 g_error_free(error); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
204 } |
577
5c6d364130ee
Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents:
576
diff
changeset
|
205 } |
29 | 206 |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
207 // This callback is reached when mcabber receives the first roster update |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
208 // after the connection. |
1598 | 209 static LmHandlerResult cb_roster(LmMessageHandler *h, LmConnection *c, |
210 LmMessage *m, gpointer user_data) | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
211 { |
1598 | 212 LmMessageNode *x; |
213 const char *ns; | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
214 |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
215 // Only execute the hook if the roster has been successfully retrieved |
1598 | 216 if (lm_message_get_sub_type(m) != LM_MESSAGE_SUB_TYPE_RESULT) |
217 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
218 |
1598 | 219 x = lm_message_node_find_child(m->node, "query"); |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
220 if (!x) |
1598 | 221 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
1365 | 222 |
1598 | 223 ns = lm_message_node_get_attribute(x, "xmlns"); |
1365 | 224 if (ns && !strcmp(ns, NS_ROSTER)) |
1598 | 225 handle_iq_roster(NULL, c, m, user_data); |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
226 |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
227 // Post-login stuff |
1683
b09f82f61745
Split HOOK_INTERNAL
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1668
diff
changeset
|
228 hk_postconnect(); |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
229 |
1598 | 230 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
231 } |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
232 |
1598 | 233 static LmHandlerResult cb_version(LmMessageHandler *h, LmConnection *c, |
234 LmMessage *m, gpointer user_data) | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
235 { |
1598 | 236 LmMessageNode *ansqry; |
237 const char *p, *bjid; | |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
238 char *buf, *tmp; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
239 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
240 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
241 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
242 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
243 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
244 if (!bjid) { |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
245 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name)."); |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
246 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
247 } |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
248 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
249 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
250 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
251 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); |
1800
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
252 display_server_error(lm_message_node_get_child(m->node, "error"), NULL); |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
253 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
254 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
255 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
256 // Check message contents |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
257 ansqry = lm_message_node_get_child(m->node, "query"); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
258 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
259 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
260 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
261 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
262 |
782
19121d9f4aa2
Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents:
776
diff
changeset
|
263 buf = g_strdup_printf("Received IQ:version result from <%s>", bjid); |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
264 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
265 |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
266 // bjid should now really be the "bare JID", let's strip the resource |
1598 | 267 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
268 if (tmp) *tmp = '\0'; | |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
269 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
270 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
271 g_free(buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
272 |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
273 // Get result data... |
1598 | 274 p = lm_message_node_get_child_value(ansqry, "name"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
275 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
276 buf = g_strdup_printf("Name: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
277 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
278 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
279 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
280 } |
1598 | 281 p = lm_message_node_get_child_value(ansqry, "version"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
282 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
283 buf = g_strdup_printf("Version: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
284 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
285 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
286 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
287 } |
1598 | 288 p = lm_message_node_get_child_value(ansqry, "os"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
289 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
290 buf = g_strdup_printf("OS: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
291 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
292 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
293 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
294 } |
1598 | 295 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
296 } |
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
297 |
1598 | 298 static LmHandlerResult cb_time(LmMessageHandler *h, LmConnection *c, |
299 LmMessage *m, gpointer user_data) | |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
300 { |
1598 | 301 LmMessageNode *ansqry; |
302 const char *p, *bjid; | |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
303 char *buf, *tmp; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
304 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
305 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
306 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
307 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
308 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
309 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
310 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result (no sender name)."); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
311 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
312 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
313 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
314 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
315 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
316 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); |
1800
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
317 display_server_error(lm_message_node_get_child(m->node, "error"), NULL); |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
318 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
319 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
320 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
321 // Check message contents |
2017 | 322 ansqry = lm_message_node_get_child(m->node, "time"); |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
323 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
324 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result from <%s>!", bjid); |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
325 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
326 } |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
327 |
782
19121d9f4aa2
Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents:
776
diff
changeset
|
328 buf = g_strdup_printf("Received IQ:time result from <%s>", bjid); |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
329 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
330 |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
331 // bjid should now really be the "bare JID", let's strip the resource |
1598 | 332 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
333 if (tmp) *tmp = '\0'; | |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
334 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
335 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
336 g_free(buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
337 |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
338 // Get result data... |
1598 | 339 p = lm_message_node_get_child_value(ansqry, "utc"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
340 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
341 buf = g_strdup_printf("UTC: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
342 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
343 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
344 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
345 } |
2017 | 346 p = lm_message_node_get_child_value(ansqry, "tzo"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
347 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
348 buf = g_strdup_printf("TZ: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
349 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
350 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
351 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
352 } |
1598 | 353 p = lm_message_node_get_child_value(ansqry, "display"); |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
354 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
355 buf = g_strdup_printf("Time: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
356 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
357 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
358 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
359 } |
1598 | 360 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
361 } |
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
362 |
1598 | 363 static LmHandlerResult cb_last(LmMessageHandler *h, LmConnection *c, |
364 LmMessage *m, gpointer user_data) | |
1015 | 365 { |
1598 | 366 LmMessageNode *ansqry; |
367 const char *p, *bjid; | |
368 char *buf, *tmp; | |
1015 | 369 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
370 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
371 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
372 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
373 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
374 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
375 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result (no sender name)."); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
376 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
377 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
378 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
379 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
380 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
381 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); |
1800
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
382 display_server_error(lm_message_node_get_child(m->node, "error"), NULL); |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
383 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
384 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
385 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
386 // Check message contents |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
387 ansqry = lm_message_node_get_child(m->node, "query"); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
388 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
389 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result from <%s>!", bjid); |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
390 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1015 | 391 } |
392 | |
393 buf = g_strdup_printf("Received IQ:last result from <%s>", bjid); | |
394 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | |
395 | |
396 // bjid should now really be the "bare JID", let's strip the resource | |
1598 | 397 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
398 if (tmp) *tmp = '\0'; | |
1015 | 399 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
400 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1015 | 401 g_free(buf); |
402 | |
403 // Get result data... | |
1598 | 404 p = lm_message_node_get_attribute(ansqry, "seconds"); |
1015 | 405 if (p) { |
406 long int s; | |
407 GString *sbuf; | |
408 sbuf = g_string_new("Idle time: "); | |
409 s = atol(p); | |
410 // Days | |
411 if (s > 86400L) { | |
412 g_string_append_printf(sbuf, "%ldd ", s/86400L); | |
413 s %= 86400L; | |
414 } | |
415 // hh:mm:ss | |
416 g_string_append_printf(sbuf, "%02ld:", s/3600L); | |
417 s %= 3600L; | |
418 g_string_append_printf(sbuf, "%02ld:%02ld", s/60L, s%60L); | |
1268
dbc907b2d92f
Add configurable colors for info and incoming messages (Michal 'vorner' Vaner)
Mikael Berthe <mikael@lilotux.net>
parents:
1261
diff
changeset
|
419 scr_WriteIncomingMessage(bjid, sbuf->str, |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
420 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1015 | 421 g_string_free(sbuf, TRUE); |
422 } else { | |
423 scr_WriteIncomingMessage(bjid, "No idle time reported.", | |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
424 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1015 | 425 } |
1598 | 426 p = lm_message_node_get_value(ansqry); |
1015 | 427 if (p) { |
428 buf = g_strdup_printf("Status message: %s", p); | |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
429 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1015 | 430 g_free(buf); |
431 } | |
1598 | 432 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1015 | 433 } |
434 | |
1006 | 435 static void display_vcard_item(const char *bjid, const char *label, |
436 enum vcard_attr vcard_attrib, const char *text) | |
437 { | |
438 char *buf; | |
439 | |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
440 if (!text || !*text || !bjid || !label) |
1006 | 441 return; |
442 | |
443 buf = g_strdup_printf("%s: %s%s%s%s%s%s%s%s%s%s", label, | |
444 (vcard_attrib & vcard_home ? "[home]" : ""), | |
445 (vcard_attrib & vcard_work ? "[work]" : ""), | |
446 (vcard_attrib & vcard_postal ? "[postal]" : ""), | |
447 (vcard_attrib & vcard_voice ? "[voice]" : ""), | |
448 (vcard_attrib & vcard_fax ? "[fax]" : ""), | |
449 (vcard_attrib & vcard_cell ? "[cell]" : ""), | |
450 (vcard_attrib & vcard_inet ? "[inet]" : ""), | |
451 (vcard_attrib & vcard_pref ? "[pref]" : ""), | |
452 (vcard_attrib ? " " : ""), | |
453 text); | |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
454 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1006 | 455 g_free(buf); |
456 } | |
457 | |
1598 | 458 static void handle_vcard_node(const char *barejid, LmMessageNode *vcardnode) |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
459 { |
1598 | 460 LmMessageNode *x; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
461 const char *p; |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
462 |
1598 | 463 for (x = vcardnode->children ; x; x = x->next) { |
1006 | 464 const char *data; |
465 enum vcard_attr vcard_attrib = 0; | |
466 | |
1598 | 467 p = x->name; |
1719
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
468 if (!p) |
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
469 continue; |
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
470 |
1598 | 471 data = lm_message_node_get_value(x); |
1006 | 472 |
473 if (!strcmp(p, "FN")) | |
474 display_vcard_item(barejid, "Name", vcard_attrib, data); | |
475 else if (!strcmp(p, "NICKNAME")) | |
476 display_vcard_item(barejid, "Nickname", vcard_attrib, data); | |
477 else if (!strcmp(p, "URL")) | |
478 display_vcard_item(barejid, "URL", vcard_attrib, data); | |
479 else if (!strcmp(p, "BDAY")) | |
480 display_vcard_item(barejid, "Birthday", vcard_attrib, data); | |
481 else if (!strcmp(p, "TZ")) | |
482 display_vcard_item(barejid, "Timezone", vcard_attrib, data); | |
483 else if (!strcmp(p, "TITLE")) | |
484 display_vcard_item(barejid, "Title", vcard_attrib, data); | |
485 else if (!strcmp(p, "ROLE")) | |
486 display_vcard_item(barejid, "Role", vcard_attrib, data); | |
487 else if (!strcmp(p, "DESC")) | |
488 display_vcard_item(barejid, "Comment", vcard_attrib, data); | |
489 else if (!strcmp(p, "N")) { | |
1598 | 490 data = lm_message_node_get_child_value(x, "FAMILY"); |
1006 | 491 display_vcard_item(barejid, "Family Name", vcard_attrib, data); |
1598 | 492 data = lm_message_node_get_child_value(x, "GIVEN"); |
1006 | 493 display_vcard_item(barejid, "Given Name", vcard_attrib, data); |
1598 | 494 data = lm_message_node_get_child_value(x, "MIDDLE"); |
1006 | 495 display_vcard_item(barejid, "Middle Name", vcard_attrib, data); |
496 } else if (!strcmp(p, "ORG")) { | |
1598 | 497 data = lm_message_node_get_child_value(x, "ORGNAME"); |
1006 | 498 display_vcard_item(barejid, "Organisation name", vcard_attrib, data); |
1598 | 499 data = lm_message_node_get_child_value(x, "ORGUNIT"); |
1006 | 500 display_vcard_item(barejid, "Organisation unit", vcard_attrib, data); |
501 } else { | |
502 // The HOME, WORK and PREF attributes are common to the remaining fields | |
503 // (ADR, TEL & EMAIL) | |
1598 | 504 if (lm_message_node_get_child(x, "HOME")) |
1006 | 505 vcard_attrib |= vcard_home; |
1598 | 506 if (lm_message_node_get_child(x, "WORK")) |
1006 | 507 vcard_attrib |= vcard_work; |
1598 | 508 if (lm_message_node_get_child(x, "PREF")) |
1006 | 509 vcard_attrib |= vcard_pref; |
510 if (!strcmp(p, "ADR")) { // Address | |
1598 | 511 if (lm_message_node_get_child(x, "POSTAL")) |
1006 | 512 vcard_attrib |= vcard_postal; |
1598 | 513 data = lm_message_node_get_child_value(x, "EXTADD"); |
1006 | 514 display_vcard_item(barejid, "Addr (ext)", vcard_attrib, data); |
1598 | 515 data = lm_message_node_get_child_value(x, "STREET"); |
1006 | 516 display_vcard_item(barejid, "Street", vcard_attrib, data); |
1598 | 517 data = lm_message_node_get_child_value(x, "LOCALITY"); |
1006 | 518 display_vcard_item(barejid, "Locality", vcard_attrib, data); |
1598 | 519 data = lm_message_node_get_child_value(x, "REGION"); |
1006 | 520 display_vcard_item(barejid, "Region", vcard_attrib, data); |
1598 | 521 data = lm_message_node_get_child_value(x, "PCODE"); |
1006 | 522 display_vcard_item(barejid, "Postal code", vcard_attrib, data); |
1598 | 523 data = lm_message_node_get_child_value(x, "CTRY"); |
1006 | 524 display_vcard_item(barejid, "Country", vcard_attrib, data); |
525 } else if (!strcmp(p, "TEL")) { // Telephone | |
1598 | 526 data = lm_message_node_get_child_value(x, "NUMBER"); |
1005 | 527 if (data) { |
1598 | 528 if (lm_message_node_get_child(x, "VOICE")) |
1006 | 529 vcard_attrib |= vcard_voice; |
1598 | 530 if (lm_message_node_get_child(x, "FAX")) |
1006 | 531 vcard_attrib |= vcard_fax; |
1598 | 532 if (lm_message_node_get_child(x, "CELL")) |
1006 | 533 vcard_attrib |= vcard_cell; |
534 display_vcard_item(barejid, "Phone", vcard_attrib, data); | |
1005 | 535 } |
1006 | 536 } else if (!strcmp(p, "EMAIL")) { // Email |
1598 | 537 if (lm_message_node_get_child(x, "INTERNET")) |
1006 | 538 vcard_attrib |= vcard_inet; |
1598 | 539 data = lm_message_node_get_child_value(x, "USERID"); |
1006 | 540 display_vcard_item(barejid, "Email", vcard_attrib, data); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
541 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
542 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
543 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
544 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
545 |
1598 | 546 static LmHandlerResult cb_vcard(LmMessageHandler *h, LmConnection *c, |
547 LmMessage *m, gpointer user_data) | |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
548 { |
1598 | 549 LmMessageNode *ansqry; |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
550 const char *bjid; |
1598 | 551 char *buf, *tmp; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
552 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
553 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
554 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
555 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
556 bjid = lm_connection_get_jid(lconnection); // No from means our JID... |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
557 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
558 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:vCard result (no sender name)."); |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
559 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
560 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
561 |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
562 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
563 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
564 scr_LogPrint(LPRINT_LOGNORM, "Received error IQ message (%s)", bjid); |
1800
d2747442918a
When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents:
1729
diff
changeset
|
565 display_server_error(lm_message_node_get_child(m->node, "error"), NULL); |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
566 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
567 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
568 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
569 buf = g_strdup_printf("Received IQ:vCard result from <%s>", bjid); |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
570 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
571 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
572 // Get the vCard node |
1598 | 573 ansqry = lm_message_node_get_child(m->node, "vCard"); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
574 if (!ansqry) { |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
575 scr_LogPrint(LPRINT_LOGNORM, "Empty IQ:vCard result!"); |
1340
2031f4b2cced
Fix a small memory leak
Mikael Berthe <mikael@lilotux.net>
parents:
1334
diff
changeset
|
576 g_free(buf); |
1598 | 577 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
578 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
579 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
580 // bjid should really be the "bare JID", let's strip the resource |
1598 | 581 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
582 if (tmp) *tmp = '\0'; | |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
583 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
584 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
585 g_free(buf); |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
586 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
587 // Get result data... |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
588 handle_vcard_node(bjid, ansqry); |
1598 | 589 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
590 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
591 |
1598 | 592 static void storage_bookmarks_parse_conference(LmMessageNode *node) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
593 { |
1058 | 594 const char *fjid, *name, *autojoin; |
1979
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
595 const char *pstatus, *awhois, *fjoins, *group; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
596 char *bjid; |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
597 GSList *room_elt; |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
598 |
1598 | 599 fjid = lm_message_node_get_attribute(node, "jid"); |
1058 | 600 if (!fjid) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
601 return; |
1598 | 602 name = lm_message_node_get_attribute(node, "name"); |
603 autojoin = lm_message_node_get_attribute(node, "autojoin"); | |
604 awhois = lm_message_node_get_attribute(node, "autowhois"); | |
605 pstatus = lm_message_node_get_child_value(node, "print_status"); | |
1979
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
606 fjoins = lm_message_node_get_child_value(node, "flag_joins"); |
1976
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
607 group = lm_message_node_get_child_value(node, "group"); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
608 |
1058 | 609 bjid = jidtodisp(fjid); // Bare jid |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
610 |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
611 // Make sure this is a room (it can be a conversion user->room) |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
612 room_elt = roster_find(bjid, jidsearch, 0); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
613 if (!room_elt) { |
1976
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
614 room_elt = roster_add_user(bjid, name, group, ROSTER_TYPE_ROOM, |
1355 | 615 sub_none, -1); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
616 } else { |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
617 buddy_settype(room_elt->data, ROSTER_TYPE_ROOM); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
618 /* |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
619 // If the name is available, should we use it? |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
620 // I don't think so, it would be confusing because this item is already |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
621 // in the roster. |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
622 if (name) |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
623 buddy_setname(room_elt->data, name); |
1976
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
624 |
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
625 // The same question for roster group. |
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
626 if (group) |
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
627 buddy_setgroup(room_elt->data, group); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
628 */ |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
629 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
630 |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
631 // Set the print_status and auto_whois values |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
632 if (pstatus) { |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
633 enum room_printstatus i; |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
634 for (i = status_none; i <= status_all; i++) |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
635 if (!strcasecmp(pstatus, strprintstatus[i])) |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
636 break; |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
637 if (i <= status_all) |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
638 buddy_setprintstatus(room_elt->data, i); |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
639 } |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
640 if (awhois) { |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
641 enum room_autowhois i = autowhois_default; |
1976
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
642 if (!strcmp(awhois, "1") || !(strcmp(awhois, "true"))) |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
643 i = autowhois_on; |
1976
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
644 else if (!strcmp(awhois, "0") || !(strcmp(awhois, "false"))) |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
645 i = autowhois_off; |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
646 if (i != autowhois_default) |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
647 buddy_setautowhois(room_elt->data, i); |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
648 } |
1979
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
649 if (fjoins) { |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
650 enum room_flagjoins i; |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
651 for (i = flagjoins_none; i <= flagjoins_all; i++) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
652 if (!strcasecmp(fjoins, strflagjoins[i])) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
653 break; |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
654 if (i <= flagjoins_all) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
655 buddy_setflagjoins(room_elt->data, i); |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
656 } |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
657 |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
658 // Is autojoin set? |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
659 // If it is, we'll look up for more information (nick? password?) and |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
660 // try to join the room. |
2004
aa7e03c35488
Accept "true" as well as "1" for autojoin in bookmarked rooms
Hermitifier
parents:
2003
diff
changeset
|
661 if (autojoin && (!strcmp(autojoin, "1") || !strcmp(autojoin, "true"))) { |
1598 | 662 const char *nick, *passwd; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
663 char *tmpnick = NULL; |
1598 | 664 nick = lm_message_node_get_child_value(node, "nick"); |
665 passwd = lm_message_node_get_child_value(node, "password"); | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
666 if (!nick || !*nick) |
1395
d431cd75eb53
Use bookmarked nickname when manually joining a room
Mikael Berthe <mikael@lilotux.net>
parents:
1393
diff
changeset
|
667 nick = tmpnick = default_muc_nickname(NULL); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
668 // Let's join now |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
669 scr_LogPrint(LPRINT_LOGNORM, "Auto-join bookmark <%s>", bjid); |
1598 | 670 xmpp_room_join(bjid, nick, passwd); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
671 g_free(tmpnick); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
672 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
673 g_free(bjid); |
1983
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
674 |
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
675 buddylist_build(); |
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
676 update_roster = TRUE; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
677 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
678 |
1598 | 679 static LmHandlerResult cb_storage_bookmarks(LmMessageHandler *h, |
680 LmConnection *c, | |
681 LmMessage *m, gpointer user_data) | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
682 { |
1598 | 683 LmMessageNode *x, *ansqry; |
2003 | 684 char *p = NULL; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
685 |
1598 | 686 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
2003 | 687 LmMessageNode *error = lm_message_node_get_child(m->node, "error"); |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
688 // No server support, or no bookmarks? |
2003 | 689 if (error && error->children) |
690 p = error->children->name; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
691 if (p && !strcmp(p, "item-not-found")) { |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
692 // item-no-found means the server has Private Storage, but it's |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
693 // currently empty. |
1598 | 694 if (bookmarks) |
695 lm_message_node_unref(bookmarks); | |
696 bookmarks = lm_message_node_new("storage", "storage:bookmarks"); | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
697 // We return 0 so that the IQ error message be |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
698 // not displayed, as it isn't a real error. |
2003 | 699 } else |
700 scr_LogPrint(LPRINT_LOGNORM, "Server does not support bookmarks storage."); | |
701 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
702 } |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
703 |
1598 | 704 ansqry = lm_message_node_get_child(m->node, "query"); |
705 ansqry = lm_message_node_get_child(ansqry, "storage"); | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
706 if (!ansqry) { |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
707 scr_LogPrint(LPRINT_LOG, "Invalid IQ:private result! (storage:bookmarks)"); |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
708 return 0; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
709 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
710 |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
711 // Walk through the storage tags |
1598 | 712 for (x = ansqry->children ; x; x = x->next) { |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
713 // If the current node is a conference item, parse it and update the roster |
1598 | 714 if (x->name && !strcmp(x->name, "conference")) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
715 storage_bookmarks_parse_conference(x); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
716 } |
1598 | 717 // "Copy" the bookmarks node |
718 if (bookmarks) | |
719 lm_message_node_unref(bookmarks); | |
720 lm_message_node_deep_ref(ansqry); | |
721 bookmarks = ansqry; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
722 return 0; |
686
98de2d166a11
Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents:
685
diff
changeset
|
723 } |
98de2d166a11
Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents:
685
diff
changeset
|
724 |
577
5c6d364130ee
Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents:
576
diff
changeset
|
725 |
1598 | 726 static LmHandlerResult cb_storage_rosternotes(LmMessageHandler *h, |
727 LmConnection *c, | |
728 LmMessage *m, gpointer user_data) | |
1261
704adf4df2d0
Send service-unavailable when Last Activity is disabled
Mikael Berthe <mikael@lilotux.net>
parents:
1255
diff
changeset
|
729 { |
1598 | 730 LmMessageNode *ansqry; |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
731 |
1598 | 732 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
2003 | 733 const char *p = NULL; |
734 LmMessageNode *error = lm_message_node_get_child(m->node, "error"); | |
1598 | 735 // No server support, or no roster notes? |
2003 | 736 if (error && error->children) |
737 p = error->children->name; | |
1598 | 738 if (p && !strcmp(p, "item-not-found")) { |
739 // item-no-found means the server has Private Storage, but it's | |
740 // currently empty. | |
741 if (rosternotes) | |
742 lm_message_node_unref(rosternotes); | |
743 rosternotes = lm_message_node_new("storage", "storage:rosternotes"); | |
744 // We return 0 so that the IQ error message be | |
745 // not displayed, as it isn't a real error. | |
2003 | 746 } else |
747 scr_LogPrint(LPRINT_LOGNORM, "Server does not support roster notes storage."); | |
748 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
749 } |
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
750 |
1598 | 751 ansqry = lm_message_node_get_child(m->node, "query"); |
752 ansqry = lm_message_node_get_child(ansqry, "storage"); | |
753 if (!ansqry) { | |
754 scr_LogPrint(LPRINT_LOG, "Invalid IQ:private result! " | |
755 "(storage:rosternotes)"); | |
756 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
757 } |
1598 | 758 // Copy the rosternotes node |
759 if (rosternotes) | |
760 lm_message_node_unref(rosternotes); | |
761 lm_message_node_deep_ref(ansqry); | |
762 rosternotes = ansqry; | |
763 return 0; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
764 } |
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
765 |
995
c89e7993c4d9
Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents:
977
diff
changeset
|
766 |
1598 | 767 static struct IqRequestStorageHandlers |
1254
401639413340
More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents:
1224
diff
changeset
|
768 { |
1598 | 769 const gchar *storagens; |
770 LmHandleMessageFunction handler; | |
771 } iq_request_storage_handlers[] = { | |
772 {"storage:rosternotes", &cb_storage_rosternotes}, | |
773 {"storage:bookmarks", &cb_storage_bookmarks}, | |
774 {NULL, NULL} | |
775 }; | |
619
44ddf9bec3a5
Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
613
diff
changeset
|
776 |
1598 | 777 void xmpp_request_storage(const gchar *storage) |
619
44ddf9bec3a5
Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
613
diff
changeset
|
778 { |
1598 | 779 LmMessage *iq; |
780 LmMessageNode *query; | |
781 LmMessageHandler *handler; | |
782 int i; | |
703
8cbcbff8de7d
Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents:
699
diff
changeset
|
783 |
1598 | 784 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ, |
785 LM_MESSAGE_SUB_TYPE_GET); | |
786 query = lm_message_node_add_child(iq->node, "query", NULL); | |
787 lm_message_node_set_attribute(query, "xmlns", NS_PRIVATE); | |
788 lm_message_node_set_attribute(lm_message_node_add_child | |
789 (query, "storage", NULL), | |
790 "xmlns", storage); | |
1283
2faf179166f3
Implement XEP-0202 (Entity Time)
Mikael Berthe <mikael@lilotux.net>
parents:
1268
diff
changeset
|
791 |
1598 | 792 for (i = 0; |
793 strcmp(iq_request_storage_handlers[i].storagens, storage) != 0; | |
794 ++i) ; | |
595
0c1d37300862
IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents:
582
diff
changeset
|
795 |
1598 | 796 handler = lm_message_handler_new(iq_request_storage_handlers[i].handler, |
797 NULL, FALSE); | |
798 lm_connection_send_with_reply(lconnection, iq, handler, NULL); | |
799 lm_message_handler_unref(handler); | |
800 lm_message_unref(iq); | |
547
1df26ff0ed8c
Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents:
539
diff
changeset
|
801 } |
1599 | 802 |
1811 | 803 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */ |