libpurple/protocols/jabber/ibb.c

Wed, 12 Jan 2011 14:31:52 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Wed, 12 Jan 2011 14:31:52 +0000
changeset 31360
4ddd59618002
parent 30184
a8de64b7cbfd
child 33801
6dbfcd72998e
permissions
-rw-r--r--

jabber: Be friendlier to servers when we have nothing to say.

Don't try to reconnect immediately, but do so when we have something
to send. Untested (I'll test it later), but I'm hoping hsitas444 will
test it first. Refs #13008.

24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
1 /*
30184
a8de64b7cbfd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <malu@pidgin.im>
parents: 29887
diff changeset
2 * purple - Jabber Service Discovery
a8de64b7cbfd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <malu@pidgin.im>
parents: 29887
diff changeset
3 *
28321
c8d617c408ab Update various header copyrights thanks to licensecheck.
Paul Aurich <darkrain42@pidgin.im>
parents: 27028
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
c8d617c408ab Update various header copyrights thanks to licensecheck.
Paul Aurich <darkrain42@pidgin.im>
parents: 27028
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c8d617c408ab Update various header copyrights thanks to licensecheck.
Paul Aurich <darkrain42@pidgin.im>
parents: 27028
diff changeset
6 * source distribution.
c8d617c408ab Update various header copyrights thanks to licensecheck.
Paul Aurich <darkrain42@pidgin.im>
parents: 27028
diff changeset
7 *
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
12 *
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30184
a8de64b7cbfd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <malu@pidgin.im>
parents: 29887
diff changeset
16 * GNU General Public License for more details.
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
17 *
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
28345
57a838c454b0 Oops, Elliott correctly pointed out this was wrong...
Paul Aurich <darkrain42@pidgin.im>
parents: 28321
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
30184
a8de64b7cbfd Fix license to refer to GPLv2 in a files...
Marcus Lundblad <malu@pidgin.im>
parents: 29887
diff changeset
21 *
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
22 */
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
23
24375
829a4c82f18b Patch from Phil Hannent to fix build on win32,
Marcus Lundblad <malu@pidgin.im>
parents: 24372
diff changeset
24 #include "internal.h"
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
25 #include "ibb.h"
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
27 #include "xmlnode.h"
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
28
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
29 #define JABBER_IBB_SESSION_DEFAULT_BLOCK_SIZE 4096
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
30
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
31 static GHashTable *jabber_ibb_sessions = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
32 static GList *open_handlers = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
33
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
34 JabberIBBSession *
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
35 jabber_ibb_session_create(JabberStream *js, const gchar *sid, const gchar *who,
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
36 gpointer user_data)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
37 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
38 JabberIBBSession *sess = g_new0(JabberIBBSession, 1);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
39 sess->js = js;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
40 if (sid) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
41 sess->sid = g_strdup(sid);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
42 } else {
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
43 sess->sid = jabber_get_next_id(js);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
44 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
45 sess->who = g_strdup(who);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
46 sess->block_size = JABBER_IBB_SESSION_DEFAULT_BLOCK_SIZE;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
47 sess->state = JABBER_IBB_SESSION_NOT_OPENED;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
48 sess->user_data = user_data;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
49
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
50 g_hash_table_insert(jabber_ibb_sessions, sess->sid, sess);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
51
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
52 return sess;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
53 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
54
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
55 JabberIBBSession *
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
56 jabber_ibb_session_create_from_xmlnode(JabberStream *js, const char *from,
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
57 const char *id, xmlnode *open, gpointer user_data)
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
58 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
59 JabberIBBSession *sess = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
60 const gchar *sid = xmlnode_get_attrib(open, "sid");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
61 const gchar *block_size = xmlnode_get_attrib(open, "block-size");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
62
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
63 if (!open) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
64 return NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
65 }
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
66
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
67 if (!sid || !block_size) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
68 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
69 "IBB session open tag requires sid and block-size attributes\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
70 g_free(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
71 return NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
72 }
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
73
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
74 sess = jabber_ibb_session_create(js, sid, from, user_data);
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
75 sess->id = g_strdup(id);
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
76 sess->block_size = atoi(block_size);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
77 /* if we create a session from an incoming <open/> request, it means the
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
78 session is immediatly open... */
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
79 sess->state = JABBER_IBB_SESSION_OPENED;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
80
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
81 return sess;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
82 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
83
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
84 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
85 jabber_ibb_session_destroy(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
86 {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
87 purple_debug_info("jabber", "IBB: destroying session %p %s\n", sess,
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
88 sess->sid);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
89
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
90 if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_OPENED) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
91 jabber_ibb_session_close(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
92 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
93
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
94 if (sess->last_iq_id) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
95 purple_debug_info("jabber", "IBB: removing callback for <iq/> %s\n",
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
96 sess->last_iq_id);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
97 jabber_iq_remove_callback_by_id(jabber_ibb_session_get_js(sess),
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
98 sess->last_iq_id);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
99 g_free(sess->last_iq_id);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
100 sess->last_iq_id = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
101 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
102
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
103 g_hash_table_remove(jabber_ibb_sessions, sess->sid);
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
104 g_free(sess->id);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
105 g_free(sess->sid);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
106 g_free(sess->who);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
107 g_free(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
108 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
109
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
110 const gchar *
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
111 jabber_ibb_session_get_sid(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
112 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
113 return sess->sid;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
114 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
115
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
116 JabberStream *
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
117 jabber_ibb_session_get_js(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
118 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
119 return sess->js;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
120 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
121
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
122 const gchar *
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
123 jabber_ibb_session_get_who(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
124 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
125 return sess->who;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
126 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
127
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
128 guint16
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
129 jabber_ibb_session_get_send_seq(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
130 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
131 return sess->send_seq;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
132 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
133
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
134 guint16
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
135 jabber_ibb_session_get_recv_seq(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
136 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
137 return sess->recv_seq;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
138 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
139
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
140 JabberIBBSessionState
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
141 jabber_ibb_session_get_state(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
142 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
143 return sess->state;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
144 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
145
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
146 gsize
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
147 jabber_ibb_session_get_block_size(const JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
148 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
149 return sess->block_size;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
150 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
151
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
152 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
153 jabber_ibb_session_set_block_size(JabberIBBSession *sess, gsize size)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
154 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
155 if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_NOT_OPENED) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
156 sess->block_size = size;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
157 } else {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
158 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
159 "Can't set block size on an open IBB session\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
160 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
161 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
162
29887
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
163 gsize
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
164 jabber_ibb_session_get_max_data_size(const JabberIBBSession *sess)
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
165 {
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
166 return (gsize) floor((sess->block_size - 2) * (float) 3 / 4);
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
167 }
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
168
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
169 gpointer
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
170 jabber_ibb_session_get_user_data(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
171 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
172 return sess->user_data;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
173 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
174
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
175 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
176 jabber_ibb_session_set_opened_callback(JabberIBBSession *sess,
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
177 JabberIBBOpenedCallback *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
178 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
179 sess->opened_cb = cb;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
180 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
181
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
182 void
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
183 jabber_ibb_session_set_data_sent_callback(JabberIBBSession *sess,
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
184 JabberIBBSentCallback *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
185 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
186 sess->data_sent_cb = cb;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
187 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
188
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
189 void
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
190 jabber_ibb_session_set_closed_callback(JabberIBBSession *sess,
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
191 JabberIBBClosedCallback *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
192 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
193 sess->closed_cb = cb;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
194 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
195
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
196 void
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
197 jabber_ibb_session_set_data_received_callback(JabberIBBSession *sess,
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
198 JabberIBBDataCallback *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
199 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
200 sess->data_received_cb = cb;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
201 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
202
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
203 void
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
204 jabber_ibb_session_set_error_callback(JabberIBBSession *sess,
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
205 JabberIBBErrorCallback *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
206 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
207 sess->error_cb = cb;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
208 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
209
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
210 static void
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
211 jabber_ibb_session_opened_cb(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
212 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
213 xmlnode *packet, gpointer data)
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
214 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
215 JabberIBBSession *sess = (JabberIBBSession *) data;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
216
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
217 if (type == JABBER_IQ_ERROR) {
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
218 sess->state = JABBER_IBB_SESSION_ERROR;
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
219 } else {
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
220 sess->state = JABBER_IBB_SESSION_OPENED;
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
221 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
222
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
223 if (sess->opened_cb) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
224 sess->opened_cb(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
225 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
226 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
227
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
228 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
229 jabber_ibb_session_open(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
230 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
231 if (jabber_ibb_session_get_state(sess) != JABBER_IBB_SESSION_NOT_OPENED) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
232 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
233 "jabber_ibb_session called on an already open stream\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
234 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
235 JabberIq *set = jabber_iq_new(sess->js, JABBER_IQ_SET);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
236 xmlnode *open = xmlnode_new("open");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
237 gchar block_size[10];
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
238
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
239 xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
28979
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
240 xmlnode_set_namespace(open, NS_IBB);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
241 xmlnode_set_attrib(open, "sid", jabber_ibb_session_get_sid(sess));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
242 g_snprintf(block_size, sizeof(block_size), "%" G_GSIZE_FORMAT,
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
243 jabber_ibb_session_get_block_size(sess));
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
244 xmlnode_set_attrib(open, "block-size", block_size);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
245 xmlnode_insert_child(set->node, open);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
246
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
247 jabber_iq_set_callback(set, jabber_ibb_session_opened_cb, sess);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
248
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
249 jabber_iq_send(set);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
250 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
251 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
252
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
253 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
254 jabber_ibb_session_close(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
255 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
256 JabberIBBSessionState state = jabber_ibb_session_get_state(sess);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
257
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
258 if (state != JABBER_IBB_SESSION_OPENED && state != JABBER_IBB_SESSION_ERROR) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
259 purple_debug_error("jabber",
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
260 "jabber_ibb_session_close called on a session that has not been"
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
261 "opened\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
262 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
263 JabberIq *set = jabber_iq_new(jabber_ibb_session_get_js(sess),
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
264 JABBER_IQ_SET);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
265 xmlnode *close = xmlnode_new("close");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
266
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
267 xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
28979
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
268 xmlnode_set_namespace(close, NS_IBB);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
269 xmlnode_set_attrib(close, "sid", jabber_ibb_session_get_sid(sess));
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
270 xmlnode_insert_child(set->node, close);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
271 jabber_iq_send(set);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
272 sess->state = JABBER_IBB_SESSION_CLOSED;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
273 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
274 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
275
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
276 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
277 jabber_ibb_session_accept(JabberIBBSession *sess)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
278 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
279 JabberIq *result = jabber_iq_new(jabber_ibb_session_get_js(sess),
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
280 JABBER_IQ_RESULT);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
281
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
282 xmlnode_set_attrib(result->node, "to", jabber_ibb_session_get_who(sess));
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
283 jabber_iq_set_id(result, sess->id);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
284 jabber_iq_send(result);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
285 sess->state = JABBER_IBB_SESSION_OPENED;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
286 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
287
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
288 static void
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
289 jabber_ibb_session_send_acknowledge_cb(JabberStream *js, const char *from,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
290 JabberIqType type, const char *id,
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
291 xmlnode *packet, gpointer data)
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
292 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
293 JabberIBBSession *sess = (JabberIBBSession *) data;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
294
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
295 if (sess) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
296 /* reset callback */
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
297 if (sess->last_iq_id) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
298 g_free(sess->last_iq_id);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
299 sess->last_iq_id = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
300 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
301
26687
1e799151fabe Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents: 26042
diff changeset
302 if (type == JABBER_IQ_ERROR) {
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
303 jabber_ibb_session_close(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
304 sess->state = JABBER_IBB_SESSION_ERROR;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
305
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
306 if (sess->error_cb) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
307 sess->error_cb(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
308 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
309 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
310 if (sess->data_sent_cb) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
311 sess->data_sent_cb(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
312 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
313 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
314 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
315 /* the session has gone away, it was probably cancelled */
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
316 purple_debug_info("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
317 "got response from send data, but IBB session is no longer active\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
318 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
319 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
320
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
321 void
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
322 jabber_ibb_session_send_data(JabberIBBSession *sess, gconstpointer data,
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
323 gsize size)
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
324 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
325 JabberIBBSessionState state = jabber_ibb_session_get_state(sess);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
326
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
327 purple_debug_info("jabber", "sending data block of %" G_GSIZE_FORMAT " bytes on IBB stream\n",
25986
4fe846f4a8fb Actually close the assoiciated jsx when closing an IBB session.
Marcus Lundblad <malu@pidgin.im>
parents: 24375
diff changeset
328 size);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
329
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
330 if (state != JABBER_IBB_SESSION_OPENED) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
331 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
332 "trying to send data on a non-open IBB session\n");
29887
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
333 } else if (size > jabber_ibb_session_get_max_data_size(sess)) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
334 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
335 "trying to send a too large packet in the IBB session\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
336 } else {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
337 JabberIq *set = jabber_iq_new(jabber_ibb_session_get_js(sess),
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
338 JABBER_IQ_SET);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
339 xmlnode *data_element = xmlnode_new("data");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
340 char *base64 = purple_base64_encode(data, size);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
341 char seq[10];
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
342 g_snprintf(seq, sizeof(seq), "%u", jabber_ibb_session_get_send_seq(sess));
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
343
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
344 xmlnode_set_attrib(set->node, "to", jabber_ibb_session_get_who(sess));
28979
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
345 xmlnode_set_namespace(data_element, NS_IBB);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
346 xmlnode_set_attrib(data_element, "sid", jabber_ibb_session_get_sid(sess));
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
347 xmlnode_set_attrib(data_element, "seq", seq);
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
348 xmlnode_insert_data(data_element, base64, -1);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
349
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
350 xmlnode_insert_child(set->node, data_element);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
351
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
352 purple_debug_info("jabber",
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
353 "IBB: setting send <iq/> callback for session %p %s\n", sess,
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
354 sess->sid);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
355 jabber_iq_set_callback(set, jabber_ibb_session_send_acknowledge_cb, sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
356 sess->last_iq_id = g_strdup(xmlnode_get_attrib(set->node, "id"));
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
357 purple_debug_info("jabber", "IBB: set sess->last_iq_id: %s\n",
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
358 sess->last_iq_id);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
359 jabber_iq_send(set);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
360
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
361 g_free(base64);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
362 (sess->send_seq)++;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
363 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
364 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
365
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
366 static void
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
367 jabber_ibb_send_error_response(JabberStream *js, const char *to, const char *id)
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
368 {
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
369 JabberIq *result = jabber_iq_new(js, JABBER_IQ_ERROR);
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
370 xmlnode *error = xmlnode_new("error");
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
371 xmlnode *item_not_found = xmlnode_new("item-not-found");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
372
28984
1d84517d56eb jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents: 28979
diff changeset
373 xmlnode_set_namespace(item_not_found, NS_XMPP_STANZAS);
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
374 xmlnode_set_attrib(error, "code", "440");
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
375 xmlnode_set_attrib(error, "type", "cancel");
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
376 jabber_iq_set_id(result, id);
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
377 xmlnode_set_attrib(result->node, "to", to);
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
378 xmlnode_insert_child(error, item_not_found);
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
379 xmlnode_insert_child(result->node, error);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
380
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
381 jabber_iq_send(result);
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
382 }
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
383
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
384 void
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
385 jabber_ibb_parse(JabberStream *js, const char *who, JabberIqType type,
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
386 const char *id, xmlnode *child)
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
387 {
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
388 const char *name = child->name;
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
389 gboolean data = g_str_equal(name, "data");
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
390 gboolean close = g_str_equal(name, "close");
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
391 gboolean open = g_str_equal(name, "open");
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
392 const gchar *sid = (data || close) ?
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
393 xmlnode_get_attrib(child, "sid") : NULL;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
394 JabberIBBSession *sess =
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
395 sid ? g_hash_table_lookup(jabber_ibb_sessions, sid) : NULL;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
396
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
397 if (sess) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
398
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
399 if (strcmp(who, jabber_ibb_session_get_who(sess)) != 0) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
400 /* the iq comes from a different JID than the remote JID of the
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
401 session, ignore it */
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
402 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
403 "Got IBB iq from wrong JID, ignoring\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
404 } else if (data) {
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
405 const gchar *seq_attr = xmlnode_get_attrib(child, "seq");
26023
788f6f618791 Fix error handling on missing "seq" attribute
Marcus Lundblad <malu@pidgin.im>
parents: 26020
diff changeset
406 guint16 seq = (seq_attr ? atoi(seq_attr) : 0);
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
407
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
408 /* reject the data, and set the session in error if we get an
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
409 out-of-order packet */
26023
788f6f618791 Fix error handling on missing "seq" attribute
Marcus Lundblad <malu@pidgin.im>
parents: 26020
diff changeset
410 if (seq_attr && seq == jabber_ibb_session_get_recv_seq(sess)) {
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
411 /* sequence # is the expected... */
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
412 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
413
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
414 jabber_iq_set_id(result, id);
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
415 xmlnode_set_attrib(result->node, "to", who);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
416
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
417 if (sess->data_received_cb) {
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
418 gchar *base64 = xmlnode_get_data(child);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
419 gsize size;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
420 gpointer rawdata = purple_base64_decode(base64, &size);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
421
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
422 g_free(base64);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
423
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
424 if (rawdata) {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
425 purple_debug_info("jabber",
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
426 "got %" G_GSIZE_FORMAT " bytes of data on IBB stream\n",
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
427 size);
29887
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
428 /* we accept other clients to send up to block-size
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
429 of _unencoded_ data, since there's been some confusions
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
430 regarding the interpretation of this attribute
2556fe9b4875 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <malu@pidgin.im>
parents: 28984
diff changeset
431 (including previous versions of libpurple) */
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
432 if (size > jabber_ibb_session_get_block_size(sess)) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
433 purple_debug_error("jabber",
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
434 "IBB: received a too large packet\n");
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
435 if (sess->error_cb)
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
436 sess->error_cb(sess);
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
437 g_free(rawdata);
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
438 return;
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
439 } else {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
440 purple_debug_info("jabber",
25986
4fe846f4a8fb Actually close the assoiciated jsx when closing an IBB session.
Marcus Lundblad <malu@pidgin.im>
parents: 24375
diff changeset
441 "calling IBB callback for received data\n");
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
442 sess->data_received_cb(sess, rawdata, size);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
443 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
444 g_free(rawdata);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
445 } else {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
446 purple_debug_error("jabber",
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
447 "IBB: invalid BASE64 data received\n");
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
448 if (sess->error_cb)
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
449 sess->error_cb(sess);
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
450 return;
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
451
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
452 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
453 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
454
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
455 (sess->recv_seq)++;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
456 jabber_iq_send(result);
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
457
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
458 } else {
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
459 purple_debug_error("jabber",
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
460 "Received an out-of-order/invalid IBB packet\n");
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
461 sess->state = JABBER_IBB_SESSION_ERROR;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
462
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
463 if (sess->error_cb) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
464 sess->error_cb(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
465 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
466 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
467 } else if (close) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
468 sess->state = JABBER_IBB_SESSION_CLOSED;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
469 purple_debug_info("jabber", "IBB: received close\n");
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
470
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
471 if (sess->closed_cb) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
472 purple_debug_info("jabber", "IBB: calling closed handler\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
473 sess->closed_cb(sess);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
474 }
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
475
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
476 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
477 /* this should never happen */
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
478 purple_debug_error("jabber", "Received bogus iq for IBB session\n");
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
479 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
480 } else if (open) {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
481 JabberIq *result;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
482 const GList *iterator;
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
483
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
484 /* run all open handlers registered until one returns true */
26042
4dabdb5fe213 Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26023
diff changeset
485 for (iterator = open_handlers ; iterator ;
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
486 iterator = g_list_next(iterator)) {
26020
0e7f4920e969 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents: 26019
diff changeset
487 JabberIBBOpenHandler *handler = iterator->data;
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
488
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
489 if (handler(js, who, id, child)) {
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
490 result = jabber_iq_new(js, JABBER_IQ_RESULT);
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
491 xmlnode_set_attrib(result->node, "to", who);
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
492 jabber_iq_set_id(result, id);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
493 jabber_iq_send(result);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
494 return;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
495 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
496 }
25997
e871edaa1835 Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents: 25986
diff changeset
497 /* no open callback returned success, reject */
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
498 jabber_ibb_send_error_response(js, who, id);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
499 } else {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
500 /* send error reply */
26695
e0d0cc1eff29 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <darkrain42@pidgin.im>
parents: 26687
diff changeset
501 jabber_ibb_send_error_response(js, who, id);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
502 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
503 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
504
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
505 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
506 jabber_ibb_register_open_handler(JabberIBBOpenHandler *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
507 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
508 open_handlers = g_list_append(open_handlers, cb);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
509 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
510
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
511 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
512 jabber_ibb_unregister_open_handler(JabberIBBOpenHandler *cb)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
513 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
514 open_handlers = g_list_remove(open_handlers, cb);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
515 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
516
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
517 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
518 jabber_ibb_init(void)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
519 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
520 jabber_ibb_sessions = g_hash_table_new(g_str_hash, g_str_equal);
26701
01ab22c2baa9 Move some IQ handler registrations to the appropriate init functions
Paul Aurich <darkrain42@pidgin.im>
parents: 26695
diff changeset
521
28979
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
522 jabber_add_feature(NS_IBB, NULL);
27028
1a2ef7ddb463 Clean up jabber prpl memory allocations on uninit.
Nick Hebner <hebnern@gmail.com>
parents: 26701
diff changeset
523
28979
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
524 jabber_iq_register_handler("close", NS_IBB, jabber_ibb_parse);
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
525 jabber_iq_register_handler("data", NS_IBB, jabber_ibb_parse);
191942cc7747 jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents: 28345
diff changeset
526 jabber_iq_register_handler("open", NS_IBB, jabber_ibb_parse);
24372
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
527 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
528
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
529 void
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
530 jabber_ibb_uninit(void)
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
531 {
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
532 g_hash_table_destroy(jabber_ibb_sessions);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
533 g_list_free(open_handlers);
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
534 jabber_ibb_sessions = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
535 open_handlers = NULL;
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
536 }
830701cec96f Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
537

mercurial