annotate mcabber/mcabber/xmpp_iqrequest.c @ 1983:45e0b13a39e2

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