libpurple/protocols/jabber/message.c

Sat, 13 Mar 2021 15:33:49 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Sat, 13 Mar 2021 15:33:49 -0600
changeset 40818
3891ef6e3b56
parent 40798
52f630910634
child 40885
87f6241da196
permissions
-rw-r--r--

Fix building on glib < 2.58.0 as we have a minimum of 2.52.0

Add compatibility for G_SOURCE_FUNC and g_time_zone_new_offset that were added in 2.58.0

g_time_zone_new_offset is from 2.58.0 which might be buggy, the version of it
from glib git has some fixes it but it is much more involved so using the older
version is a calculated risk.

Testing Done:
Built on ubuntu:bionic.

Reviewed at https://reviews.imfreedom.org/r/573/

7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
2 * purple - Jabber Protocol Plugin
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
3 *
28322
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 27900
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 27900
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 27900
diff changeset
6 * source distribution.
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
7 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
12 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
17 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19419
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 *
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22 */
40439
e9838d634d5e Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents: 40358
diff changeset
23 #include <glib/gi18n-lib.h>
e9838d634d5e Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents: 40358
diff changeset
24
40358
e6fe6fc1f516 move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents: 40294
diff changeset
25 #include <purple.h>
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
26
26871
d62964222795 Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents: 26867
diff changeset
27 #include "adhoccommands.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
28 #include "buddy.h"
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
29 #include "chat.h"
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
30 #include "data.h"
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
31 #include "message.h"
17768
7be011945a1b added preliminary frame for pep-support
Andreas Monitzer <am@adiumx.com>
parents: 17351
diff changeset
32 #include "pep.h"
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
33 #include "iq.h"
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
34
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
35 #include <string.h>
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
36
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
37 typedef struct {
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
38 PurpleConversation *conv;
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
39 gchar *shortcut;
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
40 } JabberMessageRemoteSmileyAddData;
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
41
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
42 static GString *jm_body_with_oob(JabberMessage *jm) {
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
43 GList *etc;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
44 GString *body = g_string_new("");
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
45
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
46 if(jm->xhtml)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
47 g_string_append(body, jm->xhtml);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
48 else if(jm->body)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
49 g_string_append(body, jm->body);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
50
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
51 for(etc = jm->etc; etc; etc = etc->next) {
38358
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
52 PurpleXmlNode *x = etc->data;
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
53 const char *xmlns = purple_xmlnode_get_namespace(x);
38264
99356e68aff5 Merge release-2.x.y changes, resolve conflicts
qarkai <qarkai@gmail.com>
parents: 38260 38248
diff changeset
54 if(purple_strequal(xmlns, NS_OOB_X_DATA)) {
38358
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
55 PurpleXmlNode *url, *desc;
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
56 char *urltxt, *desctxt;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
57
38358
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
58 url = purple_xmlnode_get_child(x, "url");
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
59 desc = purple_xmlnode_get_child(x, "desc");
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
60
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
61 if(!url)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
62 continue;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
63
38358
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
64 urltxt = purple_xmlnode_get_data(url);
30ba44276e74 Merge release-2.x.y into default
dx <dx@dxzone.com.ar>
parents: 38298 38264
diff changeset
65 desctxt = desc ? purple_xmlnode_get_data(desc) : urltxt;
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
66
38264
99356e68aff5 Merge release-2.x.y changes, resolve conflicts
qarkai <qarkai@gmail.com>
parents: 38260 38248
diff changeset
67 if(body->len && !purple_strequal(body->str, urltxt))
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
68 g_string_append_printf(body, "<br/><a href='%s'>%s</a>",
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
69 urltxt, desctxt);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
70 else
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
71 g_string_printf(body, "<a href='%s'>%s</a>",
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
72 urltxt, desctxt);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
73
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
74 g_free(urltxt);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
75
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
76 if(desctxt != urltxt)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
77 g_free(desctxt);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
78 }
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
79 }
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
80
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
81 return body;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
82 }
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
83
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
84 void jabber_message_free(JabberMessage *jm)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
85 {
15980
77057c4f658a Minor code cleanup
Mark Doliner <markdoliner@pidgin.im>
parents: 15884
diff changeset
86 g_free(jm->from);
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
87 g_free(jm->to);
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
88 g_free(jm->id);
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
89 g_free(jm->subject);
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
90 g_free(jm->body);
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
91 g_free(jm->xhtml);
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
92 g_free(jm->password);
20057
728a7dce565e grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents: 19917
diff changeset
93 g_free(jm->error);
728a7dce565e grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents: 19917
diff changeset
94 g_free(jm->thread_id);
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
95 g_list_free(jm->etc);
20057
728a7dce565e grab revision 41389df89a4a6a007d41cec33e33043cd41ea159
Luke Schierer <lschiere@pidgin.im>
parents: 19917
diff changeset
96 g_list_free(jm->eventitems);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
97
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
98 g_free(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
99 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
100
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
101 static void handle_chat(JabberMessage *jm)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
102 {
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
103 const gchar *contact = jm->outgoing ? jm->to : jm->from;
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
104 JabberID *jid = jabber_id_new(contact);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
105
29331
9e828e599fc2 jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents: 29330
diff changeset
106 PurpleConnection *gc;
9e828e599fc2 jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents: 29330
diff changeset
107 PurpleAccount *account;
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
108 PurpleMessageFlags flags = 0;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
109 JabberBuddy *jb;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
110 JabberBuddyResource *jbr;
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
111 GString *body;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
112
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
113 if(!jid)
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
114 return;
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
115
29331
9e828e599fc2 jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents: 29330
diff changeset
116 gc = jm->js->gc;
9e828e599fc2 jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents: 29330
diff changeset
117 account = purple_connection_get_account(gc);
9e828e599fc2 jabber: Use some convenience variables here.
Paul Aurich <darkrain42@pidgin.im>
parents: 29330
diff changeset
118
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
119 jb = jabber_buddy_find(jm->js, contact, TRUE);
7306
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
120 jbr = jabber_buddy_find_resource(jb, jid->resource);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
121
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
122 if (jbr && jm->chat_state != JM_STATE_NONE)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
123 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
27750
f25b6a565494 Use Entity Capabilities to pick up Chat States support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27749
diff changeset
124
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
125 switch(jm->chat_state) {
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
126 case JM_STATE_COMPOSING:
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
127 purple_serv_got_typing(gc, contact, 0, PURPLE_IM_TYPING);
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
128 break;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
129 case JM_STATE_PAUSED:
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
130 purple_serv_got_typing(gc, contact, 0, PURPLE_IM_TYPED);
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
131 break;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
132 case JM_STATE_GONE: {
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
133 PurpleIMConversation *im = purple_conversations_find_im_with_account(
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
134 contact, account);
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
135 if (im && jid->node && jid->domain) {
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
136 char buf[256];
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
137 PurpleBuddy *buddy;
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
138
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
139 g_snprintf(buf, sizeof(buf), "%s@%s", jid->node, jid->domain);
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
140
34728
8efd73063ecf Renamed buddy list functions to more appropriate/simler names.
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
141 if ((buddy = purple_blist_find_buddy(account, buf))) {
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
142 const char *who;
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
143 char *escaped;
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
144
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
145 who = purple_buddy_get_alias(buddy);
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
146 escaped = g_markup_escape_text(who, -1);
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
147
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
148 g_snprintf(buf, sizeof(buf),
16946
6ca2bb9f6039 New string
Sean Egan <seanegan@pidgin.im>
parents: 16799
diff changeset
149 _("%s has left the conversation."), escaped);
21193
e918a1846d03 Use an independant status type for 'current media' stuff, instead of using
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20361
diff changeset
150 g_free(escaped);
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
151
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
152 /* At some point when we restructure PurpleConversation,
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
153 * this should be able to be implemented by removing the
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
154 * user from the conversation like we do with chats now. */
36089
c035b9a63457 Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36084
diff changeset
155 purple_conversation_write_system_message(
c035b9a63457 Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36084
diff changeset
156 PURPLE_CONVERSATION(im), buf, 0);
15721
8b054202d398 Include the user's name/alias in the XEP 85 "gone" messages.
Richard Laager <rlaager@pidgin.im>
parents: 15710
diff changeset
157 }
15710
fbc4a200c853 Receiving XEP 85 'gone' messages. Doesn't do anything because of the string freeze. This is akin to the MSN 'so-and-so has closed the conversation window' messages. Rlaager made a strong point to me that they're not altogether stalky, but can be useful.
Sean Egan <seanegan@pidgin.im>
parents: 15709
diff changeset
158 }
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
159 purple_serv_got_typing_stopped(gc, contact);
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
160 break;
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
161 }
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
162 default:
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
163 purple_serv_got_typing_stopped(gc, contact);
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
164 }
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
165
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
166 body = jm_body_with_oob(jm);
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
167
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
168 if(body && body->len) {
29840
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
169 if (jid->resource) {
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
170 /*
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
171 * We received a message from a specific resource, so
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
172 * we probably want a reply to go to this specific
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
173 * resource (i.e. bind/lock the conversation to this
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
174 * resource).
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
175 *
34622
753f46dd000f Global replace - renamed functions and types according to GObject-based PurpleConversation API
Ankit Vani <a@nevitus.org>
parents: 33722
diff changeset
176 * This works because purple_im_conversation_send gets the name
29840
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
177 * from purple_conversation_get_name()
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
178 */
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
179 PurpleIMConversation *im;
29840
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
180
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
181 im = purple_conversations_find_im_with_account(contact, account);
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
182 if (im && !purple_strequal(contact,
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
183 purple_conversation_get_name(PURPLE_CONVERSATION(im)))) {
29840
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
184 purple_debug_info("jabber", "Binding conversation to %s\n",
40290
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
185 contact);
0a722071a754 Refactor jm->from to contact in handle_chat()
Koosha Khajehmoogahi <koosha@posteo.de>
parents: 39470
diff changeset
186 purple_conversation_set_name(PURPLE_CONVERSATION(im), contact);
29840
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
187 }
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
188 }
8792e8fbaa18 jabber: Unlock from locked resource on a message *with content*, as opposed to any message.
Paul Aurich <darkrain42@pidgin.im>
parents: 29366
diff changeset
189
8400
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
190 if(jbr) {
30239
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
191 /* Treat SUPPORTED as a terminal with no escape :) */
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
192 if (jbr->chat_states != JABBER_CHAT_STATES_SUPPORTED) {
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
193 if (jm->chat_state != JM_STATE_NONE)
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
194 jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
195 else
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
196 jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED;
88550c8e461b jabber: Refined logic for determining "is typing" support.
Paul Aurich <darkrain42@pidgin.im>
parents: 30235
diff changeset
197 }
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
198
37423
d2f0259aa43f Remove NULL-checks before free(). No functional change.
Michael McConville <mmcco@mykolab.com>
parents: 37153
diff changeset
199 g_free(jbr->thread_id);
39470
92dbadc3c6e4 Fix jabber message thread handling.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39433
diff changeset
200 jbr->thread_id = g_strdup(jm->thread_id);
8400
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
201 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
202
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
203 if(jm->forwarded) {
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
204 flags |= PURPLE_MESSAGE_FORWARDED;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
205 }
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
206 flags |= jm->outgoing ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
207
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
208 purple_serv_got_im(gc, contact, body->str, flags, jm->sent);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
209 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
210
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
211 jabber_id_free(jid);
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
212
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
213 if(body)
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
214 g_string_free(body, TRUE);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
215 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
216
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
217 static void handle_headline(JabberMessage *jm)
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
218 {
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
219 char *title;
17819
862fe0f947a9 Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents: 17811
diff changeset
220 GString *body;
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
221
17819
862fe0f947a9 Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents: 17811
diff changeset
222 if(!jm->xhtml && !jm->body)
862fe0f947a9 Added buzz support using a private extension. Maybe I should write a XEP about that.
Andreas Monitzer <am@adiumx.com>
parents: 17811
diff changeset
223 return; /* ignore headlines without any content */
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
224
38248
1034c641ec6c Previously only OOB URLs attached to headline messages were processed. Now any message can show the attached URL.
Stephen Paul Weber <singpolyma@singpolyma.net>
parents: 31512
diff changeset
225 body = jm_body_with_oob(jm);
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
226 title = g_strdup_printf(_("Message from %s"), jm->from);
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
227
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
228 purple_notify_formatted(jm->js->gc, title, jm->subject ? jm->subject : title,
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
229 NULL, body->str, NULL, NULL);
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
230
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
231 g_free(title);
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
232 g_string_free(body, TRUE);
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
233 }
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
234
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
235 static void handle_groupchat(JabberMessage *jm)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
236 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
237 JabberID *jid = jabber_id_new(jm->from);
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
238 JabberChat *chat;
36108
69b4fce85ffa Switch _purple_conversation_write_common and (writing|wrote)-(chat|im)-msg to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36098
diff changeset
239 PurpleMessageFlags messageFlags = 0;
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
240
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
241 if(!jid)
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
242 return;
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
243
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
244 chat = jabber_chat_find(jm->js, jid->node, jid->domain);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
245
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
246 if(!chat)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
247 return;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
248
7971
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
249 if(jm->subject) {
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
250 purple_chat_conversation_set_topic(chat->conv, jid->resource,
7183
ee17c7833501 [gaim-migrate @ 7751]
Nathan Walp <nwalp@pidgin.im>
parents: 7145
diff changeset
251 jm->subject);
33722
dd2cec2beaf6 Don't log system messages, that appear on *every* MUC entry/exit
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32323
diff changeset
252 messageFlags |= PURPLE_MESSAGE_NO_LOG;
7971
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
253 if(!jm->xhtml && !jm->body) {
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9584
diff changeset
254 char *msg, *tmp, *tmp2;
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10607
diff changeset
255 tmp = g_markup_escape_text(jm->subject, -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15721
diff changeset
256 tmp2 = purple_markup_linkify(tmp);
7971
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
257 if(jid->resource)
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9584
diff changeset
258 msg = g_strdup_printf(_("%s has set the topic to: %s"), jid->resource, tmp2);
7971
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
259 else
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9584
diff changeset
260 msg = g_strdup_printf(_("The topic is: %s"), tmp2);
36084
2172bd6dad3e Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36077
diff changeset
261 purple_conversation_write_system_message(PURPLE_CONVERSATION(chat->conv),
2172bd6dad3e Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36077
diff changeset
262 msg, messageFlags);
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9584
diff changeset
263 g_free(tmp);
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9584
diff changeset
264 g_free(tmp2);
7971
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
265 g_free(msg);
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
266 }
a9309feca3c8 [gaim-migrate @ 8648]
Nathan Walp <nwalp@pidgin.im>
parents: 7968
diff changeset
267 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
268
7630
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
269 if(jm->xhtml || jm->body) {
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
270 if(jid->resource)
35499
c4c5e0a670b1 Fix namespaces issues in libpurple.
Ankit Vani <a@nevitus.org>
parents: 35070
diff changeset
271 purple_serv_got_chat_in(jm->js->gc, chat->id, jid->resource,
33722
dd2cec2beaf6 Don't log system messages, that appear on *every* MUC entry/exit
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32323
diff changeset
272 messageFlags | (jm->delayed ? PURPLE_MESSAGE_DELAYED : 0),
7630
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
273 jm->xhtml ? jm->xhtml : jm->body, jm->sent);
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
274 else if(chat->muc)
36084
2172bd6dad3e Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36077
diff changeset
275 purple_conversation_write_system_message(
2172bd6dad3e Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36077
diff changeset
276 PURPLE_CONVERSATION(chat->conv),
2172bd6dad3e Add purple_conversation_write_system_message
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36077
diff changeset
277 jm->xhtml ? jm->xhtml : jm->body, messageFlags);
7630
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
278 }
23e09fd7cbeb [gaim-migrate @ 8254]
Nathan Walp <nwalp@pidgin.im>
parents: 7448
diff changeset
279
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
280 jabber_id_free(jid);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
281 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
282
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
283 static void handle_groupchat_invite(JabberMessage *jm)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
284 {
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
285 GHashTable *components;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
286 JabberID *jid = jabber_id_new(jm->to);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
287
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
288 if(!jid)
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
289 return;
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
290
15598
834a88c83e95 Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents: 15587
diff changeset
291 components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
7310
1346a99cba40 [gaim-migrate @ 7894]
Nathan Walp <nwalp@pidgin.im>
parents: 7306
diff changeset
292
15598
834a88c83e95 Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents: 15587
diff changeset
293 g_hash_table_replace(components, "room", g_strdup(jid->node));
834a88c83e95 Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents: 15587
diff changeset
294 g_hash_table_replace(components, "server", g_strdup(jid->domain));
834a88c83e95 Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents: 15587
diff changeset
295 g_hash_table_replace(components, "handle", g_strdup(jm->js->user->node));
834a88c83e95 Get rid of some unnecessary string duping
Mark Doliner <markdoliner@pidgin.im>
parents: 15587
diff changeset
296 g_hash_table_replace(components, "password", g_strdup(jm->password));
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
297
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
298 jabber_id_free(jid);
35501
602747bb4af9 Fix duplicate prefixes
Ankit Vani <a@nevitus.org>
parents: 35499
diff changeset
299 purple_serv_got_chat_invite(jm->js->gc, jm->to, jm->from, jm->body, components);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
300 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
301
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
302 static void handle_error(JabberMessage *jm)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
303 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
304 char *buf;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
305
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
306 if(!jm->body)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
307 return;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
308
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
309 buf = g_strdup_printf(_("Message delivery to %s failed: %s"),
13766
6b92ce47f7e5 [gaim-migrate @ 16176]
Daniel Atallah <datallah@pidgin.im>
parents: 13708
diff changeset
310 jm->from, jm->error ? jm->error : "");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
311
16961
b6955f946f8f s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@pidgin.im>
parents: 16946
diff changeset
312 purple_notify_formatted(jm->js->gc, _("XMPP Message Error"), _("XMPP Message Error"), buf,
7944
619ec16df2c8 [gaim-migrate @ 8615]
Nathan Walp <nwalp@pidgin.im>
parents: 7923
diff changeset
313 jm->xhtml ? jm->xhtml : jm->body, NULL, NULL);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
314
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
315 g_free(buf);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
316 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
317
17822
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
318 static void handle_buzz(JabberMessage *jm) {
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
319 PurpleAccount *account;
25316
8b6461a2f967 Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents: 25154
diff changeset
320
17823
2ca25e7e65dd Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents: 17822
diff changeset
321 /* Delayed buzz MUST NOT be accepted */
2ca25e7e65dd Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents: 17822
diff changeset
322 if(jm->delayed)
2ca25e7e65dd Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents: 17822
diff changeset
323 return;
25316
8b6461a2f967 Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents: 25154
diff changeset
324
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
325 /* Reject buzz when it's not enabled */
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
326 if(!jm->js->allowBuzz)
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
327 return;
25316
8b6461a2f967 Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents: 25154
diff changeset
328
17822
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
329 account = purple_connection_get_account(jm->js->gc);
25316
8b6461a2f967 Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents: 25154
diff changeset
330
34728
8efd73063ecf Renamed buddy list functions to more appropriate/simler names.
Ankit Vani <a@nevitus.org>
parents: 34670
diff changeset
331 if (purple_blist_find_buddy(account, jm->from) == NULL)
17823
2ca25e7e65dd Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents: 17822
diff changeset
332 return; /* Do not accept buzzes from unknown people */
2ca25e7e65dd Switched buzz namespace and tag name to be libpurple-specific and use a more professionally-sounding name ('attention' instead of 'buzz').
Andreas Monitzer <am@adiumx.com>
parents: 17822
diff changeset
333
25316
8b6461a2f967 Use purple_prpl_got_attention() for XMPP notifications
Evan Schoenberg <evands@pidgin.im>
parents: 25154
diff changeset
334 /* xmpp only has 1 attention type, so index is 0 */
36545
23b59a16c808 Replaced some _prpl_ stuff with _protocol_
Ankit Vani <a@nevitus.org>
parents: 36362
diff changeset
335 purple_protocol_got_attention(jm->js->gc, jm->from, 0);
17822
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
336 }
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
337
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
338 static void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
339 jabber_message_get_refs_from_xmlnode_internal(const PurpleXmlNode *message,
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
340 GHashTable *table)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
341 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
342 PurpleXmlNode *child;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
343
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
344 for (child = purple_xmlnode_get_child(message, "img") ; child ;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
345 child = purple_xmlnode_get_next_twin(child)) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
346 const gchar *src = purple_xmlnode_get_attrib(child, "src");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
347
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
348 if (g_str_has_prefix(src, "cid:")) {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
349 const gchar *cid = src + 4;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
350
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
351 /* if we haven't "fetched" this yet... */
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
352 if (!g_hash_table_lookup(table, cid)) {
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
353 gchar *value;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
354 const gchar *alt = purple_xmlnode_get_attrib(child, "alt");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
355 /* if there is no "alt" string, use the cid...
24258
9ae10fafad7a When receiving an <img/> without the "alt" attribute, set
Marcus Lundblad <malu@pidgin.im>
parents: 24257
diff changeset
356 include the entire src, eg. "cid:.." to avoid linkification */
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
357 if (alt && alt[0] != '\0') {
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
358 /* workaround for when "alt" is set to the value of the
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
359 CID (which Jabbim seems to do), to avoid it showing up
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
360 as an mailto: link */
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
361 if (purple_email_is_valid(alt)) {
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
362 value = g_strdup_printf("smiley:%s", alt);
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
363 } else {
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
364 value = g_strdup(alt);
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
365 }
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
366 } else {
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
367 value = g_strdup(src);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
368 }
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
369 g_hash_table_insert(table, g_strdup(cid), value);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
370 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
371 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
372 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
373
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
374 for (child = message->child ; child ; child = child->next) {
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
375 jabber_message_get_refs_from_xmlnode_internal(child, table);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
376 }
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
377 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
378
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
379 static gboolean
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
380 jabber_message_get_refs(gpointer key, gpointer value, gpointer user_data)
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
381 {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
382 GList **refs = (GList **) user_data;
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
383 PurpleKeyValuePair *ref = purple_key_value_pair_new_full(key, value, g_free);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
384
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
385 *refs = g_list_append(*refs, ref);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
386
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
387 return TRUE;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
388 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
389
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
390 static GList *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
391 jabber_message_get_refs_from_xmlnode(const PurpleXmlNode *message)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
392 {
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
393 GList *refs = NULL;
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
394 GHashTable *unique_refs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
395
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
396 jabber_message_get_refs_from_xmlnode_internal(message, unique_refs);
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
397 (void)g_hash_table_foreach_remove(unique_refs, jabber_message_get_refs, &refs);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
398 g_hash_table_destroy(unique_refs);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
399 return refs;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
400 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
401
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
402 static gchar *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
403 jabber_message_xml_to_string_strip_img_smileys(PurpleXmlNode *xhtml)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
404 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
405 gchar *markup = purple_xmlnode_to_str(xhtml, NULL);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
406 int len = strlen(markup);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
407 int pos = 0;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
408 GString *out = g_string_new(NULL);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
409
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
410 while (pos < len) {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
411 /* this is a bit cludgy, maybe there is a better way to do this...
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
412 we need to find all <img> tags within the XHTML and replace those
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
413 tags with the value of their "alt" attributes */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
414 if (g_str_has_prefix(&(markup[pos]), "<img")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
415 PurpleXmlNode *img = NULL;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
416 int pos2 = pos;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
417 const gchar *src;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
418
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
419 for (; pos2 < len ; pos2++) {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
420 if (g_str_has_prefix(&(markup[pos2]), "/>")) {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
421 pos2 += 2;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
422 break;
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
423 } else if (g_str_has_prefix(&(markup[pos2]), "</img>")) {
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
424 pos2 += 5;
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
425 break;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
426 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
427 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
428
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
429 /* note, if the above loop didn't find the end of the <img> tag,
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
430 it the parsed string will be until the end of the input string,
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
431 in which case purple_xmlnode_from_str will bail out and return NULL,
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
432 in this case the "if" statement below doesn't trigger and the
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
433 text is copied unchanged */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
434 img = purple_xmlnode_from_str(&(markup[pos]), pos2 - pos);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
435 src = purple_xmlnode_get_attrib(img, "src");
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
436
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
437 if (g_str_has_prefix(src, "cid:")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
438 const gchar *alt = purple_xmlnode_get_attrib(img, "alt");
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
439 /* if the "alt" attribute is empty, put the cid as smiley string */
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
440 if (alt && alt[0] != '\0') {
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
441 /* if the "alt" is the same as the CID, as Jabbim does,
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
442 this prevents linkification... */
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
443 if (purple_email_is_valid(alt)) {
24386
0710eb7a41c5 A couple of compile warning fixes, a couple of memory leak plugs.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24259
diff changeset
444 gchar *safe_alt = g_strdup_printf("smiley:%s", alt);
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
445 out = g_string_append(out, safe_alt);
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
446 g_free(safe_alt);
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
447 } else {
35783
dcff8ce68d1b Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
448 gchar *alt_escaped = g_markup_escape_text(alt, -1);
dcff8ce68d1b Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
449 out = g_string_append(out, alt_escaped);
dcff8ce68d1b Remote smileys: fix a xmpp bug of non-escaped custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35764
diff changeset
450 g_free(alt_escaped);
24259
e69d72917038 Added a workaround for receiving smileys from Jabbim,
Marcus Lundblad <malu@pidgin.im>
parents: 24258
diff changeset
451 }
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
452 } else {
24258
9ae10fafad7a When receiving an <img/> without the "alt" attribute, set
Marcus Lundblad <malu@pidgin.im>
parents: 24257
diff changeset
453 out = g_string_append(out, src);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
454 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
455 pos += pos2 - pos;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
456 } else {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
457 out = g_string_append_c(out, markup[pos]);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
458 pos++;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
459 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
460
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
461 purple_xmlnode_free(img);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
462
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
463 } else {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
464 out = g_string_append_c(out, markup[pos]);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
465 pos++;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
466 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
467 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
468
24387
cba0cfba936e Another memory leak fix. Also, keep a copy of the alt-text in
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 24386
diff changeset
469 g_free(markup);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
470 return g_string_free(out, FALSE);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
471 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
472
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
473 static void
29912
4f8e1c3bbc4a jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents: 29910
diff changeset
474 jabber_message_add_remote_smileys(JabberStream *js, const gchar *who,
40293
c60c4f96749d Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents: 40290
diff changeset
475 const PurpleXmlNode *message)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
476 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
477 PurpleXmlNode *data_tag;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
478 for (data_tag = purple_xmlnode_get_child_with_namespace(message, "data", NS_BOB) ;
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
479 data_tag ;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
480 data_tag = purple_xmlnode_get_next_twin(data_tag)) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
481 const gchar *cid = purple_xmlnode_get_attrib(data_tag, "cid");
29912
4f8e1c3bbc4a jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents: 29910
diff changeset
482 const JabberData *data = jabber_data_find_remote_by_cid(js, who, cid);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
483
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
484 if (!data && cid != NULL) {
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
485 /* we haven't cached this already, let's add it */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
486 JabberData *new_data = jabber_data_create_from_xml(data_tag);
29910
f1c6e586e5c1 jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents: 29906
diff changeset
487
f1c6e586e5c1 jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents: 29906
diff changeset
488 if (new_data) {
29912
4f8e1c3bbc4a jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents: 29910
diff changeset
489 jabber_data_associate_remote(js, who, new_data);
29910
f1c6e586e5c1 jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents: 29906
diff changeset
490 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
491 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
492 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
493 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
494
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
495 static void
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
496 jabber_message_remote_smiley_got(JabberData *jdata, gchar *alt, gpointer d) {
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
497 JabberMessageRemoteSmileyAddData *data = (JabberMessageRemoteSmileyAddData *)d;
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
498
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
499 if (jdata) {
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
500 PurpleSmiley *smiley = NULL;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
501
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
502 purple_debug_info("jabber",
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
503 "smiley data retrieved successfully");
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
504
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
505 smiley = purple_smiley_new_from_data(
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
506 data->shortcut,
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
507 jabber_data_get_data(jdata),
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
508 jabber_data_get_size(jdata)
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
509 );
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
510
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
511 purple_conversation_add_smiley(data->conv, smiley);
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
512
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
513 g_object_unref(G_OBJECT(smiley));
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
514 } else {
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
515 purple_debug_error("jabber", "failed retrieving smiley data");
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
516 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
517
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
518 g_object_unref(G_OBJECT(data->conv));
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
519 g_free(data->shortcut);
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
520 g_slice_free(JabberMessageRemoteSmileyAddData, data);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
521 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
522
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
523 static void
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
524 jabber_message_remote_smiley_add(JabberStream *js, PurpleConversation *conv,
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
525 const gchar *from, const gchar *shortcut, const gchar *cid)
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
526 {
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 37423
diff changeset
527 PurpleSmiley *smiley = NULL;
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 37423
diff changeset
528 const JabberData *jdata = NULL;
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
529
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
530 purple_debug_misc("jabber", "about to add remote smiley %s to the conv",
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
531 shortcut);
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
532
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 37423
diff changeset
533 smiley = purple_conversation_get_smiley(conv, shortcut);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 37423
diff changeset
534 if(PURPLE_IS_SMILEY(smiley)) {
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
535 purple_debug_misc("jabber", "smiley was already present");
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
536 return;
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
537 }
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
538
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
539 /* TODO: cache lookup by "cid" */
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
540 jdata = jabber_data_find_remote_by_cid(js, from, cid);
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
541 if (jdata) {
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
542 purple_debug_info("jabber", "smiley data is already known");
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
543
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
544 smiley = purple_smiley_new_from_data(
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
545 shortcut,
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
546 jabber_data_get_data(jdata),
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
547 jabber_data_get_size(jdata)
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
548 );
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
549
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
550 purple_conversation_add_smiley(conv, smiley);
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
551
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
552 g_object_unref(G_OBJECT(smiley));
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
553 } else {
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
554 JabberMessageRemoteSmileyAddData *data = NULL;
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
555
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
556 data = g_slice_new(JabberMessageRemoteSmileyAddData);
39065
3997b9da75e8 jabber: Fix assignment from incompatible pointer type warning
Mike Ruprecht <cmaiku@gmail.com>
parents: 38358
diff changeset
557 data->conv = g_object_ref(conv);
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
558 data->shortcut = g_strdup(shortcut);
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
559
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
560 purple_debug_info("jabber", "smiley data is unknown, "
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
561 "need to request it");
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
562
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
563 jabber_data_request(js, cid, from, NULL, FALSE,
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
564 jabber_message_remote_smiley_got, data);
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
565 }
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
566 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
567
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
568 void jabber_message_parse(JabberStream *js, PurpleXmlNode *packet)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
569 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
570 JabberMessage *jm;
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
571 const char *id, *from, *to, *type;
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
572 PurpleXmlNode *child = NULL, *received = NULL;
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
573 gboolean signal_return;
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
574 gboolean delayed = FALSE, is_outgoing = FALSE, is_forwarded = FALSE;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
575 time_t timestamp = time(NULL);
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
576
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
577 /* Check if we have a carbons received element from our own account. */
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
578 from = purple_xmlnode_get_attrib(packet, "from");
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
579 if(from != NULL && jabber_is_own_account(js, from)) {
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
580 PurpleXmlNode *forwarded = NULL;
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
581
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
582 /* We check if this is a received carbon first. */
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
583 received = purple_xmlnode_get_child_with_namespace(packet, "received",
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
584 NS_MESSAGE_CARBONS);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
585 if(received != NULL) {
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
586 forwarded = purple_xmlnode_get_child_with_namespace(received,
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
587 "forwarded",
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
588 NS_FORWARD);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
589 } else {
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
590 PurpleXmlNode *sent = NULL;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
591
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
592 sent = purple_xmlnode_get_child_with_namespace(packet, "sent",
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
593 NS_MESSAGE_CARBONS);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
594 if(sent != NULL) {
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
595 forwarded = purple_xmlnode_get_child_with_namespace(sent,
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
596 "forwarded",
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
597 NS_FORWARD);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
598 is_outgoing = TRUE;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
599 }
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
600 }
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
601
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
602 if(forwarded != NULL) {
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
603 PurpleXmlNode *fwd_msg = NULL;
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
604
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
605 fwd_msg = purple_xmlnode_get_child_with_namespace(forwarded,
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
606 "message",
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
607 NS_XMPP_CLIENT);
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
608 if(fwd_msg != NULL) {
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
609 PurpleXmlNode *delay = NULL;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
610
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
611 /* We have a forwarded message, so update the packet to point
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
612 * to it directly.
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
613 */
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
614 packet = fwd_msg;
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
615 is_forwarded = TRUE;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
616
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
617 /* Now check if it was a delayed message and if so, grab the
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
618 * timestamp that the server sent.
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
619 */
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
620 delay = purple_xmlnode_get_child_with_namespace(forwarded,
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
621 "delay",
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
622 NS_DELAYED_DELIVERY);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
623 if(delay != NULL) {
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
624 const gchar *ts = purple_xmlnode_get_attrib(delay,
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
625 "stamp");
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
626
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
627 timestamp = purple_str_to_time(ts, TRUE, NULL, NULL, NULL);
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
628 delayed = TRUE;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
629 }
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
630 }
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
631 }
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
632 }
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
633
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
634 /* If the message was forwarded, packet is now pointing to the forwarded
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
635 * message.
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
636 */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
637 from = purple_xmlnode_get_attrib(packet, "from");
40594
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
638 id = purple_xmlnode_get_attrib(packet, "id");
e32ab786a04f Finally add XMPP Message Carbons XEP-0280
Gary Kramlich <grim@reaperworld.com>
parents: 40507
diff changeset
639 to = purple_xmlnode_get_attrib(packet, "to");
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
640 type = purple_xmlnode_get_attrib(packet, "type");
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
641
36623
caaadef03507 Renamed purple_connection_get_protocol_info() to purple_connection_get_protocol()
Ankit Vani <a@nevitus.org>
parents: 36545
diff changeset
642 signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_connection_get_protocol(js->gc),
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
643 "jabber-receiving-message", js->gc, type, id, from, to, packet));
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
644 if (signal_return)
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
645 return;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
646
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
647 jm = g_new0(JabberMessage, 1);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
648 jm->js = js;
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
649 jm->sent = timestamp;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
650 jm->delayed = delayed;
27429
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
651 jm->chat_state = JM_STATE_NONE;
40742
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
652 jm->forwarded = is_forwarded;
2fc55152b79c Fix up the XEP-0280 carbons support.
Gary Kramlich <grim@reaperworld.com>
parents: 40726
diff changeset
653 jm->outgoing = is_outgoing;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
654
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
655 if(type) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
656 if(purple_strequal(type, "normal"))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
657 jm->type = JABBER_MESSAGE_NORMAL;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
658 else if(purple_strequal(type, "chat"))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
659 jm->type = JABBER_MESSAGE_CHAT;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
660 else if(purple_strequal(type, "groupchat"))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
661 jm->type = JABBER_MESSAGE_GROUPCHAT;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
662 else if(purple_strequal(type, "headline"))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
663 jm->type = JABBER_MESSAGE_HEADLINE;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
664 else if(purple_strequal(type, "error"))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
665 jm->type = JABBER_MESSAGE_ERROR;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
666 else
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
667 jm->type = JABBER_MESSAGE_OTHER;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
668 } else {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
669 jm->type = JABBER_MESSAGE_NORMAL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
670 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
671
27103
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
672 jm->from = g_strdup(from);
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
673 jm->to = g_strdup(to);
815af6acd59b Add jabber signals for IQ, Message, and Presence stanzas. Lightly tested (it doesn't crash [Prove me wrong!]) and as you'll note, I refer to documentation that doesn't yet exist.
Paul Aurich <darkrain42@pidgin.im>
parents: 27061
diff changeset
674 jm->id = g_strdup(id);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
675
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
676 for(child = packet->child; child; child = child->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
677 const char *xmlns = purple_xmlnode_get_namespace(child);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
678 if(child->type != PURPLE_XMLNODE_TYPE_TAG)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
679 continue;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
680
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
681 if(purple_strequal(child->name, "error")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
682 const char *code = purple_xmlnode_get_attrib(child, "code");
25154
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
683 char *code_txt = NULL;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
684 char *text = purple_xmlnode_get_data(child);
25154
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
685 if (!text) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
686 PurpleXmlNode *enclosed_text_node;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
687
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
688 if ((enclosed_text_node = purple_xmlnode_get_child(child, "text")))
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
689 text = purple_xmlnode_get_data(enclosed_text_node);
25154
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
690 }
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
691
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
692 if(code)
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
693 code_txt = g_strdup_printf(_("(Code %s)"), code);
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
694
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
695 if(!jm->error)
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
696 jm->error = g_strdup_printf("%s%s%s",
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
697 text ? text : "",
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
698 text && code_txt ? " " : "",
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
699 code_txt ? code_txt : "");
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
700
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
701 g_free(code_txt);
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
702 g_free(text);
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
703 } else if (xmlns == NULL) {
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
704 /* QuLogic: Not certain this is correct, but it would have happened
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
705 with the previous code. */
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
706 if(purple_strequal(child->name, "x"))
25154
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
707 jm->etc = g_list_append(jm->etc, child);
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
708 /* The following tests expect xmlns != NULL */
492b9d6b48a5 Remove a double call to xmlnode_get_namespace and multiple tests for xmlns
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24800
diff changeset
709 continue;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
710 } else if(purple_strequal(child->name, "subject") && purple_strequal(xmlns, NS_XMPP_CLIENT)) {
26859
8175186cf34a Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents: 26711
diff changeset
711 if(!jm->subject) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
712 jm->subject = purple_xmlnode_get_data(child);
26859
8175186cf34a Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents: 26711
diff changeset
713 if(!jm->subject)
8175186cf34a Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents: 26711
diff changeset
714 jm->subject = g_strdup("");
8175186cf34a Fix XMPP prpl->set_chat_topic with an empty string (or NULL)
Paul Aurich <darkrain42@pidgin.im>
parents: 26711
diff changeset
715 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
716 } else if(purple_strequal(child->name, "thread") && purple_strequal(xmlns, NS_XMPP_CLIENT)) {
8400
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
717 if(!jm->thread_id)
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
718 jm->thread_id = purple_xmlnode_get_data(child);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
719 } else if(purple_strequal(child->name, "body") && purple_strequal(xmlns, NS_XMPP_CLIENT)) {
13385
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13304
diff changeset
720 if(!jm->body) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
721 char *msg = purple_xmlnode_get_data(child);
30583
2482f350d8f5 jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents: 30582
diff changeset
722 char *escaped = purple_markup_escape_text(msg, -1);
2482f350d8f5 jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents: 30582
diff changeset
723 jm->body = purple_strdup_withhtml(escaped);
2482f350d8f5 jabber: Fix the last commit to pass escaped text off to the core.
Paul Aurich <darkrain42@pidgin.im>
parents: 30582
diff changeset
724 g_free(escaped);
13385
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13304
diff changeset
725 g_free(msg);
6fb64ae23761 [gaim-migrate @ 15757]
Nathan Walp <nwalp@pidgin.im>
parents: 13304
diff changeset
726 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
727 } else if(purple_strequal(child->name, "html") && purple_strequal(xmlns, NS_XHTML_IM)) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
728 if(!jm->xhtml && purple_xmlnode_get_child(child, "body")) {
17328
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
729 char *c;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
730
39433
f033955d125a Use G_DEFINE_TYPE_WITH_PRIVATE for PurpleConnection.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39065
diff changeset
731 PurpleConnection *gc = js->gc;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
732 PurpleAccount *account = purple_connection_get_account(gc);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
733 PurpleConversation *conv = NULL;
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
734 GList *smiley_refs = NULL;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
735 gchar *reformatted_xhtml;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
736
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
737 if (purple_account_get_bool(account, "custom_smileys", TRUE)) {
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
738 /* find a list of smileys ("cid" and "alt" text pairs)
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
739 occuring in the message */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
740 smiley_refs = jabber_message_get_refs_from_xmlnode(child);
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
741 purple_debug_info("jabber", "found %d smileys\n",
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
742 g_list_length(smiley_refs));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
743
27155
53502d71efdd Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents: 27131
diff changeset
744 if (smiley_refs) {
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
745 if (jm->type == JABBER_MESSAGE_GROUPCHAT) {
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
746 JabberID *jid = jabber_id_new(jm->from);
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
747 JabberChat *chat = NULL;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
748
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
749 if (jid) {
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
750 chat = jabber_chat_find(js, jid->node, jid->domain);
27782
68314a2ac01b Break the 'if' onto two lines and don't bother calling jabber_id_free()
Mark Doliner <markdoliner@pidgin.im>
parents: 27750
diff changeset
751 if (chat)
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
752 conv = PURPLE_CONVERSATION(chat->conv);
27782
68314a2ac01b Break the 'if' onto two lines and don't bother calling jabber_id_free()
Mark Doliner <markdoliner@pidgin.im>
parents: 27750
diff changeset
753 jabber_id_free(jid);
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
754 }
26867
20bf84d510d8 Only look for and add custom smileys to incoming messages that are going to
Paul Aurich <darkrain42@pidgin.im>
parents: 26859
diff changeset
755 } else if (jm->type == JABBER_MESSAGE_NORMAL ||
20bf84d510d8 Only look for and add custom smileys to incoming messages that are going to
Paul Aurich <darkrain42@pidgin.im>
parents: 26859
diff changeset
756 jm->type == JABBER_MESSAGE_CHAT) {
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
757 conv =
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
758 purple_conversations_find_with_account(from, account);
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
759 if (!conv) {
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
760 /* we need to create the conversation here */
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
761 conv = PURPLE_CONVERSATION(
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
762 purple_im_conversation_new(account, from));
26711
07cfe1520055 Only pre-create a PurpleConversation (if there was none yet) if an incoming
Marcus Lundblad <malu@pidgin.im>
parents: 26687
diff changeset
763 }
24257
d6402f066933 Fixed a memory error, which was due to me destroying some hashtables in the
Marcus Lundblad <malu@pidgin.im>
parents: 24254
diff changeset
764 }
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
765 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
766
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
767 /* process any newly provided smileys */
29912
4f8e1c3bbc4a jabber: Cache incoming BoB object per JID (and local JID) instead of discarding
Marcus Lundblad <malu@pidgin.im>
parents: 29910
diff changeset
768 jabber_message_add_remote_smileys(js, to, packet);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
769 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
770
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
771 purple_xmlnode_strip_prefixes(child);
32323
df78cc32b2cd jabber: Strip element prefixes on XHTML-IM content.
Paul Aurich <darkrain42@pidgin.im>
parents: 32277
diff changeset
772
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
773 /* reformat xhtml so that img tags with a "cid:" src gets
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
774 translated to the bare text of the emoticon (the "alt" attrib) */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
775 /* this is done also when custom smiley retrieval is turned off,
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
776 this way the receiver always sees the shortcut instead */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
777 reformatted_xhtml =
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
778 jabber_message_xml_to_string_strip_img_smileys(child);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
779
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
780 jm->xhtml = reformatted_xhtml;
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
781
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
782 /* add known custom emoticons to the conversation */
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
783 /* note: if there were no smileys in the incoming message, or
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
784 if receiving custom smileys is turned off, smiley_refs will
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
785 be NULL */
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
786 if (conv) {
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
787 for (GList *it = smiley_refs; it; it = g_list_next(it)) {
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
788 PurpleKeyValuePair *ref = it->data;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
789
35746
e4a656378516 Remote smileys: partial implementation with XMPP
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35745
diff changeset
790 jabber_message_remote_smiley_add(js,
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
791 conv, from, ref->value, ref->key);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
792 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
793 }
40798
52f630910634 Replace JabberSmileyRef with PurpleKeyValuePair
Arkadiy Illarionov <qarkai@gmail.com>
parents: 40742
diff changeset
794 g_list_free_full(smiley_refs, (GDestroyNotify)purple_key_value_pair_free);
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
795
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
796 /* Convert all newlines to whitespace. Technically, even regular, non-XML HTML is supposed to ignore newlines, but Pidgin has, as convention
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
797 * treated \n as a newline for compatibility with other protocols
17328
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
798 */
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
799 for (c = jm->xhtml; *c != '\0'; c++) {
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
800 if (*c == '\n')
17328
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
801 *c = ' ';
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
802 }
7a5668fb7bad Convert newlines to ' ' when receiving XHTML from Jabber
Sean Egan <seanegan@pidgin.im>
parents: 16961
diff changeset
803 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
804 } else if(purple_strequal(child->name, "active") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
805 jm->chat_state = JM_STATE_ACTIVE;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
806 } else if(purple_strequal(child->name, "composing") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
807 jm->chat_state = JM_STATE_COMPOSING;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
808 } else if(purple_strequal(child->name, "paused") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
809 jm->chat_state = JM_STATE_PAUSED;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
810 } else if(purple_strequal(child->name, "inactive") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
811 jm->chat_state = JM_STATE_INACTIVE;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
812 } else if(purple_strequal(child->name, "gone") && purple_strequal(xmlns,"http://jabber.org/protocol/chatstates")) {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
813 jm->chat_state = JM_STATE_GONE;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
814 } else if(purple_strequal(child->name, "event") && purple_strequal(xmlns,"http://jabber.org/protocol/pubsub#event")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
815 PurpleXmlNode *items;
17779
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
816 jm->type = JABBER_MESSAGE_EVENT;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
817 for(items = purple_xmlnode_get_child(child,"items"); items; items = items->next)
17779
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
818 jm->eventitems = g_list_append(jm->eventitems, items);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
819 } else if(purple_strequal(child->name, "attention") && purple_strequal(xmlns, NS_ATTENTION)) {
17822
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
820 jm->hasBuzz = TRUE;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
821 } else if(purple_strequal(child->name, "delay") && purple_strequal(xmlns, NS_DELAYED_DELIVERY)) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
822 const char *timestamp = purple_xmlnode_get_attrib(child, "stamp");
17811
d9a7ec9277f6 Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents: 17792
diff changeset
823 jm->delayed = TRUE;
d9a7ec9277f6 Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents: 17792
diff changeset
824 if(timestamp)
d9a7ec9277f6 Implemented XEP-0203: Delayed Delivery
Andreas Monitzer <am@adiumx.com>
parents: 17792
diff changeset
825 jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
826 } else if(purple_strequal(child->name, "x")) {
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
827 if(purple_strequal(xmlns, NS_DELAYED_DELIVERY_LEGACY)) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
828 const char *timestamp = purple_xmlnode_get_attrib(child, "stamp");
27434
7d8b32345d10 disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
829 jm->delayed = TRUE;
7d8b32345d10 disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
830 if(timestamp)
7d8b32345d10 disapproval of revision '0c1545afc98299c6d7004554eb7443091d42e8ca'
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
831 jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
832 } else if(purple_strequal(xmlns, "jabber:x:conference") &&
11230
a8f28f1058f6 [gaim-migrate @ 13370]
Nathan Walp <nwalp@pidgin.im>
parents: 10774
diff changeset
833 jm->type != JABBER_MESSAGE_GROUPCHAT_INVITE &&
a8f28f1058f6 [gaim-migrate @ 13370]
Nathan Walp <nwalp@pidgin.im>
parents: 10774
diff changeset
834 jm->type != JABBER_MESSAGE_ERROR) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
835 const char *jid = purple_xmlnode_get_attrib(child, "jid");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
836 if(jid) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
837 const char *reason = purple_xmlnode_get_attrib(child, "reason");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
838 const char *password = purple_xmlnode_get_attrib(child, "password");
28703
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
839
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
840 jm->type = JABBER_MESSAGE_GROUPCHAT_INVITE;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
841 g_free(jm->to);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
842 jm->to = g_strdup(jid);
28703
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
843
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
844 if (reason) {
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
845 g_free(jm->body);
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
846 jm->body = g_strdup(reason);
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
847 }
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
848
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
849 if (password) {
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
850 g_free(jm->password);
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
851 jm->password = g_strdup(password);
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
852 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
853 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38256
diff changeset
854 } else if(purple_strequal(xmlns, "http://jabber.org/protocol/muc#user") &&
11230
a8f28f1058f6 [gaim-migrate @ 13370]
Nathan Walp <nwalp@pidgin.im>
parents: 10774
diff changeset
855 jm->type != JABBER_MESSAGE_ERROR) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
856 PurpleXmlNode *invite = purple_xmlnode_get_child(child, "invite");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
857 if(invite) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
858 PurpleXmlNode *reason, *password;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
859 const char *jid = purple_xmlnode_get_attrib(invite, "from");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
860 g_free(jm->to);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
861 jm->to = jm->from;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
862 jm->from = g_strdup(jid);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
863 if((reason = purple_xmlnode_get_child(invite, "reason"))) {
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
864 g_free(jm->body);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
865 jm->body = purple_xmlnode_get_data(reason);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
866 }
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
867 if((password = purple_xmlnode_get_child(child, "password"))) {
28703
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
868 g_free(jm->password);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
869 jm->password = purple_xmlnode_get_data(password);
28703
521344e75710 jabber: Improved support for XEP-0249 (and document the legacy stuff).
Paul Aurich <darkrain42@pidgin.im>
parents: 28534
diff changeset
870 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
871
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
872 jm->type = JABBER_MESSAGE_GROUPCHAT_INVITE;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
873 }
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
874 } else {
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
875 jm->etc = g_list_append(jm->etc, child);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
876 }
38256
035f00c4fd87 Replace misused g_str_equal() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 31512
diff changeset
877 } else if (purple_strequal(child->name, "query")) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
878 const char *node = purple_xmlnode_get_attrib(child, "node");
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28979
diff changeset
879 if (purple_strequal(xmlns, NS_DISCO_ITEMS)
26871
d62964222795 Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents: 26867
diff changeset
880 && purple_strequal(node, "http://jabber.org/protocol/commands")) {
d62964222795 Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents: 26867
diff changeset
881 jabber_adhoc_got_list(js, jm->from, child);
d62964222795 Add a new signal which is emitted (after the account is connected) if the
Paul Aurich <darkrain42@pidgin.im>
parents: 26867
diff changeset
882 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
883 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
884 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
885
17822
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
886 if(jm->hasBuzz)
1a183f3fa9d7 disapproval of revision 'd52c12703a8e67c41c7f95a2cae7f16ab426ad76'
Andreas Monitzer <am@adiumx.com>
parents: 17821
diff changeset
887 handle_buzz(jm);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
888
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
889 switch(jm->type) {
27900
23b6b4dfeb82 Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents: 27844
diff changeset
890 case JABBER_MESSAGE_OTHER:
28828
7c1855f037e7 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents: 28726
diff changeset
891 purple_debug_info("jabber",
27900
23b6b4dfeb82 Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents: 27844
diff changeset
892 "Received message of unknown type: %s\n", type);
23b6b4dfeb82 Allow fallback for broken XMPP <message/> types. Closes #7837.
Paul Aurich <darkrain42@pidgin.im>
parents: 27844
diff changeset
893 /* Fall-through is intentional */
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
894 case JABBER_MESSAGE_NORMAL:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
895 case JABBER_MESSAGE_CHAT:
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
896 handle_chat(jm);
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
897 break;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
898 case JABBER_MESSAGE_HEADLINE:
7145
c77dd3b09666 [gaim-migrate @ 7712]
Nathan Walp <nwalp@pidgin.im>
parents: 7135
diff changeset
899 handle_headline(jm);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
900 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
901 case JABBER_MESSAGE_GROUPCHAT:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
902 handle_groupchat(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
903 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
904 case JABBER_MESSAGE_GROUPCHAT_INVITE:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
905 handle_groupchat_invite(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
906 break;
17779
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
907 case JABBER_MESSAGE_EVENT:
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
908 jabber_handle_event(jm);
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
909 break;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
910 case JABBER_MESSAGE_ERROR:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
911 handle_error(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
912 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
913 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
914 jabber_message_free(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
915 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
916
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
917 static gboolean
29366
e10e6d4f89e0 jabber: Simplify.
Paul Aurich <darkrain42@pidgin.im>
parents: 29338
diff changeset
918 jabber_conv_support_custom_smileys(JabberStream *js,
40293
c60c4f96749d Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents: 40290
diff changeset
919 PurpleConversation *conv, const gchar *who)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
920 {
24254
2d990726bf92 Updated to use latest spec. in XEP-0231
Marcus Lundblad <malu@pidgin.im>
parents: 23628
diff changeset
921 JabberBuddy *jb;
27110
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
922 JabberChat *chat;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
923
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
924 if (PURPLE_IS_IM_CONVERSATION(conv)) {
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
925 jb = jabber_buddy_find(js, who, FALSE);
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
926 if (jb) {
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
927 return jabber_buddy_has_capability(jb, NS_BOB);
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
928 } else {
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
929 return FALSE;
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
930 }
35070
d7350d876fda libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents: 34935
diff changeset
931 } else if (PURPLE_IS_CHAT_CONVERSATION(conv)) {
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
932 chat = jabber_chat_find_by_conv(PURPLE_CHAT_CONVERSATION(conv));
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
933 if (chat) {
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
934 /* do not attempt to send custom smileys in a MUC with more than
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
935 10 people, to avoid getting too many BoB requests */
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
936 return jabber_chat_get_num_participants(chat) <= 10 &&
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
937 jabber_chat_all_participants_have_capability(chat,
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
938 NS_BOB);
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
939 } else {
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
940 return FALSE;
34634
90fa70aa7e28 Refactored the jabber protocol to use GObject-based PurpleConversation
Ankit Vani <a@nevitus.org>
parents: 34625
diff changeset
941 }
35070
d7350d876fda libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents: 34935
diff changeset
942 } else {
d7350d876fda libpurple: Don't assume a conversation is always an IM or a chat
Ankit Vani <a@nevitus.org>
parents: 34935
diff changeset
943 return FALSE;
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
944 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
945 }
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
946
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
947 static gboolean
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
948 jabber_message_smileyify_cb(GString *out, PurpleSmiley *smiley,
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
949 PurpleConversation *_empty, gpointer _unused)
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
950 {
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
951 const gchar *shortcut;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
952 const JabberData *data;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
953 PurpleXmlNode *smiley_node;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
954 gchar *node_xml;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
955
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
956 shortcut = purple_smiley_get_shortcut(smiley);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
957 data = jabber_data_find_local_by_alt(shortcut);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
958
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
959 if (!data)
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
960 return FALSE;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
961
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
962 smiley_node = jabber_data_get_xhtml_im(data, shortcut);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
963 node_xml = purple_xmlnode_to_str(smiley_node, NULL);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
964
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
965 g_string_append(out, node_xml);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
966
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
967 purple_xmlnode_free(smiley_node);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
968 g_free(node_xml);
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
969
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
970 return TRUE;
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
971 }
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
972
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
973 static char *
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
974 jabber_message_smileyfy_xhtml(JabberMessage *jm, const char *xhtml)
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
975 {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
976 PurpleAccount *account = purple_connection_get_account(jm->js->gc);
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
977 GList *found_smileys, *it, *it_next;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
978 PurpleConversation *conv;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
979 gboolean has_too_large_smiley = FALSE;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
980 gchar *smileyfied_xhtml = NULL;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
981
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
982 conv = purple_conversations_find_with_account(jm->to, account);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 30744
diff changeset
983
35758
87c51487e197 Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
984 if (!jabber_conv_support_custom_smileys(jm->js, conv, jm->to))
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
985 return NULL;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
986
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
987 found_smileys = purple_smiley_parser_find(
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
988 purple_smiley_custom_get_list(), xhtml, TRUE);
35758
87c51487e197 Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
989 if (!found_smileys)
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
990 return NULL;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
991
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
992 for (it = found_smileys; it; it = it_next) {
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
993 PurpleSmiley *smiley = it->data;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
994 gboolean valid = TRUE;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
995
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
996 it_next = g_list_next(it);
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
997
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38287
diff changeset
998 if (purple_image_get_data_size(PURPLE_IMAGE(smiley)) > JABBER_DATA_MAX_SIZE) {
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
999 has_too_large_smiley = TRUE;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1000 valid = FALSE;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1001 purple_debug_warning("jabber", "Refusing to send "
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1002 "smiley %s (too large, max is %d)",
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1003 purple_smiley_get_shortcut(smiley),
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1004 JABBER_DATA_MAX_SIZE);
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1005 }
29270
642d7a9e5f0a jabber: Don't print the smiley shortcut in the error message when trying to
Marcus Lundblad <malu@pidgin.im>
parents: 29269
diff changeset
1006
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1007 if (!valid)
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1008 found_smileys = g_list_delete_link(found_smileys, it);
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1009 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1010
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1011 if (has_too_large_smiley) {
36089
c035b9a63457 Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36084
diff changeset
1012 purple_conversation_write_system_message(conv,
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1013 _("A custom smiley in the message is too large to send."),
36089
c035b9a63457 Use purple_conversation_write_system_message where appropriate
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36084
diff changeset
1014 PURPLE_MESSAGE_ERROR);
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1015 }
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1016
35758
87c51487e197 Fix g_slist_remove_link misuse, remove debug printfs
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35757
diff changeset
1017 if (!found_smileys)
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1018 return NULL;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1019
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1020 for (it = found_smileys; it; it = g_list_next(it)) {
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1021 PurpleSmiley *smiley = it->data;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1022 const gchar *shortcut = purple_smiley_get_shortcut(smiley);
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1023 const gchar *mimetype;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1024 JabberData *jdata;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1025
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1026 /* the object has been sent before */
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1027 if (jabber_data_find_local_by_alt(shortcut))
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1028 continue;
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1029
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
1030 mimetype = purple_image_get_mimetype(PURPLE_IMAGE(smiley));
35823
268a9d3b3fd7 imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
1031 if (!mimetype) {
268a9d3b3fd7 imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
1032 purple_debug_error("jabber",
268a9d3b3fd7 imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
1033 "unknown mime type for image");
268a9d3b3fd7 imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
1034 continue;
268a9d3b3fd7 imgstore: unref xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35792
diff changeset
1035 }
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1036
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1037 jdata = jabber_data_create_from_data(
38282
be08ec8b8628 This should finish off the jabber issues with smileys now being an image subclass
Gary Kramlich <grim@reaperworld.com>
parents: 38281
diff changeset
1038 purple_image_get_data(PURPLE_IMAGE(smiley)),
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38287
diff changeset
1039 purple_image_get_data_size(PURPLE_IMAGE(smiley)),
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1040 mimetype, FALSE, jm->js);
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1041
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1042 purple_debug_info("jabber", "cache local smiley alt=%s, cid=%s",
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1043 shortcut, jabber_data_get_cid(jdata));
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1044 jabber_data_associate_local(jdata, shortcut);
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1045 }
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1046
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
1047 g_list_free(found_smileys);
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1048
35792
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
1049 smileyfied_xhtml = purple_smiley_parser_replace(
d18a48a68edf Smiley parser: better symbol names
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35788
diff changeset
1050 purple_smiley_custom_get_list(), xhtml,
35788
afa6d777bc7c Smileys: avoid breaking (x)html by not replacing smileys inside tags
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35787
diff changeset
1051 jabber_message_smileyify_cb, NULL);
35757
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1052
05981ff3fb7b Custom smileys: send them with xmpp
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35746
diff changeset
1053 return smileyfied_xhtml;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1054 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1055
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1056 void jabber_message_send(JabberMessage *jm)
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1057 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1058 PurpleXmlNode *message, *child;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1059 const char *type = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1060
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1061 message = purple_xmlnode_new("message");
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1062
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1063 switch(jm->type) {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1064 case JABBER_MESSAGE_NORMAL:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1065 type = "normal";
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1066 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1067 case JABBER_MESSAGE_CHAT:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1068 case JABBER_MESSAGE_GROUPCHAT_INVITE:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1069 type = "chat";
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1070 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1071 case JABBER_MESSAGE_HEADLINE:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1072 type = "headline";
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1073 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1074 case JABBER_MESSAGE_GROUPCHAT:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1075 type = "groupchat";
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1076 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1077 case JABBER_MESSAGE_ERROR:
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1078 type = "error";
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1079 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1080 case JABBER_MESSAGE_OTHER:
17779
773326802e26 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents: 17776
diff changeset
1081 default:
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1082 type = NULL;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1083 break;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1084 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1085
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1086 if(type)
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1087 purple_xmlnode_set_attrib(message, "type", type);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25983
diff changeset
1088
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
1089 if (jm->id)
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1090 purple_xmlnode_set_attrib(message, "id", jm->id);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1091
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1092 purple_xmlnode_set_attrib(message, "to", jm->to);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1093
8400
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1094 if(jm->thread_id) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1095 child = purple_xmlnode_new_child(message, "thread");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1096 purple_xmlnode_insert_data(child, jm->thread_id, -1);
8400
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1097 }
09cd5dba5ca4 [gaim-migrate @ 9129]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
1098
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1099 child = NULL;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1100 switch(jm->chat_state)
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1101 {
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1102 case JM_STATE_ACTIVE:
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1103 child = purple_xmlnode_new_child(message, "active");
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1104 break;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1105 case JM_STATE_COMPOSING:
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1106 child = purple_xmlnode_new_child(message, "composing");
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1107 break;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1108 case JM_STATE_PAUSED:
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1109 child = purple_xmlnode_new_child(message, "paused");
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1110 break;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1111 case JM_STATE_INACTIVE:
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1112 child = purple_xmlnode_new_child(message, "inactive");
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1113 break;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1114 case JM_STATE_GONE:
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1115 child = purple_xmlnode_new_child(message, "gone");
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1116 break;
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1117 case JM_STATE_NONE:
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1118 /* yep, nothing */
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1119 break;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1120 }
27432
cf4a335fd0ec --warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 27431
diff changeset
1121 if(child)
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1122 purple_xmlnode_set_namespace(child, "http://jabber.org/protocol/chatstates");
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1123
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1124 if(jm->subject) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1125 child = purple_xmlnode_new_child(message, "subject");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1126 purple_xmlnode_insert_data(child, jm->subject, -1);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1127 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1128
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1129 if(jm->body) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1130 child = purple_xmlnode_new_child(message, "body");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1131 purple_xmlnode_insert_data(child, jm->body, -1);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1132 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1133
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1134 if(jm->xhtml) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1135 if ((child = purple_xmlnode_from_str(jm->xhtml, -1))) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1136 purple_xmlnode_insert_child(message, child);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1137 } else {
28828
7c1855f037e7 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents: 28726
diff changeset
1138 purple_debug_error("jabber",
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1139 "XHTML translation/validation failed, returning: %s\n",
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1140 jm->xhtml);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1141 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1142 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1143
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1144 jabber_send(jm->js, message);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1145
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34728
diff changeset
1146 purple_xmlnode_free(message);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1147 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1148
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1149 /*
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1150 * Compare the XHTML and plain strings passed in for "equality". Any HTML markup
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1151 * other than <br/> (matches a newline) in the XHTML will cause this to return
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1152 * FALSE.
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1153 */
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1154 static gboolean
40293
c60c4f96749d Fix some line wrapping
Richard Laager <rlaager@pidgin.im>
parents: 40290
diff changeset
1155 jabber_xhtml_plain_equal(const char *xhtml_escaped, const char *plain)
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1156 {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1157 int i = 0;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1158 int j = 0;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1159 gboolean ret;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1160 char *xhtml = purple_unescape_html(xhtml_escaped);
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1161
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1162 while (xhtml[i] && plain[j]) {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1163 if (xhtml[i] == plain[j]) {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1164 i += 1;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1165 j += 1;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1166 continue;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1167 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1168
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1169 if (plain[j] == '\n' && !strncmp(xhtml+i, "<br/>", 5)) {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1170 i += 5;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1171 j += 1;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1172 continue;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1173 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1174
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1175 g_free(xhtml);
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1176 return FALSE;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1177 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1178
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1179 /* Are we at the end of both strings? */
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1180 ret = (xhtml[i] == plain[j]) && (xhtml[i] == '\0');
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1181 g_free(xhtml);
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1182 return ret;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1183 }
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1184
40507
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
1185 int jabber_message_send_im(PurpleProtocolIM *pim, PurpleConnection *gc,
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
1186 PurpleMessage *msg)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1187 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1188 JabberMessage *jm;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1189 JabberBuddy *jb;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1190 JabberBuddyResource *jbr;
7135
8a92e2e034f9 [gaim-migrate @ 7702]
Nathan Walp <nwalp@pidgin.im>
parents: 7118
diff changeset
1191 char *xhtml;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1192 char *tmp;
7306
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1193 char *resource;
36098
4951752ad038 Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36092
diff changeset
1194 const gchar *rcpt = purple_message_get_recipient(msg);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1195
36098
4951752ad038 Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36092
diff changeset
1196 if (!rcpt || purple_message_is_empty(msg))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1197 return 0;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1198
36098
4951752ad038 Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36092
diff changeset
1199 resource = jabber_get_resource(rcpt);
31512
b1c0ce2787e6 jabber: Verbose printing of the exact message passed in to jabber_message_send_im.
Paul Aurich <darkrain42@pidgin.im>
parents: 31294
diff changeset
1200
36098
4951752ad038 Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36092
diff changeset
1201 jb = jabber_buddy_find(purple_connection_get_protocol_data(gc), rcpt, TRUE);
7306
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1202 jbr = jabber_buddy_find_resource(jb, resource);
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1203
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1204 g_free(resource);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1205
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1206 jm = g_new0(JabberMessage, 1);
32277
97f16af01a05 Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents: 31512
diff changeset
1207 jm->js = purple_connection_get_protocol_data(gc);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1208 jm->type = JABBER_MESSAGE_CHAT;
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1209 jm->chat_state = JM_STATE_ACTIVE;
36098
4951752ad038 Split PurpleMessage into incoming, outgoing and system
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36092
diff changeset
1210 jm->to = g_strdup(rcpt);
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
1211 jm->id = jabber_get_next_id(jm->js);
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1212
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1213 if(jbr) {
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1214 if(jbr->thread_id)
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1215 jm->thread_id = jbr->thread_id;
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1216
27429
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1217 if (jbr->chat_states == JABBER_CHAT_STATES_UNSUPPORTED)
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1218 jm->chat_state = JM_STATE_NONE;
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1219 else {
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1220 /* if(JABBER_CHAT_STATES_UNKNOWN == jbr->chat_states)
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1221 jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; */
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1222 }
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1223 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1224
36076
a0e5b68ff4ef Switch purple_serv_send_im to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35838
diff changeset
1225 tmp = purple_utf8_strip_unprintables(purple_message_get_contents(msg));
27237
0643ac0e5658 Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents: 27155
diff changeset
1226 purple_markup_html_to_xhtml(tmp, &xhtml, &jm->body);
0643ac0e5658 Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents: 27155
diff changeset
1227 g_free(tmp);
29229
1fd36e207795 jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents: 28996
diff changeset
1228
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1229 tmp = jabber_message_smileyfy_xhtml(jm, xhtml);
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1230 if (tmp) {
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1231 g_free(xhtml);
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1232 xhtml = tmp;
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1233 }
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1234
27746
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1235 /*
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1236 * For backward compatibility with user expectations or for those not on
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1237 * the user's roster, allow sending XHTML-IM markup.
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1238 */
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1239 if (!jbr || !jbr->caps.info ||
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28979
diff changeset
1240 jabber_resource_has_capability(jbr, NS_XHTML_IM)) {
27746
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1241 if (!jabber_xhtml_plain_equal(xhtml, jm->body))
29229
1fd36e207795 jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents: 28996
diff changeset
1242 /* Wrap the message in <p/> for great interoperability justice. */
1fd36e207795 jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents: 28996
diff changeset
1243 jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'><p>%s</p></body></html>", xhtml);
27746
4b3f015977d9 For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1244 }
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1245
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1246 g_free(xhtml);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1247
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1248 jabber_message_send(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1249 jabber_message_free(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1250 return 1;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1251 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1252
40697
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40594
diff changeset
1253 gint
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40594
diff changeset
1254 jabber_message_send_chat(PurpleProtocolChat *protocol_chat,
81f81f5d2f39 Split PurpleProtocolChat to its own file and clean up the API.
Gary Kramlich <grim@reaperworld.com>
parents: 40594
diff changeset
1255 PurpleConnection *gc, gint id, PurpleMessage *msg)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1256 {
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1257 JabberChat *chat;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1258 JabberMessage *jm;
8042
3643df1e6e78 [gaim-migrate @ 8726]
Nathan Walp <nwalp@pidgin.im>
parents: 8016
diff changeset
1259 JabberStream *js;
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1260 char *xhtml;
27110
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1261 char *tmp;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1262
36077
b7328f4317c7 Switch purple_serv_chat_send to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36076
diff changeset
1263 if (!gc || purple_message_is_empty(msg))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1264 return 0;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1265
32277
97f16af01a05 Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents: 31512
diff changeset
1266 js = purple_connection_get_protocol_data(gc);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1267 chat = jabber_chat_find_by_id(js, id);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1268
8043
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8042
diff changeset
1269 if(!chat)
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8042
diff changeset
1270 return 0;
86a087e9624c [gaim-migrate @ 8727]
Nathan Walp <nwalp@pidgin.im>
parents: 8042
diff changeset
1271
9130
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1272 jm = g_new0(JabberMessage, 1);
32277
97f16af01a05 Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents: 31512
diff changeset
1273 jm->js = purple_connection_get_protocol_data(gc);
9130
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1274 jm->type = JABBER_MESSAGE_GROUPCHAT;
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1275 jm->to = g_strdup_printf("%s@%s", chat->room, chat->server);
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
1276 jm->id = jabber_get_next_id(jm->js);
9130
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1277
36077
b7328f4317c7 Switch purple_serv_chat_send to PurpleMessage
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36076
diff changeset
1278 tmp = purple_utf8_strip_unprintables(purple_message_get_contents(msg));
28534
df58e9ce5eca Oops, it helps to actually use the stripped message.
Paul Aurich <darkrain42@pidgin.im>
parents: 28442
diff changeset
1279 purple_markup_html_to_xhtml(tmp, &xhtml, &jm->body);
27237
0643ac0e5658 Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents: 27155
diff changeset
1280 g_free(tmp);
27110
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1281 tmp = jabber_message_smileyfy_xhtml(jm, xhtml);
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1282 if (tmp) {
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1283 g_free(xhtml);
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1284 xhtml = tmp;
05ca719b901b Support custom smileys in MUCs (when all participants support BoB and a maximum
Marcus Lundblad <malu@pidgin.im>
parents: 27103
diff changeset
1285 }
8858
99c635a80a26 [gaim-migrate @ 9626]
Nathan Walp <nwalp@pidgin.im>
parents: 8577
diff changeset
1286
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1287 if (chat->xhtml && !jabber_xhtml_plain_equal(xhtml, jm->body))
29229
1fd36e207795 jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents: 28996
diff changeset
1288 /* Wrap the message in <p/> for greater interoperability justice. */
1fd36e207795 jabber: Wrap XHTML-IM messages in <p/> for greater interoperability justice. Closes #11253
Paul Aurich <darkrain42@pidgin.im>
parents: 28996
diff changeset
1289 jm->xhtml = g_strdup_printf("<html xmlns='" NS_XHTML_IM "'><body xmlns='" NS_XHTML "'><p>%s</p></body></html>", xhtml);
27061
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1290
b1bfbf77cf90 Only include XHTML payload in XMPP message when it's needed. Closes #8738.
Paul Aurich <darkrain42@pidgin.im>
parents: 26984
diff changeset
1291 g_free(xhtml);
7923
fd43ed3cda18 [gaim-migrate @ 8592]
Nathan Walp <nwalp@pidgin.im>
parents: 7894
diff changeset
1292
9130
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1293 jabber_message_send(jm);
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1294 jabber_message_free(jm);
2e67295dd047 [gaim-migrate @ 9908]
Nathan Walp <nwalp@pidgin.im>
parents: 8858
diff changeset
1295
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1296 return 1;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1297 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1298
40507
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
1299 unsigned int jabber_send_typing(PurpleProtocolIM *pim, PurpleConnection *gc,
77d7bc9e5151 Make PurpleProtocolIM a proper interface
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
1300 const char *who, PurpleIMTypingState state)
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1301 {
30454
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1302 JabberStream *js;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1303 JabberMessage *jm;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1304 JabberBuddy *jb;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1305 JabberBuddyResource *jbr;
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 30744
diff changeset
1306 char *resource;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1307
30454
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1308 js = purple_connection_get_protocol_data(gc);
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1309 jb = jabber_buddy_find(js, who, TRUE);
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1310 if (!jb)
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1311 return 0;
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1312
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1313 resource = jabber_get_resource(who);
7306
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1314 jbr = jabber_buddy_find_resource(jb, resource);
61d7324411f8 [gaim-migrate @ 7890]
Nathan Walp <nwalp@pidgin.im>
parents: 7261
diff changeset
1315 g_free(resource);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1316
30235
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1317 /* We know this entity doesn't support chat states */
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1318 if (jbr && jbr->chat_states == JABBER_CHAT_STATES_UNSUPPORTED)
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1319 return 0;
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1320
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1321 /* *If* we don't have presence /and/ the buddy can't see our
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1322 * presence, don't send typing notifications.
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1323 */
d37c441d6a48 jabber: Send typing notifications to a buddy when it can see our presence
Paul Aurich <darkrain42@pidgin.im>
parents: 30121
diff changeset
1324 if (!jbr && !(jb->subscription & JABBER_SUB_FROM))
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1325 return 0;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1326
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1327 /* TODO: figure out threading */
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1328 jm = g_new0(JabberMessage, 1);
30454
4e9bf65cfe9a jabber: Fix a crash when sending typing notifications to a malformed buddy
Paul Aurich <darkrain42@pidgin.im>
parents: 30239
diff changeset
1329 jm->js = js;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1330 jm->type = JABBER_MESSAGE_CHAT;
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1331 jm->to = g_strdup(who);
13484
350fd422b021 [gaim-migrate @ 15859]
Sean Egan <seanegan@pidgin.im>
parents: 13385
diff changeset
1332 jm->id = jabber_get_next_id(jm->js);
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1333
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34634
diff changeset
1334 if(PURPLE_IM_TYPING == state)
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1335 jm->chat_state = JM_STATE_COMPOSING;
34670
9bd5bd903dc7 Renamed chat buddies to chat users, and IM conversation typing state to IM typing state.
Ankit Vani <a@nevitus.org>
parents: 34634
diff changeset
1336 else if(PURPLE_IM_TYPED == state)
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1337 jm->chat_state = JM_STATE_PAUSED;
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1338 else
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1339 jm->chat_state = JM_STATE_ACTIVE;
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1340
27429
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1341 /* if(JABBER_CHAT_STATES_UNKNOWN == jbr->chat_states)
3313d7d74962 Remove code for obsoleted XEP-0022 (Message Events)
Paul Aurich <darkrain42@pidgin.im>
parents: 27237
diff changeset
1342 jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED; */
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1343
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1344 jabber_message_send(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1345 jabber_message_free(jm);
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1346
13708
37d5bc24e5bf [gaim-migrate @ 16110]
Nathan Walp <nwalp@pidgin.im>
parents: 13484
diff changeset
1347 return 0;
7014
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1348 }
11471fae7ba0 [gaim-migrate @ 7577]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
1349
23586
e495a4623f76 Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents: 23249
diff changeset
1350 gboolean jabber_buzz_isenabled(JabberStream *js, const gchar *namespace) {
17824
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
1351 return js->allowBuzz;
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
1352 }
52683dfc1f7d Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents: 17823
diff changeset
1353
24715
69aaae59e205 Fix compilation errors and many warnings
Paul Aurich <darkrain42@pidgin.im>
parents: 24714
diff changeset
1354 gboolean jabber_custom_smileys_isenabled(JabberStream *js, const gchar *namespace)
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
1355 {
39433
f033955d125a Use G_DEFINE_TYPE_WITH_PRIVATE for PurpleConnection.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39065
diff changeset
1356 PurpleAccount *account = purple_connection_get_account(js->gc);
23627
dbdc407798af A couple of leak fixes.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23626
diff changeset
1357
23626
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
1358 return purple_account_get_bool(account, "custom_smileys", TRUE);
e21afec2f485 Custom smileys for XMPP according to XEP 0231. Refs #5627.
Marcus Lundblad <malu@pidgin.im>
parents: 23249
diff changeset
1359 }

mercurial