libpurple/protocols/jabber/si.c

Sun, 21 Mar 2010 20:57:29 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Sun, 21 Mar 2010 20:57:29 +0000
branch
cpw.malu.ft_thumbnails
changeset 30118
cee45670f6ef
parent 30116
35f1ae3cdbab
child 30119
42251a0a3bbd
permissions
-rw-r--r--

Updated to use new BoB request functionallity

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

mercurial