annotate libpurple/protocols/jabber/si.c @ 32767:2ec94166be43

On the way to hiding the PurpleConnection struct. * Added purple_connection_get_flags() and purple_connection_set_flags() * Use purple_connection_ accessor functions.
author andrew.victor@mxit.com
date Tue, 18 Oct 2011 18:47:48 +0000
parents e164f7815b52
children fb5b5f6cf111
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /*
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
2 * purple - Jabber Protocol Plugin
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
28398
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28224
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28224
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28224
diff changeset
6 * source distribution.
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
19680
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19675
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 17770
diff changeset
25 #include "internal.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 17770
diff changeset
27 #include "blist.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "ft.h"
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
30 #include "request.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "network.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "buddy.h"
30202
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
35 #include "data.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "disco.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 #include "jabber.h"
25247
151b4054ce40 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <paul@darkrain42.org>
parents: 25243
diff changeset
38 #include "ibb.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 #include "iq.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 #include "si.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
41
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
42 #define STREAMHOST_CONNECT_TIMEOUT 15
30595
0c8d1b152b16 woops, this should remain de-activated for a while yet... :)
Marcus Lundblad <ml@update.uu.se>
parents: 30594
diff changeset
43 #define ENABLE_FT_THUMBNAILS 0
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 typedef struct _JabberSIXfer {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46 JabberStream *js;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
48 PurpleProxyConnectData *connect_data;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
49 PurpleNetworkListenData *listen_data;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
50 guint connect_timeout;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 gboolean accepted;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 char *stream_id;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 char *iq_id;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 enum {
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
58 STREAM_METHOD_UNKNOWN = 0,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 STREAM_METHOD_BYTESTREAMS = 2 << 1,
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
60 STREAM_METHOD_IBB = 2 << 2,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61 STREAM_METHOD_UNSUPPORTED = 2 << 31
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
62 } stream_method;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
63
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
64 GList *streamhosts;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
65 PurpleProxyInfo *gpi;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
67 char *rxqueue;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68 size_t rxlen;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
69 gsize rxmaxlen;
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
70 int local_streamhost_fd;
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
71
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
72 JabberIBBSession *ibb_session;
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
73 guint ibb_timeout_handle;
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
74 PurpleCircBuffer *ibb_buffer;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75 } JabberSIXfer;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
77 /* some forward declarations */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
78 static void jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
79
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
80 static PurpleXfer*
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 jabber_si_xfer_find(JabberStream *js, const char *sid, const char *from)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
82 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83 GList *xfers;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85 if(!sid || !from)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
86 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
87
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 for(xfers = js->file_transfers; xfers; xfers = xfers->next) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
89 PurpleXfer *xfer = xfers->data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
90 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
91 if(jsx->stream_id && purple_xfer_get_remote_user(xfer) &&
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
92 !strcmp(jsx->stream_id, sid) && !strcmp(purple_xfer_get_remote_user(xfer), from))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
93 return xfer;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96 return NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
97 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98
22912
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
99 static void
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
100 jabber_si_free_streamhost(gpointer data, gpointer user_data)
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
101 {
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
102 JabberBytestreamsStreamhost *sh = data;
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
103
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
104 if(!data)
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
105 return;
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
106
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
107 g_free(sh->jid);
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
108 g_free(sh->host);
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
109 g_free(sh->zeroconf);
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
110 g_free(sh);
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
111 }
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
112
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
113
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
115 static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
118 jabber_si_bytestreams_connect_cb(gpointer data, gint source, const gchar *error_message)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
120 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
121 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 JabberIq *iq;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
123 xmlnode *query, *su;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
124 JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
125
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
126 purple_proxy_info_destroy(jsx->gpi);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
127 jsx->gpi = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128 jsx->connect_data = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
130 if (jsx->connect_timeout > 0)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
131 purple_timeout_remove(jsx->connect_timeout);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
132 jsx->connect_timeout = 0;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
133
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134 if(source < 0) {
17770
efb5d0fe4895 Better error message for when a Jabber connection fails
Mark Doliner <mark@kingant.net>
parents: 17441
diff changeset
135 purple_debug_warning("jabber",
efb5d0fe4895 Better error message for when a Jabber connection fails
Mark Doliner <mark@kingant.net>
parents: 17441
diff changeset
136 "si connection failed, jid was %s, host was %s, error was %s\n",
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
137 streamhost->jid, streamhost->host,
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
138 error_message ? error_message : "(null)");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139 jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost);
22912
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
140 jabber_si_free_streamhost(streamhost, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141 jabber_si_bytestreams_attempt_connect(xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
143 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
144
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
145 /* unknown file transfer type is assumed to be RECEIVE */
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
146 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
147 {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
148 xmlnode *activate;
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
149 iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
150 xmlnode_set_attrib(iq->node, "to", streamhost->jid);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
151 query = xmlnode_get_child(iq->node, "query");
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
152 xmlnode_set_attrib(query, "sid", jsx->stream_id);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
153 activate = xmlnode_new_child(query, "activate");
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
154 xmlnode_insert_data(activate, purple_xfer_get_remote_user(xfer), -1);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
155
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
156 /* TODO: We need to wait for an activation result before starting */
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
157 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
158 else
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
159 {
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
160 iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, NS_BYTESTREAMS);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
161 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
162 jabber_iq_set_id(iq, jsx->iq_id);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
163 query = xmlnode_get_child(iq->node, "query");
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
164 su = xmlnode_new_child(query, "streamhost-used");
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
165 xmlnode_set_attrib(su, "jid", streamhost->jid);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
166 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
170 purple_xfer_start(xfer, source, NULL, -1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
173 static gboolean
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
174 connect_timeout_cb(gpointer data)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
175 {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
176 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
177 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
178
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
179 purple_debug_info("jabber", "Streamhost connection timeout of %d seconds exceeded.\n", STREAMHOST_CONNECT_TIMEOUT);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
180
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
181 jsx->connect_timeout = 0;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
182
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
183 if (jsx->connect_data != NULL)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
184 purple_proxy_connect_cancel(jsx->connect_data);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
185 jsx->connect_data = NULL;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
186
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
187 /* Trigger the connect error manually */
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
188 jabber_si_bytestreams_connect_cb(xfer, -1, "Timeout Exceeded.");
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
189
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
190 return FALSE;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
191 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
192
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
193 static void
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
194 jabber_si_bytestreams_ibb_timeout_remove(JabberSIXfer *jsx)
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
195 {
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
196 if (jsx->ibb_timeout_handle) {
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
197 purple_timeout_remove(jsx->ibb_timeout_handle);
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
198 jsx->ibb_timeout_handle = 0;
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
199 }
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
200 }
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
201
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
202 static gboolean
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
203 jabber_si_bytestreams_ibb_timeout_cb(gpointer data)
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
204 {
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
205 PurpleXfer *xfer = (PurpleXfer *) data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
206 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
207
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
208 if (jsx && !jsx->ibb_session) {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
209 purple_debug_info("jabber",
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
210 "jabber_si_bytestreams_ibb_timeout called and IBB session not set "
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
211 " up yet, cancel transfer");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
212 jabber_si_bytestreams_ibb_timeout_remove(jsx);
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
213 purple_xfer_cancel_local(xfer);
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
214 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
215
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
216 return FALSE;
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
217 }
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
218
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
219 static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
220 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
221 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
222 JabberBytestreamsStreamhost *streamhost;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
223 JabberID *dstjid;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225 if(!jsx->streamhosts) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226 JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
227 xmlnode *error, *inf;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
229 if(jsx->iq_id)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
230 jabber_iq_set_id(iq, jsx->iq_id);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
231
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
232 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
233 error = xmlnode_new_child(iq->node, "error");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 xmlnode_set_attrib(error, "code", "404");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
235 xmlnode_set_attrib(error, "type", "cancel");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236 inf = xmlnode_new_child(error, "item-not-found");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
237 xmlnode_set_namespace(inf, NS_XMPP_STANZAS);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
241 /* if IBB is available, revert to that before giving up... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
242 if (jsx->stream_method & STREAM_METHOD_IBB) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
243 /* if we are the initializer, init IBB */
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
244 purple_debug_info("jabber",
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
245 "jabber_si_bytestreams_attempt_connect: "
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
246 "no streamhosts found, trying IBB\n");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
247 /* if we are the sender, open an IBB session, but not if we already
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
248 did it, since we could have received the error <iq/> from the
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
249 receiver already... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
250 if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
251 && !jsx->ibb_session) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
252 jabber_si_xfer_ibb_send_init(jsx->js, xfer);
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
253 } else {
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
254 /* setup a timeout to cancel waiting for IBB open */
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
255 jsx->ibb_timeout_handle = purple_timeout_add_seconds(30,
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
256 jabber_si_bytestreams_ibb_timeout_cb, xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
257 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
258 /* if we are the receiver, just wait for IBB open, callback is
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
259 already set up... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
260 } else {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
261 purple_xfer_cancel_local(xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
262 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
263
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
266
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 streamhost = jsx->streamhosts->data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
269 jsx->connect_data = NULL;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
270 if (jsx->gpi != NULL)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
271 purple_proxy_info_destroy(jsx->gpi);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
272 jsx->gpi = NULL;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
273
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
274 dstjid = jabber_id_new(purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
275
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
276 /* TODO: Deal with zeroconf */
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
277
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
278 if(dstjid != NULL && streamhost->host && streamhost->port > 0) {
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
279 char *dstaddr, *hash;
31932
b671728e6ee9 Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31898
diff changeset
280 PurpleAccount *account;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
281 jsx->gpi = purple_proxy_info_new();
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
282 purple_proxy_info_set_type(jsx->gpi, PURPLE_PROXY_SOCKS5);
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
283 purple_proxy_info_set_host(jsx->gpi, streamhost->host);
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
284 purple_proxy_info_set_port(jsx->gpi, streamhost->port);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
285
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
286 /* unknown file transfer type is assumed to be RECEIVE */
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
287 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
288 dstaddr = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, jsx->js->user->node, jsx->js->user->domain,
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
289 jsx->js->user->resource, dstjid->node, dstjid->domain, dstjid->resource);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
290 else
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
291 dstaddr = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, dstjid->node, dstjid->domain, dstjid->resource,
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
292 jsx->js->user->node, jsx->js->user->domain, jsx->js->user->resource);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
293
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
294 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
30031
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 30013
diff changeset
295 hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
296
31932
b671728e6ee9 Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31898
diff changeset
297 account = purple_connection_get_account(jsx->js->gc);
b671728e6ee9 Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31898
diff changeset
298 jsx->connect_data = purple_proxy_connect_socks5_account(NULL, account,
b671728e6ee9 Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31898
diff changeset
299 jsx->gpi, hash, 0,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
300 jabber_si_bytestreams_connect_cb, xfer);
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
301 g_free(hash);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
302 g_free(dstaddr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
303
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
304 /* When selecting a streamhost, timeout after STREAMHOST_CONNECT_TIMEOUT seconds, otherwise it takes forever */
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
305 if (purple_xfer_get_type(xfer) != PURPLE_XFER_SEND && jsx->connect_data != NULL)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
306 jsx->connect_timeout = purple_timeout_add_seconds(
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
307 STREAMHOST_CONNECT_TIMEOUT, connect_timeout_cb, xfer);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
308
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
309 jabber_id_free(dstjid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
310 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
311
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
312 if (jsx->connect_data == NULL)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
313 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
314 jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost);
22912
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
315 jabber_si_free_streamhost(streamhost, NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
316 jabber_si_bytestreams_attempt_connect(xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
317 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
318 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
319
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
320 void jabber_bytestreams_parse(JabberStream *js, const char *from,
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
321 JabberIqType type, const char *id, xmlnode *query)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
322 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
323 PurpleXfer *xfer;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
324 JabberSIXfer *jsx;
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
325 xmlnode *streamhost;
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
326 const char *sid;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
327
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
328 if(type != JABBER_IQ_SET)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
329 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
330
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
331 if(!from)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334 if(!(sid = xmlnode_get_attrib(query, "sid")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
336
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
337 if(!(xfer = jabber_si_xfer_find(js, sid, from)))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
338 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
339
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
340 jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
341
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
342 if(!jsx->accepted)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
345 if(jsx->iq_id)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346 g_free(jsx->iq_id);
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
347 jsx->iq_id = g_strdup(id);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
348
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
349 for(streamhost = xmlnode_get_child(query, "streamhost"); streamhost;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
350 streamhost = xmlnode_get_next_twin(streamhost)) {
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
351 const char *jid, *host = NULL, *port, *zeroconf;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
352 int portnum = 0;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
353
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
354 if((jid = xmlnode_get_attrib(streamhost, "jid")) &&
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
355 ((zeroconf = xmlnode_get_attrib(streamhost, "zeroconf")) ||
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
356 ((host = xmlnode_get_attrib(streamhost, "host")) &&
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
357 (port = xmlnode_get_attrib(streamhost, "port")) &&
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
358 (portnum = atoi(port))))) {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
359 JabberBytestreamsStreamhost *sh = g_new0(JabberBytestreamsStreamhost, 1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
360 sh->jid = g_strdup(jid);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
361 sh->host = g_strdup(host);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362 sh->port = portnum;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
363 sh->zeroconf = g_strdup(zeroconf);
22912
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
364 /* If there were a lot of these, it'd be worthwhile to prepend and reverse. */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
365 jsx->streamhosts = g_list_append(jsx->streamhosts, sh);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
366 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
367 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
368
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
369 jabber_si_bytestreams_attempt_connect(xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
370 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
371
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
372
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
373 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
374 jabber_si_xfer_bytestreams_send_read_again_resp_cb(gpointer data, gint source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
375 PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
376 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
377 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
378 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
379 int len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
380
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
381 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
382 if (len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
383 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
384 else if (len < 0) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
385 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
386 jsx->rxqueue = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
387 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
388 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
389 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
390 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
391 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
392
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
393 if (jsx->rxlen < jsx->rxmaxlen)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
394 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
395
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
396 purple_input_remove(xfer->watcher);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
397 xfer->watcher = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
398 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
399 jsx->rxqueue = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
400
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
401 /* Before actually starting sending the file, we need to wait until the
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
402 * recipient sends the IQ result with <streamhost-used/>
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
403 */
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
404 purple_debug_info("jabber", "SOCKS5 connection negotiation completed. "
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
405 "Waiting for IQ result to start file transfer.\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
406 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
407
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
408 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
409 jabber_si_xfer_bytestreams_send_read_again_cb(gpointer data, gint source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
410 PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
411 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
412 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
413 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
414 char buffer[42]; /* 40 for DST.ADDR + 2 bytes for port number*/
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
415 int len;
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
416 char *dstaddr, *hash;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
417 const char *host;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
418
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
419 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_again_cb\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
420
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
421 if(jsx->rxlen < 5) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
422 purple_debug_info("jabber", "reading the first 5 bytes\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
423 len = read(source, buffer, 5 - jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
424 if(len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
425 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
426 else if(len <= 0) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
427 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
428 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
429 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
430 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
431 jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
432 memcpy(jsx->rxqueue + jsx->rxlen, buffer, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
433 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
434 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
435 } else if(jsx->rxqueue[0] != 0x05 || jsx->rxqueue[1] != 0x01 ||
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
436 jsx->rxqueue[3] != 0x03 || jsx->rxqueue[4] != 40) {
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
437 purple_debug_info("jabber", "Invalid socks5 conn req. header[0x%x,0x%x,0x%x,0x%x,0x%x]\n",
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
438 jsx->rxqueue[0], jsx->rxqueue[1], jsx->rxqueue[2],
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
439 jsx->rxqueue[3], jsx->rxqueue[4]);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
440 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
441 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
442 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
443 } else if(jsx->rxlen - 5 < jsx->rxqueue[4] + 2) {
26997
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
444 /* Upper-bound of 257 (jsx->rxlen = 5, jsx->rxqueue[4] = 0xFF) */
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
445 unsigned short to_read = jsx->rxqueue[4] + 2 - (jsx->rxlen - 5);
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
446 purple_debug_info("jabber", "reading %u bytes for DST.ADDR + port num (trying to read %hu now)\n",
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
447 jsx->rxqueue[4] + 2, to_read);
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
448 len = read(source, buffer, to_read);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
449 if(len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
450 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
451 else if(len <= 0) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
452 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
453 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
454 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
455 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
456 jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
457 memcpy(jsx->rxqueue + jsx->rxlen, buffer, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
458 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
459 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
460
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
461 /* Have we not read all of DST.ADDR and the following 2-byte port number? */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
462 if(jsx->rxlen - 5 < jsx->rxqueue[4] + 2)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
463 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
464
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
465 purple_input_remove(xfer->watcher);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
466 xfer->watcher = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
467
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
468 dstaddr = g_strdup_printf("%s%s@%s/%s%s", jsx->stream_id,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
469 jsx->js->user->node, jsx->js->user->domain,
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
470 jsx->js->user->resource, purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
471
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
472 /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */
30031
9f59abd49def jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <ml@update.uu.se>
parents: 30013
diff changeset
473 hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
474
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
475 if(strncmp(hash, jsx->rxqueue + 5, 40) ||
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
476 jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) {
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
477 if (jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00)
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
478 purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.PORT"
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
479 " (must be 0 - got[0x%x,0x%x]).\n",
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
480 jsx->rxqueue[45], jsx->rxqueue[46]);
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
481 else
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
482 purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.ADDR"
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
483 " (expected '%s' - got '%.40s').\n",
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
484 hash, jsx->rxqueue + 5);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
485 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
486 purple_xfer_cancel_remote(xfer);
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
487 g_free(hash);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
488 g_free(dstaddr);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
489 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
490 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
491
24641
61e0924de04a Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents: 24497
diff changeset
492 g_free(hash);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
493 g_free(dstaddr);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
494
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
495 g_free(jsx->rxqueue);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
496 host = purple_network_get_my_ip(jsx->js->fd);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
497
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
498 jsx->rxmaxlen = 5 + strlen(host) + 2;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
499 jsx->rxqueue = g_malloc(jsx->rxmaxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
500 jsx->rxlen = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
501
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
502 jsx->rxqueue[0] = 0x05;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
503 jsx->rxqueue[1] = 0x00;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
504 jsx->rxqueue[2] = 0x00;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
505 jsx->rxqueue[3] = 0x03;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
506 jsx->rxqueue[4] = strlen(host);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
507 memcpy(jsx->rxqueue + 5, host, strlen(host));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
508 jsx->rxqueue[5+strlen(host)] = 0x00;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
509 jsx->rxqueue[6+strlen(host)] = 0x00;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
510
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
511 xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
512 jabber_si_xfer_bytestreams_send_read_again_resp_cb, xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
513 jabber_si_xfer_bytestreams_send_read_again_resp_cb(xfer, source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
514 PURPLE_INPUT_WRITE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
515 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
516
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
517 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
518 jabber_si_xfer_bytestreams_send_read_response_cb(gpointer data, gint source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
519 PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
520 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
521 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
522 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
523 int len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
524
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
525 len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
526 if (len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
527 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
528 else if (len < 0) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
529 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
530 jsx->rxqueue = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
531 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
532 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
533 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
534 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
535 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
536
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
537 if (jsx->rxlen < jsx->rxmaxlen)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
538 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
539
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
540 /* If we sent a "Success", wait for a response, otherwise give up and cancel */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
541 if (jsx->rxqueue[1] == 0x00) {
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
542 purple_input_remove(xfer->watcher);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
543 xfer->watcher = purple_input_add(source, PURPLE_INPUT_READ,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
544 jabber_si_xfer_bytestreams_send_read_again_cb, xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
545 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
546 jsx->rxqueue = NULL;
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
547 jsx->rxlen = 0;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
548 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
549 close(source);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
550 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
551 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
552 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
553
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
554 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
555 jabber_si_xfer_bytestreams_send_read_cb(gpointer data, gint source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
556 PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
557 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
558 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
559 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
560 int i;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
561 int len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
562 char buffer[256];
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
563
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
564 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_cb\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
565
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
566 xfer->fd = source;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
567
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
568 /** Try to read the SOCKS5 header */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
569 if(jsx->rxlen < 2) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
570 purple_debug_info("jabber", "reading those first two bytes\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
571 len = read(source, buffer, 2 - jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
572 if(len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
573 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
574 else if(len <= 0) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
575 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
576 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
577 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
578 jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
579 memcpy(jsx->rxqueue + jsx->rxlen, buffer, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
580 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
581 return;
26997
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
582 } else if(jsx->rxlen - 2 < jsx->rxqueue[1]) {
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
583 /* Has a maximum value of 255 (jsx->rxlen = 2, jsx->rxqueue[1] = 0xFF) */
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
584 unsigned short to_read = jsx->rxqueue[1] - (jsx->rxlen - 2);
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
585 purple_debug_info("jabber", "reading %u bytes for auth methods (trying to read %hu now)\n",
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
586 jsx->rxqueue[1], to_read);
90e7220cf773 Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <paul@darkrain42.org>
parents: 26959
diff changeset
587 len = read(source, buffer, to_read);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
588 if(len < 0 && errno == EAGAIN)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
589 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
590 else if(len <= 0) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
591 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
592 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
593 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
594 jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
595 memcpy(jsx->rxqueue + jsx->rxlen, buffer, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
596 jsx->rxlen += len;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
597 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
598
25841
0d7f02640e2b Make sure that the buffer is large enough to fit DST.ADDR + DST.PORT. This was found in the analysis that Veracode performed on the pidgin codebase.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24641
diff changeset
599 /* Have we not read all the auth. method bytes? */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
600 if(jsx->rxlen -2 < jsx->rxqueue[1])
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
601 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
602
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
603 purple_debug_info("jabber", "checking to make sure we're socks FIVE\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
604
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
605 if(jsx->rxqueue[0] != 0x05) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
606 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
607 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
608 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
609
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
610 purple_debug_info("jabber", "going to test %hhu different methods\n", jsx->rxqueue[1]);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
611
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
612 for(i=0; i<jsx->rxqueue[1]; i++) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
613
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
614 purple_debug_info("jabber", "testing %hhu\n", jsx->rxqueue[i+2]);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
615 if(jsx->rxqueue[i+2] == 0x00) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
616 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
617 jsx->rxlen = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
618 jsx->rxmaxlen = 2;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
619 jsx->rxqueue = g_malloc(jsx->rxmaxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
620 jsx->rxqueue[0] = 0x05;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
621 jsx->rxqueue[1] = 0x00;
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
622 purple_input_remove(xfer->watcher);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
623 xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
624 jabber_si_xfer_bytestreams_send_read_response_cb,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
625 xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
626 jabber_si_xfer_bytestreams_send_read_response_cb(xfer,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
627 source, PURPLE_INPUT_WRITE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
628 jsx->rxqueue = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
629 jsx->rxlen = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
630 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
631 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
632 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
633
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
634 g_free(jsx->rxqueue);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
635 jsx->rxlen = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
636 jsx->rxmaxlen = 2;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
637 jsx->rxqueue = g_malloc(jsx->rxmaxlen);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
638 jsx->rxqueue[0] = 0x05;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
639 jsx->rxqueue[1] = 0xFF;
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
640 purple_input_remove(xfer->watcher);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
641 xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
642 jabber_si_xfer_bytestreams_send_read_response_cb, xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
643 jabber_si_xfer_bytestreams_send_read_response_cb(xfer,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
644 source, PURPLE_INPUT_WRITE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
645 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
646
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
647 static gint
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
648 jabber_si_compare_jid(gconstpointer a, gconstpointer b)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
649 {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
650 const JabberBytestreamsStreamhost *sh = a;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
651
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
652 if(!a)
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
653 return -1;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
654
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
655 return strcmp(sh->jid, (char *)b);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
656 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
657
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
658 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
659 jabber_si_xfer_bytestreams_send_connected_cb(gpointer data, gint source,
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
660 PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
661 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
662 PurpleXfer *xfer = data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
663 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
23769
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
664 int acceptfd, flags;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
665
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
666 purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_connected_cb\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
667
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
668 acceptfd = accept(source, NULL, 0);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
669 if(acceptfd == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
670 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
671 else if(acceptfd == -1) {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 19680
diff changeset
672 purple_debug_warning("jabber", "accept: %s\n", g_strerror(errno));
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
673 /* Don't cancel the ft - allow it to fall to the next streamhost.*/
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
674 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
675 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
676
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
677 purple_input_remove(xfer->watcher);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
678 close(source);
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
679 jsx->local_streamhost_fd = -1;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
680
23769
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
681 flags = fcntl(acceptfd, F_GETFL);
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
682 fcntl(acceptfd, F_SETFL, flags | O_NONBLOCK);
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
683 #ifndef _WIN32
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
684 fcntl(acceptfd, F_SETFD, FD_CLOEXEC);
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
685 #endif
e21c79681c96 Use non-blocking io for direct xmpp file transfers
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23645
diff changeset
686
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
687 xfer->watcher = purple_input_add(acceptfd, PURPLE_INPUT_READ,
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
688 jabber_si_xfer_bytestreams_send_read_cb, xfer);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
689 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
690
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
691 static void
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
692 jabber_si_connect_proxy_cb(JabberStream *js, const char *from,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
693 JabberIqType type, const char *id,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
694 xmlnode *packet, gpointer data)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
695 {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
696 PurpleXfer *xfer = data;
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
697 JabberSIXfer *jsx;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
698 xmlnode *query, *streamhost_used;
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
699 const char *jid;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
700 GList *matched;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
701
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
702 /* TODO: This need to send errors if we don't see what we're looking for */
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
703
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
704 /* Make sure that the xfer is actually still valid and we're not just receiving an old iq response */
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
705 if (!g_list_find(js->file_transfers, xfer)) {
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
706 purple_debug_error("jabber", "Got bytestreams response for no longer existing xfer (%p)\n", xfer);
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
707 return;
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
708 }
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
709
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
710 jsx = purple_xfer_get_protocol_data(xfer);
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
711
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
712 /* In the case of a direct file transfer, this is expected to return */
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
713 if(!jsx)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
714 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
715
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
716 if(type != JABBER_IQ_RESULT) {
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
717 purple_debug_info("jabber",
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
718 "jabber_si_xfer_connect_proxy_cb: type = error\n");
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
719 /* if IBB is available, open IBB session */
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
720 purple_debug_info("jabber",
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
721 "jabber_si_xfer_connect_proxy_cb: got error, method: %d\n",
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
722 jsx->stream_method);
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
723 if (jsx->stream_method & STREAM_METHOD_IBB) {
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
724 purple_debug_info("jabber", "IBB is possible, try it\n");
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
725 /* if we are the sender and haven't already opened an IBB
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
726 session, do so now (we might already have failed to open
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
727 the bytestream proxy ourselves when receiving this <iq/> */
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
728 if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
729 && !jsx->ibb_session) {
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
730 jabber_si_xfer_ibb_send_init(js, xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
731 } else {
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
732 jsx->ibb_timeout_handle = purple_timeout_add_seconds(30,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
733 jabber_si_bytestreams_ibb_timeout_cb, xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
734 }
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
735 /* if we are receiver, just wait for IBB open stanza, callback
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
736 is already set up */
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
737 } else {
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
738 purple_xfer_cancel_remote(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
739 }
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
740 return;
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
741 }
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
742
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
743 if (!from)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
744 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
745
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
746 if(!(query = xmlnode_get_child(packet, "query")))
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
747 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
748
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
749 if(!(streamhost_used = xmlnode_get_child(query, "streamhost-used")))
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
750 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
751
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
752 if(!(jid = xmlnode_get_attrib(streamhost_used, "jid")))
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
753 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
754
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
755 purple_debug_info("jabber", "jabber_si_connect_proxy_cb() will be looking at jsx %p: jsx->streamhosts is %p and jid is %s\n",
22656
919074aa02ca I've seen intermittent crashes on xmpp file transfers in this code, but I
Evan Schoenberg <evan.s@dreskin.net>
parents: 22206
diff changeset
756 jsx, jsx->streamhosts, jid);
919074aa02ca I've seen intermittent crashes on xmpp file transfers in this code, but I
Evan Schoenberg <evan.s@dreskin.net>
parents: 22206
diff changeset
757
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
758 if(!(matched = g_list_find_custom(jsx->streamhosts, jid, jabber_si_compare_jid)))
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
759 {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
760 gchar *my_jid = g_strdup_printf("%s@%s/%s", jsx->js->user->node,
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
761 jsx->js->user->domain, jsx->js->user->resource);
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
762 if (!strcmp(jid, my_jid)) {
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
763 purple_debug_info("jabber", "Got local SOCKS5 streamhost-used.\n");
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
764 purple_xfer_start(xfer, xfer->fd, NULL, -1);
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
765 } else {
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
766 /* if available, try to revert to IBB... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
767 if (jsx->stream_method & STREAM_METHOD_IBB) {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
768 purple_debug_info("jabber",
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
769 "jabber_si_connect_proxy_cb: trying to revert to IBB\n");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
770 if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
771 jabber_si_xfer_ibb_send_init(jsx->js, xfer);
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
772 } else {
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
773 jsx->ibb_timeout_handle = purple_timeout_add_seconds(30,
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
774 jabber_si_bytestreams_ibb_timeout_cb, xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
775 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
776 /* if we are the receiver, we are already set up...*/
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
777 } else {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
778 purple_debug_info("jabber",
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
779 "streamhost-used does not match any proxy that was offered to target\n");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
780 purple_xfer_cancel_local(xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
781 }
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
782 }
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
783 g_free(my_jid);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
784 return;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
785 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
786
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
787 /* Clean up the local streamhost - it isn't going to be used.*/
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
788 if (xfer->watcher > 0) {
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
789 purple_input_remove(xfer->watcher);
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
790 xfer->watcher = 0;
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
791 }
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
792 if (jsx->local_streamhost_fd >= 0) {
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
793 close(jsx->local_streamhost_fd);
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
794 jsx->local_streamhost_fd = -1;
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
795 }
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
796
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
797 jsx->streamhosts = g_list_remove_link(jsx->streamhosts, matched);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
798 g_list_foreach(jsx->streamhosts, jabber_si_free_streamhost, NULL);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
799 g_list_free(jsx->streamhosts);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
800
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
801 jsx->streamhosts = matched;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
802
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
803 jabber_si_bytestreams_attempt_connect(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
804 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
805
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
806 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
807 jabber_si_xfer_bytestreams_listen_cb(int sock, gpointer data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
808 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
809 PurpleXfer *xfer = data;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
810 JabberSIXfer *jsx;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
811 JabberIq *iq;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
812 xmlnode *query, *streamhost;
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
813 char port[6];
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
814 GList *tmp;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
815 JabberBytestreamsStreamhost *sh, *sh2;
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
816 int streamhost_count = 0;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
817
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
818 jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
819 jsx->listen_data = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
820
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
821 /* I'm not sure under which conditions this can happen
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
822 * (it seems like it shouldn't be possible */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
823 if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) {
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
824 purple_xfer_unref(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
825 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
826 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
827
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
828 purple_xfer_unref(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
829
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
830 iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
831 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
832 query = xmlnode_get_child(iq->node, "query");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
833
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
834 xmlnode_set_attrib(query, "sid", jsx->stream_id);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
835
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
836 /* If we successfully started listening locally */
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
837 if (sock >= 0) {
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
838 gchar *jid;
29495
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
839 GList *local_ips =
29496
f1aa01ff26dd Remove IPv6 support from _get_local_system_ips, since I couldn't get it to
Marcus Lundblad <ml@update.uu.se>
parents: 29495
diff changeset
840 purple_network_get_all_local_system_ips();
29495
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
841 const char *public_ip;
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
842 gboolean has_public_ip = FALSE;
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
843
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
844 jsx->local_streamhost_fd = sock;
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
845
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
846 jid = g_strdup_printf("%s@%s/%s", jsx->js->user->node,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
847 jsx->js->user->domain, jsx->js->user->resource);
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
848 xfer->local_port = purple_network_get_port_from_fd(sock);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
849 g_snprintf(port, sizeof(port), "%hu", purple_xfer_get_local_port(xfer));
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
850
29495
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
851 public_ip = purple_network_get_my_ip(jsx->js->fd);
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
852
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
853 /* Include the localhost's IPs (for in-network transfers) */
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
854 while (local_ips) {
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
855 gchar *local_ip = local_ips->data;
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
856 streamhost_count++;
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
857 streamhost = xmlnode_new_child(query, "streamhost");
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
858 xmlnode_set_attrib(streamhost, "jid", jid);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
859 xmlnode_set_attrib(streamhost, "host", local_ip);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
860 xmlnode_set_attrib(streamhost, "port", port);
29495
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
861 if (purple_strequal(local_ip, public_ip))
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
862 has_public_ip = TRUE;
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
863 g_free(local_ip);
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
864 local_ips = g_list_delete_link(local_ips, local_ips);
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
865 }
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
866
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
867 /* Include the public IP (assuming that there is a port mapped somehow) */
29495
02f6f49da454 Add a function to enumerate all local IPs
Marcus Lundblad <ml@update.uu.se>
parents: 28398
diff changeset
868 if (!has_public_ip && strcmp(public_ip, "0.0.0.0") != 0) {
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
869 streamhost_count++;
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
870 streamhost = xmlnode_new_child(query, "streamhost");
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
871 xmlnode_set_attrib(streamhost, "jid", jid);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
872 xmlnode_set_attrib(streamhost, "host", public_ip);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
873 xmlnode_set_attrib(streamhost, "port", port);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
874 }
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
875
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
876 g_free(jid);
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
877
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
878 /* The listener for the local proxy */
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
879 xfer->watcher = purple_input_add(sock, PURPLE_INPUT_READ,
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
880 jabber_si_xfer_bytestreams_send_connected_cb, xfer);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
881 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
882
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
883 for (tmp = jsx->js->bs_proxies; tmp; tmp = tmp->next) {
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
884 sh = tmp->data;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
885
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
886 /* TODO: deal with zeroconf proxies */
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
887
21637
844225b0c905 Now that the release has been tagged and strings are unfrozen, enable the new ft proxy account setting for xmpp accounts. Also, prevent duplicate entries in the streamhost lists. I don't know if the default account proxy is acceptable, perhaps there shouldn't be a default value.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21603
diff changeset
888 if (!(sh->jid && sh->host && sh->port > 0))
844225b0c905 Now that the release has been tagged and strings are unfrozen, enable the new ft proxy account setting for xmpp accounts. Also, prevent duplicate entries in the streamhost lists. I don't know if the default account proxy is acceptable, perhaps there shouldn't be a default value.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21603
diff changeset
889 continue;
844225b0c905 Now that the release has been tagged and strings are unfrozen, enable the new ft proxy account setting for xmpp accounts. Also, prevent duplicate entries in the streamhost lists. I don't know if the default account proxy is acceptable, perhaps there shouldn't be a default value.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21603
diff changeset
890
24423
88955b918197 Add missing newline in debug message.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23769
diff changeset
891 purple_debug_info("jabber", "jabber_si_xfer_bytestreams_listen_cb() will be looking at jsx %p: jsx->streamhosts %p and sh->jid %p\n",
22656
919074aa02ca I've seen intermittent crashes on xmpp file transfers in this code, but I
Evan Schoenberg <evan.s@dreskin.net>
parents: 22206
diff changeset
892 jsx, jsx->streamhosts, sh->jid);
21637
844225b0c905 Now that the release has been tagged and strings are unfrozen, enable the new ft proxy account setting for xmpp accounts. Also, prevent duplicate entries in the streamhost lists. I don't know if the default account proxy is acceptable, perhaps there shouldn't be a default value.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21603
diff changeset
893 if(g_list_find_custom(jsx->streamhosts, sh->jid, jabber_si_compare_jid) != NULL)
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
894 continue;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
895
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
896 streamhost_count++;
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
897 streamhost = xmlnode_new_child(query, "streamhost");
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
898 xmlnode_set_attrib(streamhost, "jid", sh->jid);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
899 xmlnode_set_attrib(streamhost, "host", sh->host);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
900 g_snprintf(port, sizeof(port), "%hu", sh->port);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
901 xmlnode_set_attrib(streamhost, "port", port);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
902
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
903 sh2 = g_new0(JabberBytestreamsStreamhost, 1);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
904 sh2->jid = g_strdup(sh->jid);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
905 sh2->host = g_strdup(sh->host);
22912
9004da91edd3 Reuse cleanup function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22656
diff changeset
906 /*sh2->zeroconf = g_strdup(sh->zeroconf);*/
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
907 sh2->port = sh->port;
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
908
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
909 jsx->streamhosts = g_list_prepend(jsx->streamhosts, sh2);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
910 }
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
911
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
912 /* We have no way of transferring, cancel the transfer */
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
913 if (streamhost_count == 0) {
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
914 jabber_iq_free(iq);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
915
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
916 /* if available, revert to IBB */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
917 if (jsx->stream_method & STREAM_METHOD_IBB) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
918 purple_debug_info("jabber",
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
919 "jabber_si_xfer_bytestreams_listen_cb: trying to revert to IBB\n");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
920 if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
921 /* if we are the sender, init the IBB session... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
922 jabber_si_xfer_ibb_send_init(jsx->js, xfer);
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
923 } else {
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
924 jsx->ibb_timeout_handle = purple_timeout_add_seconds(30,
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
925 jabber_si_bytestreams_ibb_timeout_cb, xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
926 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
927 /* if we are the receiver, we should just wait... the IBB open
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
928 handler has already been set up... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
929 } else {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
930 /* We should probably notify the target,
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
931 but this really shouldn't ever happen */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
932 purple_xfer_cancel_local(xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
933 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
934
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
935 return;
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
936 }
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
937
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
938 jabber_iq_set_callback(iq, jabber_si_connect_proxy_cb, xfer);
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
939
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
940 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
941
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
942 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
943
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
944 static void
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
945 jabber_si_xfer_bytestreams_send_init(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
946 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
947 JabberSIXfer *jsx;
31977
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
948 PurpleProxyType proxy_type;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
949
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
950 purple_xfer_ref(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
951
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
952 jsx = purple_xfer_get_protocol_data(xfer);
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
953
31977
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
954 /* TODO: This should probably be done with an account option instead of
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
955 * piggy-backing on the TOR proxy type. */
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
956 proxy_type = purple_proxy_info_get_type(
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
957 purple_proxy_get_setup(purple_connection_get_account(jsx->js->gc)));
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
958 if (proxy_type == PURPLE_PROXY_TOR) {
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
959 purple_debug_info("jabber", "Skipping attempting local streamhost.\n");
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
960 jsx->listen_data = NULL;
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
961 } else
32677
d2ef8926b960 Remove deprecated purple_network_listen_map_external().
andrew.victor@mxit.com
parents: 32676
diff changeset
962 jsx->listen_data = purple_network_listen_range(0, 0, AF_UNSPEC, SOCK_STREAM, TRUE,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
963 jabber_si_xfer_bytestreams_listen_cb, xfer);
31977
db082e0421f6 xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 31932
diff changeset
964
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
965 if (jsx->listen_data == NULL) {
23366
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
966 /* We couldn't open a local port. Perhaps we can use a proxy. */
05802d915c13 Improve error handling for xmpp file transfers.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23365
diff changeset
967 jabber_si_xfer_bytestreams_listen_cb(-1, xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
968 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
969
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
970 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
971
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
972 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
973 jabber_si_xfer_ibb_error_cb(JabberIBBSession *sess)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
974 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
975 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
976
27366
73c8e1964eef A semi-random collection of English spelling and grammatical changes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27190
diff changeset
977 purple_debug_error("jabber", "an error occurred during IBB file transfer\n");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
978 purple_xfer_cancel_remote(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
979 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
980
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
981 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
982 jabber_si_xfer_ibb_closed_cb(JabberIBBSession *sess)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
983 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
984 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
985
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
986 purple_debug_info("jabber", "the remote user closed the transfer\n");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
987 if (purple_xfer_get_bytes_remaining(xfer) > 0) {
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
988 purple_xfer_cancel_remote(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
989 } else {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
990 purple_xfer_set_completed(xfer, TRUE);
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
991 purple_xfer_end(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
992 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
993 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
994
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
995 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
996 jabber_si_xfer_ibb_recv_data_cb(JabberIBBSession *sess, gpointer data,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
997 gsize size)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
998 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
999 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1000 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1001
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1002 if (size <= purple_xfer_get_bytes_remaining(xfer)) {
25247
151b4054ce40 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <paul@darkrain42.org>
parents: 25243
diff changeset
1003 purple_debug_info("jabber", "about to write %" G_GSIZE_FORMAT " bytes from IBB stream\n",
25216
daaabfcf5c2b Revert to using g_fopen (since we have a compatability define for old glibs)
Marcus Lundblad <ml@update.uu.se>
parents: 25213
diff changeset
1004 size);
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1005 purple_circ_buffer_append(jsx->ibb_buffer, data, size);
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1006 purple_xfer_prpl_ready(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1007 } else {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1008 /* trying to write past size of file transfers negotiated size,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1009 reject transfer to protect against malicious behaviour */
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1010 purple_debug_error("jabber",
25247
151b4054ce40 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <paul@darkrain42.org>
parents: 25243
diff changeset
1011 "IBB file transfer send more data than expected\n");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1012 purple_xfer_cancel_remote(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1013 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1014
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1015 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1016
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1017 static gssize
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1018 jabber_si_xfer_ibb_read(guchar **out_buffer, PurpleXfer *xfer)
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1019 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1020 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1021 guchar *buffer;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1022 gsize size;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1023 gsize tmp;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1024
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1025 size = jsx->ibb_buffer->bufused;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1026 *out_buffer = buffer = g_malloc(size);
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1027 while ((tmp = purple_circ_buffer_get_max_read(jsx->ibb_buffer))) {
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1028 memcpy(buffer, jsx->ibb_buffer->outptr, tmp);
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1029 buffer += tmp;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1030 purple_circ_buffer_mark_read(jsx->ibb_buffer, tmp);
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1031 }
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1032
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1033 return size;
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1034 }
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1035
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1036 static gboolean
26555
50ff0162fe26 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <paul@darkrain42.org>
parents: 26551
diff changeset
1037 jabber_si_xfer_ibb_open_cb(JabberStream *js, const char *who, const char *id,
50ff0162fe26 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <paul@darkrain42.org>
parents: 26551
diff changeset
1038 xmlnode *open)
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1039 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1040 const gchar *sid = xmlnode_get_attrib(open, "sid");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1041 PurpleXfer *xfer = jabber_si_xfer_find(js, sid, who);
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1042 if (xfer) {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1043 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1044 JabberIBBSession *sess =
26555
50ff0162fe26 Convert IBB parser (and everything that then stems from that) to new iq-handler
Paul Aurich <paul@darkrain42.org>
parents: 26551
diff changeset
1045 jabber_ibb_session_create_from_xmlnode(js, who, id, open, xfer);
25247
151b4054ce40 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <paul@darkrain42.org>
parents: 25243
diff changeset
1046
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1047 jabber_si_bytestreams_ibb_timeout_remove(jsx);
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1048
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1049 if (sess) {
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1050 /* setup callbacks here...*/
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1051 jabber_ibb_session_set_data_received_callback(sess,
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1052 jabber_si_xfer_ibb_recv_data_cb);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1053 jabber_ibb_session_set_closed_callback(sess,
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1054 jabber_si_xfer_ibb_closed_cb);
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1055 jabber_ibb_session_set_error_callback(sess,
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1056 jabber_si_xfer_ibb_error_cb);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1057
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1058 jsx->ibb_session = sess;
30013
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1059 /* we handle up to block-size bytes of decoded data, to handle
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1060 clients interpreting the block-size attribute as that
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1061 (see also remark in ibb.c) */
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1062 jsx->ibb_buffer =
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1063 purple_circ_buffer_new(jabber_ibb_session_get_block_size(sess));
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1064
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1065 /* set up read function */
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1066 purple_xfer_set_read_fnc(xfer, jabber_si_xfer_ibb_read);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1067
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1068 /* start the transfer */
28218
6adbdd4b2963 ft: Fix a bunch of uses of 0 as an 'invalid' fd.
Paul Aurich <paul@darkrain42.org>
parents: 28138
diff changeset
1069 purple_xfer_start(xfer, -1, NULL, 0);
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1070 return TRUE;
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1071 } else {
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1072 /* failed to create IBB session */
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1073 purple_debug_error("jabber", "failed to create IBB session\n");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1074 purple_xfer_cancel_remote(xfer);
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1075 return FALSE;
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1076 }
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1077 } else {
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1078 /* we got an IBB <open/> for an unknown file transfer, pass along... */
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1079 purple_debug_info("jabber",
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1080 "IBB open did not match any SI file transfer\n");
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1081 return FALSE;
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1082 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1083 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1084
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1085 static gssize
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1086 jabber_si_xfer_ibb_write(const guchar *buffer, size_t len, PurpleXfer *xfer)
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1087 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1088 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1089 JabberIBBSession *sess = jsx->ibb_session;
30013
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1090 gsize packet_size = len < jabber_ibb_session_get_max_data_size(sess) ?
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1091 len : jabber_ibb_session_get_max_data_size(sess);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1092
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1093 jabber_ibb_session_send_data(sess, buffer, packet_size);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1094
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1095 return packet_size;
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1096 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1097
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1098 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1099 jabber_si_xfer_ibb_sent_cb(JabberIBBSession *sess)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1100 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1101 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
32754
e164f7815b52 Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32677
diff changeset
1102 goffset remaining = purple_xfer_get_bytes_remaining(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1103
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1104 if (remaining == 0) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1105 /* close the session */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1106 jabber_ibb_session_close(sess);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1107 purple_xfer_set_completed(xfer, TRUE);
25222
d6351b105e42 Call purple_xfer_end when ending an IBB session.
Marcus Lundblad <ml@update.uu.se>
parents: 25221
diff changeset
1108 purple_xfer_end(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1109 } else {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1110 /* send more... */
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1111 purple_xfer_prpl_ready(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1112 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1113 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1114
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1115 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1116 jabber_si_xfer_ibb_opened_cb(JabberIBBSession *sess)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1117 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1118 PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess);
25247
151b4054ce40 Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <paul@darkrain42.org>
parents: 25243
diff changeset
1119
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1120 if (jabber_ibb_session_get_state(sess) == JABBER_IBB_SESSION_OPENED) {
28218
6adbdd4b2963 ft: Fix a bunch of uses of 0 as an 'invalid' fd.
Paul Aurich <paul@darkrain42.org>
parents: 28138
diff changeset
1121 purple_xfer_start(xfer, -1, NULL, 0);
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1122 purple_xfer_prpl_ready(xfer);
25224
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1123 } else {
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1124 /* error */
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1125 purple_xfer_end(xfer);
51cbb9be484e Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <ml@update.uu.se>
parents: 25222
diff changeset
1126 }
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1127 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1128
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1129 static void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1130 jabber_si_xfer_ibb_send_init(JabberStream *js, PurpleXfer *xfer)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1131 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1132 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1133
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1134 jsx->ibb_session = jabber_ibb_session_create(js, jsx->stream_id,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1135 purple_xfer_get_remote_user(xfer), xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1136
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1137 if (jsx->ibb_session) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1138 /* should set callbacks here... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1139 jabber_ibb_session_set_opened_callback(jsx->ibb_session,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1140 jabber_si_xfer_ibb_opened_cb);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1141 jabber_ibb_session_set_data_sent_callback(jsx->ibb_session,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1142 jabber_si_xfer_ibb_sent_cb);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1143 jabber_ibb_session_set_closed_callback(jsx->ibb_session,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1144 jabber_si_xfer_ibb_closed_cb);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1145 jabber_ibb_session_set_error_callback(jsx->ibb_session,
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1146 jabber_si_xfer_ibb_error_cb);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1147
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1148 purple_xfer_set_write_fnc(xfer, jabber_si_xfer_ibb_write);
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1149
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1150 jsx->ibb_buffer =
30013
8f442c566ff2 jabber: Adjust amount of data to send in IBB packets so that at most block-size
Marcus Lundblad <ml@update.uu.se>
parents: 29733
diff changeset
1151 purple_circ_buffer_new(jabber_ibb_session_get_max_data_size(jsx->ibb_session));
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1152
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1153 /* open the IBB session */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1154 jabber_ibb_session_open(jsx->ibb_session);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1155
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1156 } else {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1157 /* failed to create IBB session */
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1158 purple_debug_error("jabber",
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1159 "failed to initiate IBB session for file transfer\n");
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1160 purple_xfer_cancel_local(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1161 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1162 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1163
26547
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
1164 static void jabber_si_xfer_send_method_cb(JabberStream *js, const char *from,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
1165 JabberIqType type, const char *id,
ae41d8e827e3 Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <paul@darkrain42.org>
parents: 25983
diff changeset
1166 xmlnode *packet, gpointer data)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1167 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1168 PurpleXfer *xfer = data;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1169 xmlnode *si, *feature, *x, *field, *value;
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1170 gboolean found_method = FALSE;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1171
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1172 if(!(si = xmlnode_get_child_with_namespace(packet, "si", "http://jabber.org/protocol/si"))) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1173 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1174 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1175 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1176
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1177 if(!(feature = xmlnode_get_child_with_namespace(si, "feature", "http://jabber.org/protocol/feature-neg"))) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1178 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1179 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1180 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1181
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1182 if(!(x = xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data"))) {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1183 purple_xfer_cancel_remote(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1184 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1185 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1186
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1187 for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1188 const char *var = xmlnode_get_attrib(field, "var");
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1189 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1190
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1191 if(var && !strcmp(var, "stream-method")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1192 if((value = xmlnode_get_child(field, "value"))) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1193 char *val = xmlnode_get_data(value);
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1194 if(val && !strcmp(val, NS_BYTESTREAMS)) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1195 jabber_si_xfer_bytestreams_send_init(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1196 jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1197 found_method = TRUE;
29026
7b4ade7c6d8a jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <paul@darkrain42.org>
parents: 28889
diff changeset
1198 } else if (val && !strcmp(val, NS_IBB)) {
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1199 jsx->stream_method |= STREAM_METHOD_IBB;
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1200 if (!found_method) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1201 /* we haven't tried to init a bytestream session, yet
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1202 start IBB right away... */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1203 jabber_si_xfer_ibb_send_init(js, xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1204 found_method = TRUE;
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1205 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1206 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1207 g_free(val);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1208 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1209 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1210 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1211
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1212 if (!found_method) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1213 purple_xfer_cancel_remote(xfer);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1214 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1215
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1216 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1217
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1218 static void jabber_si_xfer_send_request(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1219 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1220 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1221 JabberIq *iq;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1222 xmlnode *si, *file, *feature, *x, *field, *option, *value;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1223 char buf[32];
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1224 #if ENABLE_FT_THUMBNAILS
30250
afc9cec164e4 Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30243
diff changeset
1225 gconstpointer thumb;
afc9cec164e4 Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30243
diff changeset
1226 gsize thumb_size;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1227
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1228 purple_xfer_prepare_thumbnail(xfer, "jpeg,png");
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1229 #endif
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1230 purple_xfer_set_filename(xfer, g_path_get_basename(purple_xfer_get_local_filename(xfer)));
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1231
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1232 iq = jabber_iq_new(jsx->js, JABBER_IQ_SET);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1233 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1234 si = xmlnode_new_child(iq->node, "si");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1235 xmlnode_set_namespace(si, "http://jabber.org/protocol/si");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1236 jsx->stream_id = jabber_get_next_id(jsx->js);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1237 xmlnode_set_attrib(si, "id", jsx->stream_id);
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1238 xmlnode_set_attrib(si, "profile", NS_SI_FILE_TRANSFER);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1239
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1240 file = xmlnode_new_child(si, "file");
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1241 xmlnode_set_namespace(file, NS_SI_FILE_TRANSFER);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1242 xmlnode_set_attrib(file, "name", purple_xfer_get_filename(xfer));
32754
e164f7815b52 Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32677
diff changeset
1243 g_snprintf(buf, sizeof(buf), "%" G_GOFFSET_FORMAT, purple_xfer_get_size(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1244 xmlnode_set_attrib(file, "size", buf);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1245 /* maybe later we'll do hash and date attribs */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1246
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1247 #if ENABLE_FT_THUMBNAILS
30202
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1248 /* add thumbnail, if appropriate */
30250
afc9cec164e4 Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30243
diff changeset
1249 if ((thumb = purple_xfer_get_thumbnail(xfer, &thumb_size))) {
30237
25a53c299713 Allow PRPLs to specify the image formats acceptable for thumbnails (in
Marcus Lundblad <ml@update.uu.se>
parents: 30232
diff changeset
1250 const gchar *mimetype = purple_xfer_get_thumbnail_mimetype(xfer);
25a53c299713 Allow PRPLs to specify the image formats acceptable for thumbnails (in
Marcus Lundblad <ml@update.uu.se>
parents: 30232
diff changeset
1251 JabberData *thumbnail_data =
30250
afc9cec164e4 Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30243
diff changeset
1252 jabber_data_create_from_data(thumb, thumb_size,
afc9cec164e4 Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30243
diff changeset
1253 mimetype, TRUE, jsx->js);
30202
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1254 xmlnode *thumbnail = xmlnode_new_child(file, "thumbnail");
30225
4cfa6d49bee5 Added the "thumbs" namespace to namespaces.h
Marcus Lundblad <ml@update.uu.se>
parents: 30224
diff changeset
1255 xmlnode_set_namespace(thumbnail, NS_THUMBS);
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1256 xmlnode_set_attrib(thumbnail, "cid",
30202
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1257 jabber_data_get_cid(thumbnail_data));
30237
25a53c299713 Allow PRPLs to specify the image formats acceptable for thumbnails (in
Marcus Lundblad <ml@update.uu.se>
parents: 30232
diff changeset
1258 xmlnode_set_attrib(thumbnail, "mime-type", mimetype);
30202
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1259 /* cache data */
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1260 jabber_data_associate_local(thumbnail_data, NULL);
7d8b074feda2 Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <ml@update.uu.se>
parents: 30198
diff changeset
1261 }
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1262 #endif
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1263
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1264 feature = xmlnode_new_child(si, "feature");
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
1265 xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1266 x = xmlnode_new_child(feature, "x");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1267 xmlnode_set_namespace(x, "jabber:x:data");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1268 xmlnode_set_attrib(x, "type", "form");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1269 field = xmlnode_new_child(x, "field");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1270 xmlnode_set_attrib(field, "var", "stream-method");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1271 xmlnode_set_attrib(field, "type", "list-single");
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
1272 /* maybe we should add an option to always skip bytestreams for people
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
1273 behind troublesome firewalls */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1274 option = xmlnode_new_child(field, "option");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1275 value = xmlnode_new_child(option, "value");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1276 xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1277 option = xmlnode_new_child(field, "option");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1278 value = xmlnode_new_child(option, "value");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1279 xmlnode_insert_data(value, NS_IBB, -1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1280
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1281 jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1282
19675
a48681403103 Unregister the iq callback listener when the transfer is freed. Fixes #1804. It doesn't seem correct to me that nothing is sent to the recipient when the sender cancels the ft request, but that is a different issue.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18210
diff changeset
1283 /* Store the IQ id so that we can cancel the callback */
a48681403103 Unregister the iq callback listener when the transfer is freed. Fixes #1804. It doesn't seem correct to me that nothing is sent to the recipient when the sender cancels the ft request, but that is a different issue.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18210
diff changeset
1284 g_free(jsx->iq_id);
a48681403103 Unregister the iq callback listener when the transfer is freed. Fixes #1804. It doesn't seem correct to me that nothing is sent to the recipient when the sender cancels the ft request, but that is a different issue.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18210
diff changeset
1285 jsx->iq_id = g_strdup(iq->id);
a48681403103 Unregister the iq callback listener when the transfer is freed. Fixes #1804. It doesn't seem correct to me that nothing is sent to the recipient when the sender cancels the ft request, but that is a different issue.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 18210
diff changeset
1286
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1287 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1288 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1289
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1290 static void jabber_si_xfer_free(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1291 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1292 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1293
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1294 if (jsx) {
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1295 JabberStream *js = jsx->js;
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1296
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1297 js->file_transfers = g_list_remove(js->file_transfers, xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1298
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1299 if (jsx->connect_data != NULL)
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1300 purple_proxy_connect_cancel(jsx->connect_data);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1301 if (jsx->listen_data != NULL)
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1302 purple_network_listen_cancel(jsx->listen_data);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1303 if (jsx->iq_id != NULL)
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1304 jabber_iq_remove_callback_by_id(js, jsx->iq_id);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1305 if (jsx->local_streamhost_fd >= 0)
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1306 close(jsx->local_streamhost_fd);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1307 if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND && xfer->fd >= 0) {
27190
38c4973b5222 Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <ml@update.uu.se>
parents: 27014
diff changeset
1308 purple_debug_info("jabber", "remove port mapping\n");
38c4973b5222 Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <ml@update.uu.se>
parents: 27014
diff changeset
1309 purple_network_remove_port_mapping(xfer->fd);
38c4973b5222 Add a function to remove a port mapping (UPnP or NAT-PMP) given a file
Marcus Lundblad <ml@update.uu.se>
parents: 27014
diff changeset
1310 }
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1311 if (jsx->connect_timeout > 0)
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1312 purple_timeout_remove(jsx->connect_timeout);
25243
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
1313 if (jsx->ibb_timeout_handle > 0)
2faa374df334 Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <ml@update.uu.se>
parents: 25242
diff changeset
1314 purple_timeout_remove(jsx->ibb_timeout_handle);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1315
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1316 if (jsx->streamhosts) {
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1317 g_list_foreach(jsx->streamhosts, jabber_si_free_streamhost, NULL);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1318 g_list_free(jsx->streamhosts);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1319 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1320
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1321 if (jsx->ibb_session) {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1322 purple_debug_info("jabber",
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1323 "jabber_si_xfer_free: destroying IBB session\n");
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1324 jabber_ibb_session_destroy(jsx->ibb_session);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1325 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1326
28224
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1327 if (jsx->ibb_buffer) {
b2dd32ce7353 jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <paul@darkrain42.org>
parents: 28218
diff changeset
1328 purple_circ_buffer_destroy(jsx->ibb_buffer);
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1329 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1330
28138
deecc1d663c4 Don't use pointers (even opaquely) once they're freed. Closes #9822.
Paul Aurich <paul@darkrain42.org>
parents: 27635
diff changeset
1331 purple_debug_info("jabber", "jabber_si_xfer_free(): freeing jsx %p\n", jsx);
deecc1d663c4 Don't use pointers (even opaquely) once they're freed. Closes #9822.
Paul Aurich <paul@darkrain42.org>
parents: 27635
diff changeset
1332
25221
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1333 g_free(jsx->stream_id);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1334 g_free(jsx->iq_id);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1335 /* XXX: free other stuff */
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1336 g_free(jsx->rxqueue);
6e0f1532eb3d Check don't try to free the JabberSIXfer if it's already been freed.
Marcus Lundblad <ml@update.uu.se>
parents: 25220
diff changeset
1337 g_free(jsx);
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1338 purple_xfer_set_protocol_data(xfer, NULL);
21603
a4b6854737d5 Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21561
diff changeset
1339 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1340 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1341
25248
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1342 /*
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1343 * These four functions should only be called from the PurpleXfer functions
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1344 * (typically purple_xfer_cancel_(remote|local), purple_xfer_end, or
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1345 * purple_xfer_request_denied.
4b51394fd834 Standardize all the IBB stream cleanup
Paul Aurich <paul@darkrain42.org>
parents: 25247
diff changeset
1346 */
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1347 static void jabber_si_xfer_cancel_send(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1348 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1349 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1350
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1351 /* if there is an IBB session active, send close on that */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1352 if (jsx->ibb_session) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1353 jabber_ibb_session_close(jsx->ibb_session);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1354 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1355 jabber_si_xfer_free(xfer);
28889
fa7f3426ed13 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
1356 purple_debug_info("jabber", "in jabber_si_xfer_cancel_send\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1357 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1358
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1359
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1360 static void jabber_si_xfer_request_denied(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1361 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1362 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
27635
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1363 JabberStream *js = jsx->js;
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1364
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1365 /*
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1366 * TODO: It's probably an error if jsx->iq_id == NULL. g_return_if_fail
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1367 * might be warranted.
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1368 */
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1369 if (jsx->iq_id && !jsx->accepted) {
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1370 JabberIq *iq;
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1371 xmlnode *error, *child;
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1372 iq = jabber_iq_new(js, JABBER_IQ_ERROR);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1373 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
27635
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1374 jabber_iq_set_id(iq, jsx->iq_id);
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1375
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1376 error = xmlnode_new_child(iq->node, "error");
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1377 xmlnode_set_attrib(error, "type", "cancel");
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1378 child = xmlnode_new_child(error, "forbidden");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1379 xmlnode_set_namespace(child, NS_XMPP_STANZAS);
27635
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1380 child = xmlnode_new_child(error, "text");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1381 xmlnode_set_namespace(child, NS_XMPP_STANZAS);
27635
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1382 xmlnode_insert_data(child, "Offer Declined", -1);
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1383
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1384 jabber_iq_send(iq);
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1385 }
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1386
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1387 jabber_si_xfer_free(xfer);
28889
fa7f3426ed13 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
1388 purple_debug_info("jabber", "in jabber_si_xfer_request_denied\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1389 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1390
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1391
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1392 static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1393 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1394 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1395 /* if there is an IBB session active, send close */
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1396 if (jsx->ibb_session) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1397 jabber_ibb_session_close(jsx->ibb_session);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1398 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1399 jabber_si_xfer_free(xfer);
28889
fa7f3426ed13 jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <paul@darkrain42.org>
parents: 28398
diff changeset
1400 purple_debug_info("jabber", "in jabber_si_xfer_cancel_recv\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1401 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1402
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1403
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1404 static void jabber_si_xfer_end(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1405 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1406 jabber_si_xfer_free(xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1407 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1408
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1409
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1410 static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1411 JabberCapabilities capabilities, gpointer data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1412 {
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1413 PurpleXfer *xfer = (PurpleXfer *) data;
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1414 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1415
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1416 if (capabilities & JABBER_CAP_IBB) {
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1417 purple_debug_info("jabber",
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1418 "jabber_si_xfer_send_disco_cb: remote JID supports IBB\n");
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1419 jsx->stream_method |= STREAM_METHOD_IBB;
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1420 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1421
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1422 if (capabilities & JABBER_CAP_SI_FILE_XFER) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1423 jabber_si_xfer_send_request(xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1424 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1425 char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who);
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1426 purple_notify_error(js->gc, _("File Send Failed"),
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1427 _("File Send Failed"), msg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1428 g_free(msg);
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1429 purple_xfer_cancel_local(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1430 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1431 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1432
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1433 static void resource_select_cancel_cb(PurpleXfer *xfer, PurpleRequestFields *fields)
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1434 {
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1435 purple_xfer_cancel_local(xfer);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1436 }
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1437
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1438 static void do_transfer_send(PurpleXfer *xfer, const char *resource)
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1439 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1440 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1441 char **who_v = g_strsplit(purple_xfer_get_remote_user(xfer), "/", 2);
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1442 char *who;
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1443 JabberBuddy *jb;
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1444 JabberBuddyResource *jbr = NULL;
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1445
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1446 jb = jabber_buddy_find(jsx->js, who_v[0], FALSE);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1447 if (jb) {
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1448 jbr = jabber_buddy_find_resource(jb, resource);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1449 }
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1450
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1451 who = g_strdup_printf("%s/%s", who_v[0], resource);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1452 g_strfreev(who_v);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1453 g_free(xfer->who);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1454 xfer->who = who;
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1455
29163
6921cc1e704b Use the jabber_resource_know_capabilities function to determine if a buddy
Marcus Lundblad <ml@update.uu.se>
parents: 29161
diff changeset
1456 if (jbr && jabber_resource_know_capabilities(jbr)) {
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1457 char *msg;
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1458
29026
7b4ade7c6d8a jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <paul@darkrain42.org>
parents: 28889
diff changeset
1459 if (jabber_resource_has_capability(jbr, NS_IBB))
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1460 jsx->stream_method |= STREAM_METHOD_IBB;
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1461 if (jabber_resource_has_capability(jbr, NS_SI_FILE_TRANSFER)) {
27634
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1462 jabber_si_xfer_send_request(xfer);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1463 return;
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1464 }
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1465
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1466 msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1467 purple_notify_error(jsx->js->gc, _("File Send Failed"),
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1468 _("File Send Failed"), msg);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1469 g_free(msg);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1470 purple_xfer_cancel_local(xfer);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1471 } else {
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1472 jabber_disco_info_do(jsx->js, who,
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1473 jabber_si_xfer_send_disco_cb, xfer);
636c3b6c9cc7 Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <paul@darkrain42.org>
parents: 27366
diff changeset
1474 }
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1475 }
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1476
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1477 static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields)
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1478 {
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1479 PurpleRequestField *field = purple_request_fields_get_field(fields, "resource");
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1480 int selected_id = purple_request_field_choice_get_value(field);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1481 GList *labels = purple_request_field_choice_get_labels(field);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1482
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1483 const char *selected_label = g_list_nth_data(labels, selected_id);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1484
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1485 do_transfer_send(xfer, selected_label);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1486 }
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1487
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1488 static void jabber_si_xfer_init(PurpleXfer *xfer)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1489 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1490 JabberSIXfer *jsx = purple_xfer_get_protocol_data(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1491 JabberIq *iq;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1492 if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1493 JabberBuddy *jb;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1494 JabberBuddyResource *jbr = NULL;
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1495 char *resource;
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1496 GList *resources = NULL;
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1497
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1498 if(NULL != (resource = jabber_get_resource(purple_xfer_get_remote_user(xfer)))) {
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1499 /* they've specified a resource, no need to ask or
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1500 * default or anything, just do it */
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1501
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1502 do_transfer_send(xfer, resource);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1503 g_free(resource);
21556
4e98fb3661cc Prevent multiple file offers from going out with a patch from galt. Fixes #3839.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21284
diff changeset
1504 return;
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1505 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1506
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1507 jb = jabber_buddy_find(jsx->js, purple_xfer_get_remote_user(xfer), TRUE);
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1508
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1509 if (jb) {
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1510 GList *l;
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1511
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1512 for (l = jb->resources ; l ; l = g_list_next(l)) {
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1513 jbr = l->data;
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1514
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1515 if (!jabber_resource_know_capabilities(jbr) ||
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1516 (jabber_resource_has_capability(jbr, NS_SI_FILE_TRANSFER)
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1517 && (jabber_resource_has_capability(jbr, NS_BYTESTREAMS)
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1518 || jabber_resource_has_capability(jbr, NS_IBB)))) {
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1519 resources = g_list_append(resources, jbr);
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1520 }
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1521 }
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1522 }
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1523
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1524 if (!resources) {
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1525 /* no resources online, we're trying to send to someone
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1526 * whose presence we're not subscribed to, or
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1527 * someone who is offline. Let's inform the user */
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1528 char *msg;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1529
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1530 if(!jb) {
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1531 msg = g_strdup_printf(_("Unable to send file to %s, invalid JID"), purple_xfer_get_remote_user(xfer));
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1532 } else if(jb->subscription & JABBER_SUB_TO) {
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1533 msg = g_strdup_printf(_("Unable to send file to %s, user is not online"), purple_xfer_get_remote_user(xfer));
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1534 } else {
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1535 msg = g_strdup_printf(_("Unable to send file to %s, not subscribed to user presence"), purple_xfer_get_remote_user(xfer));
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1536 }
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1537
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1538 purple_notify_error(jsx->js->gc, _("File Send Failed"), _("File Send Failed"), msg);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1539 g_free(msg);
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1540 } else if (g_list_length(resources) == 1) {
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1541 /* only 1 resource online (probably our most common case)
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1542 * so no need to ask who to send to */
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1543 jbr = resources->data;
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1544 do_transfer_send(xfer, jbr->name);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1545 } else {
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1546 /* we've got multiple resources, we need to pick one to send to */
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1547 GList *l;
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1548 char *msg = g_strdup_printf(_("Please select the resource of %s to which you would like to send a file"), purple_xfer_get_remote_user(xfer));
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1549 PurpleRequestFields *fields = purple_request_fields_new();
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1550 PurpleRequestField *field = purple_request_field_choice_new("resource", _("Resource"), 0);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1551 PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL);
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1552
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1553 for(l = resources; l; l = l->next) {
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1554 jbr = l->data;
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1555 purple_request_field_choice_add(field, jbr->name);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1556 }
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1557
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1558 purple_request_field_group_add_field(group, field);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1559
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1560 purple_request_fields_add_group(fields, group);
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1561
21099
51cf02dbdb0e disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents: 21095
diff changeset
1562 purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, fields,
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1563 _("Send File"), G_CALLBACK(resource_select_ok_cb), _("Cancel"), G_CALLBACK(resource_select_cancel_cb),
32767
2ec94166be43 On the way to hiding the PurpleConnection struct.
andrew.victor@mxit.com
parents: 32754
diff changeset
1564 purple_connection_get_account(jsx->js->gc), purple_xfer_get_remote_user(xfer), NULL, xfer);
17441
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1565
cc1b4d2e5a9b if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents: 15823
diff changeset
1566 g_free(msg);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1567 }
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1568
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1569 g_list_free(resources);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1570 } else {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1571 xmlnode *si, *feature, *x, *field, *value;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1572
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1573 iq = jabber_iq_new(jsx->js, JABBER_IQ_RESULT);
32449
b6defcebfe4b Steps toward hiding PurpleXfer.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 32423
diff changeset
1574 xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer));
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1575 if(jsx->iq_id)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1576 jabber_iq_set_id(iq, jsx->iq_id);
27635
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1577 else
97eb110550ad Properly send rejection to initiator if we reject a transfer.
Paul Aurich <paul@darkrain42.org>
parents: 27634
diff changeset
1578 purple_debug_error("jabber", "Sending SI result with new IQ id.\n");
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1579
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1580 jsx->accepted = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1581
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1582 si = xmlnode_new_child(iq->node, "si");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1583 xmlnode_set_namespace(si, "http://jabber.org/protocol/si");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1584
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1585 feature = xmlnode_new_child(si, "feature");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1586 xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1587
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1588 x = xmlnode_new_child(feature, "x");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1589 xmlnode_set_namespace(x, "jabber:x:data");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1590 xmlnode_set_attrib(x, "type", "submit");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1591 field = xmlnode_new_child(x, "field");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1592 xmlnode_set_attrib(field, "var", "stream-method");
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1593
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1594 /* we should maybe "remember" if bytestreams has failed before (in the
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1595 same session) with this JID, and only present IBB as an option to
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1596 avoid unnessesary timeout */
25241
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
1597 /* maybe we should have an account option to always just try IBB
5d65993761c1 Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <ml@update.uu.se>
parents: 25236
diff changeset
1598 for people who know their firewalls are very restrictive */
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1599 if (jsx->stream_method & STREAM_METHOD_BYTESTREAMS) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1600 value = xmlnode_new_child(field, "value");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1601 xmlnode_insert_data(value, NS_BYTESTREAMS, -1);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1602 } else if(jsx->stream_method & STREAM_METHOD_IBB) {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1603 value = xmlnode_new_child(field, "value");
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1604 xmlnode_insert_data(value, NS_IBB, -1);
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1605 }
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1606
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1607 jabber_iq_send(iq);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1608 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1609 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1610
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1611 PurpleXfer *jabber_si_new_xfer(PurpleConnection *gc, const char *who)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1612 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1613 JabberStream *js;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1614
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1615 PurpleXfer *xfer;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1616 JabberSIXfer *jsx;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1617
32456
3caef255ad47 Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
andrew.victor@mxit.com
parents: 32449
diff changeset
1618 js = purple_connection_get_protocol_data(gc);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1619
32767
2ec94166be43 On the way to hiding the PurpleConnection struct.
andrew.victor@mxit.com
parents: 32754
diff changeset
1620 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_SEND, who);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1621 if (xfer)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1622 {
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1623 jsx = g_new0(JabberSIXfer, 1);
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1624 purple_xfer_set_protocol_data(xfer, jsx);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1625 jsx->js = js;
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
1626 jsx->local_streamhost_fd = -1;
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1627
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1628 jsx->ibb_session = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1629
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1630 purple_xfer_set_init_fnc(xfer, jabber_si_xfer_init);
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1631 purple_xfer_set_cancel_send_fnc(xfer, jabber_si_xfer_cancel_send);
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1632 purple_xfer_set_end_fnc(xfer, jabber_si_xfer_end);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1633
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1634 js->file_transfers = g_list_append(js->file_transfers, xfer);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1635 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1636
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1637 return xfer;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1638 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1639
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1640 void jabber_si_xfer_send(PurpleConnection *gc, const char *who, const char *file)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1641 {
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1642 PurpleXfer *xfer;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1643
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1644 xfer = jabber_si_new_xfer(gc, who);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1645
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1646 if (file)
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1647 purple_xfer_request_accepted(xfer, file);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1648 else
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1649 purple_xfer_request(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1650 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1651
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1652 #if ENABLE_FT_THUMBNAILS
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1653 static void
30242
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1654 jabber_si_thumbnail_cb(JabberData *data, gchar *alt, gpointer userdata)
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1655 {
30242
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1656 PurpleXfer *xfer = (PurpleXfer *) userdata;
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1657
30242
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1658 if (data) {
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1659 purple_xfer_set_thumbnail(xfer, jabber_data_get_data(data),
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1660 jabber_data_get_size(data), jabber_data_get_type(data));
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1661 /* data is ephemeral, get rid of now (the xfer re-owned the thumbnail */
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1662 jabber_data_destroy(data);
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1663 }
30242
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1664
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1665 purple_xfer_request(xfer);
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1666 }
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1667 #endif
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1668
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
1669 void jabber_si_parse(JabberStream *js, const char *from, JabberIqType type,
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
1670 const char *id, xmlnode *si)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1671 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1672 JabberSIXfer *jsx;
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15786
diff changeset
1673 PurpleXfer *xfer;
31981
79ae7200a11a Silence a swath of warnings regarding set-but-unused.
Paul Aurich <paul@darkrain42.org>
parents: 31977
diff changeset
1674 xmlnode *file, *feature, *x, *field, *option, *value;
79ae7200a11a Silence a swath of warnings regarding set-but-unused.
Paul Aurich <paul@darkrain42.org>
parents: 31977
diff changeset
1675 #if ENABLE_FT_THUMBNAILS
79ae7200a11a Silence a swath of warnings regarding set-but-unused.
Paul Aurich <paul@darkrain42.org>
parents: 31977
diff changeset
1676 xmlnode *thumbnail;
79ae7200a11a Silence a swath of warnings regarding set-but-unused.
Paul Aurich <paul@darkrain42.org>
parents: 31977
diff changeset
1677 #endif
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
1678 const char *stream_id, *filename, *filesize_c, *profile;
32754
e164f7815b52 Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32677
diff changeset
1679 goffset filesize = 0;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1680
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1681 if(!(profile = xmlnode_get_attrib(si, "profile")) ||
30653
fa311a0e51c0 jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <ml@update.uu.se>
parents: 30595
diff changeset
1682 strcmp(profile, NS_SI_FILE_TRANSFER))
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1683 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1684
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1685 if(!(stream_id = xmlnode_get_attrib(si, "id")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1686 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1687
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1688 if(!(file = xmlnode_get_child(si, "file")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1689 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1690
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1691 if(!(filename = xmlnode_get_attrib(file, "name")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1692 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1693
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1694 if((filesize_c = xmlnode_get_attrib(file, "size")))
32754
e164f7815b52 Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32677
diff changeset
1695 filesize = g_ascii_strtoull(filesize_c, NULL, 10);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1696
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1697 if(!(feature = xmlnode_get_child(si, "feature")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1698 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1699
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1700 if(!(x = xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data")))
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1701 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1702
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
1703 if(!from)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1704 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1705
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1706 /* if they've already sent us this file transfer with the same damn id
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1707 * then we're gonna ignore it, until I think of something better to do
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1708 * with it */
30846
7c871249318b Fix some "Dead nested assignment"s and then kill off some useless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30653
diff changeset
1709 if(jabber_si_xfer_find(js, stream_id, from) != NULL)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1710 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1711
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1712 jsx = g_new0(JabberSIXfer, 1);
23029
3c33405fd630 applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22912
diff changeset
1713 jsx->local_streamhost_fd = -1;
25443
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25264
diff changeset
1714
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1715 jsx->ibb_session = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1716
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1717 for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1718 const char *var = xmlnode_get_attrib(field, "var");
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1719 if(var && !strcmp(var, "stream-method")) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1720 for(option = xmlnode_get_child(field, "option"); option;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1721 option = xmlnode_get_next_twin(option)) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1722 if((value = xmlnode_get_child(option, "value"))) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1723 char *val;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1724 if((val = xmlnode_get_data(value))) {
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1725 if(!strcmp(val, NS_BYTESTREAMS)) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1726 jsx->stream_method |= STREAM_METHOD_BYTESTREAMS;
29031
9ae3e70a327b jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <paul@darkrain42.org>
parents: 29026
diff changeset
1727 } else if(!strcmp(val, NS_IBB)) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1728 jsx->stream_method |= STREAM_METHOD_IBB;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1729 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1730 g_free(val);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1731 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1732 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1733 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1734 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1735 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1736
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1737 if(jsx->stream_method == STREAM_METHOD_UNKNOWN) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1738 g_free(jsx);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1739 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1740 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1741
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1742 jsx->js = js;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1743 jsx->stream_id = g_strdup(stream_id);
25933
050052891c55 Pass IQ handlers type, from, id, and the child node
Paul Aurich <paul@darkrain42.org>
parents: 25067
diff changeset
1744 jsx->iq_id = g_strdup(id);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1745
32767
2ec94166be43 On the way to hiding the PurpleConnection struct.
andrew.victor@mxit.com
parents: 32754
diff changeset
1746 xfer = purple_xfer_new(purple_connection_get_account(js->gc), PURPLE_XFER_RECEIVE, from);
26309
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1747 g_return_if_fail(xfer != NULL);
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1748
32423
ac88c8fc3f47 Convert the jabber prpl to use the new API.
andrew.victor@mxit.com
parents: 31982
diff changeset
1749 purple_xfer_set_protocol_data(xfer, jsx);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1750
26309
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1751 purple_xfer_set_filename(xfer, filename);
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1752 if(filesize > 0)
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1753 purple_xfer_set_size(xfer, filesize);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1754
26309
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1755 purple_xfer_set_init_fnc(xfer, jabber_si_xfer_init);
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1756 purple_xfer_set_request_denied_fnc(xfer, jabber_si_xfer_request_denied);
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1757 purple_xfer_set_cancel_recv_fnc(xfer, jabber_si_xfer_cancel_recv);
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1758 purple_xfer_set_end_fnc(xfer, jabber_si_xfer_end);
31534
a8cc50c2279f Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents: 31363
diff changeset
1759
26309
58daeb191c10 purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <mark@kingant.net>
parents: 25981
diff changeset
1760 js->file_transfers = g_list_append(js->file_transfers, xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1761
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1762 #if ENABLE_FT_THUMBNAILS
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1763 /* if there is a thumbnail, we should request it... */
30225
4cfa6d49bee5 Added the "thumbs" namespace to namespaces.h
Marcus Lundblad <ml@update.uu.se>
parents: 30224
diff changeset
1764 if ((thumbnail = xmlnode_get_child_with_namespace(file, "thumbnail",
4cfa6d49bee5 Added the "thumbs" namespace to namespaces.h
Marcus Lundblad <ml@update.uu.se>
parents: 30224
diff changeset
1765 NS_THUMBS))) {
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1766 const char *cid = xmlnode_get_attrib(thumbnail, "cid");
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1767 if (cid) {
30242
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1768 jabber_data_request(js, cid, purple_xfer_get_remote_user(xfer),
93f6a5d48a46 Updated to use new BoB request functionallity
Marcus Lundblad <ml@update.uu.se>
parents: 30240
diff changeset
1769 NULL, TRUE, jabber_si_thumbnail_cb, xfer);
31982
aee75010c188 jabber: This seems slightly more straightforward to me.
Paul Aurich <paul@darkrain42.org>
parents: 31981
diff changeset
1770 return;
30203
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1771 }
259a331e4de7 Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <ml@update.uu.se>
parents: 30202
diff changeset
1772 }
31982
aee75010c188 jabber: This seems slightly more straightforward to me.
Paul Aurich <paul@darkrain42.org>
parents: 31981
diff changeset
1773 #endif
aee75010c188 jabber: This seems slightly more straightforward to me.
Paul Aurich <paul@darkrain42.org>
parents: 31981
diff changeset
1774
30256
f3a573191e43 Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <ml@update.uu.se>
parents: 30250
diff changeset
1775 purple_xfer_request(xfer);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1776 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1777
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1778 void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1779 jabber_si_init(void)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1780 {
27014
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26997
diff changeset
1781 jabber_iq_register_handler("si", "http://jabber.org/protocol/si", jabber_si_parse);
a8537bbcfb79 Remove trailing whitespace that has snuck in.
Paul Aurich <paul@darkrain42.org>
parents: 26997
diff changeset
1782
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1783 jabber_ibb_register_open_handler(jabber_si_xfer_ibb_open_cb);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1784 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1785
23999
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1786 void
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1787 jabber_si_uninit(void)
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1788 {
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1789 jabber_ibb_unregister_open_handler(jabber_si_xfer_ibb_open_cb);
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1790 }
b4ec5481a67a Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <ml@update.uu.se>
parents: 23769
diff changeset
1791