annotate mcabber/mcabber/xmpp_iq.c @ 1909:9c14153e2580

Do not display unhandled IQ result messages to the log window We display the message only in the debug log file, because these messages are usually ignored anyway (ideally we would create a handler explicitly when sending the initial IQ request). Thanks to VarLog for the report!
author Mikael Berthe <mikael@lilotux.net>
date Sun, 18 Apr 2010 14:14:05 +0200
parents e6d355e50d7a
children fba12c1f6386
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
1 /*
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
2 * xmpp_iq.c -- Jabber protocol IQ-related stuff
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
3 *
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
4 * Copyright (C) 2008-2010 Frank Zschockelt <mcabber@freakysoft.de>
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
5 * Copyright (C) 2005-2010 Mikael Berthe <mikael@lilotux.net>
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
6 * Parts come from the centericq project:
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
7 * Copyright (C) 2002-2005 by Konstantin Klyagin <konst@konst.org.ua>
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
8 * Some small parts come from the Pidgin project <http://pidgin.im/>
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
9 *
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
10 * This program is free software; you can redistribute it and/or modify
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
11 * it under the terms of the GNU General Public License as published by
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or (at
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
13 * your option) any later version.
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
14 *
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
15 * This program is distributed in the hope that it will be useful, but
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
18 * General Public License for more details.
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
19 *
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
20 * You should have received a copy of the GNU General Public License
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
21 * along with this program; if not, write to the Free Software
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
23 * USA
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
24 */
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
25
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
26 #include <string.h>
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
27 #include <sys/utsname.h>
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
28
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
29 #include "xmpp_helper.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
30 #include "commands.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
31 #include "screen.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
32 #include "utils.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
33 #include "logprint.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
34 #include "settings.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
35 #include "caps.h"
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1652
diff changeset
36 #include "main.h"
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
37
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
38 extern struct xmpp_error xmpp_errors[];
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
39
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
40 static LmHandlerResult handle_iq_command_set_status(LmMessageHandler *h,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
41 LmConnection *c,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
42 LmMessage *m,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
43 gpointer ud);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
44
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
45 static LmHandlerResult handle_iq_command_leave_groupchats(LmMessageHandler *h,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
46 LmConnection *c,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
47 LmMessage *m,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
48 gpointer ud);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
49
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
50 inline double seconds_since_last_use(void);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
51
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
52 struct adhoc_command {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
53 char *name;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
54 char *description;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
55 bool only_for_self;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
56 LmHandleMessageFunction callback;
1378
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
57 };
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
58
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
59 const struct adhoc_command adhoc_command_list[] = {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
60 { "http://jabber.org/protocol/rc#set-status",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
61 "Change client status",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
62 1,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
63 &handle_iq_command_set_status },
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
64 { "http://jabber.org/protocol/rc#leave-groupchats",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
65 "Leave groupchat(s)",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
66 1,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
67 &handle_iq_command_leave_groupchats },
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
68 { NULL, NULL, 0, NULL },
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
69 };
1383
d9606bd03144 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1381
diff changeset
70
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
71 struct adhoc_status {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
72 char *name; // the name used by adhoc
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
73 char *description;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
74 char *status; // the string, used by setstus
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
75 };
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
76 // It has to match imstatus of roster.h!
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
77 const struct adhoc_status adhoc_status_list[] = {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
78 {"offline", "Offline", "offline"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
79 {"online", "Online", "avail"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
80 {"chat", "Chat", "free"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
81 {"dnd", "Do not disturb", "dnd"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
82 {"xd", "Extended away", "notavail"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
83 {"away", "Away", "away"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
84 {"invisible", "Invisible", "invisible"},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
85 {NULL, NULL, NULL},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
86 };
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 294
diff changeset
87
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
88 static char *generate_session_id(char *prefix)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
89 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
90 char *result;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
91 static int counter = 0;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
92 counter++;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
93 // TODO better use timestamp?
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
94 result = g_strdup_printf("%s-%i", prefix, counter);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
95 return result;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
96 }
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
97
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
98 static LmMessage *lm_message_new_iq_error(LmMessage *m, guint error)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
99 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
100 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
101 LmMessageNode *err;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
102 int i;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
103
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
104 for (i = 0; xmpp_errors[i].code; ++i)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
105 if (xmpp_errors[i].code == error)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
106 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
107 g_return_val_if_fail(xmpp_errors[i].code > 0, NULL);
298
35cda94e570d Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents: 294
diff changeset
108
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
109 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_ERROR);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
110 err = lm_message_node_add_child(r->node, "error", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
111 lm_message_node_set_attribute(err, "code", xmpp_errors[i].code_str);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
112 lm_message_node_set_attribute(err, "type", xmpp_errors[i].type);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
113 lm_message_node_set_attribute
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
114 (lm_message_node_add_child(err,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
115 xmpp_errors[i].condition, NULL),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
116 "xmlns", NS_XMPP_STANZAS);
634
f3c05d5fe459 Send "</stream:stream>" when disconnecting from the server
Mikael Berthe <mikael@lilotux.net>
parents: 633
diff changeset
117
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
118 return r;
436
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 430
diff changeset
119 }
802da817a684 Add /rawxml command
Mikael Berthe <mikael@lilotux.net>
parents: 430
diff changeset
120
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
121 void send_iq_error(LmConnection *c, LmMessage *m, guint error)
1001
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
122 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
123 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
124 r = lm_message_new_iq_error(m, error);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
125 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
126 lm_message_unref(r);
1001
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
127 }
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
128
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
129 static void lm_message_node_add_dataform_result(LmMessageNode *node,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
130 const char *message)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
131 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
132 LmMessageNode *x, *field;
939
12fa2ae6445d Get rid of "busy-waiting" (Christof Meerwald)
Mikael Berthe <mikael@lilotux.net>
parents: 924
diff changeset
133
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
134 x = lm_message_node_add_child(node, "x", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
135 lm_message_node_set_attributes(x,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
136 "type", "result",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
137 "xmlns", "jabber:x:data",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
138 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
139 field = lm_message_node_add_child(x, "field", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
140 lm_message_node_set_attributes(field,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
141 "type", "text-single",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
142 "var", "message",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
143 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
144 lm_message_node_add_child(field, "value", message);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
145 }
1439
fd09c95bc2b5 Wake up less often when not connected to the server
Mikael Berthe <mikael@lilotux.net>
parents: 1435
diff changeset
146
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
147 // Dummy handler to ignore IQ response
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
148 LmHandlerResult handle_iq_dummy(LmMessageHandler *h, LmConnection *c,
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
149 LmMessage *m, gpointer ud)
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
150 {
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
151 LmMessageSubType mstype = lm_message_get_sub_type(m);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
152 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) {
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
153 display_server_error(lm_message_node_get_child(m->node, "error"),
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
154 lm_message_get_from(m));
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
155 }
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
156 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
157 }
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
158
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
159 static LmHandlerResult handle_iq_commands_list(LmMessageHandler *h,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
160 LmConnection *c,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
161 LmMessage *m, gpointer ud)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
162 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
163 LmMessage *iq;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
164 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
165 const char *requester_jid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
166 const struct adhoc_command *command;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
167 const char *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
168 gboolean from_self;
940
fc30221b952d Fix an autoaway problem
Mikael Berthe <mikael@lilotux.net>
parents: 939
diff changeset
169
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
170 iq = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
171 query = lm_message_node_add_child(iq->node, "query", NULL);
1667
8af0e0ad20ad Fix some more xmlns attributes in IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1666
diff changeset
172 lm_message_node_set_attribute(query, "xmlns", NS_COMMANDS);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
173 node = lm_message_node_get_attribute
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
174 (lm_message_node_get_child(m->node, "query"),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
175 "node");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
176 if (node)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
177 lm_message_node_set_attribute(query, "node", node);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
178
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
179 requester_jid = lm_message_get_from(m);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
180 from_self = jid_equal(lm_connection_get_jid(c), requester_jid);
686
98de2d166a11 Use the new IQ system for authentication
Mikael Berthe <mikael@lilotux.net>
parents: 684
diff changeset
181
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
182 for (command = adhoc_command_list ; command->name ; command++) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
183 if (!command->only_for_self || from_self) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
184 lm_message_node_set_attributes
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
185 (lm_message_node_add_child(query, "item", NULL),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
186 "node", command->name,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
187 "name", command->description,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
188 "jid", lm_connection_get_jid(c),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
189 NULL);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
190 }
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
191 }
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
192
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
193 lm_connection_send(c, iq, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
194 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
195 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
534
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
196 }
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
197
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
198 static LmHandlerResult handle_iq_command_set_status(LmMessageHandler *h,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
199 LmConnection *c,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
200 LmMessage *m, gpointer ud)
988
6e2bfd1ffded Add ids to message stanzas if needed
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
201 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
202 const char *action, *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
203 char *sessionid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
204 LmMessage *iq;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
205 LmMessageNode *command, *x, *y;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
206 const struct adhoc_status *s;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
207
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
208 x = lm_message_node_get_child(m->node, "command");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
209 action = lm_message_node_get_attribute(x, "action");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
210 node = lm_message_node_get_attribute(x, "node");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
211 sessionid = (char *)lm_message_node_get_attribute(x, "sessionid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
212
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
213 iq = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
214 command = lm_message_node_add_child(iq->node, "command", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
215 lm_message_node_set_attribute(command, "node", node);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
216 lm_message_node_set_attribute(command, "xmlns", NS_COMMANDS);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
217
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
218 if (!sessionid) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
219 sessionid = generate_session_id("set-status");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
220 lm_message_node_set_attribute(command, "sessionid", sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
221 g_free(sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
222 sessionid = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
223 lm_message_node_set_attribute(command, "status", "executing");
988
6e2bfd1ffded Add ids to message stanzas if needed
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
224
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
225 x = lm_message_node_add_child(command, "x", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
226 lm_message_node_set_attribute(x, "type", "form");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
227 lm_message_node_set_attribute(x, "xmlns", "jabber:x:data");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
228
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
229 lm_message_node_add_child(x, "title", "Change Status");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
230
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
231 lm_message_node_add_child(x, "instructions",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
232 "Choose the status and status message");
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
233
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
234 // TODO see if factorisation is possible
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
235 y = lm_message_node_add_child(x, "field", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
236 lm_message_node_set_attribute(y, "type", "hidden");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
237 lm_message_node_set_attribute(y, "var", "FORM_TYPE");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
238
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
239 lm_message_node_add_child(y, "value", "http://jabber.org/protocol/rc");
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
240
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
241 y = lm_message_node_add_child(x, "field", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
242 lm_message_node_set_attributes(y,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
243 "type", "list-single",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
244 "var", "status",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
245 "label", "Status",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
246 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
247 lm_message_node_add_child(y, "required", NULL);
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 470
diff changeset
248
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
249 // XXX: ugly
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
250 lm_message_node_add_child(y, "value",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
251 adhoc_status_list[xmpp_getstatus()].name);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
252 for (s = adhoc_status_list; s->name; s++) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
253 LmMessageNode *option = lm_message_node_add_child(y, "option", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
254 lm_message_node_add_child(option, "value", s->name);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
255 lm_message_node_set_attribute(option, "label", s->description);
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
256 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
257 // TODO add priority ?
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
258 // I do not think this is useful, user should not have to care of the
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
259 // priority like gossip and gajim do (misc)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
260 lm_message_node_set_attributes
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
261 (lm_message_node_add_child(x, "field", NULL),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
262 "type", "text-multi",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
263 "var", "status-message",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
264 "label", "Message",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
265 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
266 } else if (action && !strcmp(action, "cancel")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
267 lm_message_node_set_attribute(command, "status", "canceled");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
268 } else { // (if sessionid and not canceled)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
269 y = lm_message_node_find_xmlns(x, "jabber:x:data"); //x?xmlns=jabber:x:data
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
270 if (y) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
271 const char *value=NULL, *message=NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
272 LmMessageNode *fields, *field;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
273 field = fields = lm_message_node_get_child(y, "field"); //field?var=status
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
274 while (field && strcmp("status",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
275 lm_message_node_get_attribute(field, "var")))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
276 field = field->next;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
277 field = lm_message_node_get_child(field, "value");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
278 if (field)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
279 value = lm_message_node_get_value(field);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
280 field = fields; //field?var=status-message
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
281 while (field && strcmp("status-message",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
282 lm_message_node_get_attribute(field, "var")))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
283 field = field->next;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
284 field = lm_message_node_get_child(field, "value");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
285 if (field)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
286 message = lm_message_node_get_value(field);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
287 if (value) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
288 for (s = adhoc_status_list; !s->name || strcmp(s->name, value); s++);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
289 if (s->name) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
290 char *status = g_strdup_printf("%s %s", s->status,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
291 message ? message : "");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
292 cmd_setstatus(NULL, status);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
293 g_free(status);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
294 lm_message_node_set_attribute(command, "status", "completed");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
295 lm_message_node_add_dataform_result(command,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
296 "Status has been changed");
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
297 }
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
298 }
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
299 }
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
300 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
301 if (sessionid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
302 lm_message_node_set_attribute(command, "sessionid", sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
303 lm_connection_send(c, iq, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
304 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
305 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
306 }
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
307
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
308 static void _callback_foreach_buddy_groupchat(gpointer rosterdata, void *param)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
309 {
1665
1a4890514eb9 Clean up some dead assignments/dead variables
Ulrich Spörlein
parents: 1653
diff changeset
310 LmMessageNode *field, *option;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
311 const char *room_jid, *nickname;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
312 char *desc;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
313
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
314 room_jid = buddy_getjid(rosterdata);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
315 if (!room_jid) return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
316 nickname = buddy_getnickname(rosterdata);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
317 if (!nickname) return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
318 field = param;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
319
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
320 option = lm_message_node_add_child(field, "option", NULL);
1665
1a4890514eb9 Clean up some dead assignments/dead variables
Ulrich Spörlein
parents: 1653
diff changeset
321 lm_message_node_add_child(option, "value", room_jid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
322 desc = g_strdup_printf("%s on %s", nickname, room_jid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
323 lm_message_node_set_attribute(option, "label", desc);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
324 g_free(desc);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
325 }
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
326
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
327 static LmHandlerResult handle_iq_command_leave_groupchats(LmMessageHandler *h,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
328 LmConnection *c,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
329 LmMessage *m,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
330 gpointer ud)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
331 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
332 const char *action, *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
333 char *sessionid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
334 LmMessage *iq;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
335 LmMessageNode *command, *x;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
336
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
337 x = lm_message_node_get_child(m->node, "command");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
338 action = lm_message_node_get_attribute(x, "action");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
339 node = lm_message_node_get_attribute(x, "node");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
340 sessionid = (char*)lm_message_node_get_attribute(x, "sessionid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
341
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
342 iq = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
343 command = lm_message_node_add_child(iq->node, "command", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
344 lm_message_node_set_attributes(command,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
345 "node", node,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
346 "xmlns", NS_COMMANDS,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
347 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
348
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
349 if (!sessionid) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
350 LmMessageNode *field;
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
351
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
352 sessionid = generate_session_id("leave-groupchats");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
353 lm_message_node_set_attribute(command, "sessionid", sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
354 g_free(sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
355 sessionid = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
356 lm_message_node_set_attribute(command, "status", "executing");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
357
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
358 x = lm_message_node_add_child(command, "x", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
359 lm_message_node_set_attributes(x,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
360 "type", "form",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
361 "xmlns", "jabber:x:data",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
362 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
363
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
364 lm_message_node_add_child(x, "title", "Leave groupchat(s)");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
365
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
366 lm_message_node_add_child(x, "instructions",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
367 "What groupchats do you want to leave?");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
368
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
369 field = lm_message_node_add_child(x, "field", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
370 lm_message_node_set_attributes(field,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
371 "type", "hidden",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
372 "var", "FORM_TYPE",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
373 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
374
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
375 lm_message_node_add_child(field, "value",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
376 "http://jabber.org/protocol/rc");
988
6e2bfd1ffded Add ids to message stanzas if needed
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
377
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
378 field = lm_message_node_add_child(x, "field", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
379 lm_message_node_set_attributes(field,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
380 "type", "list-multi",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
381 "var", "groupchats",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
382 "label", "Groupchats: ",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
383 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
384 lm_message_node_add_child(field, "required", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
385
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
386 foreach_buddy(ROSTER_TYPE_ROOM, &_callback_foreach_buddy_groupchat, field);
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
387 // TODO: return an error if we are not connected to groupchats
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
388 } else if (action && !strcmp(action, "cancel")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
389 lm_message_node_set_attribute(command, "status", "canceled");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
390 } else { // (if sessionid and not canceled)
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
391 LmMessageNode *form = lm_message_node_find_xmlns(x, "jabber:x:data");// TODO
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
392 if (form) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
393 LmMessageNode *field;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
394
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
395 lm_message_node_set_attribute(command, "status", "completed");
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
396 // TODO: implement sth. like "field?var=groupchats" in xmlnode...
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
397 field = lm_message_node_get_child(form, "field");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
398 while (field && strcmp("groupchats",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
399 lm_message_node_get_attribute(field, "var")))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
400 field = field->next;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
401
1652
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
402 if (field)
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
403 for (x = field->children ; x ; x = x->next)
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
404 {
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
405 if (!strcmp (x->name, "value")) {
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
406 GList* b = buddy_search_jid(lm_message_node_get_value(x));
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
407 if (b)
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
408 cmd_room_leave(b->data, "Requested by remote command");
8036750d0169 Fix leave_groupchats remote command
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1636
diff changeset
409 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
410 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
411 lm_message_node_add_dataform_result(command,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
412 "Groupchats have been left");
988
6e2bfd1ffded Add ids to message stanzas if needed
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
413 }
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
414 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
415 if (sessionid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
416 lm_message_node_set_attribute(command, "sessionid", sessionid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
417 lm_connection_send(c, iq, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
418 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
419 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
420 }
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
421
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
422 LmHandlerResult handle_iq_commands(LmMessageHandler *h,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
423 LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
424 LmMessage *m, gpointer ud)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
425 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
426 const char *requester_jid = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
427 LmMessageNode *cmd;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
428 const struct adhoc_command *command;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
429
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
430 // mcabber has only partial XEP-0146 support...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
431 if (LM_MESSAGE_SUB_TYPE_SET != lm_message_get_sub_type(m))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
432 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
433
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
434 requester_jid = lm_message_get_from(m);
988
6e2bfd1ffded Add ids to message stanzas if needed
Mikael Berthe <mikael@lilotux.net>
parents: 987
diff changeset
435
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
436 cmd = lm_message_node_get_child(m->node, "command");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
437 if (jid_equal(lm_connection_get_jid(c), requester_jid)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
438 const char *action, *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
439 action = lm_message_node_get_attribute(cmd, "action");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
440 node = lm_message_node_get_attribute(cmd, "node");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
441 // action can be NULL, in which case it seems to take the default,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
442 // ie execute
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
443 if (!action || !strcmp(action, "execute") || !strcmp(action, "cancel")
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
444 || !strcmp(action, "next") || !strcmp(action, "complete")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
445 for (command = adhoc_command_list; command->name; command++) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
446 if (!strcmp(node, command->name))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
447 command->callback(h, c, m, ud);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
448 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
449 // "prev" action will get there, as we do not implement it,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
450 // and do not authorize it
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
451 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
452 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
453 LmMessageNode *err;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
454 r = lm_message_new_iq_error(m, XMPP_ERROR_BAD_REQUEST);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
455 err = lm_message_node_get_child(r->node, "error");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
456 lm_message_node_set_attribute
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
457 (lm_message_node_add_child(err, "malformed-action", NULL),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
458 "xmlns", NS_COMMANDS);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
459 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
460 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
461 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
462 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
463 send_iq_error(c, m, XMPP_ERROR_FORBIDDEN);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
464 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
465 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 33
diff changeset
466 }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 33
diff changeset
467
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
468
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
469 LmHandlerResult handle_iq_disco_items(LmMessageHandler *h,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
470 LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
471 LmMessage *m, gpointer ud)
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
472 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
473 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
474 const char *node;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
475 query = lm_message_node_get_child(m->node, "query");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
476 node = lm_message_node_get_attribute(query, "node");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
477 if (node) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
478 if (!strcmp(node, NS_COMMANDS)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
479 return handle_iq_commands_list(NULL, c, m, ud);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
480 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
481 send_iq_error(c, m, XMPP_ERROR_NOT_IMPLEMENTED);
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
482 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
483 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
484 // not sure about this one
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
485 send_iq_error(c, m, XMPP_ERROR_NOT_IMPLEMENTED);
205
e01bf6d9b4b8 [/trunk] Changeset 217 by mikael
mikael
parents: 194
diff changeset
486 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
487 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1395
d431cd75eb53 Use bookmarked nickname when manually joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 1385
diff changeset
488 }
d431cd75eb53 Use bookmarked nickname when manually joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 1385
diff changeset
489
d431cd75eb53 Use bookmarked nickname when manually joining a room
Mikael Berthe <mikael@lilotux.net>
parents: 1385
diff changeset
490
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
491 void _disco_add_feature_helper(gpointer data, gpointer user_data)
1163
2913310a7be6 Make /roster bookmark in the status buffer show all bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1161
diff changeset
492 {
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
493 LmMessageNode *node = user_data;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
494 lm_message_node_set_attribute
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
495 (lm_message_node_add_child(node, "feature", NULL), "var", data);
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
496 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
497
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
498 // disco_info_set_caps(ansquery, entitycaps)
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
499 // Add features attributes to ansquery. entitycaps should either be a
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
500 // valid capabilities hash or NULL. If it is NULL, the node attribute won't
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
501 // be added to the query child and Entity Capabilities will be announced
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
502 // as a feature.
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
503 // Please change the entity version string if you modify mcabber disco
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
504 // source code, so that it doesn't conflict with the upstream client.
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
505 static void disco_info_set_caps(LmMessageNode *ansquery,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
506 const char *entitycaps)
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
507 {
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
508 if (entitycaps) {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
509 char *eversion;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
510 eversion = g_strdup_printf("%s#%s", MCABBER_CAPS_NODE, entitycaps);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
511 lm_message_node_set_attribute(ansquery, "node", eversion);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
512 g_free(eversion);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
513 }
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
514
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
515 lm_message_node_set_attributes
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
516 (lm_message_node_add_child(ansquery, "identity", NULL),
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
517 "category", "client",
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
518 "name", PACKAGE_STRING,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
519 "type", "pc",
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
520 NULL);
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
521
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
522 if (entitycaps)
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
523 caps_foreach_feature(entitycaps, _disco_add_feature_helper, ansquery);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
524 else {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
525 caps_foreach_feature(entity_version(xmpp_getstatus()),
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
526 _disco_add_feature_helper,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
527 ansquery);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
528 lm_message_node_set_attribute
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
529 (lm_message_node_add_child(ansquery, "feature", NULL),
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
530 "var", NS_CAPS);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
531 }
1016
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
532 }
4d3c48844746 Add /roster note
Mikael Berthe <mikael@lilotux.net>
parents: 1015
diff changeset
533
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
534 LmHandlerResult handle_iq_disco_info(LmMessageHandler *h,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
535 LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
536 LmMessage *m, gpointer ud)
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
537 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
538 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
539 LmMessageNode *query, *tmp;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
540 const char *node = NULL;
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
541 const char *param = NULL;
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
542
1636
e38300775548 Do not reply to disco "result" IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
543 if (lm_message_get_sub_type(m) == LM_MESSAGE_SUB_TYPE_RESULT)
e38300775548 Do not reply to disco "result" IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
544 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
e38300775548 Do not reply to disco "result" IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
545
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
546 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
547 query = lm_message_node_add_child(r->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
548 lm_message_node_set_attribute(query, "xmlns", NS_DISCO_INFO);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
549 tmp = lm_message_node_find_child(m->node, "query");
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
550 if (tmp) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
551 node = lm_message_node_get_attribute(tmp, "node");
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
552 param = node+strlen(MCABBER_CAPS_NODE)+1;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
553 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
554 if (node && startswith(node, MCABBER_CAPS_NODE "#", FALSE))
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
555 disco_info_set_caps(query, param); // client#version
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
556 else
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
557 // Basic discovery request
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
558 disco_info_set_caps(query, NULL);
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
559
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
560 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
561 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
562 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
625
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 624
diff changeset
563 }
028c01940490 Show presence timestamps in "/info" and "/room whois"
Mikael Berthe <mikael@lilotux.net>
parents: 624
diff changeset
564
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
565 LmHandlerResult handle_iq_roster(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
566 LmMessage *m, gpointer ud)
579
0c67755e0fa7 Introduce a handle_presence_muc() function
Mikael Berthe <mikael@lilotux.net>
parents: 578
diff changeset
567 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
568 LmMessageNode *y;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
569 const char *fjid, *name, *group, *sub, *ask;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
570 char *cleanalias;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
571 enum subscr esub;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
572 int need_refresh = FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
573 guint roster_type;
581
ad07c868ff43 Tell the user when he or she has been kicked/banned
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
574
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
575 y = lm_message_node_find_child(lm_message_node_find_xmlns(m->node, NS_ROSTER),
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
576 "item");
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1668
diff changeset
577 for ( ; y; y = y->next) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
578 char *name_tmp = NULL;
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
579
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
580 fjid = lm_message_node_get_attribute(y, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
581 name = lm_message_node_get_attribute(y, "name");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
582 sub = lm_message_node_get_attribute(y, "subscription");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
583 ask = lm_message_node_get_attribute(y, "ask");
581
ad07c868ff43 Tell the user when he or she has been kicked/banned
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
584
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
585 if (lm_message_node_find_child(y, "group"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
586 group = lm_message_node_get_value(lm_message_node_find_child(y, "group"));
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
587 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
588 group = NULL;
1396
8f9928839a36 Automatically unlock new rooms (suggested by Michael Weiser)
Mikael Berthe <mikael@lilotux.net>
parents: 1395
diff changeset
589
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
590 if (!fjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
591 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
592
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
593 cleanalias = jidtodisp(fjid);
579
0c67755e0fa7 Introduce a handle_presence_muc() function
Mikael Berthe <mikael@lilotux.net>
parents: 578
diff changeset
594
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
595 esub = sub_none;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
596 if (sub) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
597 if (!strcmp(sub, "to")) esub = sub_to;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
598 else if (!strcmp(sub, "from")) esub = sub_from;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
599 else if (!strcmp(sub, "both")) esub = sub_both;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
600 else if (!strcmp(sub, "remove")) esub = sub_remove;
583
32ae027a3238 MUC: clean up departure message code
Mikael Berthe <mikael@lilotux.net>
parents: 581
diff changeset
601 }
581
ad07c868ff43 Tell the user when he or she has been kicked/banned
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
602
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
603 if (esub == sub_remove) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
604 roster_del_user(cleanalias);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
605 scr_LogPrint(LPRINT_LOGNORM, "Buddy <%s> has been removed "
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
606 "from the roster", cleanalias);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
607 g_free(cleanalias);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
608 need_refresh = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
609 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
610 }
583
32ae027a3238 MUC: clean up departure message code
Mikael Berthe <mikael@lilotux.net>
parents: 581
diff changeset
611
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
612 if (ask && !strcmp(ask, "subscribe"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
613 esub |= sub_pending;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
614
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
615 if (!name) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
616 if (!settings_opt_get_int("roster_hide_domain")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
617 name = cleanalias;
583
32ae027a3238 MUC: clean up departure message code
Mikael Berthe <mikael@lilotux.net>
parents: 581
diff changeset
618 } else {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
619 char *p;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
620 name = name_tmp = g_strdup(cleanalias);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
621 p = strchr(name_tmp, JID_DOMAIN_SEPARATOR);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
622 if (p) *p = '\0';
581
ad07c868ff43 Tell the user when he or she has been kicked/banned
Mikael Berthe <mikael@lilotux.net>
parents: 580
diff changeset
623 }
583
32ae027a3238 MUC: clean up departure message code
Mikael Berthe <mikael@lilotux.net>
parents: 581
diff changeset
624 }
32ae027a3238 MUC: clean up departure message code
Mikael Berthe <mikael@lilotux.net>
parents: 581
diff changeset
625
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
626 // Tricky... :-\ My guess is that if there is no JID_DOMAIN_SEPARATOR,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
627 // this is an agent.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
628 if (strchr(cleanalias, JID_DOMAIN_SEPARATOR))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
629 roster_type = ROSTER_TYPE_USER;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
630 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
631 roster_type = ROSTER_TYPE_AGENT;
1377
cd9182f0b5c7 Add /room setopt {print_status,auto_whois}
Mikael Berthe <mikael@lilotux.net>
parents: 1365
diff changeset
632
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
633 roster_add_user(cleanalias, name, group, roster_type, esub, 1);
579
0c67755e0fa7 Introduce a handle_presence_muc() function
Mikael Berthe <mikael@lilotux.net>
parents: 578
diff changeset
634
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
635 g_free(name_tmp);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
636 g_free(cleanalias);
1446
49c8be874344 Add option 'ignore_self_presence'
Mikael Berthe <mikael@lilotux.net>
parents: 1439
diff changeset
637 }
49c8be874344 Add option 'ignore_self_presence'
Mikael Berthe <mikael@lilotux.net>
parents: 1439
diff changeset
638
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
639 buddylist_build();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
640 update_roster = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
641 if (need_refresh)
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
642 scr_update_buddy_window();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
643 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
644 }
644
68fb0c1dfb15 MUC: better nickname check when entering a room
Mikael Berthe <mikael@lilotux.net>
parents: 643
diff changeset
645
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
646 LmHandlerResult handle_iq_ping(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
647 LmMessage *m, gpointer ud)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
648 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
649 LmMessage *r;
644
68fb0c1dfb15 MUC: better nickname check when entering a room
Mikael Berthe <mikael@lilotux.net>
parents: 643
diff changeset
650
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
651 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
652 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
653 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
654 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
655 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
656
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
657 double seconds_since_last_use(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
658 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
659 return difftime(time(NULL), iqlast);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
660 }
644
68fb0c1dfb15 MUC: better nickname check when entering a room
Mikael Berthe <mikael@lilotux.net>
parents: 643
diff changeset
661
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
662 LmHandlerResult handle_iq_last(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
663 LmMessage *m, gpointer ud)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
664 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
665 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
666 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
667 char *seconds;
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
668
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
669 if (!settings_opt_get_int("iq_hide_requests")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
670 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ last time request from <%s>",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
671 lm_message_get_from(m));
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
672 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
673
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
674 if (settings_opt_get_int("iq_last_disable") ||
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
675 (settings_opt_get_int("iq_last_disable_when_notavail") &&
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
676 xmpp_getstatus() == notavail))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
677 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
678 send_iq_error(c, m, XMPP_ERROR_SERVICE_UNAVAILABLE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
679 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
680 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
681
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
682 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
683 query = lm_message_node_add_child(r->node, "query", NULL);
1667
8af0e0ad20ad Fix some more xmlns attributes in IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1666
diff changeset
684 lm_message_node_set_attribute(query, "xmlns", NS_LAST);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
685 seconds = g_strdup_printf("%.0f", seconds_since_last_use());
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
686 lm_message_node_set_attribute(query, "seconds", seconds);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
687 g_free(seconds);
1236
f7b35b1c343d Fix a roster bug when receiving a MUC invitation
Mikael Berthe <mikael@lilotux.net>
parents: 1215
diff changeset
688
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
689 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
690 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
691 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
692 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
693
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
694 LmHandlerResult handle_iq_version(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
695 LmMessage *m, gpointer ud)
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
696 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
697 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
698 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
699 char *os = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
700 char *ver = mcabber_version();
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
701
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
702 if (!settings_opt_get_int("iq_hide_requests")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
703 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ version request from <%s>",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
704 lm_message_get_from(m));
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
705 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
706 if (!settings_opt_get_int("iq_version_hide_os")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
707 struct utsname osinfo;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
708 uname(&osinfo);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
709 os = g_strdup_printf("%s %s %s", osinfo.sysname, osinfo.release,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
710 osinfo.machine);
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
711 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
712
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
713 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
714
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
715 query = lm_message_node_add_child(r->node, "query", NULL);
1666
68c57f52d05a Fix iq version reply (issue #42, patch from foxfell)
Mikael Berthe <mikael@lilotux.net>
parents: 1665
diff changeset
716 lm_message_node_set_attribute(query, "xmlns", NS_VERSION);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
717
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
718 lm_message_node_add_child(query, "name", PACKAGE_NAME);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
719 lm_message_node_add_child(query, "version", ver);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
720 if (os) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
721 lm_message_node_add_child(query, "os", os);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
722 g_free(os);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
723 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
724
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
725 g_free(ver);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
726 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
727 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
728 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
729 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
730
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
731 // This function borrows some code from the Pidgin project
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
732 LmHandlerResult handle_iq_time(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
733 LmMessage *m, gpointer ud)
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
734 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
735 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
736 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
737 char *buf, *utf8_buf;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
738 time_t now_t;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
739 struct tm *now;
1528
4b4b3948420c MUC fix: the topic couldn't be cleared
Mikael Berthe <mikael@lilotux.net>
parents: 1525
diff changeset
740
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
741 time(&now_t);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
742
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
743 if (!settings_opt_get_int("iq_hide_requests")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
744 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ time request from <%s>",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
745 lm_message_get_from(m));
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
746 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
747
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
748 buf = g_new0(char, 512);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
749
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
750 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
751 query = lm_message_node_add_child(r->node, "query", NULL);
1667
8af0e0ad20ad Fix some more xmlns attributes in IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1666
diff changeset
752 lm_message_node_set_attribute(query, "xmlns", NS_TIME);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
753
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
754 now = gmtime(&now_t);
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
755
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
756 strftime(buf, 512, "%Y%m%dT%T", now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
757 lm_message_node_add_child(query, "utc", buf);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
758
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
759 now = localtime(&now_t);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
760
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
761 strftime(buf, 512, "%Z", now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
762 if ((utf8_buf = to_utf8(buf))) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
763 lm_message_node_add_child(query, "tz", utf8_buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
764 g_free(utf8_buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
765 }
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
766
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
767 strftime(buf, 512, "%d %b %Y %T", now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
768 if ((utf8_buf = to_utf8(buf))) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
769 lm_message_node_add_child(query, "display", utf8_buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
770 g_free(utf8_buf);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
771 }
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
772
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
773 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
774 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
775 g_free(buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
776 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
777 }
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
778
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
779 // This function borrows some code from the Pidgin project
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
780 LmHandlerResult handle_iq_time202(LmMessageHandler *h, LmConnection *c,
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1600
diff changeset
781 LmMessage *m, gpointer ud)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
782 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
783 LmMessage *r;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
784 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
785 char *buf, *utf8_buf;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
786 time_t now_t;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
787 struct tm *now;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
788 char const *sign;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
789 int diff = 0;
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
790
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
791 time(&now_t);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
792
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
793 if (!settings_opt_get_int("iq_hide_requests")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
794 scr_LogPrint(LPRINT_LOGNORM, "Received an IQ time request from <%s>",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
795 lm_message_get_from(m));
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
796 }
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
797
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
798 buf = g_new0(char, 512);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
799
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
800 r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_RESULT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
801 query = lm_message_node_add_child(r->node, "time", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
802 lm_message_node_set_attribute(query, "xmlns", NS_XMPP_TIME);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
803
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
804 now = localtime(&now_t);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
805
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
806 if (now->tm_isdst >= 0) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
807 #if defined HAVE_TM_GMTOFF
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
808 diff = now->tm_gmtoff;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
809 #elif defined HAVE_TIMEZONE
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
810 tzset();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
811 diff = -timezone;
989
859ab76e5093 Send JEP-22 delivered messages
Mikael Berthe <mikael@lilotux.net>
parents: 988
diff changeset
812 #endif
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
813 }
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
814
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
815 if (diff < 0) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
816 sign = "-";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
817 diff = -diff;
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
818 } else {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
819 sign = "+";
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
820 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
821 diff /= 60;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
822 snprintf(buf, 512, "%c%02d:%02d", *sign, diff / 60, diff % 60);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
823 if ((utf8_buf = to_utf8(buf))) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
824 lm_message_node_add_child(query, "tzo", utf8_buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
825 g_free(utf8_buf);
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
826 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
827
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
828 now = gmtime(&now_t);
818
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
829
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
830 strftime(buf, 512, "%Y-%m-%dT%TZ", now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
831 lm_message_node_add_child(query, "utc", buf);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
832
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
833 lm_connection_send(c, r, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
834 lm_message_unref(r);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
835 g_free(buf);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
836 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
837 }
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
838
1615
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
839 LmHandlerResult handle_iq_vcard(LmMessageHandler *h, LmConnection *c,
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
840 LmMessage *m, gpointer ud)
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
841 {
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
842 send_iq_error(c, m, XMPP_ERROR_SERVICE_UNAVAILABLE);
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
843 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
844 }
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
845
1811
e6d355e50d7a Update Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
846 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */