annotate mcabber/mcabber/xmpp.c @ 2225:dc3b3ac1ba76

Free the buffdata structures when buffers are closed Free the buffdata strcutures when buffers are closed and there are no more users (these structures can be shared if the "symlink" shared history is used).
author Mikael Berthe <mikael@lilotux.net>
date Sat, 07 Nov 2015 12:21:12 +0100
parents 0c78d31c753d
children f5659f0f9db8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
1 /*
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
2 * xmpp.c -- Jabber protocol handling
393
f8f3c7493457 Whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 387
diff changeset
3 *
2134
fc7a758ebbde Remove deprecated options comments, update headers
Mikael Berthe <mikael@lilotux.net>
parents: 2118
diff changeset
4 * Copyright (C) 2008-2014 Frank Zschockelt <mcabber@freakysoft.de>
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
5 * Copyright (C) 2005-2015 Mikael Berthe <mikael@lilotux.net>
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
6 * Parts come from the centericq project:
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
7 * Copyright (C) 2002-2005 by Konstantin Klyagin <konst@konst.org.ua>
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
8 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or (at
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
12 * your option) any later version.
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
13 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful, but
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
17 * General Public License for more details.
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
18 *
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
22 * USA
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
23 */
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
24 #include <stdlib.h>
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
25 #include <string.h>
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
26
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
27 #include "xmpp.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
28 #include "xmpp_helper.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
29 #include "xmpp_iq.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
30 #include "xmpp_iqrequest.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
31 #include "xmpp_muc.h"
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
32 #include "xmpp_s10n.h"
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
33 #include "caps.h"
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
34 #include "events.h"
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
35 #include "histolog.h"
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
36 #include "hooks.h"
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
37 #include "otr.h"
81
0bd578421ce9 [/trunk] Changeset 95 by mikael
mikael
parents: 52
diff changeset
38 #include "roster.h"
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
39 #include "screen.h"
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
40 #include "settings.h"
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
41 #include "utils.h"
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1647
diff changeset
42 #include "main.h"
2118
51fde9c25401 Reset carbons when the connection is closed
Mikael Berthe <mikael@lilotux.net>
parents: 2113
diff changeset
43 #include "carbons.h"
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
44
1001
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
45 #define RECONNECTION_TIMEOUT 60L
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
46
2203
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
47 #define FINGERPRINT_LENGTH 16 // Currently Loudmouth only supports MD5
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
48
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
49 LmConnection* lconnection = NULL;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
50 static guint AutoConnection;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
51
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
52 inline void update_last_use(void);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
53 inline gboolean xmpp_reconnect();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
54
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
55 enum imstatus mystatus = offline;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
56 static enum imstatus mywantedstatus = available;
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
57 gchar *mystatusmsg;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
58
353
3fe43f6daa5a Make imstatus2char a null-terminated string
Mikael Berthe <mikael@lilotux.net>
parents: 325
diff changeset
59 char imstatus2char[imstatus_size+1] = {
1311
0dda8238af21 Implement "/roster display"
Mikael Berthe <mikael@lilotux.net>
parents: 1310
diff changeset
60 '_', 'o', 'f', 'd', 'n', 'a', 'i', '\0'
46
f22e1d120606 [/trunk] Changeset 62 by mikael
mikael
parents: 43
diff changeset
61 };
f22e1d120606 [/trunk] Changeset 62 by mikael
mikael
parents: 43
diff changeset
62
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
63 char *imstatus_showmap[] = {
1378
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
64 "",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
65 "",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
66 "chat",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
67 "dnd",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
68 "xa",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
69 "away",
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
70 ""
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
71 };
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
72
1604
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
73 LmMessageNode *bookmarks = NULL;
351427ef0b4b Remove #include's of C files
Mikael Berthe <mikael@lilotux.net>
parents: 1602
diff changeset
74 LmMessageNode *rosternotes = NULL;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
75
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
76 static struct IqHandlers
116
1e7e59775f12 [/trunk] Changeset 130 by mikael
mikael
parents: 114
diff changeset
77 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
78 const gchar *xmlns;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
79 LmHandleMessageFunction handler;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
80 } iq_handlers[] = {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
81 {NS_PING, &handle_iq_ping},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
82 {NS_VERSION, &handle_iq_version},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
83 {NS_TIME, &handle_iq_time},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
84 {NS_ROSTER, &handle_iq_roster},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
85 {NS_XMPP_TIME, &handle_iq_time202},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
86 {NS_LAST, &handle_iq_last},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
87 {NS_DISCO_INFO, &handle_iq_disco_info},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
88 {NS_DISCO_ITEMS,&handle_iq_disco_items},
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
89 {NS_COMMANDS, &handle_iq_commands},
1615
171ae5a258fa Add dummy vcard IQ handler
Mikael Berthe <mikael@lilotux.net>
parents: 1614
diff changeset
90 {NS_VCARD, &handle_iq_vcard},
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
91 {NULL, NULL}
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
92 };
519
5c338d31de56 Show current global status message in "/status"
Mikael Berthe <mikael@lilotux.net>
parents: 513
diff changeset
93
1558
3df441efb7c2 Fix gcc warnings related to inline/static uses
Mikael Berthe <mikael@lilotux.net>
parents: 1546
diff changeset
94 void update_last_use(void)
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
95 {
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
96 iqlast = time(NULL);
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
97 }
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
98
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
99 gboolean xmpp_is_online(void)
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
100 {
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
101 if (lconnection && lm_connection_is_authenticated(lconnection))
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
102 return TRUE;
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
103 else
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
104 return FALSE;
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
105 }
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
106
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
107 // Note: the caller should check the jid is correct
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
108 void xmpp_addbuddy(const char *bjid, const char *name, const char *group)
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
109 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
110 LmMessageNode *query, *y;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
111 LmMessage *iq;
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
112 LmMessageHandler *handler;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
113 char *cleanjid;
1255
ceada40bbe20 Update Entity Capabilities (add iq:last)
Mikael Berthe <mikael@lilotux.net>
parents: 1254
diff changeset
114
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
115 if (!xmpp_is_online())
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
116 return;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
117
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
118 cleanjid = jidtodisp(bjid); // Stripping resource, just in case...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
119
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
120 // We don't check if the jabber user already exists in the roster,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
121 // because it allows to re-ask for notification.
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
122
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
123 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
124 LM_MESSAGE_SUB_TYPE_SET);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
125 query = lm_message_node_add_child(iq->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
126 lm_message_node_set_attribute(query, "xmlns", NS_ROSTER);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
127 y = lm_message_node_add_child(query, "item", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
128 lm_message_node_set_attribute(y, "jid", cleanjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
129
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
130 if (name)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
131 lm_message_node_set_attribute(y, "name", name);
1215
80c095886fb5 Entity Capabilities support (XEP-0115)
Mikael Berthe <mikael@lilotux.net>
parents: 1213
diff changeset
132
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
133 if (group)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
134 lm_message_node_add_child(y, "group", group);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
135
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
136 handler = lm_message_handler_new(handle_iq_dummy, NULL, FALSE);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
137 lm_connection_send_with_reply(lconnection, iq, handler, NULL);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
138 lm_message_handler_unref(handler);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
139 lm_message_unref(iq);
532
2ac8d8e49e81 Send status changes to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 531
diff changeset
140
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
141 xmpp_send_s10n(cleanjid, LM_MESSAGE_SUB_TYPE_SUBSCRIBE);
532
2ac8d8e49e81 Send status changes to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 531
diff changeset
142
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
143 roster_add_user(cleanjid, name, group, ROSTER_TYPE_USER, sub_pending, -1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
144 g_free(cleanjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
145 buddylist_build();
532
2ac8d8e49e81 Send status changes to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 531
diff changeset
146
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
147 update_roster = TRUE;
532
2ac8d8e49e81 Send status changes to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 531
diff changeset
148 }
2ac8d8e49e81 Send status changes to chatrooms
Mikael Berthe <mikael@lilotux.net>
parents: 531
diff changeset
149
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
150 void xmpp_updatebuddy(const char *bjid, const char *name, const char *group)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
151 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
152 LmMessage *iq;
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
153 LmMessageHandler *handler;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
154 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
155 char *cleanjid;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
156
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
157 if (!xmpp_is_online())
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
158 return;
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 441
diff changeset
159
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
160 // XXX We should check name's and group's correctness
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
161
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
162 cleanjid = jidtodisp(bjid); // Stripping resource, just in case...
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
163
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
164 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
165 LM_MESSAGE_SUB_TYPE_SET);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
166 x = lm_message_node_add_child(iq->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
167 lm_message_node_set_attribute(x, "xmlns", NS_ROSTER);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
168 x = lm_message_node_add_child(x, "item", NULL);
1937
118524e9d7b6 Fix "/rename -" (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1920
diff changeset
169 lm_message_node_set_attribute(x, "jid", cleanjid);
118524e9d7b6 Fix "/rename -" (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1920
diff changeset
170 if (name)
118524e9d7b6 Fix "/rename -" (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1920
diff changeset
171 lm_message_node_set_attribute(x, "name", name);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
172
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
173 if (group)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
174 lm_message_node_add_child(x, "group", group);
1419
fb438482b28e New option to customize the away/notavail priority (Michael Gehring)
Mikael Berthe <mikael@lilotux.net>
parents: 1415
diff changeset
175
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
176 handler = lm_message_handler_new(handle_iq_dummy, NULL, FALSE);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
177 lm_connection_send_with_reply(lconnection, iq, handler, NULL);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
178 lm_message_handler_unref(handler);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
179 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
180 g_free(cleanjid);
534
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
181 }
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
182
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
183 void xmpp_delbuddy(const char *bjid)
534
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
184 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
185 LmMessageNode *y, *z;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
186 LmMessage *iq;
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
187 LmMessageHandler *handler;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
188 char *cleanjid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
189
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
190 if (!xmpp_is_online())
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
191 return;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
192
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
193 cleanjid = jidtodisp(bjid); // Stripping resource, just in case...
534
3569d38f7bbb Add presnew()
Mikael Berthe <mikael@lilotux.net>
parents: 533
diff changeset
194
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
195 // If the current buddy is an agent, unsubscribe from it
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
196 if (roster_gettype(cleanjid) == ROSTER_TYPE_AGENT) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
197 scr_LogPrint(LPRINT_LOGNORM, "Unregistering from the %s agent", cleanjid);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
198
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
199 iq = lm_message_new_with_sub_type(cleanjid, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
200 LM_MESSAGE_SUB_TYPE_SET);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
201 y = lm_message_node_add_child(iq->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
202 lm_message_node_set_attribute(y, "xmlns", NS_REGISTER);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
203 lm_message_node_add_child(y, "remove", NULL);
1994
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
204 handler = lm_message_handler_new(handle_iq_dummy, NULL, FALSE);
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
205 lm_connection_send_with_reply(lconnection, iq, handler, NULL);
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
206 lm_message_handler_unref(handler);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
207 lm_message_unref(iq);
1014
99c5278bf6b8 Keep the status and status messages when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1013
diff changeset
208 }
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
209
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
210 // Cancel the subscriptions
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1728
diff changeset
211 xmpp_send_s10n(cleanjid, LM_MESSAGE_SUB_TYPE_UNSUBSCRIBED); // cancel "from"
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1728
diff changeset
212 xmpp_send_s10n(cleanjid, LM_MESSAGE_SUB_TYPE_UNSUBSCRIBE); // cancel "to"
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
213
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
214 // Ask for removal from roster
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
215 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
216 LM_MESSAGE_SUB_TYPE_SET);
444
5927c3bfba13 Add /status_to command
Mikael Berthe <mikael@lilotux.net>
parents: 441
diff changeset
217
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
218 y = lm_message_node_add_child(iq->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
219 lm_message_node_set_attribute(y, "xmlns", NS_ROSTER);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
220 z = lm_message_node_add_child(y, "item", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
221 lm_message_node_set_attributes(z,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
222 "jid", cleanjid,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
223 "subscription", "remove",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
224 NULL);
1701
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
225 handler = lm_message_handler_new(handle_iq_dummy, NULL, FALSE);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
226 lm_connection_send_with_reply(lconnection, iq, handler, NULL);
44e023ad99ed Add dummy handler for roster manipulation IQ responses
Mikael Berthe <mikael@lilotux.net>
parents: 1693
diff changeset
227 lm_message_handler_unref(handler);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
228 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
229
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
230 roster_del_user(cleanjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
231 g_free(cleanjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
232 buddylist_build();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
233
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
234 update_roster = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
235 }
1365
c7e709719c43 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1363
diff changeset
236
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
237 void xmpp_request(const char *fjid, enum iqreq_type reqtype)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
238 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
239 GSList *resources, *p_res;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
240 GSList *roster_elt;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
241 const char *strreqtype, *xmlns;
1722
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
242 gboolean vcard2user;
1365
c7e709719c43 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1363
diff changeset
243
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
244 if (reqtype == iqreq_version) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
245 xmlns = NS_VERSION;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
246 strreqtype = "version";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
247 } else if (reqtype == iqreq_time) {
2017
87049d55e34f Fix /request time
Mikael Berthe <mikael@lilotux.net>
parents: 2013
diff changeset
248 xmlns = NS_XMPP_TIME;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
249 strreqtype = "time";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
250 } else if (reqtype == iqreq_last) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
251 xmlns = NS_LAST;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
252 strreqtype = "last";
1705
ac881b5f9248 Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
253 } else if (reqtype == iqreq_ping) {
ac881b5f9248 Add /request ping (XEP-0199), by merging isbear's module
Mikael Berthe <mikael@lilotux.net>
parents: 1701
diff changeset
254 xmlns = NS_PING;
1711
3a1afbfb28dd Fix typo introduced in ac881b5f9248 (s/last/ping)
franky
parents: 1705
diff changeset
255 strreqtype = "ping";
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
256 } else if (reqtype == iqreq_vcard) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
257 xmlns = NS_VCARD;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
258 strreqtype = "vCard";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
259 } else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
260 return;
1365
c7e709719c43 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1363
diff changeset
261
1722
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
262 // Is it a vCard request to a regular user?
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
263 // (vCard requests are sent to bare JIDs, except in MUC rooms...)
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
264 vcard2user = (reqtype == iqreq_vcard &&
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
265 !roster_find(fjid, jidsearch, ROSTER_TYPE_ROOM));
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
266
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
267 if (strchr(fjid, JID_RESOURCE_SEPARATOR) || vcard2user) {
b18142457ca9 Fix vCard requests in MUC rooms
Mikael Berthe <mikael@lilotux.net>
parents: 1721
diff changeset
268 // This is a full JID or a vCard request to a contact
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
269 xmpp_iq_request(fjid, xmlns);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
270 scr_LogPrint(LPRINT_NORMAL, "Sent %s request to <%s>", strreqtype, fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
271 return;
521
cc8c969ab6e5 "/status" changes
Mikael Berthe <mikael@lilotux.net>
parents: 519
diff changeset
272 }
713
b5aa7b7afee8 Update status lines
Mikael Berthe <mikael@lilotux.net>
parents: 706
diff changeset
273
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
274 // The resource has not been specified
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
275 roster_elt = roster_find(fjid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_ROOM);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
276 if (!roster_elt) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
277 scr_LogPrint(LPRINT_NORMAL, "No known resource for <%s>...", fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
278 xmpp_iq_request(fjid, xmlns); // Let's send a request anyway...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
279 scr_LogPrint(LPRINT_NORMAL, "Sent %s request to <%s>", strreqtype, fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
280 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
281 }
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
282
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
283 // Send a request to each resource
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
284 resources = buddy_getresources(roster_elt->data);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
285 if (!resources) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
286 scr_LogPrint(LPRINT_NORMAL, "No known resource for <%s>...", fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
287 xmpp_iq_request(fjid, xmlns); // Let's send a request anyway...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
288 scr_LogPrint(LPRINT_NORMAL, "Sent %s request to <%s>", strreqtype, fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
289 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
290 for (p_res = resources ; p_res ; p_res = g_slist_next(p_res)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
291 gchar *fulljid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
292 fulljid = g_strdup_printf("%s/%s", fjid, (char*)p_res->data);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
293 xmpp_iq_request(fulljid, xmlns);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
294 scr_LogPrint(LPRINT_NORMAL, "Sent %s request to <%s>", strreqtype, fulljid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
295 g_free(fulljid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
296 g_free(p_res->data);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
297 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
298 g_slist_free(resources);
1014
99c5278bf6b8 Keep the status and status messages when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1013
diff changeset
299 }
99c5278bf6b8 Keep the status and status messages when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1013
diff changeset
300
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
301 // xmpp_send_msg(jid, text, type, subject,
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
302 // otrinject, *encrypted, type_overwrite, *xep184)
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
303 // When encrypted is not NULL, the function set *encrypted to 1 if the
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
304 // message has been PGP (or OTR) -encrypted. If encryption enforcement is set
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
305 // and encryption fails, *encrypted is set to -1.
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
306 // otrinject should be set to FALSE (unless the message already has an OTR
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
307 // payload, i.e. if the function is called from an otr.c routine).
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
308 void xmpp_send_msg(const char *fjid, const char *text, int type,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
309 const char *subject, gboolean otrinject, gint *encrypted,
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
310 LmMessageSubType type_overwrite, gpointer *xep184)
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 33
diff changeset
311 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
312 LmMessage *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
313 LmMessageSubType subtype;
1304
8ada97e5eb75 Fix a gcc warning
Mikael Berthe <mikael@lilotux.net>
parents: 1299
diff changeset
314 #ifdef HAVE_LIBOTR
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
315 int otr_msg = 0;
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
316 char *otr_msg_string = NULL;
1304
8ada97e5eb75 Fix a gcc warning
Mikael Berthe <mikael@lilotux.net>
parents: 1299
diff changeset
317 #endif
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
318 char *barejid;
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
319 #if defined HAVE_GPGME || defined XEP0085
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
320 char *rname;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
321 GSList *sl_buddy;
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
322 #endif
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
323 #ifdef XEP0085
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
324 LmMessageNode *event;
1998
41667bc02883 Fix GCC warnings (variables set but not used)
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1994
diff changeset
325 struct xep0085 *xep85 = NULL;
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
326 #endif
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
327 gchar *enc = NULL;
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
328
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
329 if (encrypted)
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
330 *encrypted = 0;
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
331
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
332 if (!xmpp_is_online())
1435
9bf7f3ddff10 Do not send a groupchat-style message when changing a MUC room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
333 return;
9bf7f3ddff10 Do not send a groupchat-style message when changing a MUC room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
334
9bf7f3ddff10 Do not send a groupchat-style message when changing a MUC room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
335 if (!text && type == ROSTER_TYPE_USER)
9bf7f3ddff10 Do not send a groupchat-style message when changing a MUC room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1426
diff changeset
336 return;
472
75442262c082 Disable some commands when not connected
Mikael Berthe <mikael@lilotux.net>
parents: 470
diff changeset
337
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
338 if (type_overwrite != LM_MESSAGE_SUB_TYPE_NOT_SET)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
339 subtype = type_overwrite;
1305
9bc68473f8a3 -n and -f flags to message-sending commands
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1304
diff changeset
340 else {
9bc68473f8a3 -n and -f flags to message-sending commands
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1304
diff changeset
341 if (type == ROSTER_TYPE_ROOM)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
342 subtype = LM_MESSAGE_SUB_TYPE_GROUPCHAT;
1305
9bc68473f8a3 -n and -f flags to message-sending commands
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1304
diff changeset
343 else
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
344 subtype = LM_MESSAGE_SUB_TYPE_CHAT;
1305
9bc68473f8a3 -n and -f flags to message-sending commands
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1304
diff changeset
345 }
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
346
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
347 barejid = jidtodisp(fjid);
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
348 #if defined HAVE_GPGME || defined HAVE_LIBOTR || defined XEP0085
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
349 rname = strchr(fjid, JID_RESOURCE_SEPARATOR);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
350 sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER);
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
351
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
352 // If we can get a resource name, we use it. Else we use NULL,
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
353 // which hopefully will give us the most likely resource.
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
354 if (rname)
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
355 rname++;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
356
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
357 #ifdef HAVE_LIBOTR
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
358 if (otr_enabled() && !otrinject) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
359 if (type == ROSTER_TYPE_USER) {
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
360 otr_msg_string = otr_send(text, barejid, &otr_msg);
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
361 if (!otr_msg_string) {
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
362 if (encrypted)
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
363 *encrypted = -1;
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
364 goto xmpp_send_msg_return;
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
365 }
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
366 text = otr_msg_string;
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
367 }
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
368 if (otr_msg && encrypted)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
369 *encrypted = ENCRYPTED_OTR;
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
370 }
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
371 #endif
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
372
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
373 #ifdef HAVE_GPGME
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
374 if (type == ROSTER_TYPE_USER && sl_buddy && gpg_enabled()) {
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
375 if (!settings_pgp_getdisabled(barejid)) { // not disabled for this contact?
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
376 guint force;
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
377 struct pgp_data *res_pgpdata;
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
378 force = settings_pgp_getforce(barejid);
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
379 res_pgpdata = buddy_resource_pgp(sl_buddy->data, rname);
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
380 if (force || (res_pgpdata && res_pgpdata->sign_keyid)) {
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
381 /* Remote client has PGP support (we have a signature)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
382 * OR encryption is enforced (force = TRUE).
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
383 * If the contact has a specific KeyId, we'll use it;
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
384 * if not, we'll use the key used for the signature.
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
385 * Both keys should match, in theory (cf. XEP-0027). */
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
386 const char *key;
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
387 key = settings_pgp_getkeyid(barejid);
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
388 if (!key && res_pgpdata)
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
389 key = res_pgpdata->sign_keyid;
2187
e3b66c8ead4f PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents: 2167
diff changeset
390 if (key) {
2188
84252c616919 PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2187
diff changeset
391 int nkeys = 1;
84252c616919 PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2187
diff changeset
392 const char *keys[] = { key, 0 };
2195
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
393 if (carbons_enabled())
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
394 keys[nkeys++] = gpg_get_private_key_id();
2188
84252c616919 PGP: Encrypt messages with our own PGP key when carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2187
diff changeset
395 enc = gpg_encrypt(text, keys, nkeys);
2187
e3b66c8ead4f PGP: Change gpg_encrypt() so that several encryption keys can be used
Mikael Berthe <mikael@lilotux.net>
parents: 2167
diff changeset
396 }
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
397 if (!enc && force) {
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
398 if (encrypted)
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
399 *encrypted = -1;
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
400 goto xmpp_send_msg_return;
1197
6f602d3270a4 Add /pgp [-]force
Mikael Berthe <mikael@lilotux.net>
parents: 1194
diff changeset
401 }
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
402 }
1065
230dca34dbea Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents: 1058
diff changeset
403 }
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
404 }
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
405 #endif // HAVE_GPGME
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
406
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
407 #endif // HAVE_GPGME || defined XEP0085
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
408
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
409 x = lm_message_new_with_sub_type(fjid, LM_MESSAGE_TYPE_MESSAGE, subtype);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
410 lm_message_node_add_child(x->node, "body",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
411 enc ? "This message is PGP-encrypted." : text);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
412
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
413 if (subject)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
414 lm_message_node_add_child(x->node, "subject", subject);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
415
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
416 if (enc) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
417 LmMessageNode *y;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
418 y = lm_message_node_add_child(x->node, "x", enc);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
419 lm_message_node_set_attribute(y, "xmlns", NS_ENCRYPTED);
1055
6eb1efea75d0 PGP: Visual encryption flag
Mikael Berthe <mikael@lilotux.net>
parents: 1053
diff changeset
420 if (encrypted)
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
421 *encrypted = ENCRYPTED_PGP;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
422 g_free(enc);
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
423 }
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
424
2194
f4c00c72b27d Fix compilation when OTR is disabled
Mikael Berthe <mikael@lilotux.net>
parents: 2192
diff changeset
425 #ifdef HAVE_LIBOTR
2152
2ce6dd6861ea Use the Carbons <private/> element for outgoing encrypted messages
Mikael Berthe <mikael@lilotux.net>
parents: 2151
diff changeset
426 // We probably don't want Carbons for encrypted messages, since the other
2ce6dd6861ea Use the Carbons <private/> element for outgoing encrypted messages
Mikael Berthe <mikael@lilotux.net>
parents: 2151
diff changeset
427 // resources won't be able to decrypt them.
2192
cb53950fb1de Do not use <private> for PGP-encrypted outgoing messages
Holger Weiß <holger@zedat.fu-berlin.de>
parents: 2190
diff changeset
428 if (otr_msg && carbons_enabled())
2152
2ce6dd6861ea Use the Carbons <private/> element for outgoing encrypted messages
Mikael Berthe <mikael@lilotux.net>
parents: 2151
diff changeset
429 lm_message_node_add_child(x->node, "private", NS_CARBONS_2);
2194
f4c00c72b27d Fix compilation when OTR is disabled
Mikael Berthe <mikael@lilotux.net>
parents: 2192
diff changeset
430 #endif
2152
2ce6dd6861ea Use the Carbons <private/> element for outgoing encrypted messages
Mikael Berthe <mikael@lilotux.net>
parents: 2151
diff changeset
431
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1728
diff changeset
432 // XEP-0184: Message Receipts
1730
860b58a0e8da Update XEP-0184 support
Mikael Berthe <mikael@lilotux.net>
parents: 1729
diff changeset
433 if (sl_buddy && xep184 &&
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
434 caps_has_feature(buddy_resource_getcaps(sl_buddy->data, rname),
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
435 NS_RECEIPTS, barejid)) {
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
436 lm_message_node_set_attribute(lm_message_node_add_child(x->node, "request",
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
437 NULL),
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
438 "xmlns", NS_RECEIPTS);
2036
f8958ab545ac Make message delivery receipts more backward-compatible
Mikael Berthe <mikael@lilotux.net>
parents: 2033
diff changeset
439 *xep184 = g_strdup(lm_message_get_id(x));
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
440 }
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
441
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
442 #ifdef XEP0085
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
443 // If typing notifications are disabled, we can skip all this stuff...
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
444 if (chatstates_disabled || type == ROSTER_TYPE_ROOM)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
445 goto xmpp_send_msg_no_chatstates;
1044
52cfe9bf9840 Encryption support for outgoing messages
Mikael Berthe <mikael@lilotux.net>
parents: 1043
diff changeset
446
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
447 if (sl_buddy)
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
448 xep85 = buddy_resource_xep85(sl_buddy->data, rname);
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
449
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
450 /* XEP-0085 5.1
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
451 * "Until receiving a reply to the initial content message (or a standalone
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
452 * notification) from the Contact, the User MUST NOT send subsequent chat
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
453 * state notifications to the Contact."
1378
61fc9eddf763 Small code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1377
diff changeset
454 * In our implementation support is initially "unknown", then it's "probed"
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
455 * and can become "ok".
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
456 */
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
457 if (xep85 && (xep85->support == CHATSTATES_SUPPORT_OK ||
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
458 xep85->support == CHATSTATES_SUPPORT_UNKNOWN)) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
459 event = lm_message_node_add_child(x->node, "active", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
460 lm_message_node_set_attribute(event, "xmlns", NS_CHATSTATES);
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
461 if (xep85->support == CHATSTATES_SUPPORT_UNKNOWN)
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
462 xep85->support = CHATSTATES_SUPPORT_PROBED;
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
463 xep85->last_state_sent = ROSTER_EVENT_ACTIVE;
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
464 }
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
465 #endif
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
466
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
467 xmpp_send_msg_no_chatstates:
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
468 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
469 if (mystatus != invisible)
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
470 #endif
1254
401639413340 More jabber:iq:last support... (misc)
Mikael Berthe <mikael@lilotux.net>
parents: 1244
diff changeset
471 update_last_use();
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
472 lm_connection_send(lconnection, x, NULL);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
473 lm_message_unref(x);
2213
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
474
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
475 xmpp_send_msg_return:
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
476 #ifdef HAVE_LIBOTR
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
477 g_free(otr_msg_string);
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
478 #endif
0c78d31c753d Change otr_send() prototype
Mikael Berthe <mikael@lilotux.net>
parents: 2212
diff changeset
479 g_free(barejid);
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 33
diff changeset
480 }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 33
diff changeset
481
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
482 #ifdef XEP0085
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
483 // xmpp_send_xep85_chatstate()
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
484 // Send a XEP-85 chatstate.
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
485 static void xmpp_send_xep85_chatstate(const char *bjid, const char *resname,
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
486 guint state)
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
487 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
488 LmMessage *m;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
489 LmMessageNode *event;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
490 GSList *sl_buddy;
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
491 const char *chattag;
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
492 char *rjid, *fjid = NULL;
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
493 struct xep0085 *xep85 = NULL;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
494
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
495 if (!xmpp_is_online())
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
496 return;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
497
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
498 sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
499
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
500 // If we have a resource name, we use it. Else we use NULL,
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
501 // which hopefully will give us the most likely resource.
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
502 if (sl_buddy)
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
503 xep85 = buddy_resource_xep85(sl_buddy->data, resname);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
504
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
505 if (!xep85 || (xep85->support != CHATSTATES_SUPPORT_OK))
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
506 return;
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
507
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
508 if (state == xep85->last_state_sent)
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
509 return;
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
510
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
511 if (state == ROSTER_EVENT_ACTIVE)
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
512 chattag = "active";
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
513 else if (state == ROSTER_EVENT_COMPOSING)
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
514 chattag = "composing";
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
515 else if (state == ROSTER_EVENT_PAUSED)
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
516 chattag = "paused";
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
517 else {
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
518 scr_LogPrint(LPRINT_LOGNORM, "Error: unsupported XEP-85 state (%d)", state);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
519 return;
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
520 }
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
521
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
522 xep85->last_state_sent = state;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
523
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
524 if (resname)
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
525 fjid = g_strdup_printf("%s/%s", bjid, resname);
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
526
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
527 rjid = resname ? fjid : (char*)bjid;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
528 m = lm_message_new_with_sub_type(rjid, LM_MESSAGE_TYPE_MESSAGE,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
529 LM_MESSAGE_SUB_TYPE_CHAT);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
530
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
531 event = lm_message_node_add_child(m->node, chattag, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
532 lm_message_node_set_attribute(event, "xmlns", NS_CHATSTATES);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
533
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
534 lm_connection_send(lconnection, m, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
535 lm_message_unref(m);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
536
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
537 g_free(fjid);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
538 }
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
539 #endif
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
540
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
541 // xmpp_send_chatstate(buddy, state)
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
542 // Send a chatstate or event (XEP-22/85) according to the buddy's capabilities.
997
d0d0cd9e39c4 Cosmetics & comments
Mikael Berthe <mikael@lilotux.net>
parents: 993
diff changeset
543 // The message is sent to one of the resources with the highest priority.
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
544 #if defined XEP0085
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
545 void xmpp_send_chatstate(gpointer buddy, guint chatstate)
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
546 {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
547 const char *bjid;
2013
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
548 const char *activeres;
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
549 GSList *resources, *p_res, *p_next;
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
550 struct xep0085 *xep85 = NULL;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
551
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
552 bjid = buddy_getjid(buddy);
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
553 if (!bjid) return;
2013
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
554 activeres = buddy_getactiveresource(buddy);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
555
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
556 /* Send the chatstate to the last resource (which should have the highest
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
557 priority).
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
558 If chatstate is "active", send an "active" state to all resources
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
559 which do not curently have this state.
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
560 */
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
561 resources = buddy_getresources(buddy);
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
562 for (p_res = resources ; p_res ; p_res = p_next) {
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
563 p_next = g_slist_next(p_res);
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
564 xep85 = buddy_resource_xep85(buddy, p_res->data);
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
565 if (xep85 && xep85->support == CHATSTATES_SUPPORT_OK) {
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
566 // If p_next is NULL, this is the highest (prio) resource, i.e.
2013
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
567 // the one we are probably writing to - unless there is defined an
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
568 // active resource
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
569 if (!g_strcmp0(p_res->data, activeres) || (!p_next && !activeres) ||
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
570 (xep85->last_state_sent != ROSTER_EVENT_ACTIVE &&
8dc418af3e72 Allow to select to which buddy resource messages go. Closes issue #55
Hermitifier
parents: 2010
diff changeset
571 chatstate == ROSTER_EVENT_ACTIVE))
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
572 xmpp_send_xep85_chatstate(bjid, p_res->data, chatstate);
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
573 }
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
574 g_free(p_res->data);
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
575 }
1091
10f9d6fcfeab JEP85: Reset composing/paused state when a resource with higher prio comes up
Mikael Berthe <mikael@lilotux.net>
parents: 1072
diff changeset
576 g_slist_free(resources);
1099
7804dbac3875 Fix a potential JEP22/85 issue introduced by changeset 10f9d6fcfeab
Mikael Berthe <mikael@lilotux.net>
parents: 1091
diff changeset
577 // If the last resource had chatstates support when can return now,
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
578 // we don't want to send a XEP22 event.
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
579 if (xep85 && xep85->support == CHATSTATES_SUPPORT_OK)
1099
7804dbac3875 Fix a potential JEP22/85 issue introduced by changeset 10f9d6fcfeab
Mikael Berthe <mikael@lilotux.net>
parents: 1091
diff changeset
580 return;
990
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
581 }
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
582 #endif
35e7913affb7 Send events/chatstates notifications (JEP-22/JEP-85)
Mikael Berthe <mikael@lilotux.net>
parents: 989
diff changeset
583
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
584
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
585 // chatstates_reset_probed(fulljid)
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
586 // If the XEP has been probed for this contact, set it back to unknown so
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
587 // that we probe it again. The parameter must be a full jid (w/ resource).
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
588 #if defined XEP0085
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
589 static void chatstates_reset_probed(const char *fulljid)
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
590 {
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
591 char *rname, *barejid;
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
592 GSList *sl_buddy;
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
593 struct xep0085 *xep85;
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
594
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
595 rname = strchr(fulljid, JID_RESOURCE_SEPARATOR);
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
596 if (!rname++)
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
597 return;
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
598
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
599 barejid = jidtodisp(fulljid);
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
600 sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER);
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
601 g_free(barejid);
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
602
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
603 if (!sl_buddy)
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
604 return;
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
605
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
606 xep85 = buddy_resource_xep85(sl_buddy->data, rname);
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
607
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
608 if (xep85 && xep85->support == CHATSTATES_SUPPORT_PROBED)
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
609 xep85->support = CHATSTATES_SUPPORT_UNKNOWN;
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
610 }
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
611 #endif
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
612
1194
03d8fafe8104 Remove a warning when gpgme is disabled
Mikael Berthe <mikael@lilotux.net>
parents: 1166
diff changeset
613 #ifdef HAVE_GPGME
1104
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
614 // keys_mismatch(key, expectedkey)
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
615 // Return TRUE if both keys are non-null and "expectedkey" doesn't match
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
616 // the end of "key".
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
617 // If one of the keys is null, return FALSE.
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
618 // If expectedkey is less than 8 bytes long, return TRUE.
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
619 //
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
620 // Example: keys_mismatch("C9940A9BB0B92210", "B0B92210") will return FALSE.
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
621 static bool keys_mismatch(const char *key, const char *expectedkey)
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
622 {
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
623 int lk, lek;
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
624
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
625 if (!expectedkey || !key)
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
626 return FALSE;
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
627
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
628 lk = strlen(key);
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
629 lek = strlen(expectedkey);
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
630
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
631 // If the expectedkey is less than 8 bytes long, this is probably a
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
632 // user mistake so we consider it's a mismatch.
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
633 if (lek < 8)
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
634 return TRUE;
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
635
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
636 if (lek < lk)
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
637 key += lk - lek;
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
638
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
639 return strcasecmp(key, expectedkey);
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
640 }
1194
03d8fafe8104 Remove a warning when gpgme is disabled
Mikael Berthe <mikael@lilotux.net>
parents: 1166
diff changeset
641 #endif
1104
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
642
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
643 // check_signature(barejid, resourcename, xmldata, text)
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
644 // Verify the signature (in xmldata) of "text" for the contact
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
645 // barejid/resourcename.
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
646 // xmldata is the 'jabber:x:signed' stanza.
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
647 // If the key id is found, the contact's PGP data are updated.
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
648 static void check_signature(const char *barejid, const char *rname,
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
649 LmMessageNode *node, const char *text)
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
650 {
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
651 #ifdef HAVE_GPGME
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
652 const char *p, *key;
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
653 GSList *sl_buddy;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
654 struct pgp_data *res_pgpdata;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
655 gpgme_sigsum_t sigsum;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
656
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
657 // All parameters must be valid
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
658 if (!(node && barejid && rname && text))
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
659 return;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
660
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
661 if (!gpg_enabled())
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
662 return;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
663
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
664 // Get the resource PGP data structure
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
665 sl_buddy = roster_find(barejid, jidsearch, ROSTER_TYPE_USER);
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
666 if (!sl_buddy)
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
667 return;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
668 res_pgpdata = buddy_resource_pgp(sl_buddy->data, rname);
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
669 if (!res_pgpdata)
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
670 return;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
671
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1728
diff changeset
672 if (!node->name || strcmp(node->name, "x")) // XXX: probably useless
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
673 return; // We expect "<x xmlns='jabber:x:signed'>"
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
674
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
675 // Get signature
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
676 p = lm_message_node_get_value(node);
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
677 if (!p)
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
678 return;
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
679
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
680 key = gpg_verify(p, text, &sigsum);
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
681 if (key) {
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
682 const char *expectedkey;
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
683 char *buf;
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
684 g_free(res_pgpdata->sign_keyid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
685 res_pgpdata->sign_keyid = (char *)key;
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
686 res_pgpdata->last_sigsum = sigsum;
1046
a3748bd3d010 Tell the user when a signature is bad
Mikael Berthe <mikael@lilotux.net>
parents: 1045
diff changeset
687 if (sigsum & GPGME_SIGSUM_RED) {
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
688 buf = g_strdup_printf("Bad signature from <%s/%s>", barejid, rname);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
689 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO, 0);
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
690 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
691 g_free(buf);
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
692 }
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
693 // Verify that the key id is the one we expect.
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
694 expectedkey = settings_pgp_getkeyid(barejid);
1104
382972712208 Allow short key format in check_signature()
Mikael Berthe <mikael@lilotux.net>
parents: 1099
diff changeset
695 if (keys_mismatch(key, expectedkey)) {
1067
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
696 buf = g_strdup_printf("Warning: The KeyId from <%s/%s> doesn't match "
a5dc85fdebde Add key comparison for signatures & use user-provided PGP keys for encryption
Mikael Berthe <mikael@lilotux.net>
parents: 1065
diff changeset
697 "the key you set up", barejid, rname);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
698 scr_WriteIncomingMessage(barejid, buf, 0, HBB_PREFIX_INFO, 0);
1046
a3748bd3d010 Tell the user when a signature is bad
Mikael Berthe <mikael@lilotux.net>
parents: 1045
diff changeset
699 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
a3748bd3d010 Tell the user when a signature is bad
Mikael Berthe <mikael@lilotux.net>
parents: 1045
diff changeset
700 g_free(buf);
a3748bd3d010 Tell the user when a signature is bad
Mikael Berthe <mikael@lilotux.net>
parents: 1045
diff changeset
701 }
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
702 }
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
703 #endif
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
704 }
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
705
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
706 static LmSSLResponse ssl_cb(LmSSL *ssl, LmSSLStatus status, gpointer ud)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
707 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
708 switch (status) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
709 case LM_SSL_STATUS_NO_CERT_FOUND:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
710 scr_LogPrint(LPRINT_LOGNORM, "No certificate found!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
711 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
712 case LM_SSL_STATUS_UNTRUSTED_CERT:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
713 scr_LogPrint(LPRINT_LOGNORM, "Certificate is not trusted!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
714 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
715 case LM_SSL_STATUS_CERT_EXPIRED:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
716 scr_LogPrint(LPRINT_LOGNORM, "Certificate has expired!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
717 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
718 case LM_SSL_STATUS_CERT_NOT_ACTIVATED:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
719 scr_LogPrint(LPRINT_LOGNORM, "Certificate has not been activated!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
720 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
721 case LM_SSL_STATUS_CERT_HOSTNAME_MISMATCH:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
722 scr_LogPrint(LPRINT_LOGNORM,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
723 "Certificate hostname does not match expected hostname!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
724 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
725 case LM_SSL_STATUS_CERT_FINGERPRINT_MISMATCH: {
2203
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
726 char fpr[3*FINGERPRINT_LENGTH] = {0};
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
727 fingerprint_to_hex(lm_ssl_get_fingerprint(ssl), fpr, FINGERPRINT_LENGTH);
2197
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
728 scr_LogPrint(LPRINT_LOGNORM,
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
729 "Certificate fingerprint does not match expected fingerprint!");
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
730 scr_LogPrint(LPRINT_LOGNORM, "Remote fingerprint: %s", fpr);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
731
2197
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
732 scr_LogPrint(LPRINT_LOGNORM, "Expected fingerprint: %s",
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
733 settings_opt_get("ssl_fingerprint"));
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
734
2197
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
735 return LM_SSL_RESPONSE_STOP;
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
736 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
737 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
738 case LM_SSL_STATUS_GENERIC_ERROR:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
739 scr_LogPrint(LPRINT_LOGNORM, "Generic SSL error!");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
740 break;
1911
baa52ea32b47 Only print the ssl status as an integer if we don't understand it
franky
parents: 1910
diff changeset
741 default:
baa52ea32b47 Only print the ssl status as an integer if we don't understand it
franky
parents: 1910
diff changeset
742 scr_LogPrint(LPRINT_LOGNORM, "SSL error:%d", status);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
743 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
744
1656
fbab3c1300d5 Update fix for ssl_ignore_checks option (changeset 8effa82ae593)
franky
parents: 1655
diff changeset
745 if (settings_opt_get_int("ssl_ignore_checks"))
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
746 return LM_SSL_RESPONSE_CONTINUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
747 return LM_SSL_RESPONSE_STOP;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
748 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
749
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
750 static void connection_auth_cb(LmConnection *connection, gboolean success,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
751 gpointer user_data)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
752 {
2199
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
753 LmSSL *lssl;
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
754 if ((lssl = lm_connection_get_ssl(connection)) != NULL) {
2203
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
755 char fpr[3*FINGERPRINT_LENGTH] = {0};
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
756 fingerprint_to_hex(lm_ssl_get_fingerprint(lssl), fpr, FINGERPRINT_LENGTH);
2199
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
757 scr_LogPrint(LPRINT_LOGNORM, "Connection established.\n"
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
758 "Remote fingerprint: %s", fpr);
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
759 }
527ba1c1873e Display the server SSL fingerprint when we connect
Mikael Berthe <mikael@lilotux.net>
parents: 2198
diff changeset
760
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
761 if (success) {
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
762 xmpp_iq_request(NULL, NS_ROSTER);
2103
1210a22726d3 We can determine if the server supports carbons. By means of XEP-0030: Service
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2090
diff changeset
763 xmpp_iq_request(NULL, NS_DISCO_INFO);
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
764 xmpp_request_storage("storage:bookmarks");
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
765 xmpp_request_storage("storage:rosternotes");
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
766
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
767 /* XXX Not needed before xmpp_setprevstatus()
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
768 LmMessage *m;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
769 m = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_PRESENCE,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
770 LM_MESSAGE_SUB_TYPE_AVAILABLE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
771 lm_connection_send(connection, m, NULL);
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
772 lm_message_unref(m);
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
773 */
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
774
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
775 xmpp_setprevstatus();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
776
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
777 AutoConnection = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
778 } else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
779 scr_LogPrint(LPRINT_LOGNORM, "Authentication failed");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
780 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
781
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
782 gboolean xmpp_reconnect()
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
783 {
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
784 if (!lconnection)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
785 xmpp_connect();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
786 return FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
787 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
788
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
789 static void _try_to_reconnect(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
790 {
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
791 xmpp_disconnect();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
792 if (AutoConnection)
1747
c4f67e2e675f Randomize reconnection delay
Mikael Berthe <mikael@lilotux.net>
parents: 1746
diff changeset
793 g_timeout_add_seconds(RECONNECTION_TIMEOUT + (random() % 90L),
c4f67e2e675f Randomize reconnection delay
Mikael Berthe <mikael@lilotux.net>
parents: 1746
diff changeset
794 xmpp_reconnect, NULL);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
795 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
796
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
797 static void connection_open_cb(LmConnection *connection, gboolean success,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
798 gpointer user_data)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
799 {
1663
dcb0b4522ded Fix GError handling
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1656
diff changeset
800 GError *error = NULL;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
801
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
802 if (success) {
1613
509fa8558483 Remove unused variable
Mikael Berthe <mikael@lilotux.net>
parents: 1612
diff changeset
803 const char *password, *resource;
509fa8558483 Remove unused variable
Mikael Berthe <mikael@lilotux.net>
parents: 1612
diff changeset
804 char *username;
1611
f9bf561e54d0 Use the username for authentication, added jid_get_username() to utils.c
franky
parents: 1610
diff changeset
805 username = jid_get_username(settings_opt_get("jid"));
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
806 password = settings_opt_get("password");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
807 resource = strchr(lm_connection_get_jid(connection),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
808 JID_RESOURCE_SEPARATOR);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
809 if (resource)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
810 resource++;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
811
1611
f9bf561e54d0 Use the username for authentication, added jid_get_username() to utils.c
franky
parents: 1610
diff changeset
812 if (!lm_connection_authenticate(lconnection, username, password, resource,
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
813 connection_auth_cb, NULL, FALSE, &error)) {
1717
c12455fec611 Remove extra newlines in scr_LogPrint() calls
Mikael Berthe <mikael@lilotux.net>
parents: 1716
diff changeset
814 scr_LogPrint(LPRINT_LOGNORM, "Failed to authenticate: %s",
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
815 error->message);
1663
dcb0b4522ded Fix GError handling
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1656
diff changeset
816 g_error_free (error);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
817 _try_to_reconnect();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
818 }
1611
f9bf561e54d0 Use the username for authentication, added jid_get_username() to utils.c
franky
parents: 1610
diff changeset
819 g_free(username);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
820 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
821 scr_LogPrint(LPRINT_LOGNORM, "There was an error while connecting.");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
822 _try_to_reconnect();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
823 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
824 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
825
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
826 static void connection_close_cb(LmConnection *connection,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
827 LmDisconnectReason reason,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
828 gpointer user_data)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
829 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
830 const char *str;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
831
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
832 switch (reason) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
833 case LM_DISCONNECT_REASON_OK:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
834 str = "LM_DISCONNECT_REASON_OK";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
835 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
836 case LM_DISCONNECT_REASON_PING_TIME_OUT:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
837 str = "LM_DISCONNECT_REASON_PING_TIME_OUT";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
838 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
839 case LM_DISCONNECT_REASON_HUP:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
840 str = "LM_DISCONNECT_REASON_HUP";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
841 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
842 case LM_DISCONNECT_REASON_ERROR:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
843 str = "LM_DISCONNECT_REASON_ERROR";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
844 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
845 case LM_DISCONNECT_REASON_UNKNOWN:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
846 default:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
847 str = "LM_DISCONNECT_REASON_UNKNOWN";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
848 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
849 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
850
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
851 if (reason != LM_DISCONNECT_REASON_OK)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
852 _try_to_reconnect();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
853
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
854 // Free bookmarks
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
855 if (bookmarks)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
856 lm_message_node_unref(bookmarks);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
857 bookmarks = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
858 // Free roster
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
859 roster_free();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
860 if (rosternotes)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
861 lm_message_node_unref(rosternotes);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
862 rosternotes = NULL;
2118
51fde9c25401 Reset carbons when the connection is closed
Mikael Berthe <mikael@lilotux.net>
parents: 2113
diff changeset
863 // Reset carbons
51fde9c25401 Reset carbons when the connection is closed
Mikael Berthe <mikael@lilotux.net>
parents: 2113
diff changeset
864 carbons_reset();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
865 // Update display
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
866 update_roster = TRUE;
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1747
diff changeset
867 scr_update_buddy_window();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
868
1715
1b6a04703fa0 Do not display Loudmouth's disconnection value when disconnected normally
Mikael Berthe <mikael@lilotux.net>
parents: 1711
diff changeset
869 if (!reason)
1b6a04703fa0 Do not display Loudmouth's disconnection value when disconnected normally
Mikael Berthe <mikael@lilotux.net>
parents: 1711
diff changeset
870 scr_LogPrint(LPRINT_LOGNORM, "Disconnected.");
1b6a04703fa0 Do not display Loudmouth's disconnection value when disconnected normally
Mikael Berthe <mikael@lilotux.net>
parents: 1711
diff changeset
871 else
1b6a04703fa0 Do not display Loudmouth's disconnection value when disconnected normally
Mikael Berthe <mikael@lilotux.net>
parents: 1711
diff changeset
872 scr_LogPrint(LPRINT_NORMAL, "Disconnected, reason: %d->'%s'", reason, str);
1b6a04703fa0 Do not display Loudmouth's disconnection value when disconnected normally
Mikael Berthe <mikael@lilotux.net>
parents: 1711
diff changeset
873
1693
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
874 xmpp_setstatus(offline, NULL, mystatusmsg, TRUE);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
875 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
876
2166
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
877 static void handle_state_events(const char *bjid,
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
878 const char *resource,
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
879 LmMessageNode *node)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
880 {
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
881 #if defined XEP0085
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
882 LmMessageNode *state_ns = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
883 GSList *sl_buddy;
1866
e45d13074721 s/jep/xep/
Mikael Berthe <mikael@lilotux.net>
parents: 1818
diff changeset
884 struct xep0085 *xep85 = NULL;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
885
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
886 sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
887
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
888 if (!sl_buddy) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
889 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
890 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
891
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
892 /* Let's see whether the contact supports XEP0085 */
2166
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
893 xep85 = buddy_resource_xep85(sl_buddy->data, resource);
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
894 if (xep85)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
895 state_ns = lm_message_node_find_xmlns(node, NS_CHATSTATES);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
896
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
897 if (!state_ns) { /* Sender does not use chat states */
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
898 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
899 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
900
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
901 xep85->support = CHATSTATES_SUPPORT_OK;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
902
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
903 if (!strcmp(state_ns->name, "composing")) {
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
904 xep85->last_state_rcvd = ROSTER_EVENT_COMPOSING;
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
905 } else if (!strcmp(state_ns->name, "active")) {
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
906 xep85->last_state_rcvd = ROSTER_EVENT_ACTIVE;
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
907 } else if (!strcmp(state_ns->name, "paused")) {
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
908 xep85->last_state_rcvd = ROSTER_EVENT_PAUSED;
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
909 } else if (!strcmp(state_ns->name, "inactive")) {
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
910 xep85->last_state_rcvd = ROSTER_EVENT_INACTIVE;
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
911 } else if (!strcmp(state_ns->name, "gone")) {
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
912 xep85->last_state_rcvd = ROSTER_EVENT_GONE;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
913 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
914
2166
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
915 buddy_resource_setevents(sl_buddy->data, resource, xep85->last_state_rcvd);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
916 update_roster = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
917 #endif
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
918 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
919
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
920 static void gotmessage(LmMessageSubType type, const char *from,
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
921 const char *body, const char *enc,
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
922 const char *subject, time_t timestamp,
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
923 LmMessageNode *node_signed, gboolean carbon)
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
924 {
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
925 char *bjid;
1689
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
926 const char *rname;
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
927 char *decrypted_pgp = NULL;
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
928 char *decrypted_otr = NULL;
1299
3b338a5c01fc OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents: 1290
diff changeset
929 int otr_msg = 0, free_msg = 0;
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
930
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
931 bjid = jidtodisp(from);
441
51b8f10cfeb8 Handle g_locale_from_utf8() failures
Mikael Berthe <mikael@lilotux.net>
parents: 438
diff changeset
932
977
5b01de4ac5e1 Cosmetic changes
Alexis Hildebrandt <afh [at] 2drop [dot] net>
parents: 960
diff changeset
933 rname = strchr(from, JID_RESOURCE_SEPARATOR);
447
03bb57383cea Initial Multi-User Chat support
Mikael Berthe <mikael@lilotux.net>
parents: 444
diff changeset
934 if (rname) rname++;
819
c2d7d9dd4193 New option 'block_unsubscribed'
Mikael Berthe <mikael@lilotux.net>
parents: 818
diff changeset
935
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 1023
diff changeset
936 #ifdef HAVE_GPGME
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
937 if (gpg_enabled()) {
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
938 if (enc) {
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
939 decrypted_pgp = gpg_decrypt(enc);
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
940 if (decrypted_pgp)
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
941 body = decrypted_pgp;
1043
ebbde723614b Store contacts PGP keys
Mikael Berthe <mikael@lilotux.net>
parents: 1042
diff changeset
942 }
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
943 // Check signature of the unencrypted/decrypted message
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
944 if (node_signed)
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
945 check_signature(bjid, rname, node_signed, body);
1042
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 1023
diff changeset
946 }
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 1023
diff changeset
947 #endif
8a395c2cafc4 Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents: 1023
diff changeset
948
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
949 // Check for unexpected groupchat messages
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
950 // If we receive a groupchat message from a room we're not a member of,
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
951 // this is probably a server issue and the best we can do is to send
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
952 // a type unavailable.
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
953 if (type == LM_MESSAGE_SUB_TYPE_GROUPCHAT && !roster_getnickname(bjid)) {
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
954 // It shouldn't happen, probably a server issue
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
955 GSList *room_elt;
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
956 char *mbuf;
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
957
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
958 mbuf = g_strdup_printf("Unexpected groupchat packet!");
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
959 scr_LogPrint(LPRINT_LOGNORM, "%s", mbuf);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
960 scr_WriteIncomingMessage(bjid, mbuf, 0, HBB_PREFIX_INFO, 0);
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
961 g_free(mbuf);
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
962
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
963 // Send back an unavailable packet
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
964 xmpp_setstatus(offline, bjid, "", TRUE);
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
965
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
966 // MUC
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
967 // Make sure this is a room (it can be a conversion user->room)
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
968 room_elt = roster_find(bjid, jidsearch, 0);
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
969 if (!room_elt) {
1665
1a4890514eb9 Clean up some dead assignments/dead variables
Ulrich Spörlein
parents: 1663
diff changeset
970 roster_add_user(bjid, NULL, NULL, ROSTER_TYPE_ROOM, sub_none, -1);
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
971 } else {
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
972 buddy_settype(room_elt->data, ROSTER_TYPE_ROOM);
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
973 }
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
974
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
975 buddylist_build();
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1747
diff changeset
976 scr_draw_roster();
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
977 goto gotmessage_return;
864
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
978 }
a7b3409df6bc MUC: Work around user server restart
Mikael Berthe <mikael@lilotux.net>
parents: 862
diff changeset
979
819
c2d7d9dd4193 New option 'block_unsubscribed'
Mikael Berthe <mikael@lilotux.net>
parents: 818
diff changeset
980 // We don't call the message_in hook if 'block_unsubscribed' is true and
c2d7d9dd4193 New option 'block_unsubscribed'
Mikael Berthe <mikael@lilotux.net>
parents: 818
diff changeset
981 // this is a regular message from an unsubscribed user.
956
819396bebdf5 Do not block system messages when block_unsubscribed is set
Mikael Berthe <mikael@lilotux.net>
parents: 940
diff changeset
982 // System messages (from our server) are allowed.
1689
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
983 if (settings_opt_get_int("block_unsubscribed") &&
1895
7043542b3565 Do not block MUC private messages when 'block_unsubscribed' is set
Mikael Berthe <mikael@lilotux.net>
parents: 1869
diff changeset
984 (roster_gettype(bjid) != ROSTER_TYPE_ROOM) &&
1689
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
985 !(roster_getsubscription(bjid) & sub_from) &&
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
986 (type != LM_MESSAGE_SUB_TYPE_GROUPCHAT)) {
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
987 char *sbjid = jidtodisp(lm_connection_get_jid(lconnection));
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
988 const char *server = strchr(sbjid, JID_DOMAIN_SEPARATOR);
1963
5d718766d2d6 Do not block system messages when block_unsubscribed is set
Mikael Berthe <mikael@lilotux.net>
parents: 1953
diff changeset
989 if (server && g_strcmp0(server+1, bjid)) {
1689
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
990 scr_LogPrint(LPRINT_LOGNORM, "Blocked a message from <%s>", bjid);
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
991 g_free(sbjid);
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
992 goto gotmessage_return;
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
993 }
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
994 g_free(sbjid);
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
995 }
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
996
2044
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
997 #ifdef HAVE_LIBOTR
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
998 if (otr_enabled()) {
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
999 decrypted_otr = (char*)body;
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1000 otr_msg = otr_receive(&decrypted_otr, bjid, &free_msg);
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1001 if (!decrypted_otr) {
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1002 goto gotmessage_return;
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1003 }
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1004 body = decrypted_otr;
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1005 }
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1006 #endif
c00b919cf4ac Hopefully fix #94 (OTR leak when block_unsubscribed is set)
Mikael Berthe <mikael@lilotux.net>
parents: 2036
diff changeset
1007
1689
b8f9481dd0fe Get server name from jid for block_unsubscribed
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1688
diff changeset
1008 { // format and pass message for further processing
1399
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1009 gchar *fullbody = NULL;
1484
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1010 guint encrypted;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1011
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1012 if (decrypted_pgp)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1013 encrypted = ENCRYPTED_PGP;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1014 else if (otr_msg)
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1015 encrypted = ENCRYPTED_OTR;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1016 else
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1017 encrypted = 0;
7b36b91a4388 New UI message flag (O) when OTR is used
Mikael Berthe <mikael@lilotux.net>
parents: 1476
diff changeset
1018
1399
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1019 if (subject) {
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1020 if (body)
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1021 fullbody = g_strdup_printf("[%s]\n%s", subject, body);
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1022 else
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1023 fullbody = g_strdup_printf("[%s]\n", subject);
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1024 body = fullbody;
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1025 }
2156
a54c084af4d6 Add a "carbon" parameter to the hook-{pre,post}-message-in hooks
Mikael Berthe <mikael@lilotux.net>
parents: 2155
diff changeset
1026 hk_message_in(bjid, rname, timestamp, body, type, encrypted, carbon);
1399
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1027 g_free(fullbody);
819
c2d7d9dd4193 New option 'block_unsubscribed'
Mikael Berthe <mikael@lilotux.net>
parents: 818
diff changeset
1028 }
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
1029
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
1030 gotmessage_return:
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
1031 // Clean up and exit
1058
c0d44a9a99bc Code cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 1055
diff changeset
1032 g_free(bjid);
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
1033 g_free(decrypted_pgp);
1333
e30a9d907105 Minor coding style adjustments
Mikael Berthe <mikael@lilotux.net>
parents: 1330
diff changeset
1034 if (free_msg)
1347
07816313073b Add an option 'otr' to enable OTR support in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1344
diff changeset
1035 g_free(decrypted_otr);
29
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
1036 }
86837ff0554c [/trunk] Changeset 45 by mikael
mikael
parents:
diff changeset
1037
420
04a0b450380b Display error code/message when receiving a message packet with "error" type
Mikael Berthe <mikael@lilotux.net>
parents: 419
diff changeset
1038
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1039 static LmHandlerResult handle_messages(LmMessageHandler *handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1040 LmConnection *connection,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1041 LmMessage *m, gpointer user_data)
579
0c67755e0fa7 Introduce a handle_presence_muc() function
Mikael Berthe <mikael@lilotux.net>
parents: 578
diff changeset
1042 {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1043 const char *p, *from=lm_message_get_from(m);
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1044 char *bjid, *res;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1045 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1046 const char *body = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1047 const char *enc = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1048 const char *subject = NULL;
1001
dff25377c11f Auto-reconnect after a network/server failure
Mikael Berthe <mikael@lilotux.net>
parents: 999
diff changeset
1049 time_t timestamp = 0L;
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1050 LmMessageSubType mstype;
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1051 gboolean skip_process = FALSE;
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1052 LmMessageNode *ns_signed = NULL;
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1053
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1054 mstype = lm_message_get_sub_type(m);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1055
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1056 body = lm_message_node_get_child_value(m->node, "body");
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1057
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1058 x = lm_message_node_find_xmlns(m->node, NS_ENCRYPTED);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1059 if (x && (p = lm_message_node_get_value(x)) != NULL)
1399
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1060 enc = p;
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1061
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1062 // Get the bare-JID/room (bjid) and the resource/nickname (res)
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1063 bjid = g_strdup(lm_message_get_from(m));
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1064 res = strchr(bjid, JID_RESOURCE_SEPARATOR);
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1065 if (res) *res++ = 0;
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1066
2090
16b04d64ec88 Add option to highlight timestamp added by server.
Hermitifier
parents: 2089
diff changeset
1067 // Timestamp?
16b04d64ec88 Add option to highlight timestamp added by server.
Hermitifier
parents: 2089
diff changeset
1068 timestamp = lm_message_node_get_timestamp(m->node);
16b04d64ec88 Add option to highlight timestamp added by server.
Hermitifier
parents: 2089
diff changeset
1069
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1070 p = lm_message_node_get_child_value(m->node, "subject");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1071 if (p != NULL) {
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1072 if (mstype != LM_MESSAGE_SUB_TYPE_GROUPCHAT) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1073 // Chat message
1399
187985455020 Correctly display PGP-encoded messages with a subject
Mikael Berthe <mikael@lilotux.net>
parents: 1397
diff changeset
1074 subject = p;
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1075 } else {
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1076 // Room topic
549
448e299e45da MUC: "/room topic" shows the current room topic
Mikael Berthe <mikael@lilotux.net>
parents: 547
diff changeset
1077 GSList *roombuddy;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1078 gchar *mbuf;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1079 const gchar *subj = p;
549
448e299e45da MUC: "/room topic" shows the current room topic
Mikael Berthe <mikael@lilotux.net>
parents: 547
diff changeset
1080 // Set the new topic
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1081 roombuddy = roster_find(bjid, jidsearch, 0);
549
448e299e45da MUC: "/room topic" shows the current room topic
Mikael Berthe <mikael@lilotux.net>
parents: 547
diff changeset
1082 if (roombuddy)
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 756
diff changeset
1083 buddy_settopic(roombuddy->data, subj);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1084 // Display inside the room window
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1085 if (!res) {
560
64cb4de94972 Better topic attribution
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1086 // No specific resource (this is certainly history)
1896
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1087 if (*subj)
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1088 mbuf = g_strdup_printf("The topic has been set to: %s", subj);
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1089 else
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1090 mbuf = g_strdup_printf("The topic has been cleared");
560
64cb4de94972 Better topic attribution
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1091 } else {
1896
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1092 if (*subj)
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1093 mbuf = g_strdup_printf("%s has set the topic to: %s", res, subj);
1896
c5ab9cf3819a [MUC] Fix handling of empty room topic
Mikael Berthe <mikael@lilotux.net>
parents: 1895
diff changeset
1094 else
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1095 mbuf = g_strdup_printf("%s has cleared the topic", res);
560
64cb4de94972 Better topic attribution
Mikael Berthe <mikael@lilotux.net>
parents: 549
diff changeset
1096 }
2090
16b04d64ec88 Add option to highlight timestamp added by server.
Hermitifier
parents: 2089
diff changeset
1097 scr_WriteIncomingMessage(bjid, mbuf, timestamp,
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1098 HBB_PREFIX_INFO|HBB_PREFIX_NOFLAG, 0);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1099 if (settings_opt_get_int("log_muc_conf"))
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1100 hlog_write_message(bjid, 0, -1, mbuf);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1101 g_free(mbuf);
732
ab623c2df964 MUC: Update the chat status line when the topic is updated
Mikael Berthe <mikael@lilotux.net>
parents: 724
diff changeset
1102 // The topic is displayed in the chat status line, so refresh now.
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1747
diff changeset
1103 scr_update_chat_status(TRUE);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1104 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1105 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1106
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1107 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1108 x = lm_message_node_get_child(m->node, "error");
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
1109 display_server_error(x, from);
2165
db6ca1e1e082 Remove support for obsolete XEP 22
franky
parents: 2161
diff changeset
1110 #ifdef XEP0085
1691
b2e0083891cc Replace JEP with XEP
Mikael Berthe <mikael@lilotux.net>
parents: 1689
diff changeset
1111 // If the XEP85/22 support is probed, set it back to unknown so that
999
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
1112 // we probe it again.
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
1113 chatstates_reset_probed(from);
9687ecc59303 Redo chat states detection if we receive a message error packet from a contact
Mikael Berthe <mikael@lilotux.net>
parents: 998
diff changeset
1114 #endif
1132
1650056b96fc Do not use chat states of error messages :)
Mikael Berthe <mikael@lilotux.net>
parents: 1128
diff changeset
1115 } else {
2166
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
1116 handle_state_events(bjid, res, m->node);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1117 }
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1118
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1119 // Check for carbons!
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1120 x = lm_message_node_find_xmlns(m->node, NS_CARBONS_2);
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1121 gboolean carbons = FALSE;
2209
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1122 if (x && (!g_strcmp0(x->name, "received") || !g_strcmp0(x->name, "sent"))) {
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1123 LmMessageNode *xenc;
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1124 const char *carbon_name = x->name;
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1125 carbons = TRUE;
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1126 // Go 1 level deeper to the forwarded message
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1127 x = lm_message_node_find_xmlns(x, NS_FORWARD);
2209
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1128 if (x)
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1129 x = lm_message_node_get_child(x, "message");
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1130
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1131 if (!x) {
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1132 scr_LogPrint(LPRINT_LOGNORM,
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1133 "Could not read carbon message! Please fill a bug.");
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1134 goto handle_messages_return;
412322678d59 Fix segfault when receiving a <private> Carbons message tag
Mikael Berthe <mikael@lilotux.net>
parents: 2203
diff changeset
1135 }
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1136
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1137 xenc = lm_message_node_find_xmlns(x, NS_ENCRYPTED);
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1138 if (xenc && (p = lm_message_node_get_value(xenc)) != NULL)
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1139 enc = p;
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1140
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1141 if (body && *body && !subject)
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1142 ns_signed = lm_message_node_find_xmlns(x, NS_SIGNED);
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1143 else
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1144 skip_process = TRUE;
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1145
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1146 // Parse a message that is send to one of our other resources
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1147 if (!g_strcmp0(carbon_name, "received")) {
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1148 from = lm_message_node_get_attribute(x, "from");
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1149 if (!from) {
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1150 scr_LogPrint(LPRINT_LOGNORM, "Malformed carbon copy!");
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1151 goto handle_messages_return;
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1152 }
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1153 g_free(bjid);
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1154 bjid = g_strdup(from);
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1155 res = strchr(bjid, JID_RESOURCE_SEPARATOR);
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1156 if (res) *res++ = 0;
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1157
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1158 // Try to handle forwarded chat state messages
2166
f51c341a9da5 Simplify handle_state_events()
franky
parents: 2165
diff changeset
1159 handle_state_events(from, res, x);
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1160
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1161 scr_LogPrint(LPRINT_DEBUG, "Received incoming carbon from <%s>", from);
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1162
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1163 } else if (!g_strcmp0(carbon_name, "sent")) {
2195
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
1164 #ifdef HAVE_GPGME
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
1165 char *decrypted_pgp = NULL;
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
1166 #endif
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1167 guint encrypted = 0;
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1168 const char *to= lm_message_node_get_attribute(x, "to");
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1169 if (!to) {
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1170 scr_LogPrint(LPRINT_LOGNORM, "Malformed carbon copy!");
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1171 goto handle_messages_return;
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1172 }
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1173 g_free(bjid);
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1174 bjid = jidtodisp(to);
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1175
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1176 #ifdef HAVE_GPGME
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1177 if (gpg_enabled()) {
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1178 if (enc) {
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1179 decrypted_pgp = gpg_decrypt(enc);
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1180 if (decrypted_pgp) {
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1181 body = decrypted_pgp;
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1182 encrypted = ENCRYPTED_PGP;
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1183 }
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1184 }
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1185 /*
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1186 // Check messsage signature
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1187 // This won't work here, since check_signature wasn't intended
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1188 // to be used to check our own messages.
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1189 if (ns_signed)
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1190 check_signature(ME, NULL, ns_signed, body);
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1191 */
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1192 }
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1193 #endif
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1194
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1195 if (body && *body)
2190
ee3a40ffcd8b New option: 'clear_unread_on_carbon'
Holger Weiß <holger@zedat.fu-berlin.de>
parents: 2189
diff changeset
1196 hk_message_out(bjid, NULL, timestamp, body, encrypted, TRUE, NULL);
2113
44c4b850263a Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 2109
diff changeset
1197
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1198 scr_LogPrint(LPRINT_DEBUG, "Received outgoing carbon for <%s>", to);
2195
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
1199 #ifdef HAVE_GPGME
2189
3b91f6a100f5 PGP: Decrypt our own encrypted messages when Carbons are enabled
Mikael Berthe <mikael@lilotux.net>
parents: 2188
diff changeset
1200 g_free(decrypted_pgp);
2195
40ddaebeb81e PGP: Add a memory allocation check and compilation directives
Mikael Berthe <mikael@lilotux.net>
parents: 2194
diff changeset
1201 #endif
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1202 goto handle_messages_return;
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1203 }
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1204 } else { // Not a Carbon
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1205 ns_signed = lm_message_node_find_xmlns(m->node, NS_SIGNED);
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1206 }
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1207
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1208 // Do not process the message if some fields are missing
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1209 if (!from || (!body && !subject))
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1210 skip_process = TRUE;
2105
1cc84780eb5f Very basic carbons support is hacked into mcabber.
Roeland Jago Douma <roeland@famdouma.nl>
parents: 2103
diff changeset
1211
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1212 if (!skip_process) {
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1213 gotmessage(mstype, from, body, enc, subject, timestamp,
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1214 ns_signed, carbons);
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1215 }
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1216
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1217 // We're done if it was a Carbon forwarded message
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1218 if (carbons)
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1219 goto handle_messages_return;
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1220
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1221 // Report received message if message delivery receipt was requested
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1222 if (lm_message_node_get_child(m->node, "request") &&
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1223 (roster_getsubscription(bjid) & sub_from)) {
1869
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1224 const gchar *mid;
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1225 LmMessageNode *y;
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
1226 LmMessage *rcvd = lm_message_new(from, LM_MESSAGE_TYPE_MESSAGE);
1869
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1227 mid = lm_message_get_id(m);
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1228 // For backward compatibility (XEP184 < v.1.1):
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1229 lm_message_node_set_attribute(rcvd->node, "id", mid);
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1230 y = lm_message_node_add_child(rcvd->node, "received", NULL);
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1231 lm_message_node_set_attribute(y, "xmlns", NS_RECEIPTS);
fe385f2cfb93 Partial update for XEP-0184 v1.1
Mikael Berthe <mikael@lilotux.net>
parents: 1866
diff changeset
1232 lm_message_node_set_attribute(y, "id", mid);
1602
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
1233 lm_connection_send(connection, rcvd, NULL);
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
1234 lm_message_unref(rcvd);
f4a2c6f767d1 Message Receipts support (XEP-0184)
franky
parents: 1600
diff changeset
1235 }
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1236
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1237 { // xep184 receipt confirmation
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1238 LmMessageNode *received = lm_message_node_get_child(m->node, "received");
2113
44c4b850263a Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 2109
diff changeset
1239 if (received && !g_strcmp0(lm_message_node_get_attribute(received, "xmlns"),
44c4b850263a Cosmetics
Mikael Berthe <mikael@lilotux.net>
parents: 2109
diff changeset
1240 NS_RECEIPTS)) {
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1241 char *jid = jidtodisp(from);
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1242 const char *id = lm_message_node_get_attribute(received, "id");
2036
f8958ab545ac Make message delivery receipts more backward-compatible
Mikael Berthe <mikael@lilotux.net>
parents: 2033
diff changeset
1243 // This is for backward compatibility; if the remote client didn't add
f8958ab545ac Make message delivery receipts more backward-compatible
Mikael Berthe <mikael@lilotux.net>
parents: 2033
diff changeset
1244 // the id as an attribute of the 'received' tag, we use the message id:
f8958ab545ac Make message delivery receipts more backward-compatible
Mikael Berthe <mikael@lilotux.net>
parents: 2033
diff changeset
1245 if (!id)
f8958ab545ac Make message delivery receipts more backward-compatible
Mikael Berthe <mikael@lilotux.net>
parents: 2033
diff changeset
1246 id = lm_message_get_id(m);
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1247 scr_remove_receipt_flag(jid, id);
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1248 g_free(jid);
2141
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1249
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1250 #ifdef MODULES_ENABLE
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1251 {
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1252 hk_arg_t args[] = {
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1253 { "jid", from },
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1254 { NULL, NULL },
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1255 };
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1256 hk_run_handlers("hook-mdr-received", args);
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1257 }
e702073612de Add "hook-mdr-received" hook
Mikael Berthe <mikael@lilotux.net>
parents: 2138
diff changeset
1258 #endif
2032
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1259 }
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1260 }
f740c4128f76 Fix receipts handling according to recent XEP updates
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2027
diff changeset
1261
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1262 if (from) {
1908
e2def760c6d0 Introduce NS_MUC_{USER,ADMIN,OWNER}
Mikael Berthe <mikael@lilotux.net>
parents: 1906
diff changeset
1263 x = lm_message_node_find_xmlns(m->node, NS_MUC_USER);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1264 if (x && !strcmp(x->name, "x"))
1953
9f443617e96b Improve MUC support (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1951
diff changeset
1265 got_muc_message(from, x, timestamp);
1951
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1266
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1267 x = lm_message_node_find_xmlns(m->node, NS_X_CONFERENCE);
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1268
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1269 if (x && !strcmp(x->name, "x")) {
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1270 const char *jid = lm_message_node_get_attribute(x, "jid");
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1271 if (jid) {
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1272 const char *reason = lm_message_node_get_attribute(x, "reason");
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1273 const char *password = lm_message_node_get_attribute(x, "password");
2027
107d39cd968b Update a comment
Mikael Berthe <mikael@lilotux.net>
parents: 2023
diff changeset
1274 // We won't send decline stanzas as it is a Direct Invitation
1951
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1275 got_invite(from, jid, reason, password, FALSE);
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1276 }
1a01a7ef4e43 Add support for XEP-0249 / Direct MUC Invitations (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents: 1937
diff changeset
1277 }
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1278 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1279
2151
8819bab88053 Improve Message Carbons support
Mikael Berthe <mikael@lilotux.net>
parents: 2141
diff changeset
1280 handle_messages_return:
1984
b0470ef8669b XEP 184: don't send receipts to buddies that have no presence subscription
Mikael Berthe <mikael@lilotux.net>
parents: 1979
diff changeset
1281 g_free(bjid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1282 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1283 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1284
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1285 static LmHandlerResult cb_caps(LmMessageHandler *h, LmConnection *c,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1286 LmMessage *m, gpointer user_data)
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1287 {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1288 char *ver = user_data;
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1289 char *hash;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1290 const char *from = lm_message_get_from(m);
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1291 char *bjid = jidtodisp(from);
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1292 LmMessageSubType mstype = lm_message_get_sub_type(m);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1293
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1294 hash = strchr(ver, ',');
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1295 if (hash)
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1296 *hash++ = '\0';
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1297
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1298 if (mstype == LM_MESSAGE_SUB_TYPE_RESULT) {
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1299 LmMessageNode *info;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1300 LmMessageNode *query = lm_message_node_get_child(m->node, "query");
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1301
2210
ea90906cb691 Add a few more checks
Mikael Berthe <mikael@lilotux.net>
parents: 2209
diff changeset
1302 if (caps_has_hash(ver, bjid) || !query)
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1303 goto caps_callback_return;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1304
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1305 caps_add(ver);
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1306
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1307 info = lm_message_node_get_child(query, "identity");
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1308 while (info) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1309 if (!g_strcmp0(info->name, "identity"))
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1310 caps_add_identity(ver, lm_message_node_get_attribute(info, "category"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1311 lm_message_node_get_attribute(info, "name"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1312 lm_message_node_get_attribute(info, "type"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1313 lm_message_node_get_attribute(info, "xml:lang"));
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1314 info = info->next;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1315 }
2033
a37fbc3ac6aa Delivery receipts: Use LM-generated messages id
Mikael Berthe <mikael@lilotux.net>
parents: 2032
diff changeset
1316
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1317 info = lm_message_node_get_child(query, "feature");
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1318 while (info) {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1319 if (!g_strcmp0(info->name, "feature"))
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1320 caps_add_feature(ver, lm_message_node_get_attribute(info, "var"));
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1321 info = info->next;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1322 }
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1323
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1324 info = lm_message_node_get_child(query, "x");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1325 {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1326 LmMessageNode *field;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1327 LmMessageNode *value;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1328 const char *formtype, *var;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1329 while (info) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1330 if (!g_strcmp0(info->name, "x")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1331 && !g_strcmp0(lm_message_node_get_attribute(info, "type"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1332 "result")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1333 && !g_strcmp0(lm_message_node_get_attribute(info, "xmlns"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1334 "jabber:x:data")) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1335 field = lm_message_node_get_child(info, "field");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1336 formtype = NULL;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1337 while (field) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1338 if (!g_strcmp0(field->name, "field")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1339 && !g_strcmp0(lm_message_node_get_attribute(field, "var"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1340 "FORM_TYPE")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1341 && !g_strcmp0(lm_message_node_get_attribute(field, "type"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1342 "hidden")) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1343 value = lm_message_node_get_child(field, "value");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1344 if (value)
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1345 formtype = lm_message_node_get_value(value);
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1346 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1347 field = field->next;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1348 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1349 if (formtype) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1350 caps_add_dataform(ver, formtype);
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1351 field = lm_message_node_get_child(info, "field");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1352 while (field) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1353 var = lm_message_node_get_attribute(field, "var");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1354 if (!g_strcmp0(field->name, "field")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1355 && (g_strcmp0(var, "FORM_TYPE")
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1356 || g_strcmp0(lm_message_node_get_attribute(field, "type"),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1357 "hidden"))) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1358 value = lm_message_node_get_child(field, "value");
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1359 while (value) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1360 if (!g_strcmp0(value->name, "value"))
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1361 caps_add_dataform_field(ver, formtype, var,
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1362 lm_message_node_get_value(value));
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1363 value = value->next;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1364 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1365 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1366 field = field->next;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1367 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1368 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1369 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1370 info = info->next;
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1371 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1372 }
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1373
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1374 if (caps_verify(ver, hash))
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1375 caps_copy_to_persistent(ver, lm_message_node_to_string(query));
2033
a37fbc3ac6aa Delivery receipts: Use LM-generated messages id
Mikael Berthe <mikael@lilotux.net>
parents: 2032
diff changeset
1376 else
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1377 caps_move_to_local(ver, bjid);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1378 }
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1379
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1380 caps_callback_return:
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1381 g_free(bjid);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1382 g_free(ver);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1383 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1384 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1385
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1386 static LmHandlerResult handle_presence(LmMessageHandler *handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1387 LmConnection *connection,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1388 LmMessage *m, gpointer user_data)
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1389 {
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1390 char *bjid;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1391 const char *from, *rname, *p=NULL, *ustmsg=NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1392 enum imstatus ust;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1393 char bpprio;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1394 time_t timestamp = 0L;
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1395 LmMessageNode *muc_packet, *caps;
1910
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1396 LmMessageSubType mstype = lm_message_get_sub_type(m);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1397
1644
73fc85ea0b4b Do not send disco requests to offline resources
Mikael Berthe <mikael@lilotux.net>
parents: 1637
diff changeset
1398 // Check for MUC presence packet
1908
e2def760c6d0 Introduce NS_MUC_{USER,ADMIN,OWNER}
Mikael Berthe <mikael@lilotux.net>
parents: 1906
diff changeset
1399 muc_packet = lm_message_node_find_xmlns(m->node, NS_MUC_USER);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1400
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1401 from = lm_message_get_from(m);
1910
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1402 if (!from) {
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1403 scr_LogPrint(LPRINT_LOGNORM, "Unexpected presence packet!");
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1404
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1405 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) {
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1406 display_server_error(lm_message_node_get_child(m->node, "error"),
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1407 lm_message_get_from(m));
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1408 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1409 }
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1410 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1411 }
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1412
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1413 rname = strchr(from, JID_RESOURCE_SEPARATOR);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1414 if (rname) rname++;
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1415
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1416 if (settings_opt_get_int("ignore_self_presence")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1417 const char *self_fjid = lm_connection_get_jid(connection);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1418 if (self_fjid && !strcasecmp(self_fjid, from)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1419 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; // Ignoring self presence
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1420 }
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1421 }
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1422
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1423 bjid = jidtodisp(from);
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1424
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1425 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1426 LmMessageNode *x;
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1427 scr_LogPrint(LPRINT_LOGNORM, "Error presence packet from <%s>", bjid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1428 x = lm_message_node_find_child(m->node, "error");
1800
d2747442918a When displaying a server error, show the sender JID
Mikael Berthe <mikael@lilotux.net>
parents: 1780
diff changeset
1429 display_server_error(x, from);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1430 // Let's check it isn't a nickname conflict.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1431 // XXX Note: We should handle the <conflict/> string condition.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1432 if ((p = lm_message_node_get_attribute(x, "code")) != NULL) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1433 if (atoi(p) == 409) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1434 // 409 = conflict (nickname is in use or registered by another user)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1435 // If we are not inside this room, we should reset the nickname
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1436 GSList *room_elt = roster_find(bjid, jidsearch, 0);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1437 if (room_elt && !buddy_getinsideroom(room_elt->data))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1438 buddy_setnickname(room_elt->data, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1439 }
987
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1440 }
f47e312560af Improve JEP22 + JEP85 support
Mikael Berthe <mikael@lilotux.net>
parents: 986
diff changeset
1441
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1442 g_free(bjid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1443 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1444 }
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1445
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1446 p = lm_message_node_get_child_value(m->node, "priority");
2075
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1447 if (p && *p) {
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1448 int rawprio = atoi(p);
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1449 if (rawprio > 127)
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1450 bpprio = 127;
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1451 else if (rawprio < -128)
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1452 bpprio = -128;
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1453 else
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1454 bpprio = rawprio;
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1455 } else {
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1456 bpprio = 0;
f52b47f29ca0 Round high priority
Myhailo Danylenko <isbear@ukrpost.net>
parents: 2044
diff changeset
1457 }
986
ed697234bd39 Chat states receival (Alexis Hildebrandt)
Mikael Berthe <mikael@lilotux.net>
parents: 977
diff changeset
1458
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1459 ust = available;
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1460
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1461 p = lm_message_node_get_child_value(m->node, "show");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1462 if (p) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1463 if (!strcmp(p, "away")) ust = away;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1464 else if (!strcmp(p, "dnd")) ust = dontdisturb;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1465 else if (!strcmp(p, "xa")) ust = notavail;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1466 else if (!strcmp(p, "chat")) ust = freeforchat;
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1467 }
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1468
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1469 if (mstype == LM_MESSAGE_SUB_TYPE_UNAVAILABLE)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1470 ust = offline;
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1471
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1472 ustmsg = lm_message_node_get_child_value(m->node, "status");
1899
decf94827efe More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents: 1896
diff changeset
1473 if (ustmsg && !*ustmsg)
decf94827efe More lm_message_node_get_child_value() return value checks
Mikael Berthe <mikael@lilotux.net>
parents: 1896
diff changeset
1474 ustmsg = NULL;
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1475
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1476 // Timestamp?
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1477 timestamp = lm_message_node_get_timestamp(m->node);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1478
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1479 if (muc_packet) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1480 // This is a MUC presence message
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1481 handle_muc_presence(from, muc_packet, bjid, rname,
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1482 ust, ustmsg, timestamp, bpprio);
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1483 } else {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1484 // Not a MUC message, so this is a regular buddy...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1485 // Call hk_statuschange() if status has changed or if the
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1486 // status message is different
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1487 const char *msg;
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1488 msg = roster_getstatusmsg(bjid, rname);
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1489 if ((ust != roster_getstatus(bjid, rname)) ||
1728
15b3834cbe5f Handle priority changes when the contact status doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1722
diff changeset
1490 (!ustmsg && msg && msg[0]) ||
15b3834cbe5f Handle priority changes when the contact status doesn't change
Mikael Berthe <mikael@lilotux.net>
parents: 1722
diff changeset
1491 (ustmsg && (!msg || strcmp(ustmsg, msg))) ||
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1492 (bpprio != roster_getprio(bjid, rname)))
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1493 hk_statuschange(bjid, rname, bpprio, timestamp, ust, ustmsg);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1494 // Presence signature processing
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1495 if (!ustmsg)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1496 ustmsg = ""; // Some clients omit the <status/> element :-(
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1497 check_signature(bjid, rname,
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1498 lm_message_node_find_xmlns(m->node, NS_SIGNED), ustmsg);
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1499 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1500
1644
73fc85ea0b4b Do not send disco requests to offline resources
Mikael Berthe <mikael@lilotux.net>
parents: 1637
diff changeset
1501 // XEP-0115 Entity Capabilities
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1502 caps = lm_message_node_find_xmlns(m->node, NS_CAPS);
1644
73fc85ea0b4b Do not send disco requests to offline resources
Mikael Berthe <mikael@lilotux.net>
parents: 1637
diff changeset
1503 if (caps && ust != offline) {
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1504 const char *ver = lm_message_node_get_attribute(caps, "ver");
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1505 const char *hash = lm_message_node_get_attribute(caps, "hash");
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1506 GSList *sl_buddy = NULL;
1917
33d1c42cf07e Ignore malformed caps packets
Mikael Berthe <mikael@lilotux.net>
parents: 1911
diff changeset
1507
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1508 if (!hash) {
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1509 // No support for legacy format
1917
33d1c42cf07e Ignore malformed caps packets
Mikael Berthe <mikael@lilotux.net>
parents: 1911
diff changeset
1510 goto handle_presence_return;
33d1c42cf07e Ignore malformed caps packets
Mikael Berthe <mikael@lilotux.net>
parents: 1911
diff changeset
1511 }
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1512 if (!ver || !g_strcmp0(ver, "") || !g_strcmp0(hash, ""))
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1513 goto handle_presence_return;
1917
33d1c42cf07e Ignore malformed caps packets
Mikael Berthe <mikael@lilotux.net>
parents: 1911
diff changeset
1514
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1515 if (rname)
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1516 sl_buddy = roster_find(bjid, jidsearch, ROSTER_TYPE_USER);
1644
73fc85ea0b4b Do not send disco requests to offline resources
Mikael Berthe <mikael@lilotux.net>
parents: 1637
diff changeset
1517 // Only cache the caps if the user is on the roster
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1518 if (sl_buddy && buddy_getonserverflag(sl_buddy->data)) {
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1519 buddy_resource_setcaps(sl_buddy->data, rname, ver);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1520
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1521 if (!caps_has_hash(ver, bjid) && !caps_restore_from_persistent(ver)) {
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1522 char *node;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1523 LmMessageHandler *handler;
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1524 LmMessage *iq = lm_message_new_with_sub_type(from, LM_MESSAGE_TYPE_IQ,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1525 LM_MESSAGE_SUB_TYPE_GET);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1526 node = g_strdup_printf("%s#%s",
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1527 lm_message_node_get_attribute(caps, "node"),
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1528 ver);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1529 lm_message_node_set_attributes
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1530 (lm_message_node_add_child(iq->node, "query", NULL),
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1531 "xmlns", NS_DISCO_INFO,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1532 "node", node,
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1533 NULL);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1534 g_free(node);
1999
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1535 handler = lm_message_handler_new(cb_caps,
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1536 g_strdup_printf("%s,%s",ver,hash),
51f032d5ca22 Add support for XEP-0115 Entity Capabilities, with offline cache
Hermitifier
parents: 1998
diff changeset
1537 NULL);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1538 lm_connection_send_with_reply(connection, iq, handler, NULL);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1539 lm_message_unref(iq);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1540 lm_message_handler_unref(handler);
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1541 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1542 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1543 }
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1544
1917
33d1c42cf07e Ignore malformed caps packets
Mikael Berthe <mikael@lilotux.net>
parents: 1911
diff changeset
1545 handle_presence_return:
1731
4fbfae993c24 Improve login process
Mikael Berthe <mikael@lilotux.net>
parents: 1730
diff changeset
1546 g_free(bjid);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1547 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1548 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1549
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1550
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1551 static LmHandlerResult handle_iq(LmMessageHandler *handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1552 LmConnection *connection,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1553 LmMessage *m, gpointer user_data)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1554 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1555 int i;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1556 const char *xmlns = NULL;
2212
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1557 char *nodestr;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1558 LmMessageNode *x;
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1559 LmMessageSubType mstype = lm_message_get_sub_type(m);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1560
1647
cfa1fff86f78 Reorder processing in handle_iq()
Mikael Berthe <mikael@lilotux.net>
parents: 1646
diff changeset
1561 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
1562 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
1563 lm_message_get_from(m));
1647
cfa1fff86f78 Reorder processing in handle_iq()
Mikael Berthe <mikael@lilotux.net>
parents: 1646
diff changeset
1564 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
cfa1fff86f78 Reorder processing in handle_iq()
Mikael Berthe <mikael@lilotux.net>
parents: 1646
diff changeset
1565 }
cfa1fff86f78 Reorder processing in handle_iq()
Mikael Berthe <mikael@lilotux.net>
parents: 1646
diff changeset
1566
1904
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1567 if (mstype == LM_MESSAGE_SUB_TYPE_RESULT) {
2212
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1568 nodestr = lm_message_node_to_string(m->node);
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1569 scr_LogPrint(LPRINT_DEBUG, "Unhandled IQ result? %s", nodestr);
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1570 g_free(nodestr);
1904
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1571 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1572 }
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1573
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1574 for (x = m->node->children; x; x=x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1575 xmlns = lm_message_node_get_attribute(x, "xmlns");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1576 if (xmlns)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1577 for (i=0; iq_handlers[i].xmlns; ++i)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1578 if (!strcmp(iq_handlers[i].xmlns, xmlns))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1579 return iq_handlers[i].handler(NULL, connection, m, user_data);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1580 xmlns = NULL;
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1581 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1582
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1583 if ((mstype == LM_MESSAGE_SUB_TYPE_SET) ||
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1584 (mstype == LM_MESSAGE_SUB_TYPE_GET))
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1585 send_iq_error(connection, m, XMPP_ERROR_NOT_IMPLEMENTED);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1586
2212
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1587 nodestr = lm_message_node_to_string(m->node);
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1588 scr_LogPrint(LPRINT_DEBUG, "Unhandled IQ: %s", nodestr);
778280b01bcb Fix a few memory leaks
Mikael Berthe <mikael@lilotux.net>
parents: 2210
diff changeset
1589 g_free(nodestr);
1621
eec2fa456d0f Do not print Unhandled IQ results to the log window
Mikael Berthe <mikael@lilotux.net>
parents: 1616
diff changeset
1590
1904
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1591 scr_LogPrint(LPRINT_NORMAL, "Received unhandled IQ request from <%s>.",
9a3d7a7dada2 Fix looping issue spotted by isbear when sending manual IQ messages
Mikael Berthe <mikael@lilotux.net>
parents: 1902
diff changeset
1592 lm_message_get_from(m));
1721
8cfc2a386b1f Do not display Unhandled IQ request stanzas in the log window
Mikael Berthe <mikael@lilotux.net>
parents: 1720
diff changeset
1593
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1594 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
1128
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1595 }
ac9c89f6cb51 Support for invitations to muc rooms
misc@mandriva.org
parents: 1104
diff changeset
1596
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1597 static LmHandlerResult handle_s10n(LmMessageHandler *handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1598 LmConnection *connection,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1599 LmMessage *m, gpointer user_data)
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1600 {
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1601 char *r;
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1602 char *buf;
818
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1603 int newbuddy;
1906
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1604 guint hook_result;
1910
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1605 LmMessageSubType mstype = lm_message_get_sub_type(m);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1606 const char *from = lm_message_get_from(m);
1906
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1607 const char *msg = lm_message_node_get_child_value(m->node, "status");
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1608
1910
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1609 if (mstype == LM_MESSAGE_SUB_TYPE_ERROR) {
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1610 display_server_error(lm_message_node_get_child(m->node, "error"),
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1611 lm_message_get_from(m));
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1612 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1613 }
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1614
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1615 if (!from) {
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1616 scr_LogPrint(LPRINT_DEBUG, "handle_s10n: Unexpected presence packet!");
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1617 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
3695266e16c7 Fix error presence packet handling.
Mikael Berthe <mikael@lilotux.net>
parents: 1909
diff changeset
1618 }
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1619 r = jidtodisp(from);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1620
818
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1621 newbuddy = !roster_find(r, jidsearch, 0);
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1622
1906
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1623 hook_result = hk_subscription(mstype, r, msg);
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1624
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1625 if (mstype == LM_MESSAGE_SUB_TYPE_SUBSCRIBE) {
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1626 /* The sender wishes to subscribe to our presence */
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1627
1906
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1628 if (hook_result) {
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1629 g_free(r);
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1630 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
5d37cee8c6c6 Add "hook-subscription" hook and hk_subscription()
Mikael Berthe <mikael@lilotux.net>
parents: 1905
diff changeset
1631 }
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1632
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1633 buf = g_strdup_printf("<%s> wants to subscribe to your presence updates",
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1634 from);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1635 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1636 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1637 g_free(buf);
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1638
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1639 if (msg) {
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 756
diff changeset
1640 buf = g_strdup_printf("<%s> said: %s", from, msg);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1641 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
772
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 756
diff changeset
1642 replace_nl_with_dots(buf);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 756
diff changeset
1643 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
464be13343a9 Store most data in UTF-8 internally
Mikael Berthe <mikael@lilotux.net>
parents: 756
diff changeset
1644 g_free(buf);
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1645 }
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1646
749
6c633adaae10 Use events system for subscription requests
Mikael Berthe <mikael@lilotux.net>
parents: 745
diff changeset
1647 // Create a new event item
1685
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1648 {
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1649 const char *id;
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1650 char *desc = g_strdup_printf("<%s> wants to subscribe to your "
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1651 "presence updates", r);
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1652
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1653 id = evs_new(desc, NULL, 0, evscallback_subscription, g_strdup(r),
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1654 (GDestroyNotify)g_free);
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1655 g_free(desc);
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1656 if (id)
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1657 buf = g_strdup_printf("Please use /event %s accept|reject", id);
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1658 else
1342df44c814 Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1684
diff changeset
1659 buf = g_strdup_printf("Unable to create a new event!");
751
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 749
diff changeset
1660 }
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1661 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
617
d3a8b43bf9e7 Add "/authorization" command
Mikael Berthe <mikael@lilotux.net>
parents: 616
diff changeset
1662 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1663 g_free(buf);
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1664 } else if (mstype == LM_MESSAGE_SUB_TYPE_UNSUBSCRIBE) {
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1665 /* The sender is unsubscribing from our presence */
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1666 xmpp_send_s10n(from, LM_MESSAGE_SUB_TYPE_UNSUBSCRIBED);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1667 buf = g_strdup_printf("<%s> is unsubscribing from your "
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1668 "presence updates", from);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1669 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1670 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1671 g_free(buf);
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1672 } else if (mstype == LM_MESSAGE_SUB_TYPE_SUBSCRIBED) {
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1673 /* The sender has allowed us to receive their presence */
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1674 buf = g_strdup_printf("<%s> has allowed you to receive their "
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1675 "presence updates", from);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1676 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1677 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1678 g_free(buf);
1646
472cd6ac20fa Small optimization
Mikael Berthe <mikael@lilotux.net>
parents: 1644
diff changeset
1679 } else if (mstype == LM_MESSAGE_SUB_TYPE_UNSUBSCRIBED) {
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1680 /* The subscription request has been denied or a previously-granted
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1681 subscription has been cancelled */
610
0e8247cf2bd1 Consider buddies as offline when they have cancelled our subscription
Mikael Berthe <mikael@lilotux.net>
parents: 609
diff changeset
1682 roster_unsubscribed(from);
859
cb2a3a1d985f Make sure we update the roster when a subscription is cancelled
Mikael Berthe <mikael@lilotux.net>
parents: 845
diff changeset
1683 update_roster = TRUE;
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1684 buf = g_strdup_printf("<%s> has cancelled your subscription to "
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1685 "their presence updates", from);
1290
e42f48103609 Drawing the MUC nicks by a different color
Michal 'vorner' Vaner <vorner@ucw.cz>
parents: 1282
diff changeset
1686 scr_WriteIncomingMessage(r, buf, 0, HBB_PREFIX_INFO, 0);
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1687 scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1688 g_free(buf);
603
9516db839e08 Store subscription data
Mikael Berthe <mikael@lilotux.net>
parents: 600
diff changeset
1689 } else {
1634
81e2d8a9106b Add missing g_free()
Mikael Berthe <mikael@lilotux.net>
parents: 1633
diff changeset
1690 g_free(r);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1691 return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
818
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1692 }
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1693
1010
54405d09b15a Add a call to buddylist_build()
Mikael Berthe <mikael@lilotux.net>
parents: 1008
diff changeset
1694 if (newbuddy)
818
55cd45481a07 Fix a buddylist bug when receiving a subscription request
Mikael Berthe <mikael@lilotux.net>
parents: 793
diff changeset
1695 update_roster = TRUE;
611
ad737139a144 Improve subscription management
Mikael Berthe <mikael@lilotux.net>
parents: 610
diff changeset
1696 g_free(r);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1697 return LM_HANDLER_RESULT_REMOVE_MESSAGE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1698 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1699
1729
e6e89b1d7831 Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents: 1728
diff changeset
1700 // TODO: Use the enum of loudmouth, when it's included in the header...
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1701 typedef enum {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1702 LM_LOG_LEVEL_VERBOSE = 1 << (G_LOG_LEVEL_USER_SHIFT),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1703 LM_LOG_LEVEL_NET = 1 << (G_LOG_LEVEL_USER_SHIFT + 1),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1704 LM_LOG_LEVEL_PARSER = 1 << (G_LOG_LEVEL_USER_SHIFT + 2),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1705 LM_LOG_LEVEL_SSL = 1 << (G_LOG_LEVEL_USER_SHIFT + 3),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1706 LM_LOG_LEVEL_SASL = 1 << (G_LOG_LEVEL_USER_SHIFT + 4),
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1707 LM_LOG_LEVEL_ALL = (LM_LOG_LEVEL_NET |
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1708 LM_LOG_LEVEL_VERBOSE |
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1709 LM_LOG_LEVEL_PARSER |
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1710 LM_LOG_LEVEL_SSL |
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1711 LM_LOG_LEVEL_SASL)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1712 } LmLogLevelFlags;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1713
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1714 static void lm_debug_handler (const gchar *log_domain,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1715 GLogLevelFlags log_level,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1716 const gchar *message,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1717 gpointer user_data)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1718 {
1616
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1719 if (message && *message) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1720 char *msg;
1616
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1721 int mcabber_loglevel = settings_opt_get_int("tracelog_level");
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1722
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1723 if (mcabber_loglevel < 2)
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1724 return;
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1725
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1726 if (message[0] == '\n')
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1727 msg = g_strdup(&message[1]);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1728 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1729 msg = g_strdup(message);
1616
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1730
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1731 if (msg[strlen(msg)-1] == '\n')
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1732 msg[strlen(msg)-1] = '\0';
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1733
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1734 if (log_level & LM_LOG_LEVEL_VERBOSE) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1735 scr_LogPrint(LPRINT_DEBUG, "LM-VERBOSE: %s", msg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1736 }
1616
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1737 if (log_level & LM_LOG_LEVEL_NET) {
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1738 if (mcabber_loglevel > 2)
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1739 scr_LogPrint(LPRINT_DEBUG, "LM-NET: %s", msg);
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1740 } else if (log_level & LM_LOG_LEVEL_PARSER) {
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1741 if (mcabber_loglevel > 3)
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1742 scr_LogPrint(LPRINT_DEBUG, "LM-PARSER: %s", msg);
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1743 } else if (log_level & LM_LOG_LEVEL_SASL) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1744 scr_LogPrint(LPRINT_DEBUG, "LM-SASL: %s", msg);
1616
4c7104ec5f3b Add 2 debugging levels (for 'tracelog_level')
Mikael Berthe <mikael@lilotux.net>
parents: 1615
diff changeset
1745 } else if (log_level & LM_LOG_LEVEL_SSL) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1746 scr_LogPrint(LPRINT_DEBUG, "LM-SSL: %s", msg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1747 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1748 g_free(msg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1749 }
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1750 }
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
1751
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1752
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1753 // xmpp_connect()
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1754 // Return a non-zero value if there's an obvious problem
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1755 // (no JID, no password, etc.)
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1756 gint xmpp_connect(void)
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1757 {
2087
305297d088c2 Fix GCC warning (variable set but not used)
franky
parents: 2086
diff changeset
1758 const char *userjid, *password, *resource, *servername, *ssl_fpr;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1759 char *dynresource = NULL;
2203
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
1760 char fpr[FINGERPRINT_LENGTH] = {0};
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1761 const char *proxy_host;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1762 const char *resource_prefix = PACKAGE_NAME;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1763 char *fjid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1764 int ssl, tls;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1765 LmSSL *lssl;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1766 unsigned int port;
2197
189abf03ef24 Fix fingerprint management
Mikael Berthe <mikael@lilotux.net>
parents: 2195
diff changeset
1767 unsigned int ping = 40;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1768 LmMessageHandler *handler;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1769 GError *error = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1770
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1771 xmpp_disconnect();
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1772
2085
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1773 servername = settings_opt_get("server");
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1774 userjid = settings_opt_get("jid");
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1775 password = settings_opt_get("password");
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1776 resource = settings_opt_get("resource");
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1777 proxy_host = settings_opt_get("proxy_host");
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1778 ssl_fpr = settings_opt_get("ssl_fingerprint");
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1779
1610
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1780 if (!userjid) {
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1781 scr_LogPrint(LPRINT_LOGNORM, "Your JID has not been specified!");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1782 return -1;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1783 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1784 if (!password) {
1610
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1785 scr_LogPrint(LPRINT_LOGNORM, "Your password has not been specified!");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1786 return -1;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1787 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1788
1653
fca9a4c17432 Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1647
diff changeset
1789 lconnection = lm_connection_new_with_context(NULL, main_context);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1790
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1791 g_log_set_handler("LM", LM_LOG_LEVEL_ALL, lm_debug_handler, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1792
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1793 if (settings_opt_get("pinginterval"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1794 ping = (unsigned int) settings_opt_get_int("pinginterval");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1795 lm_connection_set_keep_alive_rate(lconnection, ping);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1796 scr_LogPrint(LPRINT_DEBUG, "Ping interval established: %d secs", ping);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1797
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1798 lm_connection_set_disconnect_function(lconnection, connection_close_cb,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1799 NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1800
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1801 handler = lm_message_handler_new(handle_messages, NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1802 lm_connection_register_message_handler(lconnection, handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1803 LM_MESSAGE_TYPE_MESSAGE,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1804 LM_HANDLER_PRIORITY_NORMAL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1805 lm_message_handler_unref(handler);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1806
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1807 handler = lm_message_handler_new(handle_iq, NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1808 lm_connection_register_message_handler(lconnection, handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1809 LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1810 LM_HANDLER_PRIORITY_NORMAL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1811 lm_message_handler_unref(handler);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1812
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1813 handler = lm_message_handler_new(handle_presence, NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1814 lm_connection_register_message_handler(lconnection, handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1815 LM_MESSAGE_TYPE_PRESENCE,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1816 LM_HANDLER_PRIORITY_LAST);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1817 lm_message_handler_unref(handler);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1818
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1819 handler = lm_message_handler_new(handle_s10n, NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1820 lm_connection_register_message_handler(lconnection, handler,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1821 LM_MESSAGE_TYPE_PRESENCE,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1822 LM_HANDLER_PRIORITY_NORMAL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1823 lm_message_handler_unref(handler);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1824
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1825 /* Connect to server */
1902
51cc01a1a5ec Improve messages when connecting to the Jabber server
Mikael Berthe <mikael@lilotux.net>
parents: 1899
diff changeset
1826 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Connecting to server%s%s",
51cc01a1a5ec Improve messages when connecting to the Jabber server
Mikael Berthe <mikael@lilotux.net>
parents: 1899
diff changeset
1827 servername ? ": " : "",
51cc01a1a5ec Improve messages when connecting to the Jabber server
Mikael Berthe <mikael@lilotux.net>
parents: 1899
diff changeset
1828 servername ? servername : "");
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1829 if (!resource)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1830 resource = resource_prefix;
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1831
1747
c4f67e2e675f Randomize reconnection delay
Mikael Berthe <mikael@lilotux.net>
parents: 1746
diff changeset
1832 // Initialize pseudo-random seed
c4f67e2e675f Randomize reconnection delay
Mikael Berthe <mikael@lilotux.net>
parents: 1746
diff changeset
1833 srandom(time(NULL));
c4f67e2e675f Randomize reconnection delay
Mikael Berthe <mikael@lilotux.net>
parents: 1746
diff changeset
1834
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1835 if (!settings_opt_get("disable_random_resource")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1836 #if HAVE_ARC4RANDOM
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1837 dynresource = g_strdup_printf("%s.%08x", resource, arc4random());
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1838 #else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1839 unsigned int tab[2];
1746
b7574de9ae4b Use random() instead of rand()
Mikael Berthe <mikael@lilotux.net>
parents: 1733
diff changeset
1840 tab[0] = (unsigned int) (0xffff * (random() / (RAND_MAX + 1.0)));
b7574de9ae4b Use random() instead of rand()
Mikael Berthe <mikael@lilotux.net>
parents: 1733
diff changeset
1841 tab[1] = (unsigned int) (0xffff * (random() / (RAND_MAX + 1.0)));
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1842 dynresource = g_strdup_printf("%s.%04x%04x", resource, tab[0], tab[1]);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1843 #endif
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1844 resource = dynresource;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1845 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1846
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1847 port = (unsigned int) settings_opt_get_int("port");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1848
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1849 if (port)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1850 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using port %d", port);
1902
51cc01a1a5ec Improve messages when connecting to the Jabber server
Mikael Berthe <mikael@lilotux.net>
parents: 1899
diff changeset
1851 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " with resource %s", resource);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1852
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1853 if (proxy_host) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1854 int proxy_port = settings_opt_get_int("proxy_port");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1855 if (proxy_port <= 0 || proxy_port > 65535) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1856 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, "Invalid proxy port: %d",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1857 proxy_port);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1858 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1859 const char *proxy_user, *proxy_pass;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1860 LmProxy *lproxy;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1861 proxy_user = settings_opt_get("proxy_user");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1862 proxy_pass = settings_opt_get("proxy_pass");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1863 // Proxy initialization
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1864 lproxy = lm_proxy_new_with_server(LM_PROXY_TYPE_HTTP,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1865 proxy_host, proxy_port);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1866 lm_proxy_set_username(lproxy, proxy_user);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1867 lm_proxy_set_password(lproxy, proxy_pass);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1868 lm_connection_set_proxy(lconnection, lproxy);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1869 lm_proxy_unref(lproxy);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1870 scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using proxy %s:%d",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1871 proxy_host, proxy_port);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1872 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1873 }
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
1874
1610
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1875 fjid = compose_jid(userjid, servername, resource);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1876 lm_connection_set_jid(lconnection, fjid);
1610
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1877 if (servername)
6db9f403f707 Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents: 1604
diff changeset
1878 lm_connection_set_server(lconnection, servername);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1879 #if defined(HAVE_LIBOTR)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1880 otr_init(fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1881 #endif
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1882 g_free(fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1883 g_free(dynresource);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1884
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1885 ssl = settings_opt_get_int("ssl");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1886 tls = settings_opt_get_int("tls");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1887
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1888 if (!lm_ssl_is_supported()) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1889 if (ssl || tls) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1890 scr_LogPrint(LPRINT_LOGNORM, "** Error: SSL is NOT available, "
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1891 "please recompile loudmouth with SSL enabled.");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1892 return -1;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1893 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1894 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1895
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1896 if (ssl && tls) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1897 scr_LogPrint(LPRINT_LOGNORM, "You can only set ssl or tls, not both.");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1898 return -1;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1899 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1900
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1901 if (!port)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1902 port = (ssl ? LM_CONNECTION_DEFAULT_PORT_SSL : LM_CONNECTION_DEFAULT_PORT);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1903 lm_connection_set_port(lconnection, port);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1904
2203
170597f5365b Use more generic routines to convert fingerprints to/from hexadecimal
Mikael Berthe <mikael@lilotux.net>
parents: 2199
diff changeset
1905 if (ssl_fpr && (!hex_to_fingerprint(ssl_fpr, fpr, FINGERPRINT_LENGTH))) {
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1906 scr_LogPrint(LPRINT_LOGNORM, "** Please set the fingerprint in the format "
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1907 "97:5C:00:3F:1D:77:45:25:E2:C5:70:EC:83:C8:87:EE");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1908 return -1;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1909 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1910
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1911 lssl = lm_ssl_new((ssl_fpr ? fpr : NULL), ssl_cb, NULL, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1912 if (lssl) {
2086
3667697d677d Fix compilation for old loudmouth libraries
franky
parents: 2085
diff changeset
1913 #ifdef HAVE_LM_SSL_CIPHER_LIST
2087
305297d088c2 Fix GCC warning (variable set but not used)
franky
parents: 2086
diff changeset
1914 const char *ssl_ciphers = settings_opt_get("ssl_ciphers");
2085
88b6e9707e02 Added setting "ssl_ciphers" to define the allowed ciphers
franky
parents: 2075
diff changeset
1915 lm_ssl_set_cipher_list(lssl, ssl_ciphers);
2086
3667697d677d Fix compilation for old loudmouth libraries
franky
parents: 2085
diff changeset
1916 #endif
2089
91a8f3740a1a Added setting "ssl_ca" to set additional certificates to trust
franky
parents: 2087
diff changeset
1917 #ifdef HAVE_LM_SSL_CA
91a8f3740a1a Added setting "ssl_ca" to set additional certificates to trust
franky
parents: 2087
diff changeset
1918 const char *ssl_ca = settings_opt_get("ssl_ca");
91a8f3740a1a Added setting "ssl_ca" to set additional certificates to trust
franky
parents: 2087
diff changeset
1919 lm_ssl_set_ca(lssl, ssl_ca);
91a8f3740a1a Added setting "ssl_ca" to set additional certificates to trust
franky
parents: 2087
diff changeset
1920 #endif
2087
305297d088c2 Fix GCC warning (variable set but not used)
franky
parents: 2086
diff changeset
1921 lm_ssl_use_starttls(lssl, !ssl, tls);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1922 lm_connection_set_ssl(lconnection, lssl);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1923 lm_ssl_unref(lssl);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1924 } else if (ssl || tls) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1925 scr_LogPrint(LPRINT_LOGNORM, "** Error: Couldn't create SSL struct.");
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1926 return -1;
671
c5da36fd437a Do not process packet if type = 0
Mikael Berthe <mikael@lilotux.net>
parents: 668
diff changeset
1927 }
c5da36fd437a Do not process packet if type = 0
Mikael Berthe <mikael@lilotux.net>
parents: 668
diff changeset
1928
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1929 if (!lm_connection_open(lconnection, connection_open_cb,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1930 NULL, FALSE, &error)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1931 _try_to_reconnect();
1717
c12455fec611 Remove extra newlines in scr_LogPrint() calls
Mikael Berthe <mikael@lilotux.net>
parents: 1716
diff changeset
1932 scr_LogPrint(LPRINT_LOGNORM, "Failed to open: %s", error->message);
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1933 g_error_free(error);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1934 }
1810
8c2651fc217a Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents: 1800
diff changeset
1935 return 0;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1936 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1937
1920
bfa507815e0c Add caps to presence when joining a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 1917
diff changeset
1938 // xmpp_insert_entity_capabilities(presence_stanza)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1939 // Entity Capabilities (XEP-0115)
1920
bfa507815e0c Add caps to presence when joining a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 1917
diff changeset
1940 void xmpp_insert_entity_capabilities(LmMessageNode *x, enum imstatus status)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1941 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1942 LmMessageNode *y;
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1943 const char *ver = entity_version(status);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1944
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1945 y = lm_message_node_add_child(x, "c", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1946 lm_message_node_set_attribute(y, "xmlns", NS_CAPS);
1600
c5ee395fbc8c Updated Entity Capabilities support (XEP-0115)
franky
parents: 1599
diff changeset
1947 lm_message_node_set_attribute(y, "hash", "sha-1");
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1948 lm_message_node_set_attribute(y, "node", MCABBER_CAPS_NODE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1949 lm_message_node_set_attribute(y, "ver", ver);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1950 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1951
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1952 void xmpp_disconnect(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1953 {
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1954 if (!lconnection)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1955 return;
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1956 if (lm_connection_is_authenticated(lconnection)) {
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1957 // Launch pre-disconnect internal hook
1683
b09f82f61745 Split HOOK_INTERNAL
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1682
diff changeset
1958 hk_predisconnect();
1682
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1959 // Announce it to everyone else
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1960 xmpp_setstatus(offline, NULL, "", FALSE);
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1961 }
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1962 if (lm_connection_is_open(lconnection))
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1963 lm_connection_close(lconnection, NULL);
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1964 lm_connection_unref(lconnection);
d1e8fb14ce2d Destroy lm connection object on disconnect
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1668
diff changeset
1965 lconnection = NULL;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1966 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1967
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1968 void xmpp_setstatus(enum imstatus st, const char *recipient, const char *msg,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1969 int do_not_sign)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1970 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1971 LmMessage *m;
1693
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
1972 gboolean isonline;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1973
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1974 if (msg) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1975 // The status message has been specified. We'll use it, unless it is
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1976 // "-" which is a special case (option meaning "no status message").
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1977 if (!strcmp(msg, "-"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1978 msg = "";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1979 } else {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1980 // No status message specified; we'll use:
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1981 // a) the default status message (if provided by the user);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1982 // b) the current status message;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1983 // c) no status message (i.e. an empty one).
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1984 msg = settings_get_status_msg(st);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1985 if (!msg) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1986 if (mystatusmsg)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1987 msg = mystatusmsg;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1988 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1989 msg = "";
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1990 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1991 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1992
1693
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
1993 isonline = xmpp_is_online();
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
1994
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1995 // Only send the packet if we're online.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1996 // (But we want to update internal status even when disconnected,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
1997 // in order to avoid some problems during network failures)
1693
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
1998 if (isonline) {
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
1999 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2000 const char *s_msg = (st != invisible ? msg : NULL);
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2001 #else
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2002 // XXX Could be removed if/when we get rid of status invisible
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2003 // completely.
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2004 const char *s_msg = msg;
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2005 #endif
2023
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2006
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2007 if (!recipient) {
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2008 // This is a global status, send presence to chatrooms
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2009 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2010 if (st != invisible)
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2011 #endif
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2012 {
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2013 struct T_presence room_presence;
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2014 room_presence.st = st;
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2015 room_presence.msg = msg;
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2016 foreach_buddy(ROSTER_TYPE_ROOM, &roompresence, &room_presence);
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2017 }
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2018 }
26edaf6ea10b xmpp_setstatus: send presence to MUC rooms before the global presence
Mikael Berthe <mikael@lilotux.net>
parents: 2017
diff changeset
2019
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2020 m = lm_message_new_presence(st, recipient, s_msg);
1920
bfa507815e0c Add caps to presence when joining a MUC room
Mikael Berthe <mikael@lilotux.net>
parents: 1917
diff changeset
2021 xmpp_insert_entity_capabilities(m->node, st); // Entity Caps (XEP-0115)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2022 #ifdef HAVE_GPGME
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2023 if (!do_not_sign && gpg_enabled()) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2024 char *signature;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2025 signature = gpg_sign(s_msg ? s_msg : "");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2026 if (signature) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2027 LmMessageNode *y;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2028 y = lm_message_node_add_child(m->node, "x", signature);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2029 lm_message_node_set_attribute(y, "xmlns", NS_SIGNED);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2030 g_free(signature);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2031 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2032 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2033 #endif
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2034 lm_connection_send(lconnection, m, NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2035 lm_message_unref(m);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2036 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2037
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2038 // If we didn't change our _global_ status, we are done
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2039 if (recipient) return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2040
1693
32c6d81bd1ef Update status when unexpectedly disconnected from server
Mikael Berthe <mikael@lilotux.net>
parents: 1691
diff changeset
2041 if (isonline || !st) {
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2042 // We'll have to update the roster if we switch to/from offline because
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2043 // we don't know the presences of buddies when offline...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2044 if (mystatus == offline || st == offline)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2045 update_roster = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2046
1716
d30fb41725fe Do not call hk_mystatuschange() twice when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1715
diff changeset
2047 if (isonline || mystatus || st)
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2048 #ifdef WITH_DEPRECATED_STATUS_INVISIBLE
1716
d30fb41725fe Do not call hk_mystatuschange() twice when we're disconnected
Mikael Berthe <mikael@lilotux.net>
parents: 1715
diff changeset
2049 hk_mystatuschange(0, mystatus, st, (st != invisible ? msg : ""));
1972
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2050 #else
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2051 hk_mystatuschange(0, mystatus, st, msg);
45f0f0f60656 Remove deprecated status invisible
Mikael Berthe <mikael@lilotux.net>
parents: 1963
diff changeset
2052 #endif
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2053 mystatus = st;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2054 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2055
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2056 if (st)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2057 mywantedstatus = st;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2058
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2059 if (msg != mystatusmsg) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2060 g_free(mystatusmsg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2061 if (*msg)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2062 mystatusmsg = g_strdup(msg);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2063 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2064 mystatusmsg = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2065 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2066
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1747
diff changeset
2067 if (!scr_curses_status())
1733
a9b0364c0cb2 Fix segfault introduced in previous commit
Mikael Berthe <mikael@lilotux.net>
parents: 1731
diff changeset
2068 return; // Called from config. file
a9b0364c0cb2 Fix segfault introduced in previous commit
Mikael Berthe <mikael@lilotux.net>
parents: 1731
diff changeset
2069
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2070 if (!Autoaway)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2071 update_last_use();
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2072
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2073 // Update status line
1780
e4378fbab5d7 Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents: 1747
diff changeset
2074 scr_update_main_status(TRUE);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2075 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2076
547
1df26ff0ed8c Break packethandler() out
Mikael Berthe <mikael@lilotux.net>
parents: 539
diff changeset
2077
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2078 enum imstatus xmpp_getstatus(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2079 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2080 return mystatus;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2081 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2082
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2083 const char *xmpp_getstatusmsg(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2084 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2085 return mystatusmsg;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2086 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2087
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2088 // xmpp_setprevstatus()
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2089 // Set previous status. This wrapper function is used after a disconnection.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2090 void xmpp_setprevstatus(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2091 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2092 xmpp_setstatus(mywantedstatus, NULL, mystatusmsg, FALSE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2093 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2094
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2095 // send_storage(store)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2096 // Send the node "store" to update the server.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2097 // Note: the sender should check we're online.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2098 void send_storage(LmMessageNode *store)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2099 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2100 LmMessage *iq;
1994
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
2101 LmMessageHandler *handler;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2102 LmMessageNode *query;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2103
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2104 if (!rosternotes) return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2105
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2106 iq = lm_message_new_with_sub_type(NULL, LM_MESSAGE_TYPE_IQ,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2107 LM_MESSAGE_SUB_TYPE_SET);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2108 query = lm_message_node_add_child(iq->node, "query", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2109 lm_message_node_set_attribute(query, "xmlns", NS_PRIVATE);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2110 lm_message_node_insert_childnode(query, store);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2111
1994
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
2112 handler = lm_message_handler_new(handle_iq_dummy, NULL, FALSE);
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
2113 lm_connection_send_with_reply(lconnection, iq, handler, NULL);
024bdd1c6418 Add a dummy handler for some unhandled IQ replies
Mikael Berthe <mikael@lilotux.net>
parents: 1984
diff changeset
2114 lm_message_handler_unref(handler);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2115 lm_message_unref(iq);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2116 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2117
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2118
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2119 // xmpp_is_bookmarked(roomjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2120 // Return TRUE if there's a bookmark for the given jid.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2121 guint xmpp_is_bookmarked(const char *bjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2122 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2123 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2124
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2125 if (!bookmarks)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2126 return FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2127
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2128 // Walk through the storage bookmark tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2129 for (x = bookmarks->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2130 // If the node is a conference item, check the jid.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2131 if (x->name && !strcmp(x->name, "conference")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2132 const char *fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2133 if (fjid && !strcasecmp(bjid, fjid))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2134 return TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2135 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2136 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2137 return FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2138 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2139
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2140 // xmpp_get_bookmark_nick(roomjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2141 // Return the room nickname if it is present in a bookmark.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2142 const char *xmpp_get_bookmark_nick(const char *bjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2143 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2144 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2145
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2146 if (!bookmarks || !bjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2147 return NULL;
469
a926523d2392 Use UTF8 to handle resources and room nicknames
Mikael Berthe <mikael@lilotux.net>
parents: 468
diff changeset
2148
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2149 // Walk through the storage bookmark tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2150 for (x = bookmarks->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2151 // If the node is a conference item, check the jid.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2152 if (x->name && !strcmp(x->name, "conference")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2153 const char *fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2154 if (fjid && !strcasecmp(bjid, fjid))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2155 return lm_message_node_get_child_value(x, "nick");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2156 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2157 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2158 return NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2159 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2160
2138
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2161 // xmpp_get_bookmark_password(roomjid)
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2162 // Return the room password if it is present in a bookmark.
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2163 const char *xmpp_get_bookmark_password(const char *bjid)
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2164 {
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2165 LmMessageNode *x;
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2166
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2167 if (!bookmarks || !bjid)
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2168 return NULL;
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2169
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2170 // Walk through the storage bookmark tags
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2171 for (x = bookmarks->children ; x; x = x->next) {
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2172 // If the node is a conference item, check the jid.
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2173 if (x->name && !strcmp(x->name, "conference")) {
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2174 const char *fjid = lm_message_node_get_attribute(x, "jid");
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2175 if (fjid && !strcasecmp(bjid, fjid))
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2176 return lm_message_node_get_child_value(x, "password");
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2177 }
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2178 }
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2179 return NULL;
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2180 }
f063e36425a2 Use bookmarked password (if any) when using "/room join"
Mikael Berthe <mikael@lilotux.net>
parents: 2137
diff changeset
2181
2010
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2182 int xmpp_get_bookmark_autojoin(const char *bjid)
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2183 {
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2184 LmMessageNode *x;
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2185
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2186 if (!bookmarks || !bjid)
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2187 return 0;
2033
a37fbc3ac6aa Delivery receipts: Use LM-generated messages id
Mikael Berthe <mikael@lilotux.net>
parents: 2032
diff changeset
2188
2010
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2189 // Walk through the storage bookmark tags
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2190 for (x = bookmarks->children ; x; x = x->next) {
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2191 // If the node is a conference item, check the jid.
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2192 if (x->name && !strcmp(x->name, "conference")) {
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2193 const char *fjid = lm_message_node_get_attribute(x, "jid");
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2194 if (fjid && !strcasecmp(bjid, fjid)) {
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2195 const char *autojoin;
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2196 autojoin = lm_message_node_get_attribute(x, "autojoin");
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2197 if (autojoin && (!strcmp(autojoin, "1") || !strcmp(autojoin, "true")))
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2198 return 1;
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2199 return 0;
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2200 }
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2201 }
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2202 }
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2203 return 0;
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2204 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2205
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2206 // xmpp_get_all_storage_bookmarks()
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2207 // Return a GSList with all storage bookmarks.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2208 // The caller should g_free the list (not the MUC jids).
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2209 GSList *xmpp_get_all_storage_bookmarks(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2210 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2211 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2212 GSList *sl_bookmarks = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2213
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2214 // If we have no bookmarks, probably the server doesn't support them.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2215 if (!bookmarks)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2216 return NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2217
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2218 // Walk through the storage bookmark tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2219 for (x = bookmarks->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2220 // If the node is a conference item, let's add the note to our list.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2221 if (x->name && !strcmp(x->name, "conference")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2222 struct bookmark *bm_elt;
2137
0bfc4bfc127c Add support for storing passwords to a MUC (Nico Golde)
Mikael Berthe <mikael@lilotux.net>
parents: 2134
diff changeset
2223 const char *autojoin, *name, *nick, *passwd;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2224 const char *fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2225 if (!fjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2226 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2227 bm_elt = g_new0(struct bookmark, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2228 bm_elt->roomjid = g_strdup(fjid);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2229 autojoin = lm_message_node_get_attribute(x, "autojoin");
1818
4694fad35ed8 Fix not displaying of MUC nick, set in bookmark
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1811
diff changeset
2230 nick = lm_message_node_get_child_value(x, "nick");
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2231 name = lm_message_node_get_attribute(x, "name");
2137
0bfc4bfc127c Add support for storing passwords to a MUC (Nico Golde)
Mikael Berthe <mikael@lilotux.net>
parents: 2134
diff changeset
2232 passwd = lm_message_node_get_child_value(x, "password");
2004
aa7e03c35488 Accept "true" as well as "1" for autojoin in bookmarked rooms
Hermitifier
parents: 1999
diff changeset
2233 if (autojoin && (!strcmp(autojoin, "1") || !strcmp(autojoin, "true")))
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2234 bm_elt->autojoin = 1;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2235 if (nick)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2236 bm_elt->nick = g_strdup(nick);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2237 if (name)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2238 bm_elt->name = g_strdup(name);
2137
0bfc4bfc127c Add support for storing passwords to a MUC (Nico Golde)
Mikael Berthe <mikael@lilotux.net>
parents: 2134
diff changeset
2239 if (passwd)
0bfc4bfc127c Add support for storing passwords to a MUC (Nico Golde)
Mikael Berthe <mikael@lilotux.net>
parents: 2134
diff changeset
2240 bm_elt->password = g_strdup(passwd);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2241 sl_bookmarks = g_slist_append(sl_bookmarks, bm_elt);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2242 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2243 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2244 return sl_bookmarks;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2245 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2246
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2247 // xmpp_set_storage_bookmark(roomid, name, nick, passwd, autojoin,
1979
6febc7d1f760 Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1976
diff changeset
2248 // printstatus, autowhois, flagjoins, group)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2249 // Update the private storage bookmarks: add a conference room.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2250 // If name is nil, we remove the bookmark.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2251 void xmpp_set_storage_bookmark(const char *roomid, const char *name,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2252 const char *nick, const char *passwd,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2253 int autojoin, enum room_printstatus pstatus,
1979
6febc7d1f760 Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1976
diff changeset
2254 enum room_autowhois awhois,
6febc7d1f760 Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1976
diff changeset
2255 enum room_flagjoins fjoins, const char *group)
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2256 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2257 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2258 bool changed = FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2259
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2260 if (!roomid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2261 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2262
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2263 // If we have no bookmarks, probably the server doesn't support them.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2264 if (!bookmarks) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2265 scr_LogPrint(LPRINT_NORMAL,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2266 "Sorry, your server doesn't seem to support private storage.");
469
a926523d2392 Use UTF8 to handle resources and room nicknames
Mikael Berthe <mikael@lilotux.net>
parents: 468
diff changeset
2267 return;
a926523d2392 Use UTF8 to handle resources and room nicknames
Mikael Berthe <mikael@lilotux.net>
parents: 468
diff changeset
2268 }
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2269
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2270 // Walk through the storage tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2271 for (x = bookmarks->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2272 // If the current node is a conference item, see if we have to replace it.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2273 if (x->name && !strcmp(x->name, "conference")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2274 const char *fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2275 if (!fjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2276 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2277 if (!strcmp(fjid, roomid)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2278 // We've found a bookmark for this room. Let's hide it and we'll
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2279 // create a new one.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2280 lm_message_node_hide(x);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2281 changed = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2282 if (!name)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2283 scr_LogPrint(LPRINT_LOGNORM, "Deleting bookmark...");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2284 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2285 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2286 }
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2287
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2288 // Let's create a node/bookmark for this roomid, if the name is not NULL.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2289 if (name) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2290 x = lm_message_node_add_child(bookmarks, "conference", NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2291 lm_message_node_set_attributes(x,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2292 "jid", roomid,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2293 "name", name,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2294 "autojoin", autojoin ? "1" : "0",
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2295 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2296 if (nick)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2297 lm_message_node_add_child(x, "nick", nick);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2298 if (passwd)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2299 lm_message_node_add_child(x, "password", passwd);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2300 if (pstatus)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2301 lm_message_node_add_child(x, "print_status", strprintstatus[pstatus]);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2302 if (awhois)
1633
e3afe1da8a5f Fix saving autowhois option in bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1621
diff changeset
2303 lm_message_node_set_attributes(x, "autowhois",
e3afe1da8a5f Fix saving autowhois option in bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1621
diff changeset
2304 (awhois == autowhois_on) ? "1" : "0",
e3afe1da8a5f Fix saving autowhois option in bookmarks
Mikael Berthe <mikael@lilotux.net>
parents: 1621
diff changeset
2305 NULL);
1979
6febc7d1f760 Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1976
diff changeset
2306 if (fjoins)
6febc7d1f760 Add /room setopt flag_joins (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1976
diff changeset
2307 lm_message_node_add_child(x, "flag_joins", strflagjoins[fjoins]);
2010
a73ce708c2c9 Fix bookmarks losing autojoin attribute
Hermitifier
parents: 2004
diff changeset
2308 if (group && *group)
1976
e6beab22099b Do not add items to roster with commands /move and /rename (Hermitifier)
Mikael Berthe <mikael@lilotux.net>
parents: 1972
diff changeset
2309 lm_message_node_add_child(x, "group", group);
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2310 changed = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2311 scr_LogPrint(LPRINT_LOGNORM, "Updating bookmarks...");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2312 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2313
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2314 if (!changed)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2315 return;
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2316
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
2317 if (xmpp_is_online())
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2318 send_storage(bookmarks);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2319 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2320 scr_LogPrint(LPRINT_LOGNORM,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2321 "Warning: you're not connected to the server.");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2322 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2323
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2324 static struct annotation *parse_storage_rosternote(LmMessageNode *notenode)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2325 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2326 const char *p;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2327 struct annotation *note = g_new0(struct annotation, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2328 p = lm_message_node_get_attribute(notenode, "cdate");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2329 if (p)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2330 note->cdate = from_iso8601(p, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2331 p = lm_message_node_get_attribute(notenode, "mdate");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2332 if (p)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2333 note->mdate = from_iso8601(p, 1);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2334 note->text = g_strdup(lm_message_node_get_value(notenode));
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2335 note->jid = g_strdup(lm_message_node_get_attribute(notenode, "jid"));
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2336 return note;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2337 }
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2338
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2339 // xmpp_get_all_storage_rosternotes()
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2340 // Return a GSList with all storage annotations.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2341 // The caller should g_free the list and its contents.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2342 GSList *xmpp_get_all_storage_rosternotes(void)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2343 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2344 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2345 GSList *sl_notes = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2346
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2347 // If we have no rosternotes, probably the server doesn't support them.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2348 if (!rosternotes)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2349 return NULL;
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2350
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2351 // Walk through the storage rosternotes tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2352 for (x = rosternotes->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2353 struct annotation *note;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2354
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2355 // We want a note item
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2356 if (!x->name || strcmp(x->name, "note"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2357 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2358 // Just in case, check the jid...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2359 if (!lm_message_node_get_attribute(x, "jid"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2360 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2361 // Ok, let's add the note to our list
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2362 note = parse_storage_rosternote(x);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2363 sl_notes = g_slist_append(sl_notes, note);
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2364 }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2365 return sl_notes;
31
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2366 }
0f0fbd0c4a7f [/trunk] Changeset 47 by mikael
mikael
parents: 29
diff changeset
2367
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2368 // xmpp_get_storage_rosternotes(barejid, silent)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2369 // Return the annotation associated with this jid.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2370 // If silent is TRUE, no warning is displayed when rosternotes is disabled
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2371 // The caller should g_free the string and structure after use.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2372 struct annotation *xmpp_get_storage_rosternotes(const char *barejid, int silent)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2373 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2374 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2375
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2376 if (!barejid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2377 return NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2378
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2379 // If we have no rosternotes, probably the server doesn't support them.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2380 if (!rosternotes) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2381 if (!silent)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2382 scr_LogPrint(LPRINT_NORMAL, "Sorry, "
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2383 "your server doesn't seem to support private storage.");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2384 return NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2385 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2386
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2387 // Walk through the storage rosternotes tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2388 for (x = rosternotes->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2389 const char *fjid;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2390 // We want a note item
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2391 if (!x->name || strcmp(x->name, "note"))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2392 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2393 // Just in case, check the jid...
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2394 fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2395 if (fjid && !strcmp(fjid, barejid)) // We've found a note for this contact.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2396 return parse_storage_rosternote(x);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2397 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2398 return NULL; // No note found
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2399 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2400
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2401 // xmpp_set_storage_rosternotes(barejid, note)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2402 // Update the private storage rosternotes: add/delete a note.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2403 // If note is nil, we remove the existing note.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2404 void xmpp_set_storage_rosternotes(const char *barejid, const char *note)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2405 {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2406 LmMessageNode *x;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2407 bool changed = FALSE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2408 const char *cdate = NULL;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2409
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2410 if (!barejid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2411 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2412
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2413 // If we have no rosternotes, probably the server doesn't support them.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2414 if (!rosternotes) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2415 scr_LogPrint(LPRINT_NORMAL,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2416 "Sorry, your server doesn't seem to support private storage.");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2417 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2418 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2419
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2420 // Walk through the storage tags
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2421 for (x = rosternotes->children ; x; x = x->next) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2422 // If the current node is a conference item, see if we have to replace it.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2423 if (x->name && !strcmp(x->name, "note")) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2424 const char *fjid = lm_message_node_get_attribute(x, "jid");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2425 if (!fjid)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2426 continue;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2427 if (!strcmp(fjid, barejid)) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2428 // We've found a note for this jid. Let's hide it and we'll
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2429 // create a new one.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2430 cdate = lm_message_node_get_attribute(x, "cdate");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2431 lm_message_node_hide(x);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2432 changed = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2433 break;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2434 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2435 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2436 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2437
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2438 // Let's create a node for this jid, if the note is not NULL.
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2439 if (note) {
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2440 char mdate[20];
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2441 time_t now;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2442 time(&now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2443 to_iso8601(mdate, now);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2444 if (!cdate)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2445 cdate = mdate;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2446 x = lm_message_node_add_child(rosternotes, "note", note);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2447 lm_message_node_set_attributes(x,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2448 "jid", barejid,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2449 "cdate", cdate,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2450 "mdate", mdate,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2451 NULL);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2452 changed = TRUE;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2453 }
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2454
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2455 if (!changed)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2456 return;
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2457
1684
95df4ea512c8 Provide xmpp_is_online()
Myhailo Danylenko <isbear@ukrpost.net>
parents: 1683
diff changeset
2458 if (xmpp_is_online())
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2459 send_storage(rosternotes);
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2460 else
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2461 scr_LogPrint(LPRINT_LOGNORM,
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2462 "Warning: you're not connected to the server.");
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1592
diff changeset
2463 }
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
2464
1811
e6d355e50d7a Update Vim modelines
Mikael Berthe <mikael@lilotux.net>
parents: 1810
diff changeset
2465 /* vim: set et cindent cinoptions=>2\:2(0 ts=2 sw=2: For Vim users... */