annotate mcabber/src/jab_iq.c @ 1255:ceada40bbe20

Update Entity Capabilities (add iq:last)
author Mikael Berthe <mikael@lilotux.net>
date Fri, 22 Jun 2007 20:24:19 +0200
parents 401639413340
children 704adf4df2d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
1 /*
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
2 * jab_iq.c -- Jabber protocol IQ-related fonctions
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 387
diff changeset
3 *
1205
2de8f8ba1f34 Update copyrights
Mikael Berthe <mikael@lilotux.net>
parents: 1198
diff changeset
4 * Copyright (C) 2005-2007 Mikael Berthe <mikael@lilotux.net>
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
5 * Some parts initially came from the centericq project:
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
6 * Copyright (C) 2002-2005 by Konstantin Klyagin <konst@konst.org.ua>
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
7 * Some small parts come from the Gaim project <http://gaim.sourceforge.net/>
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
8 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or (at
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
12 * your option) any later version.
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
13 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
17 * General Public License for more details.
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
18 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
22 * USA
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
23 */
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
24
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
25 #include <sys/utsname.h>
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
26 #include <glib.h>
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
27
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
28 #include "jabglue.h"
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
29 #include "jab_priv.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 52
diff changeset
30 #include "roster.h"
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
31 #include "utils.h"
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
32 #include "screen.h"
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
33 #include "settings.h"
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
34 #include "hbuf.h"
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
35 #include "commands.h"
164
faf534be8ff0 [/trunk] Changeset 176 by mikael
mikael
parents: 159
diff changeset
36
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
37 #ifdef ENABLE_HGCSET
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
38 # include "hgcset.h"
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
39 #endif
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
40
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
41
1008
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
42 // Bookmarks for IQ:private storage
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
43 xmlnode bookmarks;
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
44 // Roster notes for IQ:private storage
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
45 xmlnode rosternotes;
1008
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
46
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
47 static GSList *iqs_list;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
48
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
49 time_t iqlast; // last message/status change time
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
50
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
51 // Enum for vCard attributes
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
52 enum vcard_attr {
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
53 vcard_home = 1<<0,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
54 vcard_work = 1<<1,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
55 vcard_postal = 1<<2,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
56 vcard_voice = 1<<3,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
57 vcard_fax = 1<<4,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
58 vcard_cell = 1<<5,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
59 vcard_inet = 1<<6,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
60 vcard_pref = 1<<7,
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
61 };
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
62
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
63 static void handle_iq_command_set_status(jconn conn, char *from,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
64 const char *id, xmlnode xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
65
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
66 static void handle_iq_command_leave_groupchats(jconn conn, char *from,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
67 const char *id, xmlnode xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
68
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
69 typedef void (*adhoc_command_callback)(jconn, char*, const char*, xmlnode);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
70
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
71 struct adhoc_command {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
72 char *name;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
73 char *description;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
74 bool only_for_self;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
75 adhoc_command_callback callback;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
76 };
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
77
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
78 const struct adhoc_command adhoc_command_list[] = {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
79 { "http://jabber.org/protocol/rc#set-status",
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
80 "Change client status",
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
81 1,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
82 &handle_iq_command_set_status },
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
83 { "http://jabber.org/protocol/rc#leave-groupchats",
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
84 "Leave groupchat(s)",
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
85 1,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
86 &handle_iq_command_leave_groupchats },
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
87 { NULL, NULL, 0, NULL },
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
88 };
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
89
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
90 struct adhoc_status {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
91 char *name; // the name used by adhoc
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
92 char *description;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
93 char *status; // the string, used by setstus
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
94 };
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
95
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
96 const struct adhoc_status adhoc_status_list[] = {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
97 {"online", "Online", "avail"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
98 {"chat", "Chat", "free"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
99 {"away", "Away", "away"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
100 {"xd", "Extended away", "notavail"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
101 {"dnd", "Do not disturb", "dnd"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
102 {"invisible", "Invisible", "invisible"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
103 {"offline", "Offline", "offline"},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
104 {NULL, NULL, NULL},
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
105 };
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
106
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
107 // entity_version()
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
108 // Return a static version string for Entity Capabilities.
1218
ab5de2ed2b7e Simplify entity_version()
Mikael Berthe <mikael@lilotux.net>
parents: 1217
diff changeset
109 // It should be specific to the client version, please change the id
ab5de2ed2b7e Simplify entity_version()
Mikael Berthe <mikael@lilotux.net>
parents: 1217
diff changeset
110 // if you alter mcabber's disco support (or add something to the version
ab5de2ed2b7e Simplify entity_version()
Mikael Berthe <mikael@lilotux.net>
parents: 1217
diff changeset
111 // number) so that it doesn't conflict with the official client.
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
112 const char *entity_version(void)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
113 {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
114 static char *ver;
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
115 const char *PVERSION = PACKAGE_VERSION "+iql";
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
116
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
117 if (ver)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
118 return ver;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
119
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
120 #ifdef HGCSET
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
121 ver = g_strdup_printf("%s-%s", PVERSION, HGCSET);
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
122 #else
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
123 ver = g_strdup(PVERSION);
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
124 #endif
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
125
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
126 return ver;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
127 }
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
128
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
129 // iqs_new(type, namespace, prefix, timeout)
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
130 // Create a query (GET, SET) IQ structure. This function should not be used
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
131 // for RESULT packets.
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
132 eviqs *iqs_new(guint8 type, const char *ns, const char *prefix, time_t tmout)
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
133 {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
134 static guint iqs_idn;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
135 eviqs *new_iqs;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
136 time_t now_t;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
137
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
138 iqs_idn++;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
139
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
140 new_iqs = g_new0(eviqs, 1);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
141 time(&now_t);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
142 new_iqs->ts_create = now_t;
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
143 if (tmout)
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
144 new_iqs->ts_expire = now_t + tmout;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
145 new_iqs->type = type;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
146 new_iqs->xmldata = jutil_iqnew(type, (char*)ns);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
147 if (prefix)
687
426145046b93 Minor format change in IQ id string
Mikael Berthe <mikael@lilotux.net>
parents: 686
diff changeset
148 new_iqs->id = g_strdup_printf("%s_%d", prefix, iqs_idn);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
149 else
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
150 new_iqs->id = g_strdup_printf("%d", iqs_idn);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
151 xmlnode_put_attrib(new_iqs->xmldata, "id", new_iqs->id);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
152
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
153 iqs_list = g_slist_append(iqs_list, new_iqs);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
154 return new_iqs;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
155 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
156
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
157 int iqs_del(const char *iqid)
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
158 {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
159 GSList *p;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
160 eviqs *i;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
161
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
162 if (!iqid) return 1;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
163
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
164 for (p = iqs_list; p; p = g_slist_next(p)) {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
165 i = p->data;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
166 if (!strcmp(iqid, i->id))
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
167 break;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
168 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
169 if (p) {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
170 g_free(i->id);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
171 xmlnode_free(i->xmldata);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 772
diff changeset
172 g_free(i->data);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
173 g_free(i);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
174 iqs_list = g_slist_remove(iqs_list, p->data);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
175 return 0; // Ok, deleted
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
176 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
177 return -1; // Not found
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
178 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
179
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
180 static eviqs *iqs_find(const char *iqid)
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
181 {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
182 GSList *p;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
183 eviqs *i;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
184
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
185 if (!iqid) return NULL;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
186
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
187 for (p = iqs_list; p; p = g_slist_next(p)) {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
188 i = p->data;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
189 if (!strcmp(iqid, i->id))
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
190 return i;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
191 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
192 return NULL;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
193 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
194
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
195 // iqs_callback(iqid, xml_result, iqcontext)
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
196 // Callback processing for the iqid message.
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
197 // If we've received an answer, xml_result should point to the xmldata packet.
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
198 // If this is a timeout, xml_result should be NULL.
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
199 // Return 0 in case of success, -1 if the iqid hasn't been found.
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
200 int iqs_callback(const char *iqid, xmlnode xml_result, guint iqcontext)
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
201 {
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
202 eviqs *i;
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
203 int retval = 0;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
204
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
205 i = iqs_find(iqid);
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
206 if (!i) return -1;
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
207
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
208 // IQ processing
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
209 // Note: If xml_result is NULL, this is a timeout
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
210 if (i->callback)
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
211 retval = (*i->callback)(i, xml_result, iqcontext);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
212
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
213 iqs_del(iqid);
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
214 return retval;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
215 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
216
705
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
217 void iqs_check_timeout(time_t now_t)
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
218 {
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
219 GSList *p;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
220 eviqs *i;
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
221
705
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
222 p = iqs_list;
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
223 while (p) {
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
224 i = p->data;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
225 // We must get next IQ eviqs element now because the current one
705
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
226 // could be freed.
603b43e4f56a Fix a bug in iqs_check_timeout()
Mikael Berthe <mikael@lilotux.net>
parents: 704
diff changeset
227 p = g_slist_next(p);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
228
965
1bdf0f1b16c0 Use U suffix for unsigned defines
Mikael Berthe <mikael@lilotux.net>
parents: 959
diff changeset
229 if ((!i->ts_expire && now_t > i->ts_create + (time_t)IQS_MAX_TIMEOUT) ||
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
230 (i->ts_expire && now_t > i->ts_expire)) {
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
231 iqs_callback(i->id, NULL, IQS_CONTEXT_TIMEOUT);
683
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
232 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
233 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
234 }
c5e0d8c3f00c Introduce new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 619
diff changeset
235
689
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
236 void jb_iqs_display_list(void)
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
237 {
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
238 GSList *p;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
239 eviqs *i;
689
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
240
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
241 scr_LogPrint(LPRINT_LOGNORM, "IQ list:");
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
242 for (p = iqs_list; p; p = g_slist_next(p)) {
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
243 i = p->data;
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
244 scr_LogPrint(LPRINT_LOGNORM, "Id [%s]", i->id);
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
245 }
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
246 scr_LogPrint(LPRINT_LOGNORM, "End of IQ list.");
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
247 }
281aab5aef50 Introduce jb_iqs_display_list() helper function for debugging
Mikael Berthe <mikael@lilotux.net>
parents: 688
diff changeset
248
606
0b4ed231ebc2 Code cleanup + remove deprecated Agents list IQ request
Mikael Berthe <mikael@lilotux.net>
parents: 605
diff changeset
249 static void request_roster(void)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
250 {
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
251 eviqs *iqn = iqs_new(JPACKET__GET, NS_ROSTER, "Roster", IQS_DEFAULT_TIMEOUT);
684
3282276e7413 Switch IQ packet creation to the new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 683
diff changeset
252 jab_send(jc, iqn->xmldata);
3282276e7413 Switch IQ packet creation to the new IQ system
Mikael Berthe <mikael@lilotux.net>
parents: 683
diff changeset
253 iqs_del(iqn->id); // XXX
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
254 }
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
255
606
0b4ed231ebc2 Code cleanup + remove deprecated Agents list IQ request
Mikael Berthe <mikael@lilotux.net>
parents: 605
diff changeset
256 static void handle_iq_roster(xmlnode x)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
257 {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
258 xmlnode y;
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
259 const char *fjid, *name, *group, *sub, *ask;
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
260 char *cleanalias;
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
261 enum subscr esub;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
262 int need_refresh = FALSE;
613
a6b8b373e4de Try to guess if a roster item is an agent
Mikael Berthe <mikael@lilotux.net>
parents: 607
diff changeset
263 guint roster_type;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
264
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
265 for (y = xmlnode_get_tag(x, "item"); y; y = xmlnode_get_nextsibling(y)) {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
266
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
267 fjid = xmlnode_get_attrib(y, "jid");
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
268 name = xmlnode_get_attrib(y, "name");
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
269 sub = xmlnode_get_attrib(y, "subscription");
605
2a4fefb98511 Set the subscription pending flag
Mikael Berthe <mikael@lilotux.net>
parents: 603
diff changeset
270 ask = xmlnode_get_attrib(y, "ask");
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
271
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
272 group = xmlnode_get_tag_data(y, "group");
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
273
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
274 if (!fjid)
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
275 continue;
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
276
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
277 cleanalias = jidtodisp(fjid);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
278
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
279 esub = sub_none;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
280 if (sub) {
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
281 if (!strcmp(sub, "to")) esub = sub_to;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
282 else if (!strcmp(sub, "from")) esub = sub_from;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
283 else if (!strcmp(sub, "both")) esub = sub_both;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
284 else if (!strcmp(sub, "remove")) esub = sub_remove;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
285 }
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
286
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
287 if (esub == sub_remove) {
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
288 roster_del_user(cleanalias);
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
289 scr_LogPrint(LPRINT_LOGNORM, "Buddy <%s> has been removed "
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
290 "from the roster", cleanalias);
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
291 g_free(cleanalias);
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
292 need_refresh = TRUE;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
293 continue;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
294 }
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
295
605
2a4fefb98511 Set the subscription pending flag
Mikael Berthe <mikael@lilotux.net>
parents: 603
diff changeset
296 if (ask && !strcmp(ask, "subscribe"))
2a4fefb98511 Set the subscription pending flag
Mikael Berthe <mikael@lilotux.net>
parents: 603
diff changeset
297 esub |= sub_pending;
2a4fefb98511 Set the subscription pending flag
Mikael Berthe <mikael@lilotux.net>
parents: 603
diff changeset
298
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
299 if (!name)
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
300 name = cleanalias;
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
301
977
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 965
diff changeset
302 // Tricky... :-\ My guess is that if there is no JID_DOMAIN_SEPARATOR,
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 965
diff changeset
303 // this is an agent.
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 965
diff changeset
304 if (strchr(cleanalias, JID_DOMAIN_SEPARATOR))
613
a6b8b373e4de Try to guess if a roster item is an agent
Mikael Berthe <mikael@lilotux.net>
parents: 607
diff changeset
305 roster_type = ROSTER_TYPE_USER;
a6b8b373e4de Try to guess if a roster item is an agent
Mikael Berthe <mikael@lilotux.net>
parents: 607
diff changeset
306 else
a6b8b373e4de Try to guess if a roster item is an agent
Mikael Berthe <mikael@lilotux.net>
parents: 607
diff changeset
307 roster_type = ROSTER_TYPE_AGENT;
a6b8b373e4de Try to guess if a roster item is an agent
Mikael Berthe <mikael@lilotux.net>
parents: 607
diff changeset
308
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
309 roster_add_user(cleanalias, name, group, roster_type, esub);
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
310
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
311 g_free(cleanalias);
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
312 }
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
313
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
314 buddylist_build();
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
315 update_roster = TRUE;
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
316 if (need_refresh)
959
8bf36cef8aa6 Do not enter chat mode after command "/del"
Mikael Berthe <mikael@lilotux.net>
parents: 871
diff changeset
317 scr_UpdateBuddyWindow();
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
318 }
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
319
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
320 static int iqscallback_version(eviqs *iqp, xmlnode xml_result, guint iqcontext)
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
321 {
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
322 xmlnode ansqry;
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
323 char *p;
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
324 char *bjid;
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
325 char *buf;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
326
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
327 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
328 if (!xml_result || iqcontext) return -1;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
329
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
330 ansqry = xmlnode_get_tag(xml_result, "query");
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
331 if (!ansqry) {
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
332 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result!");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
333 return 0;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
334 }
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
335 // Display IQ result sender...
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
336 p = xmlnode_get_attrib(xml_result, "from");
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
337 if (!p) {
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
338 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:version result (no sender name).");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
339 return 0;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
340 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
341 bjid = p;
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
342
782
19121d9f4aa2 Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents: 776
diff changeset
343 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
344 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
345
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
346 // bjid should now really be the "bare JID", let's strip the resource
977
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 965
diff changeset
347 p = strchr(bjid, JID_RESOURCE_SEPARATOR);
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
348 if (p) *p = '\0';
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
349
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
350 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
351 g_free(buf);
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
352
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
353 // Get result data...
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
354 p = xmlnode_get_tag_data(ansqry, "name");
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
355 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
356 buf = g_strdup_printf("Name: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
357 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
358 g_free(buf);
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
359 }
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
360 p = xmlnode_get_tag_data(ansqry, "version");
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
361 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
362 buf = g_strdup_printf("Version: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
363 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
364 g_free(buf);
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
365 }
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
366 p = xmlnode_get_tag_data(ansqry, "os");
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
367 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
368 buf = g_strdup_printf("OS: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
369 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
370 g_free(buf);
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
371 }
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
372 return 0;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
373 }
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
374
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
375 void request_version(const char *fulljid)
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
376 {
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
377 eviqs *iqn;
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
378
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
379 iqn = iqs_new(JPACKET__GET, NS_VERSION, "version", IQS_DEFAULT_TIMEOUT);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
380 xmlnode_put_attrib(iqn->xmldata, "to", fulljid);
690
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
381 iqn->callback = &iqscallback_version;
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
382 jab_send(jc, iqn->xmldata);
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
383 }
3e965a1186c7 Implement IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 689
diff changeset
384
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
385 static int iqscallback_time(eviqs *iqp, xmlnode xml_result, guint iqcontext)
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
386 {
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
387 xmlnode ansqry;
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
388 char *p;
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
389 char *bjid;
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
390 char *buf;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
391
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
392 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
393 if (!xml_result || iqcontext) return -1;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
394
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
395 ansqry = xmlnode_get_tag(xml_result, "query");
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
396 if (!ansqry) {
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
397 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result!");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
398 return 0;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
399 }
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
400 // Display IQ result sender...
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
401 p = xmlnode_get_attrib(xml_result, "from");
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
402 if (!p) {
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
403 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:time result (no sender name).");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
404 return 0;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
405 }
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
406 bjid = p;
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
407
782
19121d9f4aa2 Nicer message when receiving IQ result packet
Mikael Berthe <mikael@lilotux.net>
parents: 776
diff changeset
408 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
409 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
410
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
411 // bjid should now really be the "bare JID", let's strip the resource
977
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 965
diff changeset
412 p = strchr(bjid, JID_RESOURCE_SEPARATOR);
704
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
413 if (p) *p = '\0';
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
414
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
415 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
416 g_free(buf);
4118a66f2c02 Display IQ results (time, version) in the chat window
Mikael Berthe <mikael@lilotux.net>
parents: 703
diff changeset
417
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
418 // Get result data...
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
419 p = xmlnode_get_tag_data(ansqry, "utc");
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
420 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
421 buf = g_strdup_printf("UTC: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
422 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
423 g_free(buf);
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
424 }
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
425 p = xmlnode_get_tag_data(ansqry, "tz");
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
426 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
427 buf = g_strdup_printf("TZ: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
428 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
429 g_free(buf);
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
430 }
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
431 p = xmlnode_get_tag_data(ansqry, "display");
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
432 if (p) {
1030
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
433 buf = g_strdup_printf("Time: %s", p);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
434 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
923cf5a92b44 [BP-dd9e7eb5f8a8] Remove old UTF-8 conversions
Mikael Berthe <mikael@lilotux.net>
parents: 965
diff changeset
435 g_free(buf);
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
436 }
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
437 return 0;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
438 }
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
439
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
440 void request_time(const char *fulljid)
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
441 {
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
442 eviqs *iqn;
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
443
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
444 iqn = iqs_new(JPACKET__GET, NS_TIME, "time", IQS_DEFAULT_TIMEOUT);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
445 xmlnode_put_attrib(iqn->xmldata, "to", fulljid);
691
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
446 iqn->callback = &iqscallback_time;
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
447 jab_send(jc, iqn->xmldata);
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
448 }
3c0a0a993de8 Implement IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 690
diff changeset
449
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
450 static int iqscallback_last(eviqs *iqp, xmlnode xml_result, guint iqcontext)
1015
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
451 {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
452 xmlnode ansqry;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
453 char *p;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
454 char *bjid;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
455 char *buf;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
456
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
457 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
458 if (!xml_result || iqcontext) return -1;
1015
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
459
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
460 ansqry = xmlnode_get_tag(xml_result, "query");
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
461 if (!ansqry) {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
462 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result!");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
463 return 0;
1015
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
464 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
465 // Display IQ result sender...
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
466 p = xmlnode_get_attrib(xml_result, "from");
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
467 if (!p) {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
468 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:last result (no sender name).");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
469 return 0;
1015
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
470 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
471 bjid = p;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
472
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
473 buf = g_strdup_printf("Received IQ:last result from <%s>", bjid);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
474 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
475
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
476 // bjid should now really be the "bare JID", let's strip the resource
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
477 p = strchr(bjid, JID_RESOURCE_SEPARATOR);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
478 if (p) *p = '\0';
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
479
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
480 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
481 g_free(buf);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
482
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
483 // Get result data...
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
484 p = xmlnode_get_attrib(ansqry, "seconds");
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
485 if (p) {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
486 long int s;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
487 GString *sbuf;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
488 sbuf = g_string_new("Idle time: ");
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
489 s = atol(p);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
490 // Days
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
491 if (s > 86400L) {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
492 g_string_append_printf(sbuf, "%ldd ", s/86400L);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
493 s %= 86400L;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
494 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
495 // hh:mm:ss
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
496 g_string_append_printf(sbuf, "%02ld:", s/3600L);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
497 s %= 3600L;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
498 g_string_append_printf(sbuf, "%02ld:%02ld", s/60L, s%60L);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
499 scr_WriteIncomingMessage(bjid, sbuf->str, 0, HBB_PREFIX_NONE);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
500 g_string_free(sbuf, TRUE);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
501 } else {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
502 scr_WriteIncomingMessage(bjid, "No idle time reported.",
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
503 0, HBB_PREFIX_NONE);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
504 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
505 p = xmlnode_get_data(ansqry);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
506 if (p) {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
507 buf = g_strdup_printf("Status message: %s", p);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
508 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
509 g_free(buf);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
510 }
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
511 return 0;
1015
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
512 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
513
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
514 void request_last(const char *fulljid)
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
515 {
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
516 eviqs *iqn;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
517
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
518 iqn = iqs_new(JPACKET__GET, NS_LAST, "last", IQS_DEFAULT_TIMEOUT);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
519 xmlnode_put_attrib(iqn->xmldata, "to", fulljid);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
520 iqn->callback = &iqscallback_last;
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
521 jab_send(jc, iqn->xmldata);
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
522 }
579299b1c9b2 Add /request last
Mikael Berthe <mikael@lilotux.net>
parents: 1014
diff changeset
523
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
524 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
525 enum vcard_attr vcard_attrib, const char *text)
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
526 {
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
527 char *buf;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
528
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
529 if (!text || !bjid || !label)
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
530 return;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
531
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
532 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
533 (vcard_attrib & vcard_home ? "[home]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
534 (vcard_attrib & vcard_work ? "[work]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
535 (vcard_attrib & vcard_postal ? "[postal]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
536 (vcard_attrib & vcard_voice ? "[voice]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
537 (vcard_attrib & vcard_fax ? "[fax]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
538 (vcard_attrib & vcard_cell ? "[cell]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
539 (vcard_attrib & vcard_inet ? "[inet]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
540 (vcard_attrib & vcard_pref ? "[pref]" : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
541 (vcard_attrib ? " " : ""),
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
542 text);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
543 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_NONE);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
544 g_free(buf);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
545 }
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
546
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
547 static void handle_vcard_node(const char *barejid, xmlnode vcardnode)
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 xmlnode x;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
550 const char *p;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
551
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
552 x = xmlnode_get_firstchild(vcardnode);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
553 for ( ; x; x = xmlnode_get_nextsibling(x)) {
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
554 const char *data;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
555 enum vcard_attr vcard_attrib = 0;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
556
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
557 p = xmlnode_get_name(x);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
558 data = xmlnode_get_data(x);
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
559 if (!p || !data)
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
560 continue;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
561
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
562 if (!strcmp(p, "FN"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
563 display_vcard_item(barejid, "Name", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
564 else if (!strcmp(p, "NICKNAME"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
565 display_vcard_item(barejid, "Nickname", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
566 else if (!strcmp(p, "URL"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
567 display_vcard_item(barejid, "URL", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
568 else if (!strcmp(p, "BDAY"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
569 display_vcard_item(barejid, "Birthday", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
570 else if (!strcmp(p, "TZ"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
571 display_vcard_item(barejid, "Timezone", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
572 else if (!strcmp(p, "TITLE"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
573 display_vcard_item(barejid, "Title", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
574 else if (!strcmp(p, "ROLE"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
575 display_vcard_item(barejid, "Role", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
576 else if (!strcmp(p, "DESC"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
577 display_vcard_item(barejid, "Comment", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
578 else if (!strcmp(p, "N")) {
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
579 data = xmlnode_get_tag_data(x, "FAMILY");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
580 display_vcard_item(barejid, "Family Name", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
581 data = xmlnode_get_tag_data(x, "GIVEN");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
582 display_vcard_item(barejid, "Given Name", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
583 data = xmlnode_get_tag_data(x, "MIDDLE");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
584 display_vcard_item(barejid, "Middle Name", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
585 } else if (!strcmp(p, "ORG")) {
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
586 data = xmlnode_get_tag_data(x, "ORGNAME");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
587 display_vcard_item(barejid, "Organisation name", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
588 data = xmlnode_get_tag_data(x, "ORGUNIT");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
589 display_vcard_item(barejid, "Organisation unit", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
590 } else {
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
591 // 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
592 // (ADR, TEL & EMAIL)
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
593 if (xmlnode_get_tag(x, "HOME"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
594 vcard_attrib |= vcard_home;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
595 if (xmlnode_get_tag(x, "WORK"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
596 vcard_attrib |= vcard_work;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
597 if (xmlnode_get_tag(x, "PREF"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
598 vcard_attrib |= vcard_pref;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
599 if (!strcmp(p, "ADR")) { // Address
1005
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
600 if (xmlnode_get_tag(x, "POSTAL"))
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
601 vcard_attrib |= vcard_postal;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
602 data = xmlnode_get_tag_data(x, "EXTADD");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
603 display_vcard_item(barejid, "Addr (ext)", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
604 data = xmlnode_get_tag_data(x, "STREET");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
605 display_vcard_item(barejid, "Street", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
606 data = xmlnode_get_tag_data(x, "LOCALITY");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
607 display_vcard_item(barejid, "Locality", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
608 data = xmlnode_get_tag_data(x, "REGION");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
609 display_vcard_item(barejid, "Region", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
610 data = xmlnode_get_tag_data(x, "PCODE");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
611 display_vcard_item(barejid, "Postal code", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
612 data = xmlnode_get_tag_data(x, "CTRY");
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
613 display_vcard_item(barejid, "Country", vcard_attrib, data);
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
614 } else if (!strcmp(p, "TEL")) { // Telephone
1005
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
615 data = xmlnode_get_tag_data(x, "NUMBER");
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
616 if (data) {
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
617 if (xmlnode_get_tag(x, "VOICE"))
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
618 vcard_attrib |= vcard_voice;
1005
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
619 if (xmlnode_get_tag(x, "FAX"))
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
620 vcard_attrib |= vcard_fax;
1005
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
621 if (xmlnode_get_tag(x, "CELL"))
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
622 vcard_attrib |= vcard_cell;
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
623 display_vcard_item(barejid, "Phone", vcard_attrib, data);
1005
e5c10cc29660 Improve vcard support
Mikael Berthe <mikael@lilotux.net>
parents: 1004
diff changeset
624 }
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
625 } else if (!strcmp(p, "EMAIL")) { // Email
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
626 if (xmlnode_get_tag(x, "INTERNET"))
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
627 vcard_attrib |= vcard_inet;
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
628 data = xmlnode_get_tag_data(x, "USERID");
1006
f61131cd86a0 Clean up vcard code
Mikael Berthe <mikael@lilotux.net>
parents: 1005
diff changeset
629 display_vcard_item(barejid, "Email", vcard_attrib, data);
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
630 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
631 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
632 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
633 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
634
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
635 static int iqscallback_vcard(eviqs *iqp, xmlnode xml_result, guint iqcontext)
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
636 {
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
637 xmlnode ansqry;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
638 char *p;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
639 char *bjid;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
640 char *buf;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
641
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
642 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
643 if (!xml_result || iqcontext) return -1;
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
644
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
645 // Display IQ result sender...
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
646 p = xmlnode_get_attrib(xml_result, "from");
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
647 if (!p) {
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
648 scr_LogPrint(LPRINT_LOGNORM, "Invalid IQ:vCard result (no sender name).");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
649 return 0;
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
650 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
651 bjid = p;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
652
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
653 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
654 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
655
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
656 // Get the vCard node
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
657 ansqry = xmlnode_get_tag(xml_result, "vCard");
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
658 if (!ansqry) {
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
659 scr_LogPrint(LPRINT_LOGNORM, "Empty IQ:vCard result!");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
660 return 0;
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
661 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
662
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
663 // bjid should really be the "bare JID", let's strip the resource
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
664 p = strchr(bjid, JID_RESOURCE_SEPARATOR);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
665 if (p) *p = '\0';
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
666
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
667 scr_WriteIncomingMessage(bjid, buf, 0, HBB_PREFIX_INFO);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
668 g_free(buf);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
669
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
670 // Get result data...
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
671 handle_vcard_node(bjid, ansqry);
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
672 return 0;
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
673 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
674
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
675 void request_vcard(const char *bjid)
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
676 {
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
677 eviqs *iqn;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
678 char *barejid;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
679
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
680 barejid = jidtodisp(bjid);
1003
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
681
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
682 // Create a new IQ structure. We use NULL for the namespace because
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
683 // we'll have to use a special tag, not the usual "query" one.
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
684 iqn = iqs_new(JPACKET__GET, NULL, "vcard", IQS_DEFAULT_TIMEOUT);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
685 xmlnode_put_attrib(iqn->xmldata, "to", barejid);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
686 // Remove the useless <query/> tag, and insert a vCard one.
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
687 xmlnode_hide(xmlnode_get_tag(iqn->xmldata, "query"));
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
688 xmlnode_put_attrib(xmlnode_insert_tag(iqn->xmldata, "vCard"),
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
689 "xmlns", NS_VCARD);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
690 iqn->callback = &iqscallback_vcard;
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
691 jab_send(jc, iqn->xmldata);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
692
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
693 g_free(barejid);
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
694 }
c8b1a52b2fd6 Initial VCard retrieval support
Mikael Berthe <mikael@lilotux.net>
parents: 1002
diff changeset
695
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
696 static void storage_bookmarks_parse_conference(xmlnode xmldata)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
697 {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
698 const char *fjid, *name, *autojoin;
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
699 char *bjid;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
700 GSList *room_elt;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
701
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
702 fjid = xmlnode_get_attrib(xmldata, "jid");
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
703 if (!fjid)
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
704 return;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
705 name = xmlnode_get_attrib(xmldata, "name");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
706 autojoin = xmlnode_get_attrib(xmldata, "autojoin");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
707
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1037
diff changeset
708 bjid = jidtodisp(fjid); // Bare jid
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
709
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
710 // 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
711 room_elt = roster_find(bjid, jidsearch, 0);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
712 if (!room_elt) {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
713 room_elt = roster_add_user(bjid, name, NULL, ROSTER_TYPE_ROOM, sub_none);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
714 } else {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
715 buddy_settype(room_elt->data, ROSTER_TYPE_ROOM);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
716 /*
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
717 // If the name is available, should we use it?
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
718 // 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
719 // in the roster.
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
720 if (name)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
721 buddy_setname(room_elt->data, name);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
722 */
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
723 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
724
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
725 // Is autojoin set?
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
726 // 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
727 // try to join the room.
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
728 if (autojoin && !strcmp(autojoin, "1")) {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
729 char *nick, *passwd;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
730 char *tmpnick = NULL;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
731 nick = xmlnode_get_tag_data(xmldata, "nick");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
732 passwd = xmlnode_get_tag_data(xmldata, "password");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
733 if (!nick || !*nick)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
734 nick = tmpnick = default_muc_nickname();
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
735 // Let's join now
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
736 scr_LogPrint(LPRINT_LOGNORM, "Auto-join bookmark <%s>", bjid);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
737 jb_room_join(bjid, nick, passwd);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
738 g_free(tmpnick);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
739 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
740 g_free(bjid);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
741 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
742
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
743 static int iqscallback_storage_bookmarks(eviqs *iqp, xmlnode xml_result,
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
744 guint iqcontext)
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
745 {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
746 xmlnode x, ansqry;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
747 char *p;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
748
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
749 if (iqcontext == IQS_CONTEXT_ERROR) {
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
750 // No server support, or no bookmarks?
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
751 p = xmlnode_get_name(xmlnode_get_firstchild(xml_result));
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
752 if (p && !strcmp(p, "item-not-found")) {
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
753 // 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
754 // currently empty.
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
755 xmlnode_free(bookmarks);
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
756 bookmarks = xmlnode_new_tag("storage");
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
757 xmlnode_put_attrib(bookmarks, "xmlns", "storage:bookmarks");
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
758 // We return 0 so that the IQ error message be
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
759 // not displayed, as it isn't a real error.
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
760 return 0;
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
761 }
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
762 return -1; // Unhandled error
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
763 }
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
764
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
765 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
766 if (!xml_result || iqcontext) return 0;
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
767
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
768 ansqry = xmlnode_get_tag(xml_result, "query");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
769 ansqry = xmlnode_get_tag(ansqry, "storage");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
770 if (!ansqry) {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
771 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
772 return 0;
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
773 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
774
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
775 // Walk through the storage tags
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
776 x = xmlnode_get_firstchild(ansqry);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
777 for ( ; x; x = xmlnode_get_nextsibling(x)) {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
778 p = xmlnode_get_name(x);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
779 // If the current node is a conference item, parse it and update the roster
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
780 if (p && !strcmp(p, "conference"))
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
781 storage_bookmarks_parse_conference(x);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
782 }
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
783 // Copy the bookmarks node
1008
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
784 xmlnode_free(bookmarks);
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
785 bookmarks = xmlnode_dup(ansqry);
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
786 return 0;
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
787 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
788
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
789 static void request_storage_bookmarks(void)
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
790 {
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
791 eviqs *iqn;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
792 xmlnode x;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
793
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
794 iqn = iqs_new(JPACKET__GET, NS_PRIVATE, "storage", IQS_DEFAULT_TIMEOUT);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
795
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
796 x = xmlnode_insert_tag(xmlnode_get_tag(iqn->xmldata, "query"), "storage");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
797 xmlnode_put_attrib(x, "xmlns", "storage:bookmarks");
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
798
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
799 iqn->callback = &iqscallback_storage_bookmarks;
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
800 jab_send(jc, iqn->xmldata);
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
801 }
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
802
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
803 static int iqscallback_storage_rosternotes(eviqs *iqp, xmlnode xml_result,
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
804 guint iqcontext)
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
805 {
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
806 xmlnode ansqry;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
807
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
808 if (iqcontext == IQS_CONTEXT_ERROR) {
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
809 const char *p;
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
810 // No server support, or no roster notes?
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
811 p = xmlnode_get_name(xmlnode_get_firstchild(xml_result));
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
812 if (p && !strcmp(p, "item-not-found")) {
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
813 // 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
814 // currently empty.
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
815 xmlnode_free(rosternotes);
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
816 rosternotes = xmlnode_new_tag("storage");
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
817 xmlnode_put_attrib(rosternotes, "xmlns", "storage:rosternotes");
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
818 // We return 0 so that the IQ error message be
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
819 // not displayed, as it isn't a real error.
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
820 return 0;
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
821 }
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
822 return -1; // Unhandled error
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
823 }
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
824
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
825 // Leave now if we cannot process xml_result
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
826 if (!xml_result || iqcontext) return 0;
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
827
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
828 ansqry = xmlnode_get_tag(xml_result, "query");
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
829 ansqry = xmlnode_get_tag(ansqry, "storage");
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
830 if (!ansqry) {
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
831 scr_LogPrint(LPRINT_LOG, "Invalid IQ:private result! "
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
832 "(storage:rosternotes)");
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
833 return 0;
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
834 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
835 // Copy the rosternotes node
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
836 xmlnode_free(rosternotes);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
837 rosternotes = xmlnode_dup(ansqry);
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
838 return 0;
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
839 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
840
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
841 static void request_storage_rosternotes(void)
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
842 {
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
843 eviqs *iqn;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
844 xmlnode x;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
845
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
846 iqn = iqs_new(JPACKET__GET, NS_PRIVATE, "storage", IQS_DEFAULT_TIMEOUT);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
847
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
848 x = xmlnode_insert_tag(xmlnode_get_tag(iqn->xmldata, "query"), "storage");
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
849 xmlnode_put_attrib(x, "xmlns", "storage:rosternotes");
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
850
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
851 iqn->callback = &iqscallback_storage_rosternotes;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
852 jab_send(jc, iqn->xmldata);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
853 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
854
1224
fb0460a3cf4b Fix iqscallback_auth() when authentication fails
Mikael Berthe <mikael@lilotux.net>
parents: 1218
diff changeset
855 int iqscallback_auth(eviqs *iqp, xmlnode xml_result, guint iqcontext)
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
856 {
1224
fb0460a3cf4b Fix iqscallback_auth() when authentication fails
Mikael Berthe <mikael@lilotux.net>
parents: 1218
diff changeset
857 if (iqcontext == IQS_CONTEXT_ERROR)
fb0460a3cf4b Fix iqscallback_auth() when authentication fails
Mikael Berthe <mikael@lilotux.net>
parents: 1218
diff changeset
858 return -1;
fb0460a3cf4b Fix iqscallback_auth() when authentication fails
Mikael Berthe <mikael@lilotux.net>
parents: 1218
diff changeset
859
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
860 if (jstate == STATE_GETAUTH) {
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents: 705
diff changeset
861 eviqs *iqn;
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
862
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
863 if (xml_result) {
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
864 xmlnode x = xmlnode_get_tag(xml_result, "query");
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
865 if (x && !xmlnode_get_tag(x, "digest"))
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
866 jc->sid = 0;
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
867 }
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
868
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
869 iqn = iqs_new(JPACKET__SET, NS_AUTH, "auth", IQS_DEFAULT_TIMEOUT);
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
870 iqn->callback = &iqscallback_auth;
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
871 jab_auth_mcabber(jc, iqn->xmldata);
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
872 jab_send(jc, iqn->xmldata);
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
873 jstate = STATE_SENDAUTH;
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
874 } else if (jstate == STATE_SENDAUTH) {
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
875 request_roster();
1004
b57a01ffeed6 Use existing conference bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1003
diff changeset
876 request_storage_bookmarks();
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
877 request_storage_rosternotes();
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
878 jstate = STATE_LOGGED;
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
879 }
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
880 return 0;
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
881 }
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 685
diff changeset
882
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
883 static void handle_iq_result(jconn conn, char *from, xmlnode xmldata)
426
2706ef3e25a7 Better handling of server error codes/messages
Mikael Berthe <mikael@lilotux.net>
parents: 421
diff changeset
884 {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
885 xmlnode x;
685
f033345d1315 Call IQ callback function when receiving a RESULT packet
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
886 char *id;
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
887 char *ns;
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
888
685
f033345d1315 Call IQ callback function when receiving a RESULT packet
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
889 id = xmlnode_get_attrib(xmldata, "id");
f033345d1315 Call IQ callback function when receiving a RESULT packet
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
890 if (!id) {
596
6c7fd289648f Clean up handle_iq_result()
Mikael Berthe <mikael@lilotux.net>
parents: 595
diff changeset
891 scr_LogPrint(LPRINT_LOG, "IQ result stanza with no ID, ignored.");
6c7fd289648f Clean up handle_iq_result()
Mikael Berthe <mikael@lilotux.net>
parents: 595
diff changeset
892 return;
6c7fd289648f Clean up handle_iq_result()
Mikael Berthe <mikael@lilotux.net>
parents: 595
diff changeset
893 }
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
894
698
60522cf6d325 Propagate context to IQ callback functions
Mikael Berthe <mikael@lilotux.net>
parents: 692
diff changeset
895 if (!iqs_callback(id, xmldata, IQS_CONTEXT_RESULT))
685
f033345d1315 Call IQ callback function when receiving a RESULT packet
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
896 return;
f033345d1315 Call IQ callback function when receiving a RESULT packet
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
897
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
898 x = xmlnode_get_tag(xmldata, "query");
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
899 if (!x) return;
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
900
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
901 ns = xmlnode_get_attrib(x, "xmlns");
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
902 if (!ns) return;
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
903
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
904 if (!strcmp(ns, NS_ROSTER)) {
606
0b4ed231ebc2 Code cleanup + remove deprecated Agents list IQ request
Mikael Berthe <mikael@lilotux.net>
parents: 605
diff changeset
905 handle_iq_roster(x);
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 597
diff changeset
906
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
907 // Post-login stuff
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
908 // Usually we request the roster only at connection time
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
909 // so we should be there only once. (That's ugly, however)
1014
99c5278bf6b8 Keep the status and status messages when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1008
diff changeset
910 jb_setprevstatus();
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
911 }
426
2706ef3e25a7 Better handling of server error codes/messages
Mikael Berthe <mikael@lilotux.net>
parents: 421
diff changeset
912 }
2706ef3e25a7 Better handling of server error codes/messages
Mikael Berthe <mikael@lilotux.net>
parents: 421
diff changeset
913
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
914 // FIXME highly duplicated code
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
915 static void send_iq_not_implemented(jconn conn, char *from, xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
916 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
917 xmlnode x, y, z;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
918 // Not implemented.
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
919 x = xmlnode_dup(xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
920 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
921 xmlnode_hide_attrib(x, "from");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
922
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
923 xmlnode_put_attrib(x, "type", TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
924 y = xmlnode_insert_tag(x, TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
925 xmlnode_put_attrib(y, "code", "501");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
926 xmlnode_put_attrib(y, "type", "cancel");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
927 z = xmlnode_insert_tag(y, "feature-not-implemented");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
928 xmlnode_put_attrib(z, "xmlns", NS_XMPP_STANZAS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
929
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
930 jab_send(conn, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
931 xmlnode_free(x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
932 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
933
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
934 /*
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
935 static void send_iq_commands_bad_action(jconn conn, char *from, xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
936 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
937 xmlnode x, y, z;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
938
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
939 x = xmlnode_dup(xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
940 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
941 xmlnode_hide_attrib(x, "from");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
942
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
943 xmlnode_put_attrib(x, "type", TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
944 y = xmlnode_insert_tag(x, TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
945 xmlnode_put_attrib(y, "code", "400");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
946 xmlnode_put_attrib(y, "type", "modify");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
947 z = xmlnode_insert_tag(y, "bad-request");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
948 xmlnode_put_attrib(z, "xmlns", NS_XMPP_STANZAS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
949 z = xmlnode_insert_tag(y, "bad-action");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
950 xmlnode_put_attrib(z, "xmlns", NS_COMMANDS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
951
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
952 jab_send(conn, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
953 xmlnode_free(x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
954 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
955 */
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
956
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
957 static void send_iq_forbidden(jconn conn, char *from, xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
958 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
959 xmlnode x, y, z;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
960
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
961 x = xmlnode_dup(xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
962 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
963 xmlnode_hide_attrib(x, "from");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
964
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
965 xmlnode_put_attrib(x, "type", TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
966 y = xmlnode_insert_tag(x, TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
967 xmlnode_put_attrib(y, "code", "403");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
968 xmlnode_put_attrib(y, "type", "cancel");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
969 z = xmlnode_insert_tag(y, "forbidden");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
970 xmlnode_put_attrib(z, "xmlns", NS_XMPP_STANZAS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
971
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
972 jab_send(conn, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
973 xmlnode_free(x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
974 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
975
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
976 static void send_iq_commands_malformed_action(jconn conn, char *from,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
977 xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
978 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
979 xmlnode x, y, z;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
980
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
981 x = xmlnode_dup(xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
982 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
983 xmlnode_hide_attrib(x, "from");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
984
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
985 xmlnode_put_attrib(x, "type", TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
986 y = xmlnode_insert_tag(x, TMSG_ERROR);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
987 xmlnode_put_attrib(y, "code", "400");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
988 xmlnode_put_attrib(y, "type", "modify");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
989 z = xmlnode_insert_tag(y, "bad-request");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
990 xmlnode_put_attrib(z, "xmlns", NS_XMPP_STANZAS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
991 z = xmlnode_insert_tag(y, "malformed-action");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
992 xmlnode_put_attrib(z, "xmlns", NS_COMMANDS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
993
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
994 jab_send(conn, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
995 xmlnode_free(x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
996 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
997
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
998 static void handle_iq_commands_list(jconn conn, char *from, const char *id,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
999 xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1000 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1001 xmlnode x;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1002 xmlnode myquery;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1003 jid requester_jid;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1004 const struct adhoc_command *command;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1005 bool from_self;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1006 x = jutil_iqnew(JPACKET__RESULT, NS_DISCO_ITEMS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1007 xmlnode_put_attrib(x, "id", id);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1008 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1009 myquery = xmlnode_get_tag(x, "query");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1010
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1011 requester_jid = jid_new(conn->p, xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1012 from_self = !jid_cmpx(conn->user, requester_jid, JID_USER | JID_SERVER);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1013
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1014 for (command = adhoc_command_list ; command->name ; command++) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1015 if (!command->only_for_self || from_self) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1016 xmlnode item;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1017 item = xmlnode_insert_tag(myquery, "item");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1018 xmlnode_put_attrib(item, "node", command->name);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1019 xmlnode_put_attrib(item, "name", command->description);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1020 xmlnode_put_attrib(item, "jid", jid_full(conn->user));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1021 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1022 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1023
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1024 jab_send(jc, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1025 xmlnode_free(x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1026 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1027
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1028 static void xmlnode_insert_dataform_result_message(xmlnode node, char *message)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1029 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1030 xmlnode x = xmlnode_insert_tag(node, "x");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1031 xmlnode_put_attrib(x, "type", "result");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1032 xmlnode_put_attrib(x, "xmlns", "jabber:x:data");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1033
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1034 xmlnode field = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1035 xmlnode_put_attrib(field, "type", "text-single");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1036 xmlnode_put_attrib(field, "var", "message");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1037
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1038 xmlnode value = xmlnode_insert_tag(field, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1039 xmlnode_insert_cdata(value, message, -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1040 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1041
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1042 static char *generate_session_id(char *prefix)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1043 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1044 char *result;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1045 static int counter = 0;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1046 counter++;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1047 // TODO better use timezone ?
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1048 result = g_strdup_printf("%s-%i", prefix, counter);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1049 return result;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1050 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1051
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1052 static void handle_iq_command_set_status(jconn conn, char *from, const char *id,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1053 xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1054 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1055 char *action, *node, *sessionid;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1056 xmlnode iq, command, x, y;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1057 const struct adhoc_status *s;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1058
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1059 x = xmlnode_get_tag(xmldata, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1060 action = xmlnode_get_attrib(x, "action");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1061 node = xmlnode_get_attrib(x, "node");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1062 sessionid = xmlnode_get_attrib(x, "sessionid");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1063
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1064 iq = xmlnode_new_tag("iq");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1065 command = xmlnode_insert_tag(iq, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1066 xmlnode_put_attrib(command, "node", node);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1067 xmlnode_put_attrib(command, "xmlns", NS_COMMANDS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1068
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1069 if (!sessionid) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1070 sessionid = generate_session_id("set-status");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1071 xmlnode_put_attrib(command, "sessionid", sessionid);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1072 g_free(sessionid);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1073 xmlnode_put_attrib(command, "status", "executing");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1074
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1075 x = xmlnode_insert_tag(command, "x");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1076 xmlnode_put_attrib(x, "type", "form");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1077 xmlnode_put_attrib(x, "xmlns", "jabber:x:data");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1078
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1079 y = xmlnode_insert_tag(x, "title");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1080 xmlnode_insert_cdata(y, "Change Status", -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1081
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1082 y = xmlnode_insert_tag(x, "instructions");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1083 xmlnode_insert_cdata(y, "Choose the status and status message", -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1084
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1085 // TODO see if factorisation is possible
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1086 // (with xmlnode_insert_dataform_result_message)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1087 y = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1088 xmlnode_put_attrib(y, "type", "hidden");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1089 xmlnode_put_attrib(y, "var", "FORM_TYPE");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1090
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1091 xmlnode value = xmlnode_insert_tag(y, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1092 xmlnode_insert_cdata(value, "http://jabber.org/protocol/rc", -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1093
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1094 y = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1095 xmlnode_put_attrib(y, "type", "list-single");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1096 xmlnode_put_attrib(y, "var", "status");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1097 xmlnode_put_attrib(y, "label", "Status");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1098 xmlnode_insert_tag(y, "required");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1099
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1100 value = xmlnode_insert_tag(y, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1101 // TODO current status
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1102 xmlnode_insert_cdata(value, "online", -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1103 for (s = adhoc_status_list; s->name; s++) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1104 xmlnode option = xmlnode_insert_tag(y, "option");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1105 value = xmlnode_insert_tag(option, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1106 xmlnode_insert_cdata(value, s->name, -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1107 xmlnode_put_attrib(option, "label", s->description);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1108 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1109 // TODO add priority ?
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1110 // I do not think this is useful, user should not have to care of the
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1111 // priority like gossip and gajim do (misc)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1112 y = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1113 xmlnode_put_attrib(y, "type", "text-multi");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1114 xmlnode_put_attrib(y, "var", "status-message");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1115 xmlnode_put_attrib(y, "label", "Message");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1116 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1117 else // (if sessionid)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1118 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1119 y = xmlnode_get_tag(x, "x?xmlns=jabber:x:data");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1120 if (y) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1121 char *value, *message;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1122 value = xmlnode_get_tag_data(xmlnode_get_tag(y, "field?var=status"),
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1123 "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1124 message = xmlnode_get_tag_data(xmlnode_get_tag(y,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1125 "field?var=status-message"), "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1126 for (s = adhoc_status_list; !s->name || strcmp(s->name, value); s++);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1127 if (s->name) {
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1128 char *status = g_strdup_printf("%s %s", s->status,
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1129 message ? message : "");
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1130 setstatus(NULL, status);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1131 g_free(status);
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1132 xmlnode_put_attrib(command, "status", "completed");
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1133 xmlnode_put_attrib(iq, "type", "result");
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1134 xmlnode_insert_dataform_result_message(command,
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1135 "Status has been changed");
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1136 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1137 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1138 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1139 xmlnode_put_attrib(iq, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1140 xmlnode_put_attrib(iq, "id", id);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1141 jab_send(jc, iq);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1142 xmlnode_free(iq);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1143 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1144
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1145 static void _callback_foreach_buddy_groupchat(gpointer rosterdata, void *param)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1146 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1147 xmlnode value;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1148 xmlnode *field;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1149 const char *room_jid, *nickname;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1150 char *desc;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1151
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1152 room_jid = buddy_getjid(rosterdata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1153 if (!room_jid) return;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1154 nickname = buddy_getnickname(rosterdata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1155 if (!nickname) return;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1156 field = param;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1157
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1158 xmlnode option = xmlnode_insert_tag(*field, "option");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1159 value = xmlnode_insert_tag(option, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1160 xmlnode_insert_cdata(value, room_jid, -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1161 desc = g_strdup_printf("%s on %s", nickname, room_jid);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1162 xmlnode_put_attrib(option, "label", desc);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1163 g_free(desc);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1164 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1165
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1166 static void handle_iq_command_leave_groupchats(jconn conn, char *from,
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1167 const char *id, xmlnode xmldata)
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1168 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1169 char *action, *node, *sessionid;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1170 xmlnode iq, command, x;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1171
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1172 x = xmlnode_get_tag(xmldata, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1173 action = xmlnode_get_attrib(x, "action");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1174 node = xmlnode_get_attrib(x, "node");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1175 sessionid = xmlnode_get_attrib(x, "sessionid");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1176
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1177 iq = xmlnode_new_tag("iq");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1178 command = xmlnode_insert_tag(iq, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1179 xmlnode_put_attrib(command, "node", node);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1180 xmlnode_put_attrib(command, "xmlns", NS_COMMANDS);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1181
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1182 if (!sessionid) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1183 sessionid = generate_session_id("leave-groupchats");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1184 xmlnode_put_attrib(command, "sessionid", sessionid);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1185 g_free(sessionid);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1186 xmlnode_put_attrib(command, "status", "executing");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1187
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1188 x = xmlnode_insert_tag(command, "x");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1189 xmlnode_put_attrib(x, "type", "form");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1190 xmlnode_put_attrib(x, "xmlns", "jabber:x:data");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1191
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1192 xmlnode title = xmlnode_insert_tag(x, "title");
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1193 xmlnode_insert_cdata(title, "Leave groupchat(s)", -1);
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1194
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1195 xmlnode instructions = xmlnode_insert_tag(x, "instructions");
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1196 xmlnode_insert_cdata(instructions, "What groupchats do you want to leave?",
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1197 -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1198
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1199 xmlnode field = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1200 xmlnode_put_attrib(field, "type", "hidden");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1201 xmlnode_put_attrib(field, "var", "FORM_TYPE");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1202
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1203 xmlnode value = xmlnode_insert_tag(field, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1204 xmlnode_insert_cdata(value, "http://jabber.org/protocol/rc", -1);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1205
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1206 field = xmlnode_insert_tag(x, "field");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1207 xmlnode_put_attrib(field, "type", "list-multi");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1208 xmlnode_put_attrib(field, "var", "groupchats");
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1209 xmlnode_put_attrib(field, "label", "Groupchats: ");
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1210 xmlnode_insert_tag(field, "required");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1211
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1212 foreach_buddy(ROSTER_TYPE_ROOM, &_callback_foreach_buddy_groupchat, &field);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1213 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1214 else // (if sessionid)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1215 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1216 xmlnode form = xmlnode_get_tag(x, "x?xmlns=jabber:x:data");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1217 if (form) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1218 xmlnode_put_attrib(command, "status", "completed");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1219 xmlnode gc = xmlnode_get_tag(form, "field?var=groupchats");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1220 xmlnode x;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1221
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1222 for (x = xmlnode_get_firstchild(gc) ; x ; x = xmlnode_get_nextsibling(x))
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1223 {
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1224 char* to_leave = xmlnode_get_tag_data(x, "value");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1225 if (to_leave) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1226 GList* b = buddy_search_jid(to_leave);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1227 if (b)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1228 room_leave(b->data, "Asked by remote command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1229 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1230 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1231 xmlnode_put_attrib(iq, "type", "result");
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1232 xmlnode_insert_dataform_result_message(command,
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1233 "Groupchats have been left");
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1234 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1235 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1236 xmlnode_put_attrib(iq, "to", xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1237 xmlnode_put_attrib(iq, "id", id);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1238 jab_send(jc, iq);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1239 xmlnode_free(iq);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1240 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1241
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1242 static void handle_iq_commands(jconn conn, char *from, const char *id,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1243 xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1244 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1245 jid requester_jid;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1246 xmlnode x;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1247 const struct adhoc_command *command;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1248
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1249 requester_jid = jid_new(conn->p, xmlnode_get_attrib(xmldata, "from"));
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1250 x = xmlnode_get_tag(xmldata, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1251 if (!jid_cmpx(conn->user, requester_jid, JID_USER | JID_SERVER) ) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1252 char *action, *node;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1253 action = xmlnode_get_attrib(x, "action");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1254 node = xmlnode_get_attrib(x, "node");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1255 // action can be NULL, in which case it seems to take the default,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1256 // ie execute
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1257 if (!action || !strcmp(action, "execute") || !strcmp(action, "cancel")
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1258 || !strcmp(action, "next") || !strcmp(action, "complete")) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1259 for (command = adhoc_command_list; command->name; command++) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1260 if (!strcmp(node, command->name))
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1261 command->callback(conn, from, id, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1262 }
1159
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1263 // "prev" action will get there, as we do not implement it,
53c0c5be43fa Small fixes, typos and cleanups
Mikael Berthe <mikael@lilotux.net>
parents: 1158
diff changeset
1264 // and do not authorize it
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1265 } else {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1266 send_iq_commands_malformed_action(conn, from, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1267 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1268 } else {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1269 send_iq_forbidden(conn, from, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1270 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1271 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1272
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1273 static void handle_iq_disco_items(jconn conn, char *from, const char *id,
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1274 xmlnode xmldata)
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1275 {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1276 xmlnode x;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1277 char *node;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1278 x = xmlnode_get_tag(xmldata, "query");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1279 node = xmlnode_get_attrib(x, "node");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1280 if (node) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1281 if (!strcmp(node, NS_COMMANDS)) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1282 handle_iq_commands_list(conn, from, id, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1283 } else {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1284 send_iq_not_implemented(conn, from, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1285 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1286 } else {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1287 // not sure about this one
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1288 send_iq_not_implemented(conn, from, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1289 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1290 }
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1291
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1292 // disco_info_set_ext(ansquery, ext)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1293 // Add features attributes to ansquery for extension ext.
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1294 static void disco_info_set_ext(xmlnode ansquery, const char *ext)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1295 {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1296 char *nodename;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1297 nodename = g_strdup_printf("%s#%s", MCABBER_CAPS_NODE, ext);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1298 xmlnode_put_attrib(ansquery, "node", nodename);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1299 g_free(nodename);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1300 if (!strcasecmp(ext, "csn")) {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1301 // I guess it's ok to send this even if it's not compiled in.
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1302 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1303 "var", NS_CHATSTATES);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1304 }
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1305 if (!strcasecmp(ext, "iql")) {
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1306 // I guess it's ok to send this even if it's not compiled in.
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1307 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1308 "var", NS_LAST);
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1309 }
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1310 }
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1311
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1312 // disco_info_set_default(ansquery, entitycaps)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1313 // Add features attributes to ansquery. If entitycaps is TRUE, assume
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1314 // that we're answering an Entity Caps request (if not, the request was
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1315 // a basic discovery query).
1218
ab5de2ed2b7e Simplify entity_version()
Mikael Berthe <mikael@lilotux.net>
parents: 1217
diff changeset
1316 // Please change the entity version string if you modify mcabber disco
ab5de2ed2b7e Simplify entity_version()
Mikael Berthe <mikael@lilotux.net>
parents: 1217
diff changeset
1317 // source code, so that it doesn't conflict with the upstream client.
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1318 static void disco_info_set_default(xmlnode ansquery, guint entitycaps)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1319 {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1320 xmlnode y;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1321 char *eversion;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1322
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1323 eversion = g_strdup_printf("%s#%s", MCABBER_CAPS_NODE, entity_version());
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1324 xmlnode_put_attrib(ansquery, "node", eversion);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1325 g_free(eversion);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1326
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1327 y = xmlnode_insert_tag(ansquery, "identity");
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1328 xmlnode_put_attrib(y, "category", "client");
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1329 xmlnode_put_attrib(y, "type", "pc");
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1330 xmlnode_put_attrib(y, "name", PACKAGE_NAME);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1331
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1332 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1333 "var", NS_DISCO_INFO);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1334 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1335 "var", NS_MUC);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1336 #ifdef JEP0085
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1337 // Advertise ChatStates only if we're not using Entity Capabilities
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1338 if (!entitycaps)
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1339 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1340 "var", NS_CHATSTATES);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1341 #endif
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1342 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1343 "var", NS_TIME);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1344 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1345 "var", NS_VERSION);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1346 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1347 "var", NS_PING);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1348 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1349 "var", NS_COMMANDS);
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1350 if (!entitycaps)
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1351 xmlnode_put_attrib(xmlnode_insert_tag(ansquery, "feature"),
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
1352 "var", NS_LAST);
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1353 }
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1354
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1355 static void handle_iq_disco_info(jconn conn, char *from, const char *id,
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1356 xmlnode xmldata)
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1357 {
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1358 xmlnode x;
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1359 xmlnode myquery;
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1360 char *node;
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1361
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1362 x = jutil_iqnew(JPACKET__RESULT, NS_DISCO_INFO);
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1363 xmlnode_put_attrib(x, "id", id);
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1364 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1365 myquery = xmlnode_get_tag(x, "query");
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1366
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1367 node = xmlnode_get_attrib(xmlnode_get_tag(xmldata, "query"), "node");
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1368 if (node && startswith(node, MCABBER_CAPS_NODE "#", FALSE)) {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1369 const char *param = node+strlen(MCABBER_CAPS_NODE)+1;
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1370 if (!strcmp(param, entity_version()))
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1371 disco_info_set_default(myquery, TRUE); // client#version
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1372 else
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1373 disco_info_set_ext(myquery, param); // client#extension
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1374 } else {
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1375 // Basic discovery request
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1376 disco_info_set_default(myquery, FALSE);
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
1377 }
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1378
1134
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1379 jab_send(jc, x);
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1380 xmlnode_free(x);
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1381 }
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1382
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1383 inline double seconds_since_last_use(void)
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1384 {
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1385 return difftime(time(NULL), iqlast);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1386 }
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1387
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1388 static void handle_iq_last(jconn conn, char *from, const char *id,
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1389 xmlnode xmldata)
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1390 {
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1391 xmlnode x;
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1392 xmlnode myquery;
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1393 char *seconds;
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1394
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1395 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ last time request from <%s>",
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1396 from);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1397
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1398 x = jutil_iqnew(JPACKET__RESULT, NS_LAST);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1399 xmlnode_put_attrib(x, "id", id);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1400 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1401 myquery = xmlnode_get_tag(x, "query");
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1402 seconds = g_strdup_printf("%.0f", seconds_since_last_use());
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1403 xmlnode_put_attrib(myquery, "seconds", seconds);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1404 g_free(seconds);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1405
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1406 jab_send(jc, x);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1407 xmlnode_free(x);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1408 }
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1409
1134
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1410 static void handle_iq_ping(jconn conn, char *from, const char *id,
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1411 xmlnode xmldata)
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1412 {
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1413 xmlnode x;
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1414 x = jutil_iqresult(xmldata);
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1415 jab_send(jc, x);
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1416 }
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1417
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1418 static void handle_iq_version(jconn conn, char *from, const char *id,
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1419 xmlnode xmldata)
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1420 {
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1421 xmlnode x;
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1422 xmlnode myquery;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1423 char *os = NULL;
814
109dcf5fc111 Use hgcset (if available) when answering to IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 782
diff changeset
1424 char *ver = mcabber_version();
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1425
692
d3511f846d47 Cosmetics (line wrapping)
Mikael Berthe <mikael@lilotux.net>
parents: 691
diff changeset
1426 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ version request from <%s>",
d3511f846d47 Cosmetics (line wrapping)
Mikael Berthe <mikael@lilotux.net>
parents: 691
diff changeset
1427 from);
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1428
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1429 if (!settings_opt_get_int("iq_version_hide_os")) {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1430 struct utsname osinfo;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1431 uname(&osinfo);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1432 os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release,
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1433 osinfo.machine);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1434 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1435
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1436 x = jutil_iqnew(JPACKET__RESULT, NS_VERSION);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1437 xmlnode_put_attrib(x, "id", id);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1438 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1439 myquery = xmlnode_get_tag(x, "query");
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1440
814
109dcf5fc111 Use hgcset (if available) when answering to IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 782
diff changeset
1441 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "name"), PACKAGE_NAME, -1);
109dcf5fc111 Use hgcset (if available) when answering to IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 782
diff changeset
1442 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "version"), ver, -1);
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1443 if (os) {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1444 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "os"), os, -1);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1445 g_free(os);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1446 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1447
814
109dcf5fc111 Use hgcset (if available) when answering to IQ:version requests
Mikael Berthe <mikael@lilotux.net>
parents: 782
diff changeset
1448 g_free(ver);
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1449 jab_send(jc, x);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1450 xmlnode_free(x);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1451 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1452
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1453 // This function borrows some code from the Gaim project
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1454 static void handle_iq_time(jconn conn, char *from, const char *id,
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1455 xmlnode xmldata)
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1456 {
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1457 xmlnode x;
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1458 xmlnode myquery;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1459 char *buf, *utf8_buf;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1460 time_t now_t;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1461 struct tm *now;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1462
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1463 time(&now_t);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1464
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1465 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ time request from <%s>", from);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1466
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1467 buf = g_new0(char, 512);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1468
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1469 x = jutil_iqnew(JPACKET__RESULT, NS_TIME);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1470 xmlnode_put_attrib(x, "id", id);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1471 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1472 myquery = xmlnode_get_tag(x, "query");
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1473
703
8cbcbff8de7d Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
1474 now = gmtime(&now_t);
8cbcbff8de7d Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
1475
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1476 strftime(buf, 512, "%Y%m%dT%T", now);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1477 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "utc"), buf, -1);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1478
703
8cbcbff8de7d Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
1479 now = localtime(&now_t);
8cbcbff8de7d Fix UTC time in IQ:version queries
Mikael Berthe <mikael@lilotux.net>
parents: 699
diff changeset
1480
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1481 strftime(buf, 512, "%Z", now);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1482 if ((utf8_buf = to_utf8(buf))) {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1483 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "tz"), utf8_buf, -1);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1484 g_free(utf8_buf);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1485 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1486
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1487 strftime(buf, 512, "%d %b %Y %T", now);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1488 if ((utf8_buf = to_utf8(buf))) {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1489 xmlnode_insert_cdata(xmlnode_insert_tag(myquery, "display"), utf8_buf, -1);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1490 g_free(utf8_buf);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1491 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1492
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1493 jab_send(jc, x);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1494 xmlnode_free(x);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1495 g_free(buf);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1496 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1497
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1498 // This function borrows some code from the Gaim project
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1499 static void handle_iq_get(jconn conn, char *from, xmlnode xmldata)
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1500 {
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1501 const char *id, *ns;
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1502 xmlnode x;
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1503 guint iq_not_implemented = FALSE;
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1504
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1505 id = xmlnode_get_attrib(xmldata, "id");
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1506 if (!id) {
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1507 scr_LogPrint(LPRINT_LOG, "IQ get stanza with no ID, ignored.");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1508 return;
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1509 }
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1510
1134
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1511 x = xmlnode_get_tag(xmldata, "ping");
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1512 ns = xmlnode_get_attrib(x, "xmlns");
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1513 if (ns && !strcmp(ns, NS_PING)) {
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1514 handle_iq_ping(conn, from, id, xmldata);
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1515 return;
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1516 }
995dde656033 Response to XMPP Ping (XEP-0199)
misc@mandriva.org
parents: 1058
diff changeset
1517
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1518 x = xmlnode_get_tag(xmldata, "query");
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1519 ns = xmlnode_get_attrib(x, "xmlns");
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1520 if (ns && !strcmp(ns, NS_DISCO_INFO)) {
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1521 handle_iq_disco_info(conn, from, id, xmldata);
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1522 } else if (ns && !strcmp(ns, NS_DISCO_ITEMS)) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1523 handle_iq_disco_items(conn, from, id, xmldata);
995
c89e7993c4d9 Answer IQ disco#info queries
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1524 } else if (ns && !strcmp(ns, NS_VERSION)) {
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1525 handle_iq_version(conn, from, id, xmldata);
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1526 } else if (ns && !strcmp(ns, NS_LAST) &&
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1527 !settings_opt_get_int("iq_last_disable")) {
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1224
diff changeset
1528 handle_iq_last(conn, from, id, xmldata);
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1529 } else if (ns && !strcmp(ns, NS_TIME)) {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1530 handle_iq_time(conn, from, id, xmldata);
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1531 } else {
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1532 iq_not_implemented = TRUE;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1533 }
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1534
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1535 if (!iq_not_implemented)
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1536 return;
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1537
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1538 send_iq_not_implemented(conn, from, xmldata);
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1539 }
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1540
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1541 static void handle_iq_set(jconn conn, char *from, xmlnode xmldata)
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1542 {
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1543 const char *id, *ns;
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1544 xmlnode x;
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1545 guint iq_not_implemented = FALSE;
595
0c1d37300862 IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents: 582
diff changeset
1546
0c1d37300862 IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents: 582
diff changeset
1547 id = xmlnode_get_attrib(xmldata, "id");
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1548 if (!id)
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1549 scr_LogPrint(LPRINT_LOG, "IQ set stanza with no ID...");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1550
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1551 x = xmlnode_get_tag(xmldata, "query");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1552 ns = xmlnode_get_attrib(x, "xmlns");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1553 if (ns && !strcmp(ns, NS_ROSTER)) {
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1554 handle_iq_roster(x);
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1555 } else {
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1556 x = xmlnode_get_tag(xmldata, "command");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1557 ns = xmlnode_get_attrib(x, "xmlns");
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1558 if (ns && !strcmp(ns, NS_COMMANDS)) {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1559 handle_iq_commands(conn, from, id, xmldata);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1560 } else {
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1561 iq_not_implemented = TRUE;
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1562 }
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1563 }
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1564
595
0c1d37300862 IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents: 582
diff changeset
1565 if (!id) return;
0c1d37300862 IQ: send feature-not-implemented error stanzas
Mikael Berthe <mikael@lilotux.net>
parents: 582
diff changeset
1566
619
44ddf9bec3a5 Answer IQ:version & IQ:time requests
Mikael Berthe <mikael@lilotux.net>
parents: 613
diff changeset
1567 if (!iq_not_implemented) {
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1568 x = xmlnode_new_tag("iq");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1569 xmlnode_put_attrib(x, "to", xmlnode_get_attrib(xmldata, "from"));
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1570 xmlnode_put_attrib(x, "type", "result");
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1571 xmlnode_put_attrib(x, "id", id);
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1572 jab_send(conn, x);
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1573 xmlnode_free(x);
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1574 } else {
1158
c30c315dc447 XEP-0146 support (Remote Controlling Clients)
misc@mandriva.org
parents: 1134
diff changeset
1575 send_iq_not_implemented(conn, from, xmldata);
607
cf722bff6579 Improve IQ management
Mikael Berthe <mikael@lilotux.net>
parents: 606
diff changeset
1576 }
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1577 }
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1578
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1579 void handle_packet_iq(jconn conn, char *type, char *from, xmlnode xmldata)
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1580 {
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1581 if (!type)
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1582 return;
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1583
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1584 if (!strcmp(type, "result")) {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1585 handle_iq_result(conn, from, xmldata);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1586 } else if (!strcmp(type, "get")) {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1587 handle_iq_get(conn, from, xmldata);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1588 } else if (!strcmp(type, "set")) {
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1589 handle_iq_set(conn, from, xmldata);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1590 } else if (!strcmp(type, TMSG_ERROR)) {
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
1591 // Display a message only if the error isn't caught by a callback.
577
5c6d364130ee Move IQ Jabber stuff to a separate file
Mikael Berthe <mikael@lilotux.net>
parents: 576
diff changeset
1592 xmlnode x = xmlnode_get_tag(xmldata, TMSG_ERROR);
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
1593 if (iqs_callback(xmlnode_get_attrib(xmldata, "id"), x, IQS_CONTEXT_ERROR))
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1594 display_server_error(x);
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1595 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1596 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1597
1008
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1598 // send_storage_bookmarks()
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1599 // Send the current bookmarks node to update the server.
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1600 // Note: the sender should check we're online.
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1601 void send_storage_bookmarks(void)
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1602 {
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1603 eviqs *iqn;
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1604
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1605 if (!bookmarks) return;
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1606
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1607 iqn = iqs_new(JPACKET__SET, NS_PRIVATE, "storage", IQS_DEFAULT_TIMEOUT);
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1608 xmlnode_insert_node(xmlnode_get_tag(iqn->xmldata, "query"), bookmarks);
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1609
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1610 jab_send(jc, iqn->xmldata);
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1611 iqs_del(iqn->id); // XXX
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1612 }
bbf53cd43fbb Functions to update room bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1006
diff changeset
1613
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1614 // send_storage_rosternotes()
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1615 // Send the current rosternotes node to update the server.
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1616 // Note: the sender should check we're online.
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1617 void send_storage_rosternotes(void)
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1618 {
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1619 eviqs *iqn;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1620
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1621 if (!rosternotes) return;
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1622
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1623 iqn = iqs_new(JPACKET__SET, NS_PRIVATE, "storage", IQS_DEFAULT_TIMEOUT);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1624 xmlnode_insert_node(xmlnode_get_tag(iqn->xmldata, "query"), rosternotes);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1625
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1626 jab_send(jc, iqn->xmldata);
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1627 iqs_del(iqn->id); // XXX
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1628 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
1629
580
fed6d1e4d7a9 Fix modelines
Mikael Berthe <mikael@lilotux.net>
parents: 578
diff changeset
1630 /* vim: set expandtab cindent cinoptions=>2\:2(0: For Vim users... */