Mercurial > ~mikael > mcabber > hg
annotate mcabber/mcabber/xmpp_iqrequest.c @ 2104:c7e9950fa741
Added option to enable carbons (set carbons = 1 in mcabberrc)
If the server supports carbons and the user has carbons enabled we enable them.
Now we need to handle XEP-0297 (Stanza Forwarding) stanzas to make sure the
messages end up at the correct place.
author | Roeland Jago Douma <roeland@famdouma.nl> |
---|---|
date | Sat, 02 Mar 2013 18:22:10 +0100 |
parents | 1210a22726d3 |
children | 9023a6f2bf6c |
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"); |
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
|
92 for(;feature;feature = feature->next) { |
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)) { |
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
|
188 gchar *servername = get_servername(settings_opt_get("jid"), settings_opt_get("server")); |
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
|
189 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
|
190 g_free(servername); |
1705
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
191 } |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
192 |
1598 | 193 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
|
194 data, notifier); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
195 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
196 lm_connection_send_with_reply(lconnection, iq, handler, &error); |
1598 | 197 lm_message_handler_unref(handler); |
198 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
|
199 |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
200 if (error) { |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
201 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
|
202 g_error_free(error); |
ac881b5f9248
Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents:
1703
diff
changeset
|
203 } |
577
5c6d364130ee
Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents:
576
diff
changeset
|
204 } |
29 | 205 |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
206 // 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
|
207 // after the connection. |
1598 | 208 static LmHandlerResult cb_roster(LmMessageHandler *h, LmConnection *c, |
209 LmMessage *m, gpointer user_data) | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
210 { |
1598 | 211 LmMessageNode *x; |
212 const char *ns; | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
213 |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
214 // Only execute the hook if the roster has been successfully retrieved |
1598 | 215 if (lm_message_get_sub_type(m) != LM_MESSAGE_SUB_TYPE_RESULT) |
216 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
217 |
1598 | 218 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
|
219 if (!x) |
1598 | 220 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
1365 | 221 |
1598 | 222 ns = lm_message_node_get_attribute(x, "xmlns"); |
1365 | 223 if (ns && !strcmp(ns, NS_ROSTER)) |
1598 | 224 handle_iq_roster(NULL, c, m, user_data); |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
225 |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
226 // Post-login stuff |
1683
b09f82f61745
Split HOOK_INTERNAL
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1668
diff
changeset
|
227 hk_postconnect(); |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
228 |
1598 | 229 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
230 } |
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
231 |
1598 | 232 static LmHandlerResult cb_version(LmMessageHandler *h, LmConnection *c, |
233 LmMessage *m, gpointer user_data) | |
1353
7caedca15e50
Add post-connect internal hook
Mikael Berthe <mikael@lilotux.net>
parents:
1348
diff
changeset
|
234 { |
1598 | 235 LmMessageNode *ansqry; |
236 const char *p, *bjid; | |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
237 char *buf, *tmp; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
238 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
239 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
240 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
241 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
242 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
|
243 if (!bjid) { |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
244 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
|
245 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
246 } |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
247 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
248 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
249 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
|
250 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
|
251 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
|
252 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
253 } |
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 // Check message contents |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
256 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
|
257 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
258 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
|
259 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
260 } |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
261 |
782
19121d9f4aa2
Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents:
776
diff
changeset
|
262 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
|
263 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
|
264 |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
265 // bjid should now really be the "bare JID", let's strip the resource |
1598 | 266 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
267 if (tmp) *tmp = '\0'; | |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
268 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
269 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
|
270 g_free(buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
271 |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
272 // Get result data... |
1598 | 273 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
|
274 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
275 buf = g_strdup_printf("Name: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
276 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
277 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
|
278 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
279 } |
1598 | 280 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
|
281 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
282 buf = g_strdup_printf("Version: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
283 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
284 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
|
285 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
286 } |
1598 | 287 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
|
288 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
289 buf = g_strdup_printf("OS: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
290 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
291 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
|
292 g_free(buf); |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
293 } |
1598 | 294 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
690
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
295 } |
3e965a1186c7
Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents:
689
diff
changeset
|
296 |
1598 | 297 static LmHandlerResult cb_time(LmMessageHandler *h, LmConnection *c, |
298 LmMessage *m, gpointer user_data) | |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
299 { |
1598 | 300 LmMessageNode *ansqry; |
301 const char *p, *bjid; | |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
302 char *buf, *tmp; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
303 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
304 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
305 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
306 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
307 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
|
308 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
309 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
|
310 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
311 } |
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 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
314 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
|
315 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
|
316 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
|
317 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
318 } |
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 // Check message contents |
2017 | 321 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
|
322 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
323 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
|
324 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
325 } |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
326 |
782
19121d9f4aa2
Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents:
776
diff
changeset
|
327 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
|
328 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
|
329 |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
330 // bjid should now really be the "bare JID", let's strip the resource |
1598 | 331 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
332 if (tmp) *tmp = '\0'; | |
704
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
333 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
334 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
|
335 g_free(buf); |
4118a66f2c02
Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents:
703
diff
changeset
|
336 |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
337 // Get result data... |
1598 | 338 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
|
339 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
340 buf = g_strdup_printf("UTC: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
341 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
342 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
|
343 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
344 } |
2017 | 345 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
|
346 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
347 buf = g_strdup_printf("TZ: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
348 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
349 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
|
350 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
351 } |
1598 | 352 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
|
353 if (p && *p) { |
1030
923cf5a92b44
[BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents:
965
diff
changeset
|
354 buf = g_strdup_printf("Time: %s", p); |
1333
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
355 scr_WriteIncomingMessage(bjid, buf, |
e30a9d907105
Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents:
1310
diff
changeset
|
356 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
|
357 g_free(buf); |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
358 } |
1598 | 359 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
691
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
360 } |
3c0a0a993de8
Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
690
diff
changeset
|
361 |
1598 | 362 static LmHandlerResult cb_last(LmMessageHandler *h, LmConnection *c, |
363 LmMessage *m, gpointer user_data) | |
1015 | 364 { |
1598 | 365 LmMessageNode *ansqry; |
366 const char *p, *bjid; | |
367 char *buf, *tmp; | |
1015 | 368 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
369 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
370 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
371 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
372 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
|
373 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
374 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
|
375 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
376 } |
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 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
379 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
|
380 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
|
381 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
|
382 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
383 } |
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 // Check message contents |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
386 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
|
387 if (!ansqry) { |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
388 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
|
389 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1015 | 390 } |
391 | |
392 buf = g_strdup_printf("Received IQ:last result from <%s>", bjid); | |
393 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); | |
394 | |
395 // bjid should now really be the "bare JID", let's strip the resource | |
1598 | 396 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
397 if (tmp) *tmp = '\0'; | |
1015 | 398 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
399 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1015 | 400 g_free(buf); |
401 | |
402 // Get result data... | |
1598 | 403 p = lm_message_node_get_attribute(ansqry, "seconds"); |
1015 | 404 if (p) { |
405 long int s; | |
406 GString *sbuf; | |
407 sbuf = g_string_new("Idle time: "); | |
408 s = atol(p); | |
409 // Days | |
410 if (s > 86400L) { | |
411 g_string_append_printf(sbuf, "%ldd ", s/86400L); | |
412 s %= 86400L; | |
413 } | |
414 // hh:mm:ss | |
415 g_string_append_printf(sbuf, "%02ld:", s/3600L); | |
416 s %= 3600L; | |
417 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
|
418 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
|
419 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1015 | 420 g_string_free(sbuf, TRUE); |
421 } else { | |
422 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
|
423 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1015 | 424 } |
1598 | 425 p = lm_message_node_get_value(ansqry); |
1015 | 426 if (p) { |
427 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
|
428 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1015 | 429 g_free(buf); |
430 } | |
1598 | 431 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1015 | 432 } |
433 | |
1006 | 434 static void display_vcard_item(const char *bjid, const char *label, |
435 enum vcard_attr vcard_attrib, const char *text) | |
436 { | |
437 char *buf; | |
438 | |
1899
decf94827efe
More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
439 if (!text || !*text || !bjid || !label) |
1006 | 440 return; |
441 | |
442 buf = g_strdup_printf("%s: %s%s%s%s%s%s%s%s%s%s", label, | |
443 (vcard_attrib & vcard_home ? "[home]" : ""), | |
444 (vcard_attrib & vcard_work ? "[work]" : ""), | |
445 (vcard_attrib & vcard_postal ? "[postal]" : ""), | |
446 (vcard_attrib & vcard_voice ? "[voice]" : ""), | |
447 (vcard_attrib & vcard_fax ? "[fax]" : ""), | |
448 (vcard_attrib & vcard_cell ? "[cell]" : ""), | |
449 (vcard_attrib & vcard_inet ? "[inet]" : ""), | |
450 (vcard_attrib & vcard_pref ? "[pref]" : ""), | |
451 (vcard_attrib ? " " : ""), | |
452 text); | |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
453 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0); |
1006 | 454 g_free(buf); |
455 } | |
456 | |
1598 | 457 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
|
458 { |
1598 | 459 LmMessageNode *x; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
460 const char *p; |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
461 |
1598 | 462 for (x = vcardnode->children ; x; x = x->next) { |
1006 | 463 const char *data; |
464 enum vcard_attr vcard_attrib = 0; | |
465 | |
1598 | 466 p = x->name; |
1719
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
467 if (!p) |
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
468 continue; |
f3c5e1175b22
Remove buggy check in handle_vcard_node() (Reported by Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1707
diff
changeset
|
469 |
1598 | 470 data = lm_message_node_get_value(x); |
1006 | 471 |
472 if (!strcmp(p, "FN")) | |
473 display_vcard_item(barejid, "Name", vcard_attrib, data); | |
474 else if (!strcmp(p, "NICKNAME")) | |
475 display_vcard_item(barejid, "Nickname", vcard_attrib, data); | |
476 else if (!strcmp(p, "URL")) | |
477 display_vcard_item(barejid, "URL", vcard_attrib, data); | |
478 else if (!strcmp(p, "BDAY")) | |
479 display_vcard_item(barejid, "Birthday", vcard_attrib, data); | |
480 else if (!strcmp(p, "TZ")) | |
481 display_vcard_item(barejid, "Timezone", vcard_attrib, data); | |
482 else if (!strcmp(p, "TITLE")) | |
483 display_vcard_item(barejid, "Title", vcard_attrib, data); | |
484 else if (!strcmp(p, "ROLE")) | |
485 display_vcard_item(barejid, "Role", vcard_attrib, data); | |
486 else if (!strcmp(p, "DESC")) | |
487 display_vcard_item(barejid, "Comment", vcard_attrib, data); | |
488 else if (!strcmp(p, "N")) { | |
1598 | 489 data = lm_message_node_get_child_value(x, "FAMILY"); |
1006 | 490 display_vcard_item(barejid, "Family Name", vcard_attrib, data); |
1598 | 491 data = lm_message_node_get_child_value(x, "GIVEN"); |
1006 | 492 display_vcard_item(barejid, "Given Name", vcard_attrib, data); |
1598 | 493 data = lm_message_node_get_child_value(x, "MIDDLE"); |
1006 | 494 display_vcard_item(barejid, "Middle Name", vcard_attrib, data); |
495 } else if (!strcmp(p, "ORG")) { | |
1598 | 496 data = lm_message_node_get_child_value(x, "ORGNAME"); |
1006 | 497 display_vcard_item(barejid, "Organisation name", vcard_attrib, data); |
1598 | 498 data = lm_message_node_get_child_value(x, "ORGUNIT"); |
1006 | 499 display_vcard_item(barejid, "Organisation unit", vcard_attrib, data); |
500 } else { | |
501 // The HOME, WORK and PREF attributes are common to the remaining fields | |
502 // (ADR, TEL & EMAIL) | |
1598 | 503 if (lm_message_node_get_child(x, "HOME")) |
1006 | 504 vcard_attrib |= vcard_home; |
1598 | 505 if (lm_message_node_get_child(x, "WORK")) |
1006 | 506 vcard_attrib |= vcard_work; |
1598 | 507 if (lm_message_node_get_child(x, "PREF")) |
1006 | 508 vcard_attrib |= vcard_pref; |
509 if (!strcmp(p, "ADR")) { // Address | |
1598 | 510 if (lm_message_node_get_child(x, "POSTAL")) |
1006 | 511 vcard_attrib |= vcard_postal; |
1598 | 512 data = lm_message_node_get_child_value(x, "EXTADD"); |
1006 | 513 display_vcard_item(barejid, "Addr (ext)", vcard_attrib, data); |
1598 | 514 data = lm_message_node_get_child_value(x, "STREET"); |
1006 | 515 display_vcard_item(barejid, "Street", vcard_attrib, data); |
1598 | 516 data = lm_message_node_get_child_value(x, "LOCALITY"); |
1006 | 517 display_vcard_item(barejid, "Locality", vcard_attrib, data); |
1598 | 518 data = lm_message_node_get_child_value(x, "REGION"); |
1006 | 519 display_vcard_item(barejid, "Region", vcard_attrib, data); |
1598 | 520 data = lm_message_node_get_child_value(x, "PCODE"); |
1006 | 521 display_vcard_item(barejid, "Postal code", vcard_attrib, data); |
1598 | 522 data = lm_message_node_get_child_value(x, "CTRY"); |
1006 | 523 display_vcard_item(barejid, "Country", vcard_attrib, data); |
524 } else if (!strcmp(p, "TEL")) { // Telephone | |
1598 | 525 data = lm_message_node_get_child_value(x, "NUMBER"); |
1005 | 526 if (data) { |
1598 | 527 if (lm_message_node_get_child(x, "VOICE")) |
1006 | 528 vcard_attrib |= vcard_voice; |
1598 | 529 if (lm_message_node_get_child(x, "FAX")) |
1006 | 530 vcard_attrib |= vcard_fax; |
1598 | 531 if (lm_message_node_get_child(x, "CELL")) |
1006 | 532 vcard_attrib |= vcard_cell; |
533 display_vcard_item(barejid, "Phone", vcard_attrib, data); | |
1005 | 534 } |
1006 | 535 } else if (!strcmp(p, "EMAIL")) { // Email |
1598 | 536 if (lm_message_node_get_child(x, "INTERNET")) |
1006 | 537 vcard_attrib |= vcard_inet; |
1598 | 538 data = lm_message_node_get_child_value(x, "USERID"); |
1006 | 539 display_vcard_item(barejid, "Email", vcard_attrib, data); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
540 } |
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 |
1598 | 545 static LmHandlerResult cb_vcard(LmMessageHandler *h, LmConnection *c, |
546 LmMessage *m, gpointer user_data) | |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
547 { |
1598 | 548 LmMessageNode *ansqry; |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
549 const char *bjid; |
1598 | 550 char *buf, *tmp; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
551 |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
552 // Check IQ result sender |
1698
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
553 bjid = lm_message_get_from(m); |
e67bdd863638
Handle IQ responses with no "from"
Mikael Berthe <mikael@lilotux.net>
parents:
1683
diff
changeset
|
554 if (!bjid) |
1699
527c965b45c5
Add small comment in previous change
Mikael Berthe <mikael@lilotux.net>
parents:
1698
diff
changeset
|
555 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
|
556 if (!bjid) { |
1703
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
557 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
|
558 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
559 } |
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 // Check for error message |
65ba89949252
Improve error checks in received IQ responses
Mikael Berthe <mikael@lilotux.net>
parents:
1699
diff
changeset
|
562 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
|
563 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
|
564 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
|
565 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
566 } |
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 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
|
569 scr_LogPrint(LPRINT_LOGNORM, "%s", buf); |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
570 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
571 // Get the vCard node |
1598 | 572 ansqry = lm_message_node_get_child(m->node, "vCard"); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
573 if (!ansqry) { |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
574 scr_LogPrint(LPRINT_LOGNORM, "Empty IQ:vCard result!"); |
1340
2031f4b2cced
Fix a small memory leak
Mikael Berthe <mikael@lilotux.net>
parents:
1334
diff
changeset
|
575 g_free(buf); |
1598 | 576 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
577 } |
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 // bjid should really be the "bare JID", let's strip the resource |
1598 | 580 tmp = strchr(bjid, JID_RESOURCE_SEPARATOR); |
581 if (tmp) *tmp = '\0'; | |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
582 |
1290
e42f48103609
Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents:
1283
diff
changeset
|
583 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO, 0); |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
584 g_free(buf); |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
585 |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
586 // Get result data... |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
587 handle_vcard_node(bjid, ansqry); |
1598 | 588 return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
1003
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
589 } |
c8b1a52b2fd6
Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents:
1002
diff
changeset
|
590 |
1598 | 591 static void storage_bookmarks_parse_conference(LmMessageNode *node) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
592 { |
1058 | 593 const char *fjid, *name, *autojoin; |
1979
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
594 const char *pstatus, *awhois, *fjoins, *group; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
595 char *bjid; |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
596 GSList *room_elt; |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
597 |
1598 | 598 fjid = lm_message_node_get_attribute(node, "jid"); |
1058 | 599 if (!fjid) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
600 return; |
1598 | 601 name = lm_message_node_get_attribute(node, "name"); |
602 autojoin = lm_message_node_get_attribute(node, "autojoin"); | |
603 awhois = lm_message_node_get_attribute(node, "autowhois"); | |
604 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
|
605 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
|
606 group = lm_message_node_get_child_value(node, "group"); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
607 |
1058 | 608 bjid = jidtodisp(fjid); // Bare jid |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
609 |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
610 // 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
|
611 room_elt = roster_find(bjid, jidsearch, 0); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
612 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
|
613 room_elt = roster_add_user(bjid, name, group, ROSTER_TYPE_ROOM, |
1355 | 614 sub_none, -1); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
615 } else { |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
616 buddy_settype(room_elt->data, ROSTER_TYPE_ROOM); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
617 /* |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
618 // If the name is available, should we use it? |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
619 // 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
|
620 // in the roster. |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
621 if (name) |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
622 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
|
623 |
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
624 // 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
|
625 if (group) |
e6beab22099b
Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1899
diff
changeset
|
626 buddy_setgroup(room_elt->data, group); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
627 */ |
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 |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
630 // 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
|
631 if (pstatus) { |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
632 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
|
633 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
|
634 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
|
635 break; |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
636 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
|
637 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
|
638 } |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
639 if (awhois) { |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
640 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
|
641 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
|
642 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
|
643 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
|
644 i = autowhois_off; |
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
645 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
|
646 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
|
647 } |
1979
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
648 if (fjoins) { |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
649 enum room_flagjoins i; |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
650 for (i = flagjoins_none; i <= flagjoins_all; i++) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
651 if (!strcasecmp(fjoins, strflagjoins[i])) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
652 break; |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
653 if (i <= flagjoins_all) |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
654 buddy_setflagjoins(room_elt->data, i); |
6febc7d1f760
Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents:
1976
diff
changeset
|
655 } |
1379
74b7621537d7
MUC: Store room settings (print_status, auto_whois) in private storage
Mikael Berthe <mikael@lilotux.net>
parents:
1365
diff
changeset
|
656 |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
657 // Is autojoin set? |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
658 // 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
|
659 // try to join the room. |
2004
aa7e03c35488
Accept "true" as well as "1" for autojoin in bookmarked rooms
Hermitifier
parents:
2003
diff
changeset
|
660 if (autojoin && (!strcmp(autojoin, "1") || !strcmp(autojoin, "true"))) { |
1598 | 661 const char *nick, *passwd; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
662 char *tmpnick = NULL; |
1598 | 663 nick = lm_message_node_get_child_value(node, "nick"); |
664 passwd = lm_message_node_get_child_value(node, "password"); | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
665 if (!nick || !*nick) |
1395
d431cd75eb53
Use bookmarked nickname when manually joining a room
Mikael Berthe <mikael@lilotux.net>
parents:
1393
diff
changeset
|
666 nick = tmpnick = default_muc_nickname(NULL); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
667 // Let's join now |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
668 scr_LogPrint(LPRINT_LOGNORM, "Auto-join bookmark <%s>", bjid); |
1598 | 669 xmpp_room_join(bjid, nick, passwd); |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
670 g_free(tmpnick); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
671 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
672 g_free(bjid); |
1983
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
673 |
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
674 buddylist_build(); |
45e0b13a39e2
Refresh the roster when MUC bookmarks are received
Jan Zachorowski <quantifier666@gmail.com>
parents:
1979
diff
changeset
|
675 update_roster = TRUE; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
676 } |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
677 |
1598 | 678 static LmHandlerResult cb_storage_bookmarks(LmMessageHandler *h, |
679 LmConnection *c, | |
680 LmMessage *m, gpointer user_data) | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
681 { |
1598 | 682 LmMessageNode *x, *ansqry; |
2003 | 683 char *p = NULL; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
684 |
1598 | 685 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
2003 | 686 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
|
687 // No server support, or no bookmarks? |
2003 | 688 if (error && error->children) |
689 p = error->children->name; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
690 if (p && !strcmp(p, "item-not-found")) { |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
691 // 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
|
692 // currently empty. |
1598 | 693 if (bookmarks) |
694 lm_message_node_unref(bookmarks); | |
695 bookmarks = lm_message_node_new("storage", "storage:bookmarks"); | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
696 // We return 0 so that the IQ error message be |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
697 // not displayed, as it isn't a real error. |
2003 | 698 } else |
699 scr_LogPrint(LPRINT_LOGNORM, "Server does not support bookmarks storage."); | |
700 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
701 } |
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
702 |
1598 | 703 ansqry = lm_message_node_get_child(m->node, "query"); |
704 ansqry = lm_message_node_get_child(ansqry, "storage"); | |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
705 if (!ansqry) { |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
706 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
|
707 return 0; |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
708 } |
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 // Walk through the storage tags |
1598 | 711 for (x = ansqry->children ; x; x = x->next) { |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
712 // If the current node is a conference item, parse it and update the roster |
1598 | 713 if (x->name && !strcmp(x->name, "conference")) |
1004
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
714 storage_bookmarks_parse_conference(x); |
b57a01ffeed6
Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents:
1003
diff
changeset
|
715 } |
1598 | 716 // "Copy" the bookmarks node |
717 if (bookmarks) | |
718 lm_message_node_unref(bookmarks); | |
719 lm_message_node_deep_ref(ansqry); | |
720 bookmarks = ansqry; | |
1213
4a7db2870685
Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents:
1205
diff
changeset
|
721 return 0; |
686
98de2d166a11
Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents:
685
diff
changeset
|
722 } |
98de2d166a11
Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents:
685
diff
changeset
|
723 |
577
5c6d364130ee
Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents:
576
diff
changeset
|
724 |
1598 | 725 static LmHandlerResult cb_storage_rosternotes(LmMessageHandler *h, |
726 LmConnection *c, | |
727 LmMessage *m, gpointer user_data) | |
1261
704adf4df2d0
Send service-unavailable when Last Activity is disabled
Mikael Berthe <mikael@lilotux.net>
parents:
1255
diff
changeset
|
728 { |
1598 | 729 LmMessageNode *ansqry; |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
730 |
1598 | 731 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_ERROR) { |
2003 | 732 const char *p = NULL; |
733 LmMessageNode *error = lm_message_node_get_child(m->node, "error"); | |
1598 | 734 // No server support, or no roster notes? |
2003 | 735 if (error && error->children) |
736 p = error->children->name; | |
1598 | 737 if (p && !strcmp(p, "item-not-found")) { |
738 // item-no-found means the server has Private Storage, but it's | |
739 // currently empty. | |
740 if (rosternotes) | |
741 lm_message_node_unref(rosternotes); | |
742 rosternotes = lm_message_node_new("storage", "storage:rosternotes"); | |
743 // We return 0 so that the IQ error message be | |
744 // not displayed, as it isn't a real error. | |
2003 | 745 } else |
746 scr_LogPrint(LPRINT_LOGNORM, "Server does not support roster notes storage."); | |
747 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
748 } |
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
749 |
1598 | 750 ansqry = lm_message_node_get_child(m->node, "query"); |
751 ansqry = lm_message_node_get_child(ansqry, "storage"); | |
752 if (!ansqry) { | |
753 scr_LogPrint(LPRINT_LOG, "Invalid IQ:private result! " | |
754 "(storage:rosternotes)"); | |
755 return LM_HANDLER_RESULT_REMOVE_MESSAGE; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
756 } |
1598 | 757 // Copy the rosternotes node |
758 if (rosternotes) | |
759 lm_message_node_unref(rosternotes); | |
760 lm_message_node_deep_ref(ansqry); | |
761 rosternotes = ansqry; | |
762 return 0; | |
1158
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
763 } |
c30c315dc447
XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents:
1134
diff
changeset
|
764 |
995
c89e7993c4d9
Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents:
977
diff
changeset
|
765 |
1598 | 766 static struct IqRequestStorageHandlers |
1254
401639413340
More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents:
1224
diff
changeset
|
767 { |
1598 | 768 const gchar *storagens; |
769 LmHandleMessageFunction handler; | |
770 } iq_request_storage_handlers[] = { | |
771 {"storage:rosternotes", &cb_storage_rosternotes}, | |
772 {"storage:bookmarks", &cb_storage_bookmarks}, | |
773 {NULL, NULL} | |
774 }; | |
619
44ddf9bec3a5
Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
613
diff
changeset
|
775 |
1598 | 776 void xmpp_request_storage(const gchar *storage) |
619
44ddf9bec3a5
Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents:
613
diff
changeset
|
777 { |
1598 | 778 LmMessage *iq; |
779 LmMessageNode *query; | |
780 LmMessageHandler *handler; | |
781 int i; | |
703
8cbcbff8de7d
Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents:
699
diff
changeset
|
782 |
1598 | 783 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ, |
784 LM_MESSAGE_SUB_TYPE_GET); | |
785 query = lm_message_node_add_child(iq->node, "query", NULL); | |
786 lm_message_node_set_attribute(query, "xmlns", NS_PRIVATE); | |
787 lm_message_node_set_attribute(lm_message_node_add_child | |
788 (query, "storage", NULL), | |
789 "xmlns", storage); | |
1283
2faf179166f3
Implement XEP-0202 (Entity Time)
Mikael Berthe <mikael@lilotux.net>
parents:
1268
diff
changeset
|
790 |
1598 | 791 for (i = 0; |
792 strcmp(iq_request_storage_handlers[i].storagens, storage) != 0; | |
793 ++i) ; | |
595
0c1d37300862
IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents:
582
diff
changeset
|
794 |
1598 | 795 handler = lm_message_handler_new(iq_request_storage_handlers[i].handler, |
796 NULL, FALSE); | |
797 lm_connection_send_with_reply(lconnection, iq, handler, NULL); | |
798 lm_message_handler_unref(handler); | |
799 lm_message_unref(iq); | |
547
1df26ff0ed8c
Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents:
539
diff
changeset
|
800 } |
1599 | 801 |
1811 | 802 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */ |