Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
1 | /* |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
2 | * 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
|
3 | * 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
|
4 | * 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
|
5 | * (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
|
6 | * |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
7 | * 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
|
8 | * 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
|
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
10 | * GNU Library 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
|
11 | * |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
12 | * 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
|
13 | * along with this program; if not, write to the Free Software |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
14 | * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
15 | */ |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
16 | |
|
24375
829a4c82f18b
Patch from Phil Hannent to fix build on win32,
Marcus Lundblad <malu@pidgin.im>
parents:
24372
diff
changeset
|
17 | #include "internal.h" |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
18 | #include "ibb.h" |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
19 | #include "debug.h" |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
20 | #include "xmlnode.h" |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
21 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
22 | #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
|
23 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
24 | static GHashTable *jabber_ibb_sessions = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
25 | static GList *open_handlers = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
26 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
27 | 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
|
28 | 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
|
29 | gpointer user_data) |
|
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 | JabberIBBSession *sess = g_new0(JabberIBBSession, 1); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
32 | sess->js = js; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
33 | if (sid) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
34 | sess->sid = g_strdup(sid); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
35 | } else { |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
36 | 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
|
37 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
38 | sess->who = g_strdup(who); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
39 | 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
|
40 | 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
|
41 | 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
|
42 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
43 | 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
|
44 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
45 | return sess; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
46 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
47 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
48 | 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
|
49 | 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
|
50 | 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
|
51 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
52 | JabberIBBSession *sess = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
53 | 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
|
54 | 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
|
55 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
56 | if (!open) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
57 | return NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
58 | } |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
59 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
60 | 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
|
61 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
62 | "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
|
63 | g_free(sess); |
|
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 | |
|
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
|
67 | 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
|
68 | 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
|
69 | 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
|
70 | /* 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
|
71 | session is immediatly open... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
72 | 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
|
73 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
74 | return sess; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
75 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
76 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
77 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
78 | jabber_ibb_session_destroy(JabberIBBSession *sess) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
79 | { |
|
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 | 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
|
81 | 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
|
82 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
83 | 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
|
84 | jabber_ibb_session_close(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
85 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
86 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
87 | if (sess->last_iq_id) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
88 | 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
|
89 | 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
|
90 | 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
|
91 | sess->last_iq_id); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
92 | g_free(sess->last_iq_id); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
93 | sess->last_iq_id = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
94 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
95 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
96 | 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
|
97 | g_free(sess->id); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
98 | g_free(sess->sid); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
99 | g_free(sess->who); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
100 | g_free(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
101 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
102 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
103 | const gchar * |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
104 | 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
|
105 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
106 | return sess->sid; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
107 | } |
|
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 | JabberStream * |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
110 | 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
|
111 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
112 | return sess->js; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
113 | } |
|
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 | const gchar * |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
116 | 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
|
117 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
118 | return sess->who; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
119 | } |
|
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 | guint16 |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
122 | 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
|
123 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
124 | return sess->send_seq; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
125 | } |
|
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 | guint16 |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
128 | 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
|
129 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
130 | return sess->recv_seq; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
131 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
132 | |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
133 | JabberIBBSessionState |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
134 | 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
|
135 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
136 | return sess->state; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
137 | } |
|
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 | gsize |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
140 | 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
|
141 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
142 | return sess->block_size; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
143 | } |
|
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 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
146 | 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
|
147 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
148 | 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
|
149 | sess->block_size = size; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
150 | } 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
|
151 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
152 | "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
|
153 | } |
|
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 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
156 | gpointer |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
157 | 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
|
158 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
159 | return sess->user_data; |
|
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 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
163 | 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
|
164 | JabberIBBOpenedCallback *cb) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
165 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
166 | sess->opened_cb = cb; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
167 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
168 | |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
169 | void |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
170 | 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
|
171 | JabberIBBSentCallback *cb) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
172 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
173 | sess->data_sent_cb = cb; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
174 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
175 | |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
176 | void |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
177 | 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
|
178 | JabberIBBClosedCallback *cb) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
179 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
180 | sess->closed_cb = cb; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
181 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
182 | |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
183 | void |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
184 | 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
|
185 | JabberIBBDataCallback *cb) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
186 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
187 | sess->data_received_cb = cb; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
188 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
189 | |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
190 | void |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
191 | 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
|
192 | JabberIBBErrorCallback *cb) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
193 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
194 | sess->error_cb = cb; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
195 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
196 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
197 | 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
|
198 | 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
|
199 | 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
|
200 | xmlnode *packet, gpointer data) |
|
24372
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 | JabberIBBSession *sess = (JabberIBBSession *) data; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
203 | |
|
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
|
204 | 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
|
205 | 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
|
206 | } else { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
207 | 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
|
208 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
209 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
210 | if (sess->opened_cb) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
211 | sess->opened_cb(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
212 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
213 | } |
|
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 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
216 | jabber_ibb_session_open(JabberIBBSession *sess) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
217 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
218 | 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
|
219 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
220 | "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
|
221 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
222 | 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
|
223 | xmlnode *open = xmlnode_new("open"); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
224 | 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
|
225 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
226 | xmlnode_set_attrib(set->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
|
227 | xmlnode_set_namespace(open, XEP_0047_NAMESPACE); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
228 | 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
|
229 | 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
|
230 | 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
|
231 | 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
|
232 | 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
|
233 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
234 | 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
|
235 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
236 | jabber_iq_send(set); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
237 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
238 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
239 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
240 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
241 | jabber_ibb_session_close(JabberIBBSession *sess) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
242 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
243 | 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
|
244 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
245 | 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
|
246 | purple_debug_error("jabber", |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
247 | "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
|
248 | "opened\n"); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
249 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
250 | 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
|
251 | JABBER_IQ_SET); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
252 | 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
|
253 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
254 | xmlnode_set_attrib(set->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
|
255 | xmlnode_set_namespace(close, XEP_0047_NAMESPACE); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
256 | 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
|
257 | xmlnode_insert_child(set->node, close); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
258 | jabber_iq_send(set); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
259 | sess->state = JABBER_IBB_SESSION_CLOSED; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
260 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
261 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
262 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
263 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
264 | jabber_ibb_session_accept(JabberIBBSession *sess) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
265 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
266 | 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
|
267 | 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
|
268 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
269 | 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
|
270 | 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
|
271 | jabber_iq_send(result); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
272 | sess->state = JABBER_IBB_SESSION_OPENED; |
|
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 | 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
|
276 | 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
|
277 | 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
|
278 | xmlnode *packet, gpointer data) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
279 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
280 | 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
|
281 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
282 | if (sess) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
283 | /* reset callback */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
284 | if (sess->last_iq_id) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
285 | g_free(sess->last_iq_id); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
286 | sess->last_iq_id = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
287 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
288 | |
|
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 | if (type == JABBER_IQ_ERROR) { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
290 | jabber_ibb_session_close(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
291 | 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
|
292 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
293 | if (sess->error_cb) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
294 | sess->error_cb(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
295 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
296 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
297 | if (sess->data_sent_cb) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
298 | sess->data_sent_cb(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
299 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
300 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
301 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
302 | /* 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
|
303 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
304 | "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
|
305 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
306 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
307 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
308 | void |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
309 | 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
|
310 | gsize size) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
311 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
312 | 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
|
313 | |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
314 | 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
|
315 | 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
|
316 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
317 | 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
|
318 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
319 | "trying to send data on a non-open IBB session\n"); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
320 | } else if (size > jabber_ibb_session_get_block_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
|
321 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
322 | "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
|
323 | } 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
|
324 | 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
|
325 | JABBER_IQ_SET); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
326 | xmlnode *data_element = xmlnode_new("data"); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
327 | 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
|
328 | char seq[10]; |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
329 | 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
|
330 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
331 | xmlnode_set_attrib(set->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
|
332 | xmlnode_set_namespace(data_element, XEP_0047_NAMESPACE); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
333 | 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
|
334 | 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
|
335 | 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
|
336 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
337 | 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
|
338 | |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
339 | 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
|
340 | "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
|
341 | sess->sid); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
342 | 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
|
343 | 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
|
344 | 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
|
345 | sess->last_iq_id); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
346 | 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
|
347 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
348 | g_free(base64); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
349 | (sess->send_seq)++; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
350 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
351 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
352 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
353 | 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
|
354 | 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
|
355 | { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
356 | 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
|
357 | 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
|
358 | 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
|
359 | |
|
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
360 | xmlnode_set_namespace(item_not_found, |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
361 | "urn:ietf:params:xml:ns:xmpp-stanzas"); |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
362 | 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
|
363 | 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
|
364 | 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
|
365 | 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
|
366 | 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
|
367 | 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
|
368 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
369 | 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
|
370 | } |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
371 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
372 | 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
|
373 | 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
|
374 | const char *id, xmlnode *child) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
375 | { |
|
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 | 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
|
377 | 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
|
378 | 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
|
379 | 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
|
380 | 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
|
381 | 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
|
382 | JabberIBBSession *sess = |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
383 | 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
|
384 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
385 | 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
|
386 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
387 | 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
|
388 | /* 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
|
389 | 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
|
390 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
391 | "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
|
392 | } 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
|
393 | 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
|
394 | 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
|
395 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
396 | /* 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
|
397 | out-of-order packet */ |
|
26023
788f6f618791
Fix error handling on missing "seq" attribute
Marcus Lundblad <malu@pidgin.im>
parents:
26020
diff
changeset
|
398 | 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
|
399 | /* sequence # is the expected... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
400 | 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
|
401 | |
|
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
|
402 | 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
|
403 | 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
|
404 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
405 | 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
|
406 | 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
|
407 | gsize size; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
408 | 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
|
409 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
410 | 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
|
411 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
412 | 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
|
413 | purple_debug_info("jabber", |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
414 | "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
|
415 | size); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
416 | 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
|
417 | purple_debug_error("jabber", |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
418 | "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
|
419 | if (sess->error_cb) |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
420 | sess->error_cb(sess); |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
421 | g_free(rawdata); |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
422 | return; |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
423 | } 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
|
424 | 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
|
425 | "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
|
426 | 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
|
427 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
428 | g_free(rawdata); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
429 | } 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
|
430 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
431 | "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
|
432 | if (sess->error_cb) |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
433 | sess->error_cb(sess); |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
434 | return; |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
435 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
436 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
437 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26023
diff
changeset
|
438 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
439 | (sess->recv_seq)++; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
440 | 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
|
441 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
442 | } 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
|
443 | purple_debug_error("jabber", |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26019
diff
changeset
|
444 | "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
|
445 | 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
|
446 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
447 | if (sess->error_cb) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
448 | sess->error_cb(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
449 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
450 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
451 | } else if (close) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
452 | sess->state = JABBER_IBB_SESSION_CLOSED; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
453 | 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
|
454 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
455 | if (sess->closed_cb) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
456 | 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
|
457 | sess->closed_cb(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
458 | } |
|
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 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
460 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
461 | /* this should never happen */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
462 | 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
|
463 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
464 | } else if (open) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
465 | JabberIq *result; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
466 | 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
|
467 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
468 | /* 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
|
469 | for (iterator = open_handlers ; iterator ; |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
470 | 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
|
471 | JabberIBBOpenHandler *handler = iterator->data; |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
472 | |
|
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
|
473 | 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
|
474 | 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
|
475 | 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
|
476 | 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
|
477 | jabber_iq_send(result); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
478 | return; |
|
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 | } |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25986
diff
changeset
|
481 | /* 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
|
482 | 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
|
483 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
484 | /* 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
|
485 | 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
|
486 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
487 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
488 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
489 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
490 | 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
|
491 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
492 | 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
|
493 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
494 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
495 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
496 | 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
|
497 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
498 | 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
|
499 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
500 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
501 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
502 | jabber_ibb_init(void) |
|
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 | 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
|
505 | |
|
27028
1a2ef7ddb463
Clean up jabber prpl memory allocations on uninit.
Nick Hebner <hebnern@gmail.com>
parents:
26701
diff
changeset
|
506 | jabber_add_feature(XEP_0047_NAMESPACE, NULL); |
|
1a2ef7ddb463
Clean up jabber prpl memory allocations on uninit.
Nick Hebner <hebnern@gmail.com>
parents:
26701
diff
changeset
|
507 | |
|
26701
01ab22c2baa9
Move some IQ handler registrations to the appropriate init functions
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
508 | jabber_iq_register_handler("close", XEP_0047_NAMESPACE, jabber_ibb_parse); |
|
01ab22c2baa9
Move some IQ handler registrations to the appropriate init functions
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
509 | jabber_iq_register_handler("data", XEP_0047_NAMESPACE, jabber_ibb_parse); |
|
01ab22c2baa9
Move some IQ handler registrations to the appropriate init functions
Paul Aurich <darkrain42@pidgin.im>
parents:
26695
diff
changeset
|
510 | jabber_iq_register_handler("open", XEP_0047_NAMESPACE, jabber_ibb_parse); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
511 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
512 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
513 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
514 | jabber_ibb_uninit(void) |
|
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 | 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
|
517 | g_list_free(open_handlers); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
518 | jabber_ibb_sessions = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
519 | open_handlers = NULL; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
520 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
diff
changeset
|
521 |