Sat, 14 Aug 2010 05:17:38 +0000
Fix some "Dead nested assignment"s and then kill off some useless
variables related to them.
| 7395 | 1 | /* |
| 15884 | 2 | * purple - Jabber Protocol Plugin |
| 7395 | 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 | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 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 | 17 | * GNU General Public License for more details. |
| 18 | * | |
| 19 | * You should have received a copy of the GNU General Public License | |
| 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 | 22 | * |
| 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 | 28 | #include "debug.h" |
| 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 | 31 | #include "network.h" |
| 7395 | 32 | #include "notify.h" |
| 33 | ||
| 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 | 36 | #include "disco.h" |
| 7395 | 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 | 39 | #include "iq.h" |
| 40 | #include "si.h" | |
| 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 |
|
30422
a078ddc2e9e1
woops, this should remain de-activated for a while yet... :)
Marcus Lundblad <malu@pidgin.im>
parents:
30421
diff
changeset
|
43 | #define ENABLE_FT_THUMBNAILS 0 |
| 8262 | 44 | |
| 45 | typedef struct _JabberSIXfer { | |
| 46 | JabberStream *js; | |
| 47 | ||
| 15884 | 48 | PurpleProxyConnectData *connect_data; |
| 49 | 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
|
50 | guint connect_timeout; |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
51 | |
| 10940 | 52 | gboolean accepted; |
| 53 | ||
| 8262 | 54 | char *stream_id; |
| 55 | char *iq_id; | |
| 56 | ||
| 57 | enum { | |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
58 | STREAM_METHOD_UNKNOWN = 0, |
| 8262 | 59 | 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
|
60 | STREAM_METHOD_IBB = 2 << 2, |
| 8262 | 61 | STREAM_METHOD_UNSUPPORTED = 2 << 31 |
| 62 | } stream_method; | |
| 63 | ||
| 64 | GList *streamhosts; | |
| 15884 | 65 | PurpleProxyInfo *gpi; |
| 8316 | 66 | |
| 67 | char *rxqueue; | |
| 68 | size_t rxlen; | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
69 | gsize rxmaxlen; |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
70 | 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
|
71 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
72 | 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
|
73 | 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
|
74 | PurpleCircBuffer *ibb_buffer; |
| 8262 | 75 | } JabberSIXfer; |
| 76 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
77 | /* some forward declarations */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
78 | 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
|
79 | |
| 15884 | 80 | static PurpleXfer* |
| 8262 | 81 | jabber_si_xfer_find(JabberStream *js, const char *sid, const char *from) |
| 7395 | 82 | { |
| 83 | GList *xfers; | |
| 84 | ||
| 8262 | 85 | if(!sid || !from) |
| 7395 | 86 | return NULL; |
| 87 | ||
| 88 | for(xfers = js->file_transfers; xfers; xfers = xfers->next) { | |
| 15884 | 89 | PurpleXfer *xfer = xfers->data; |
| 7395 | 90 | JabberSIXfer *jsx = xfer->data; |
| 8316 | 91 | if(jsx->stream_id && xfer->who && |
| 92 | !strcmp(jsx->stream_id, sid) && !strcmp(xfer->who, from)) | |
| 7395 | 93 | return xfer; |
| 94 | } | |
| 95 | ||
| 96 | return NULL; | |
| 97 | } | |
| 98 | ||
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
99 | static void |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
100 | jabber_si_free_streamhost(gpointer data, gpointer user_data) |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
101 | { |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
102 | JabberBytestreamsStreamhost *sh = data; |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
103 | |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
104 | if(!data) |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
105 | return; |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
106 | |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
107 | g_free(sh->jid); |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
108 | g_free(sh->host); |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
109 | g_free(sh->zeroconf); |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
110 | g_free(sh); |
|
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 | |
|
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
113 | |
| 8262 | 114 | |
| 15884 | 115 | static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer); |
| 8262 | 116 | |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
117 | static void |
|
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
118 | jabber_si_bytestreams_connect_cb(gpointer data, gint source, const gchar *error_message) |
| 8262 | 119 | { |
| 15884 | 120 | PurpleXfer *xfer = data; |
| 7395 | 121 | JabberSIXfer *jsx = xfer->data; |
| 8262 | 122 | JabberIq *iq; |
| 123 | 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
|
124 | JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data; |
| 7395 | 125 | |
| 15884 | 126 | 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
|
127 | jsx->gpi = NULL; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
128 | jsx->connect_data = NULL; |
| 8262 | 129 | |
|
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
|
130 | 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
|
131 | 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
|
132 | 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
|
133 | |
| 8262 | 134 | if(source < 0) { |
|
17643
870d08f93965
Better error message for when a Jabber connection fails
Mark Doliner <markdoliner@pidgin.im>
parents:
17424
diff
changeset
|
135 | purple_debug_warning("jabber", |
|
870d08f93965
Better error message for when a Jabber connection fails
Mark Doliner <markdoliner@pidgin.im>
parents:
17424
diff
changeset
|
136 | "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
|
137 | 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
|
138 | error_message ? error_message : "(null)"); |
| 8262 | 139 | jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
140 | jabber_si_free_streamhost(streamhost, NULL); |
| 8262 | 141 | jabber_si_bytestreams_attempt_connect(xfer); |
| 142 | return; | |
| 143 | } | |
| 144 | ||
|
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
|
145 | /* 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
|
146 | 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
|
147 | { |
|
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
|
148 | xmlnode *activate; |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
149 | 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
|
150 | 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
|
151 | 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
|
152 | 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
|
153 | 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
|
154 | 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
|
155 | |
|
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 | /* 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
|
157 | } |
|
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 | 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
|
159 | { |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
160 | 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
|
161 | 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
|
162 | 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
|
163 | 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
|
164 | 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
|
165 | 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
|
166 | } |
| 8262 | 167 | |
| 168 | jabber_iq_send(iq); | |
| 169 | ||
| 15884 | 170 | purple_xfer_start(xfer, source, NULL, -1); |
| 8262 | 171 | } |
| 172 | ||
|
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
|
173 | 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
|
174 | 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
|
175 | { |
|
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 | 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
|
177 | 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
|
178 | |
|
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 | 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
|
180 | |
|
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 | 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
|
182 | |
|
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 | 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
|
184 | 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
|
185 | 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
|
186 | |
|
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 | /* 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
|
188 | 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
|
189 | |
|
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 | 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
|
191 | } |
|
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
|
192 | |
|
26016
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
193 | 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
|
194 | 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
|
195 | { |
|
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
196 | 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
|
197 | 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
|
198 | 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
|
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 | } |
|
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
201 | |
|
26014
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
202 | static gboolean |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
203 | 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
|
204 | { |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
205 | 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
|
206 | 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
|
207 | |
|
26016
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
208 | 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
|
209 | 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
|
210 | "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
|
211 | " up yet, cancel transfer"); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
212 | 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
|
213 | 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
|
214 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
215 | |
|
26014
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
216 | return FALSE; |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
217 | } |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
218 | |
| 15884 | 219 | static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer) |
| 8262 | 220 | { |
| 221 | 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
|
222 | JabberBytestreamsStreamhost *streamhost; |
| 14561 | 223 | JabberID *dstjid; |
| 8262 | 224 | |
| 225 | if(!jsx->streamhosts) { | |
| 226 | JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR); | |
| 14740 | 227 | xmlnode *error, *inf; |
| 8262 | 228 | |
| 229 | if(jsx->iq_id) | |
| 230 | jabber_iq_set_id(iq, jsx->iq_id); | |
| 231 | ||
| 232 | xmlnode_set_attrib(iq->node, "to", xfer->who); | |
| 233 | error = xmlnode_new_child(iq->node, "error"); | |
| 234 | xmlnode_set_attrib(error, "code", "404"); | |
| 235 | xmlnode_set_attrib(error, "type", "cancel"); | |
| 14740 | 236 | 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
|
237 | xmlnode_set_namespace(inf, NS_XMPP_STANZAS); |
| 8262 | 238 | |
| 239 | jabber_iq_send(iq); | |
| 240 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
241 | /* 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
|
242 | 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
|
243 | /* 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
|
244 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
245 | "jabber_si_bytestreams_attempt_connect: " |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
246 | "no streamhosts found, trying IBB\n"); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
247 | /* 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
|
248 | 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
|
249 | receiver already... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
250 | 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
|
251 | && !jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
252 | 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
|
253 | } else { |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
254 | /* 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
|
255 | 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
|
256 | 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
|
257 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
258 | /* 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
|
259 | already set up... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
260 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
261 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
262 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
263 | |
| 8262 | 264 | return; |
| 265 | } | |
| 266 | ||
| 267 | streamhost = jsx->streamhosts->data; | |
| 7395 | 268 | |
|
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
|
269 | 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
|
270 | 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
|
271 | 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
|
272 | 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
|
273 | |
| 14561 | 274 | dstjid = jabber_id_new(xfer->who); |
| 8262 | 275 | |
|
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
|
276 | /* 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
|
277 | |
|
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
|
278 | 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
|
279 | char *dstaddr, *hash; |
| 15884 | 280 | jsx->gpi = purple_proxy_info_new(); |
| 281 | purple_proxy_info_set_type(jsx->gpi, PURPLE_PROXY_SOCKS5); | |
| 282 | purple_proxy_info_set_host(jsx->gpi, streamhost->host); | |
| 283 | purple_proxy_info_set_port(jsx->gpi, streamhost->port); | |
| 14561 | 284 | |
|
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
|
285 | /* 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
|
286 | 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
|
287 | 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
|
288 | 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
|
289 | 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
|
290 | 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
|
291 | 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
|
292 | |
|
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
|
293 | /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ |
|
29910
f1c6e586e5c1
jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents:
29887
diff
changeset
|
294 | hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1"); |
| 8262 | 295 | |
| 15884 | 296 | 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
|
297 | hash, 0, |
| 14561 | 298 | 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
|
299 | g_free(hash); |
| 14561 | 300 | g_free(dstaddr); |
| 301 | ||
|
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
|
302 | /* 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
|
303 | 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
|
304 | 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
|
305 | 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
|
306 | |
| 14561 | 307 | jabber_id_free(dstjid); |
| 308 | } | |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
309 | |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
310 | if (jsx->connect_data == NULL) |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
311 | { |
|
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
312 | jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
313 | jabber_si_free_streamhost(streamhost, NULL); |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
314 | jabber_si_bytestreams_attempt_connect(xfer); |
|
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
315 | } |
| 8262 | 316 | } |
| 317 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
318 | 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
|
319 | JabberIqType type, const char *id, xmlnode *query) |
| 8262 | 320 | { |
| 15884 | 321 | PurpleXfer *xfer; |
| 8262 | 322 | JabberSIXfer *jsx; |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
323 | xmlnode *streamhost; |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
324 | const char *sid; |
| 14356 | 325 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
326 | if(type != JABBER_IQ_SET) |
| 14356 | 327 | return; |
| 8262 | 328 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
329 | if(!from) |
| 8262 | 330 | return; |
| 331 | ||
| 332 | if(!(sid = xmlnode_get_attrib(query, "sid"))) | |
| 333 | return; | |
| 334 | ||
| 335 | if(!(xfer = jabber_si_xfer_find(js, sid, from))) | |
| 336 | return; | |
| 337 | ||
| 338 | jsx = xfer->data; | |
| 10940 | 339 | |
| 340 | if(!jsx->accepted) | |
| 341 | return; | |
| 342 | ||
| 8262 | 343 | if(jsx->iq_id) |
| 344 | 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
|
345 | jsx->iq_id = g_strdup(id); |
| 8262 | 346 | |
| 347 | for(streamhost = xmlnode_get_child(query, "streamhost"); streamhost; | |
| 348 | 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
|
349 | 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
|
350 | int portnum = 0; |
| 8262 | 351 | |
| 352 | 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
|
353 | ((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
|
354 | ((host = xmlnode_get_attrib(streamhost, "host")) && |
| 8262 | 355 | (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
|
356 | (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
|
357 | JabberBytestreamsStreamhost *sh = g_new0(JabberBytestreamsStreamhost, 1); |
| 8262 | 358 | sh->jid = g_strdup(jid); |
| 359 | sh->host = g_strdup(host); | |
| 360 | 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
|
361 | sh->zeroconf = g_strdup(zeroconf); |
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
362 | /* If there were a lot of these, it'd be worthwhile to prepend and reverse. */ |
| 8262 | 363 | jsx->streamhosts = g_list_append(jsx->streamhosts, sh); |
| 364 | } | |
| 365 | } | |
| 366 | ||
| 367 | jabber_si_bytestreams_attempt_connect(xfer); | |
| 7395 | 368 | } |
| 369 | ||
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
370 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
371 | static void |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
372 | jabber_si_xfer_bytestreams_send_read_again_resp_cb(gpointer data, gint source, |
| 15884 | 373 | PurpleInputCondition cond) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
374 | { |
| 15884 | 375 | PurpleXfer *xfer = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
376 | JabberSIXfer *jsx = xfer->data; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
377 | int len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
378 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
379 | len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
380 | if (len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
381 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
382 | else if (len < 0) { |
| 15884 | 383 | purple_input_remove(xfer->watcher); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
384 | xfer->watcher = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
385 | g_free(jsx->rxqueue); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
386 | jsx->rxqueue = NULL; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
387 | close(source); |
| 15884 | 388 | purple_xfer_cancel_remote(xfer); |
| 13441 | 389 | return; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
390 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
391 | jsx->rxlen += len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
392 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
393 | if (jsx->rxlen < jsx->rxmaxlen) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
394 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
395 | |
| 15884 | 396 | purple_input_remove(xfer->watcher); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
397 | xfer->watcher = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
398 | g_free(jsx->rxqueue); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
399 | jsx->rxqueue = NULL; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
400 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
401 | /* 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
|
402 | * recipient sends the IQ result with <streamhost-used/> |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
403 | */ |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
404 | purple_debug_info("jabber", "SOCKS5 connection negotiation completed. " |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
405 | "Waiting for IQ result to start file transfer.\n"); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
406 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
407 | |
| 8312 | 408 | static void |
| 8316 | 409 | jabber_si_xfer_bytestreams_send_read_again_cb(gpointer data, gint source, |
| 15884 | 410 | PurpleInputCondition cond) |
| 8312 | 411 | { |
| 15884 | 412 | PurpleXfer *xfer = data; |
| 8316 | 413 | 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
|
414 | char buffer[42]; /* 40 for DST.ADDR + 2 bytes for port number*/ |
| 8316 | 415 | 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
|
416 | char *dstaddr, *hash; |
| 8316 | 417 | const char *host; |
| 418 | ||
| 15884 | 419 | purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_again_cb\n"); |
| 8312 | 420 | |
| 8316 | 421 | if(jsx->rxlen < 5) { |
| 15884 | 422 | purple_debug_info("jabber", "reading the first 5 bytes\n"); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
423 | len = read(source, buffer, 5 - jsx->rxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
424 | if(len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
425 | return; |
|
13788
019bc2080927
[gaim-migrate @ 16198]
Daniel Atallah <datallah@pidgin.im>
parents:
13493
diff
changeset
|
426 | else if(len <= 0) { |
| 15884 | 427 | purple_input_remove(xfer->watcher); |
| 8316 | 428 | xfer->watcher = 0; |
| 429 | close(source); | |
| 15884 | 430 | purple_xfer_cancel_remote(xfer); |
| 8316 | 431 | return; |
| 432 | } | |
| 433 | jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen); | |
| 434 | memcpy(jsx->rxqueue + jsx->rxlen, buffer, len); | |
| 435 | jsx->rxlen += len; | |
| 436 | return; | |
| 437 | } 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
|
438 | 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
|
439 | 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
|
440 | 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
|
441 | jsx->rxqueue[3], jsx->rxqueue[4]); |
| 15884 | 442 | purple_input_remove(xfer->watcher); |
| 8316 | 443 | xfer->watcher = 0; |
| 444 | close(source); | |
| 15884 | 445 | purple_xfer_cancel_remote(xfer); |
| 8316 | 446 | return; |
| 447 | } 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
|
448 | /* 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
|
449 | 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
|
450 | 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
|
451 | 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
|
452 | len = read(source, buffer, to_read); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
453 | if(len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
454 | return; |
|
13788
019bc2080927
[gaim-migrate @ 16198]
Daniel Atallah <datallah@pidgin.im>
parents:
13493
diff
changeset
|
455 | else if(len <= 0) { |
| 15884 | 456 | purple_input_remove(xfer->watcher); |
| 8316 | 457 | xfer->watcher = 0; |
| 458 | close(source); | |
| 15884 | 459 | purple_xfer_cancel_remote(xfer); |
| 8316 | 460 | return; |
| 461 | } | |
| 462 | jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen); | |
| 463 | memcpy(jsx->rxqueue + jsx->rxlen, buffer, len); | |
| 464 | jsx->rxlen += len; | |
| 465 | } | |
| 8312 | 466 | |
|
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
|
467 | /* Have we not read all of DST.ADDR and the following 2-byte port number? */ |
| 8316 | 468 | if(jsx->rxlen - 5 < jsx->rxqueue[4] + 2) |
| 469 | return; | |
| 470 | ||
| 15884 | 471 | purple_input_remove(xfer->watcher); |
| 8316 | 472 | xfer->watcher = 0; |
| 8312 | 473 | |
| 8316 | 474 | dstaddr = g_strdup_printf("%s%s@%s/%s%s", jsx->stream_id, |
| 475 | jsx->js->user->node, jsx->js->user->domain, | |
| 476 | jsx->js->user->resource, xfer->who); | |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10112
diff
changeset
|
477 | |
|
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
|
478 | /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ |
|
29910
f1c6e586e5c1
jabber: Validate the hash on incoming BoB objects (in case the CID is on the
Marcus Lundblad <malu@pidgin.im>
parents:
29887
diff
changeset
|
479 | hash = jabber_calculate_data_hash(dstaddr, strlen(dstaddr), "sha1"); |
| 8316 | 480 | |
|
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
|
481 | if(strncmp(hash, jsx->rxqueue + 5, 40) || |
| 8316 | 482 | 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
|
483 | 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
|
484 | 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
|
485 | " (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
|
486 | 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
|
487 | 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
|
488 | 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
|
489 | " (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
|
490 | hash, jsx->rxqueue + 5); |
| 8312 | 491 | close(source); |
| 15884 | 492 | 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
|
493 | 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
|
494 | g_free(dstaddr); |
| 8312 | 495 | return; |
| 496 | } | |
| 497 | ||
|
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
|
498 | 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
|
499 | 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
|
500 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
501 | g_free(jsx->rxqueue); |
| 15884 | 502 | host = purple_network_get_my_ip(jsx->js->fd); |
| 8316 | 503 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
504 | jsx->rxmaxlen = 5 + strlen(host) + 2; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
505 | jsx->rxqueue = g_malloc(jsx->rxmaxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
506 | jsx->rxlen = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
507 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
508 | jsx->rxqueue[0] = 0x05; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
509 | jsx->rxqueue[1] = 0x00; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
510 | jsx->rxqueue[2] = 0x00; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
511 | jsx->rxqueue[3] = 0x03; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
512 | jsx->rxqueue[4] = strlen(host); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
513 | memcpy(jsx->rxqueue + 5, host, strlen(host)); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
514 | jsx->rxqueue[5+strlen(host)] = 0x00; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
515 | jsx->rxqueue[6+strlen(host)] = 0x00; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
516 | |
| 15884 | 517 | xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
518 | jabber_si_xfer_bytestreams_send_read_again_resp_cb, xfer); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
519 | jabber_si_xfer_bytestreams_send_read_again_resp_cb(xfer, source, |
| 15884 | 520 | PURPLE_INPUT_WRITE); |
|
13201
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 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
523 | static void |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
524 | jabber_si_xfer_bytestreams_send_read_response_cb(gpointer data, gint source, |
| 15884 | 525 | PurpleInputCondition cond) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
526 | { |
| 15884 | 527 | PurpleXfer *xfer = data; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
528 | JabberSIXfer *jsx = xfer->data; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
529 | int len; |
| 8316 | 530 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
531 | len = write(source, jsx->rxqueue + jsx->rxlen, jsx->rxmaxlen - jsx->rxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
532 | if (len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
533 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
534 | else if (len < 0) { |
| 15884 | 535 | purple_input_remove(xfer->watcher); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
536 | xfer->watcher = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
537 | g_free(jsx->rxqueue); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
538 | jsx->rxqueue = NULL; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
539 | close(source); |
| 15884 | 540 | purple_xfer_cancel_remote(xfer); |
|
13493
598d8f618a31
[gaim-migrate @ 15868]
Richard Laager <rlaager@pidgin.im>
parents:
13441
diff
changeset
|
541 | return; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
542 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
543 | jsx->rxlen += len; |
| 8316 | 544 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
545 | if (jsx->rxlen < jsx->rxmaxlen) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
546 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
547 | |
| 15884 | 548 | purple_input_remove(xfer->watcher); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
549 | xfer->watcher = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
550 | |
|
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
|
551 | /* 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
|
552 | if (jsx->rxqueue[1] == 0x00) { |
| 15884 | 553 | xfer->watcher = purple_input_add(source, PURPLE_INPUT_READ, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
554 | jabber_si_xfer_bytestreams_send_read_again_cb, xfer); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
555 | g_free(jsx->rxqueue); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
556 | 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
|
557 | jsx->rxlen = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
558 | } else { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
559 | close(source); |
| 15884 | 560 | purple_xfer_cancel_remote(xfer); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
561 | } |
| 8316 | 562 | } |
| 563 | ||
| 564 | static void | |
| 565 | jabber_si_xfer_bytestreams_send_read_cb(gpointer data, gint source, | |
| 15884 | 566 | PurpleInputCondition cond) |
| 8316 | 567 | { |
| 15884 | 568 | PurpleXfer *xfer = data; |
| 8316 | 569 | JabberSIXfer *jsx = xfer->data; |
| 570 | int i; | |
| 571 | int len; | |
| 572 | char buffer[256]; | |
| 573 | ||
| 15884 | 574 | purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_read_cb\n"); |
| 8316 | 575 | |
| 576 | xfer->fd = source; | |
| 577 | ||
|
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
|
578 | /** Try to read the SOCKS5 header */ |
| 8316 | 579 | if(jsx->rxlen < 2) { |
| 15884 | 580 | purple_debug_info("jabber", "reading those first two bytes\n"); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
581 | len = read(source, buffer, 2 - jsx->rxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
582 | if(len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
583 | return; |
|
13788
019bc2080927
[gaim-migrate @ 16198]
Daniel Atallah <datallah@pidgin.im>
parents:
13493
diff
changeset
|
584 | else if(len <= 0) { |
| 15884 | 585 | purple_input_remove(xfer->watcher); |
| 8316 | 586 | xfer->watcher = 0; |
| 587 | close(source); | |
| 15884 | 588 | purple_xfer_cancel_remote(xfer); |
| 8316 | 589 | return; |
| 590 | } | |
| 591 | jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen); | |
| 592 | memcpy(jsx->rxqueue + jsx->rxlen, buffer, len); | |
| 593 | jsx->rxlen += len; | |
| 594 | return; | |
|
27140
eaa499df0786
Fix two sizeof(size_t) != sizeof(unsigned int) warnings which could never
Paul Aurich <darkrain42@pidgin.im>
parents:
27112
diff
changeset
|
595 | } 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
|
596 | /* 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
|
597 | 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
|
598 | 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
|
599 | 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
|
600 | len = read(source, buffer, to_read); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
601 | if(len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
602 | return; |
|
13788
019bc2080927
[gaim-migrate @ 16198]
Daniel Atallah <datallah@pidgin.im>
parents:
13493
diff
changeset
|
603 | else if(len <= 0) { |
| 15884 | 604 | purple_input_remove(xfer->watcher); |
| 8316 | 605 | xfer->watcher = 0; |
| 606 | close(source); | |
| 15884 | 607 | purple_xfer_cancel_remote(xfer); |
| 8316 | 608 | return; |
| 609 | } | |
| 610 | jsx->rxqueue = g_realloc(jsx->rxqueue, len + jsx->rxlen); | |
| 611 | memcpy(jsx->rxqueue + jsx->rxlen, buffer, len); | |
| 612 | jsx->rxlen += len; | |
| 613 | } | |
| 614 | ||
|
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
|
615 | /* Have we not read all the auth. method bytes? */ |
| 8316 | 616 | if(jsx->rxlen -2 < jsx->rxqueue[1]) |
| 617 | return; | |
| 618 | ||
| 15884 | 619 | purple_input_remove(xfer->watcher); |
| 8316 | 620 | xfer->watcher = 0; |
| 621 | ||
| 15884 | 622 | purple_debug_info("jabber", "checking to make sure we're socks FIVE\n"); |
| 8316 | 623 | |
| 624 | if(jsx->rxqueue[0] != 0x05) { | |
| 625 | close(source); | |
| 15884 | 626 | purple_xfer_cancel_remote(xfer); |
| 8316 | 627 | return; |
| 628 | } | |
| 629 | ||
| 15884 | 630 | purple_debug_info("jabber", "going to test %hhu different methods\n", jsx->rxqueue[1]); |
| 8316 | 631 | |
| 632 | for(i=0; i<jsx->rxqueue[1]; i++) { | |
| 633 | ||
| 15884 | 634 | purple_debug_info("jabber", "testing %hhu\n", jsx->rxqueue[i+2]); |
| 8316 | 635 | if(jsx->rxqueue[i+2] == 0x00) { |
| 636 | g_free(jsx->rxqueue); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
637 | jsx->rxlen = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
638 | jsx->rxmaxlen = 2; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
639 | jsx->rxqueue = g_malloc(jsx->rxmaxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
640 | jsx->rxqueue[0] = 0x05; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
641 | jsx->rxqueue[1] = 0x00; |
| 15884 | 642 | xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
643 | jabber_si_xfer_bytestreams_send_read_response_cb, |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
644 | xfer); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
645 | jabber_si_xfer_bytestreams_send_read_response_cb(xfer, |
| 15884 | 646 | source, PURPLE_INPUT_WRITE); |
| 8316 | 647 | jsx->rxqueue = NULL; |
| 648 | jsx->rxlen = 0; | |
| 8312 | 649 | return; |
| 650 | } | |
| 651 | } | |
| 652 | ||
| 8316 | 653 | g_free(jsx->rxqueue); |
| 654 | jsx->rxlen = 0; | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
655 | jsx->rxmaxlen = 2; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
656 | jsx->rxqueue = g_malloc(jsx->rxmaxlen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
657 | jsx->rxqueue[0] = 0x05; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
658 | jsx->rxqueue[1] = 0xFF; |
| 15884 | 659 | xfer->watcher = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
660 | jabber_si_xfer_bytestreams_send_read_response_cb, xfer); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
661 | jabber_si_xfer_bytestreams_send_read_response_cb(xfer, |
| 15884 | 662 | source, PURPLE_INPUT_WRITE); |
| 8312 | 663 | } |
| 664 | ||
|
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
|
665 | 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
|
666 | 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
|
667 | { |
|
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 | 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
|
669 | |
|
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 | 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
|
671 | 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
|
672 | |
|
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 | 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
|
674 | } |
|
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
|
675 | |
| 8312 | 676 | static void |
| 8316 | 677 | jabber_si_xfer_bytestreams_send_connected_cb(gpointer data, gint source, |
| 15884 | 678 | PurpleInputCondition cond) |
| 8316 | 679 | { |
| 15884 | 680 | PurpleXfer *xfer = data; |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
681 | JabberSIXfer *jsx = xfer->data; |
|
24038
5500af38bb9f
Use non-blocking io for direct xmpp file transfers
Daniel Atallah <datallah@pidgin.im>
parents:
23912
diff
changeset
|
682 | int acceptfd, flags; |
| 8316 | 683 | |
| 15884 | 684 | purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_connected_cb\n"); |
| 8316 | 685 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
686 | acceptfd = accept(source, NULL, 0); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
687 | if(acceptfd == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
688 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
689 | 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
|
690 | 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
|
691 | /* Don't cancel the ft - allow it to fall to the next streamhost.*/ |
| 8316 | 692 | return; |
| 693 | } | |
| 694 | ||
| 15884 | 695 | purple_input_remove(xfer->watcher); |
| 8316 | 696 | close(source); |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
697 | jsx->local_streamhost_fd = -1; |
| 8316 | 698 | |
|
24038
5500af38bb9f
Use non-blocking io for direct xmpp file transfers
Daniel Atallah <datallah@pidgin.im>
parents:
23912
diff
changeset
|
699 | flags = fcntl(acceptfd, F_GETFL); |
|
5500af38bb9f
Use non-blocking io for direct xmpp file transfers
Daniel Atallah <datallah@pidgin.im>
parents:
23912
diff
changeset
|
700 | 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
|
701 | #ifndef _WIN32 |
|
5500af38bb9f
Use non-blocking io for direct xmpp file transfers
Daniel Atallah <datallah@pidgin.im>
parents:
23912
diff
changeset
|
702 | 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
|
703 | #endif |
|
5500af38bb9f
Use non-blocking io for direct xmpp file transfers
Daniel Atallah <datallah@pidgin.im>
parents:
23912
diff
changeset
|
704 | |
| 15884 | 705 | 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
|
706 | 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
|
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 | |
|
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
|
709 | 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
|
710 | 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
|
711 | 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
|
712 | 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
|
713 | { |
|
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
|
714 | PurpleXfer *xfer = data; |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
715 | 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
|
716 | 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
|
717 | 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
|
718 | 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
|
719 | |
|
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 | /* 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
|
721 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
722 | /* 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
|
723 | if (!g_list_find(js->file_transfers, xfer)) { |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
724 | 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
|
725 | return; |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
726 | } |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
727 | |
|
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
|
728 | /* 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
|
729 | 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
|
730 | 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
|
731 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
732 | jsx = xfer->data; |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
733 | |
|
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
|
734 | 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
|
735 | 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
|
736 | "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
|
737 | /* 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
|
738 | 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
|
739 | "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
|
740 | 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
|
741 | 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
|
742 | 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
|
743 | /* 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
|
744 | 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
|
745 | 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
|
746 | 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
|
747 | && !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
|
748 | 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
|
749 | } 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
|
750 | 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
|
751 | 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
|
752 | } |
|
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
|
753 | /* 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
|
754 | 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
|
755 | } 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
|
756 | 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
|
757 | } |
|
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
|
758 | return; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
759 | } |
|
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
|
760 | |
|
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
|
761 | 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
|
762 | 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
|
763 | |
|
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 | 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
|
765 | 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
|
766 | |
|
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 | 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
|
768 | 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
|
769 | |
|
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 | 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
|
771 | 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
|
772 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
773 | 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
|
774 | 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
|
775 | |
|
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
|
776 | 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
|
777 | { |
|
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 | 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
|
779 | jsx->js->user->domain, jsx->js->user->resource); |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
780 | 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
|
781 | 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
|
782 | purple_xfer_start(xfer, xfer->fd, NULL, -1); |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
783 | } else { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
784 | /* 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
|
785 | 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
|
786 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
787 | "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
|
788 | 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
|
789 | 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
|
790 | } 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
|
791 | 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
|
792 | 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
|
793 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
794 | /* 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
|
795 | } 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
|
796 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
797 | "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
|
798 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
799 | } |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
800 | } |
|
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
|
801 | 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
|
802 | 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
|
803 | } |
|
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
|
804 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
805 | /* 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
|
806 | if (xfer->watcher > 0) { |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
807 | purple_input_remove(xfer->watcher); |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
808 | xfer->watcher = 0; |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
809 | } |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
810 | if (jsx->local_streamhost_fd >= 0) { |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
811 | close(jsx->local_streamhost_fd); |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
812 | jsx->local_streamhost_fd = -1; |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
813 | } |
|
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
|
814 | |
|
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 | 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
|
816 | 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
|
817 | 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
|
818 | |
|
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 | 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
|
820 | |
|
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
|
821 | jabber_si_bytestreams_attempt_connect(xfer); |
| 8316 | 822 | } |
| 823 | ||
| 824 | static void | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
825 | jabber_si_xfer_bytestreams_listen_cb(int sock, gpointer data) |
| 8312 | 826 | { |
| 15884 | 827 | PurpleXfer *xfer = data; |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
828 | JabberSIXfer *jsx; |
| 8312 | 829 | JabberIq *iq; |
| 830 | xmlnode *query, *streamhost; | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
831 | 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
|
832 | 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
|
833 | JabberBytestreamsStreamhost *sh, *sh2; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
834 | int streamhost_count = 0; |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
835 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
836 | jsx = xfer->data; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
837 | jsx->listen_data = NULL; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
838 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
839 | /* 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
|
840 | * (it seems like it shouldn't be possible */ |
| 15884 | 841 | if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL) { |
| 842 | purple_xfer_unref(xfer); | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
843 | return; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
844 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
845 | |
| 15884 | 846 | purple_xfer_unref(xfer); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
847 | |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
848 | iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS); |
| 8312 | 849 | xmlnode_set_attrib(iq->node, "to", xfer->who); |
| 850 | query = xmlnode_get_child(iq->node, "query"); | |
| 851 | ||
| 852 | xmlnode_set_attrib(query, "sid", jsx->stream_id); | |
| 853 | ||
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
854 | /* If we successfully started listening locally */ |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
855 | if (sock >= 0) { |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
856 | gchar *jid; |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
857 | 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
|
858 | 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
|
859 | const char *public_ip; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
860 | gboolean has_public_ip = FALSE; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
861 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
862 | jsx->local_streamhost_fd = sock; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
863 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
864 | 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
|
865 | 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
|
866 | 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
|
867 | 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
|
868 | |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
869 | 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
|
870 | |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
871 | /* 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
|
872 | while (local_ips) { |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
873 | gchar *local_ip = local_ips->data; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
874 | streamhost_count++; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
875 | streamhost = xmlnode_new_child(query, "streamhost"); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
876 | xmlnode_set_attrib(streamhost, "jid", jid); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
877 | xmlnode_set_attrib(streamhost, "host", local_ip); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
878 | 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
|
879 | 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
|
880 | has_public_ip = TRUE; |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
881 | g_free(local_ip); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
882 | 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
|
883 | } |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
884 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
885 | /* 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
|
886 | 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
|
887 | streamhost_count++; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
888 | streamhost = xmlnode_new_child(query, "streamhost"); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
889 | xmlnode_set_attrib(streamhost, "jid", jid); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
890 | xmlnode_set_attrib(streamhost, "host", public_ip); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
891 | xmlnode_set_attrib(streamhost, "port", port); |
|
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 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
894 | g_free(jid); |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
895 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
896 | /* The listener for the local proxy */ |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
897 | 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
|
898 | 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
|
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 | |
|
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 | 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
|
902 | 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
|
903 | |
|
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 | /* 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
|
905 | |
|
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
|
906 | 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
|
907 | 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
|
908 | |
|
24712
134bd2024c88
Add missing newline in debug message.
Daniel Atallah <datallah@pidgin.im>
parents:
24038
diff
changeset
|
909 | 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
|
910 | 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
|
911 | 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
|
912 | 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
|
913 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
914 | 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
|
915 | 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
|
916 | 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
|
917 | 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
|
918 | 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
|
919 | 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
|
920 | |
|
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 = 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
|
922 | 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
|
923 | sh2->host = g_strdup(sh->host); |
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
924 | /*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
|
925 | 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
|
926 | |
|
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 | 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
|
928 | } |
|
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
|
929 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
930 | /* 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
|
931 | if (streamhost_count == 0) { |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
932 | 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
|
933 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
934 | /* if available, revert to IBB */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
935 | 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
|
936 | purple_debug_info("jabber", |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
937 | "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
|
938 | 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
|
939 | /* 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
|
940 | 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
|
941 | } 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
|
942 | 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
|
943 | 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
|
944 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
945 | /* 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
|
946 | 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
|
947 | } 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
|
948 | /* 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
|
949 | 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
|
950 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
951 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
952 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
953 | return; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
954 | } |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
955 | |
|
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
|
956 | 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
|
957 | |
| 8312 | 958 | jabber_iq_send(iq); |
|
12909
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 | |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
962 | static void |
| 15884 | 963 | jabber_si_xfer_bytestreams_send_init(PurpleXfer *xfer) |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
964 | { |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
965 | JabberSIXfer *jsx; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
966 | |
| 15884 | 967 | purple_xfer_ref(xfer); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
968 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
969 | jsx = xfer->data; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
970 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
971 | /* 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
|
972 | * (to prevent revealing IP address, etc.) */ |
| 15884 | 973 | 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
|
974 | jabber_si_xfer_bytestreams_listen_cb, xfer); |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
975 | if (jsx->listen_data == NULL) { |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
976 | /* 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
|
977 | jabber_si_xfer_bytestreams_listen_cb(-1, xfer); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
978 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
979 | |
| 8312 | 980 | } |
| 981 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
982 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
983 | 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
|
984 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
985 | 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
|
986 | 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
|
987 | PurpleConnection *gc = js->gc; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
988 | 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
|
989 | |
|
27525
579b9d64b364
A semi-random collection of English spelling and grammatical changes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27332
diff
changeset
|
990 | 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
|
991 | 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
|
992 | 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
|
993 | _("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
|
994 | 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
|
995 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
996 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
997 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
998 | 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
|
999 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1000 | 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
|
1001 | 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
|
1002 | PurpleConnection *gc = js->gc; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1003 | 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
|
1004 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1005 | 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
|
1006 | 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
|
1007 | 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
|
1008 | 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
|
1009 | 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
|
1010 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1011 | purple_xfer_set_completed(xfer, TRUE); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1012 | purple_xfer_end(xfer); |
|
24372
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 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1016 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1017 | 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
|
1018 | gsize size) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1019 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1020 | 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
|
1021 | 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
|
1022 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1023 | 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
|
1024 | 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
|
1025 | size); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1026 | 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
|
1027 | 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
|
1028 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1029 | /* 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
|
1030 | 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
|
1031 | purple_debug_error("jabber", |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26016
diff
changeset
|
1032 | "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
|
1033 | 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
|
1034 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1035 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1036 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1037 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1038 | static gssize |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1039 | 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
|
1040 | { |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1041 | 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
|
1042 | guchar *buffer; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1043 | gsize size; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1044 | gsize tmp; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1045 | |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1046 | 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
|
1047 | *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
|
1048 | 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
|
1049 | 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
|
1050 | 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 | 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
|
1052 | } |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1053 | |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1054 | return size; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1055 | } |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1056 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1057 | 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
|
1058 | 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
|
1059 | xmlnode *open) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1060 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1061 | 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
|
1062 | 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
|
1063 | if (xfer) { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1064 | 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
|
1065 | 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
|
1066 | 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
|
1067 | |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1068 | jabber_si_bytestreams_ibb_timeout_remove(jsx); |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1069 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1070 | if (sess) { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1071 | /* setup callbacks here...*/ |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1072 | 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
|
1073 | 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
|
1074 | 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
|
1075 | 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
|
1076 | 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
|
1077 | 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
|
1078 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1079 | 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
|
1080 | /* 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
|
1081 | 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
|
1082 | (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
|
1083 | 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
|
1084 | 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
|
1085 | |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1086 | /* 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
|
1087 | 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
|
1088 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1089 | /* 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
|
1090 | 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
|
1091 | return TRUE; |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1092 | } else { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1093 | /* 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
|
1094 | 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
|
1095 | 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
|
1096 | return FALSE; |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1097 | } |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1098 | } else { |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1099 | /* 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
|
1100 | 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
|
1101 | "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
|
1102 | return FALSE; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1103 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1104 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1105 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1106 | static gssize |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1107 | 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
|
1108 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1109 | 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
|
1110 | 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
|
1111 | 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
|
1112 | 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
|
1113 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1114 | 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
|
1115 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1116 | return packet_size; |
|
24372
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 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1119 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1120 | 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
|
1121 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1122 | 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
|
1123 | 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
|
1124 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1125 | if (remaining == 0) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1126 | /* close the session */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1127 | jabber_ibb_session_close(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1128 | 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
|
1129 | purple_xfer_end(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1130 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1131 | /* 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
|
1132 | 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
|
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 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1136 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1137 | 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
|
1138 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1139 | 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
|
1140 | 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
|
1141 | PurpleConnection *gc = js->gc; |
|
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26016
diff
changeset
|
1142 | 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
|
1143 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1144 | 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
|
1145 | 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
|
1146 | 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
|
1147 | } else { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1148 | /* error */ |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1149 | 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
|
1150 | 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
|
1151 | _("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
|
1152 | 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
|
1153 | } |
|
24372
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 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1156 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1157 | 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
|
1158 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1159 | 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
|
1160 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1161 | 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
|
1162 | 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
|
1163 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1164 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1165 | /* should set callbacks here... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1166 | 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
|
1167 | 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
|
1168 | 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
|
1169 | 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
|
1170 | 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
|
1171 | 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
|
1172 | 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
|
1173 | 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
|
1174 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1175 | 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
|
1176 | |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1177 | 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
|
1178 | 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
|
1179 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1180 | /* open the IBB session */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1181 | 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
|
1182 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1183 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1184 | /* 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
|
1185 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1186 | "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
|
1187 | 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
|
1188 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1189 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1190 | |
|
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
|
1191 | 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
|
1192 | 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
|
1193 | xmlnode *packet, gpointer data) |
| 8312 | 1194 | { |
| 15884 | 1195 | PurpleXfer *xfer = data; |
| 8312 | 1196 | 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
|
1197 | gboolean found_method = FALSE; |
| 8312 | 1198 | |
| 1199 | if(!(si = xmlnode_get_child_with_namespace(packet, "si", "http://jabber.org/protocol/si"))) { | |
| 15884 | 1200 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1201 | return; |
| 1202 | } | |
| 1203 | ||
| 1204 | if(!(feature = xmlnode_get_child_with_namespace(si, "feature", "http://jabber.org/protocol/feature-neg"))) { | |
| 15884 | 1205 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1206 | return; |
| 1207 | } | |
| 1208 | ||
| 1209 | if(!(x = xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data"))) { | |
| 15884 | 1210 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1211 | return; |
| 1212 | } | |
| 1213 | ||
| 1214 | for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { | |
| 1215 | 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
|
1216 | 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
|
1217 | |
| 8312 | 1218 | if(var && !strcmp(var, "stream-method")) { |
| 1219 | if((value = xmlnode_get_child(field, "value"))) { | |
| 1220 | 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
|
1221 | if(val && !strcmp(val, NS_BYTESTREAMS)) { |
| 8312 | 1222 | 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
|
1223 | 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
|
1224 | 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
|
1225 | } 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
|
1226 | 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
|
1227 | if (!found_method) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1228 | /* 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
|
1229 | start IBB right away... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1230 | 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
|
1231 | found_method = TRUE; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1232 | } |
| 8312 | 1233 | } |
| 1234 | g_free(val); | |
| 1235 | } | |
| 1236 | } | |
| 1237 | } | |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1238 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1239 | if (!found_method) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1240 | purple_xfer_cancel_remote(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1241 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1242 | |
| 8312 | 1243 | } |
| 1244 | ||
| 15884 | 1245 | static void jabber_si_xfer_send_request(PurpleXfer *xfer) |
| 8312 | 1246 | { |
| 1247 | JabberSIXfer *jsx = xfer->data; | |
| 1248 | JabberIq *iq; | |
| 1249 | xmlnode *si, *file, *feature, *x, *field, *option, *value; | |
| 1250 | char buf[32]; | |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1251 | #if ENABLE_FT_THUMBNAILS |
|
30126
f09ecb81212c
Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30119
diff
changeset
|
1252 | gconstpointer thumb; |
|
f09ecb81212c
Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30119
diff
changeset
|
1253 | gsize thumb_size; |
| 8312 | 1254 | |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1255 | purple_xfer_prepare_thumbnail(xfer, "jpeg,png"); |
|
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1256 | #endif |
| 8312 | 1257 | xfer->filename = g_path_get_basename(xfer->local_filename); |
|
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
|
1258 | |
| 8312 | 1259 | iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); |
| 1260 | xmlnode_set_attrib(iq->node, "to", xfer->who); | |
| 1261 | si = xmlnode_new_child(iq->node, "si"); | |
| 13808 | 1262 | xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 8312 | 1263 | jsx->stream_id = jabber_get_next_id(jsx->js); |
| 1264 | xmlnode_set_attrib(si, "id", jsx->stream_id); | |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1265 | xmlnode_set_attrib(si, "profile", NS_SI_FILE_TRANSFER); |
| 8312 | 1266 | |
| 1267 | file = xmlnode_new_child(si, "file"); | |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1268 | xmlnode_set_namespace(file, NS_SI_FILE_TRANSFER); |
| 8312 | 1269 | xmlnode_set_attrib(file, "name", xfer->filename); |
|
11656
56f5e598dc6c
[gaim-migrate @ 13940]
Richard Laager <rlaager@pidgin.im>
parents:
11183
diff
changeset
|
1270 | g_snprintf(buf, sizeof(buf), "%" G_GSIZE_FORMAT, xfer->size); |
| 8312 | 1271 | xmlnode_set_attrib(file, "size", buf); |
| 1272 | /* maybe later we'll do hash and date attribs */ | |
| 1273 | ||
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1274 | #if ENABLE_FT_THUMBNAILS |
|
27424
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1275 | /* add thumbnail, if appropriate */ |
|
30126
f09ecb81212c
Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30119
diff
changeset
|
1276 | if ((thumb = purple_xfer_get_thumbnail(xfer, &thumb_size))) { |
|
30113
f60cbf3b3ca9
Allow PRPLs to specify the image formats acceptable for thumbnails (in
Marcus Lundblad <malu@pidgin.im>
parents:
29778
diff
changeset
|
1277 | 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
|
1278 | JabberData *thumbnail_data = |
|
30126
f09ecb81212c
Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30119
diff
changeset
|
1279 | jabber_data_create_from_data(thumb, thumb_size, |
|
f09ecb81212c
Rename purple_xfer_get_thumbnail_data/size to be more D-Bus friendly.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30119
diff
changeset
|
1280 | mimetype, TRUE, jsx->js); |
|
27424
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1281 | 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
|
1282 | 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
|
1283 | 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
|
1284 | 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
|
1285 | 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
|
1286 | /* cache data */ |
|
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1287 | 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
|
1288 | } |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1289 | #endif |
|
27424
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1290 | |
| 8312 | 1291 | 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
|
1292 | xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); |
| 8312 | 1293 | x = xmlnode_new_child(feature, "x"); |
| 13808 | 1294 | xmlnode_set_namespace(x, "jabber:x:data"); |
| 8312 | 1295 | xmlnode_set_attrib(x, "type", "form"); |
| 1296 | field = xmlnode_new_child(x, "field"); | |
| 1297 | xmlnode_set_attrib(field, "var", "stream-method"); | |
| 1298 | 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
|
1299 | /* 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
|
1300 | behind troublesome firewalls */ |
| 8312 | 1301 | option = xmlnode_new_child(field, "option"); |
| 1302 | 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
|
1303 | xmlnode_insert_data(value, NS_BYTESTREAMS, -1); |
| 8312 | 1304 | option = xmlnode_new_child(field, "option"); |
| 1305 | 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
|
1306 | xmlnode_insert_data(value, NS_IBB, -1); |
| 8312 | 1307 | |
| 1308 | jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer); | |
| 1309 | ||
|
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
|
1310 | /* 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
|
1311 | 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
|
1312 | 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
|
1313 | |
| 8312 | 1314 | jabber_iq_send(iq); |
| 1315 | } | |
| 1316 | ||
| 15884 | 1317 | static void jabber_si_xfer_free(PurpleXfer *xfer) |
| 8312 | 1318 | { |
| 8316 | 1319 | 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
|
1320 | |
|
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
|
1321 | 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
|
1322 | 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
|
1323 | |
|
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
|
1324 | 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
|
1325 | |
|
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
|
1326 | 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
|
1327 | 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
|
1328 | 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
|
1329 | 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
|
1330 | 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
|
1331 | 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
|
1332 | 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
|
1333 | 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
|
1334 | 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
|
1335 | 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
|
1336 | 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
|
1337 | 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
|
1338 | } |
|
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
|
1339 | 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
|
1340 | 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
|
1341 | 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
|
1342 | 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
|
1343 | |
|
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
|
1344 | 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
|
1345 | 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
|
1346 | 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
|
1347 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1348 | |
|
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
|
1349 | 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
|
1350 | 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
|
1351 | "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
|
1352 | 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
|
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 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1355 | 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
|
1356 | 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
|
1357 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1358 | |
|
28077
c2b493e058f1
Don't use pointers (even opaquely) once they're freed. Closes #9822.
Paul Aurich <darkrain42@pidgin.im>
parents:
27817
diff
changeset
|
1359 | 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
|
1360 | |
|
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
|
1361 | 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
|
1362 | 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
|
1363 | /* 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
|
1364 | 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
|
1365 | 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
|
1366 | 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
|
1367 | } |
| 8316 | 1368 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1369 | |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1370 | /* |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1371 | * 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
|
1372 | * (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
|
1373 | * purple_xfer_request_denied. |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1374 | */ |
| 15884 | 1375 | static void jabber_si_xfer_cancel_send(PurpleXfer *xfer) |
| 8316 | 1376 | { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1377 | 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
|
1378 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1379 | /* 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
|
1380 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1381 | 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
|
1382 | } |
| 8316 | 1383 | jabber_si_xfer_free(xfer); |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1384 | purple_debug_info("jabber", "in jabber_si_xfer_cancel_send\n"); |
| 8312 | 1385 | } |
| 1386 | ||
| 1387 | ||
| 15884 | 1388 | static void jabber_si_xfer_request_denied(PurpleXfer *xfer) |
| 13146 | 1389 | { |
|
27817
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1390 | 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
|
1391 | JabberStream *js = jsx->js; |
|
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 | /* |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1394 | * 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
|
1395 | * might be warranted. |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1396 | */ |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1397 | 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
|
1398 | JabberIq *iq; |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1399 | xmlnode *error, *child; |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1400 | 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
|
1401 | 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
|
1402 | 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
|
1403 | |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1404 | 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
|
1405 | 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
|
1406 | 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
|
1407 | 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
|
1408 | 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
|
1409 | 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
|
1410 | 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
|
1411 | |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1412 | jabber_iq_send(iq); |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1413 | } |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1414 | |
| 13146 | 1415 | jabber_si_xfer_free(xfer); |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1416 | purple_debug_info("jabber", "in jabber_si_xfer_request_denied\n"); |
| 13146 | 1417 | } |
| 1418 | ||
| 1419 | ||
| 15884 | 1420 | static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer) |
| 8312 | 1421 | { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1422 | JabberSIXfer *jsx = (JabberSIXfer *) xfer->data; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1423 | /* 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
|
1424 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1425 | 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
|
1426 | } |
| 8316 | 1427 | jabber_si_xfer_free(xfer); |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1428 | purple_debug_info("jabber", "in jabber_si_xfer_cancel_recv\n"); |
| 8312 | 1429 | } |
| 1430 | ||
| 1431 | ||
| 15884 | 1432 | static void jabber_si_xfer_end(PurpleXfer *xfer) |
| 8316 | 1433 | { |
| 1434 | jabber_si_xfer_free(xfer); | |
| 1435 | } | |
| 1436 | ||
| 1437 | ||
| 8312 | 1438 | static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who, |
| 1439 | JabberCapabilities capabilities, gpointer data) | |
| 1440 | { | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1441 | PurpleXfer *xfer = (PurpleXfer *) data; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1442 | 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
|
1443 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1444 | 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
|
1445 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1446 | "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
|
1447 | 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
|
1448 | } |
| 8312 | 1449 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1450 | if (capabilities & JABBER_CAP_SI_FILE_XFER) { |
| 8312 | 1451 | jabber_si_xfer_send_request(xfer); |
| 1452 | } else { | |
| 1453 | char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); | |
| 15884 | 1454 | purple_notify_error(js->gc, _("File Send Failed"), |
| 8312 | 1455 | _("File Send Failed"), msg); |
| 1456 | g_free(msg); | |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1457 | purple_xfer_cancel_local(xfer); |
| 8312 | 1458 | } |
| 1459 | } | |
| 1460 | ||
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1461 | 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
|
1462 | { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1463 | 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
|
1464 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1465 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1466 | 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
|
1467 | { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1468 | 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
|
1469 | 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
|
1470 | char *who; |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1471 | JabberBuddy *jb; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1472 | JabberBuddyResource *jbr = NULL; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1473 | |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1474 | 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
|
1475 | if (jb) { |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1476 | 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
|
1477 | } |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1478 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1479 | 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
|
1480 | 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
|
1481 | 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
|
1482 | xfer->who = who; |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1483 | |
|
29118
8d6805679729
Use the jabber_resource_know_capabilities function to determine if a buddy
Marcus Lundblad <malu@pidgin.im>
parents:
29041
diff
changeset
|
1484 | 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
|
1485 | char *msg; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1486 | |
|
28979
191942cc7747
jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents:
28828
diff
changeset
|
1487 | 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
|
1488 | jsx->stream_method |= STREAM_METHOD_IBB; |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1489 | if (jabber_resource_has_capability(jbr, NS_SI_FILE_TRANSFER)) { |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1490 | 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
|
1491 | return; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1492 | } |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1493 | |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1494 | 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
|
1495 | 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
|
1496 | _("File Send Failed"), msg); |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1497 | g_free(msg); |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1498 | 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
|
1499 | } else { |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1500 | 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
|
1501 | 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
|
1502 | } |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1503 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1504 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1505 | 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
|
1506 | { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1507 | 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
|
1508 | 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
|
1509 | 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
|
1510 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1511 | 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
|
1512 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1513 | 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
|
1514 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1515 | |
| 15884 | 1516 | static void jabber_si_xfer_init(PurpleXfer *xfer) |
| 8262 | 1517 | { |
| 1518 | JabberSIXfer *jsx = xfer->data; | |
| 1519 | JabberIq *iq; | |
| 15884 | 1520 | if(purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) { |
| 8312 | 1521 | JabberBuddy *jb; |
| 1522 | 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
|
1523 | char *resource; |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1524 | GList *resources = NULL; |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1525 | |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1526 | 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
|
1527 | /* 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
|
1528 | * 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
|
1529 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1530 | 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
|
1531 | 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
|
1532 | return; |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1533 | } |
| 8312 | 1534 | |
| 1535 | 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
|
1536 | |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1537 | if (jb) { |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1538 | GList *l; |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1539 | |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1540 | for (l = jb->resources ; l ; l = g_list_next(l)) { |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1541 | jbr = l->data; |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1542 | |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1543 | if (!jabber_resource_know_capabilities(jbr) || |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1544 | (jabber_resource_has_capability(jbr, NS_SI_FILE_TRANSFER) |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1545 | && (jabber_resource_has_capability(jbr, NS_BYTESTREAMS) |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1546 | || jabber_resource_has_capability(jbr, NS_IBB)))) { |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1547 | resources = g_list_append(resources, jbr); |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1548 | } |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1549 | } |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1550 | } |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1551 | |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1552 | if (!resources) { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1553 | /* 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
|
1554 | * 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
|
1555 | * 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
|
1556 | char *msg; |
| 8262 | 1557 | |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1558 | if(!jb) { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1559 | 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
|
1560 | } 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
|
1561 | 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
|
1562 | } else { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1563 | 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
|
1564 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1565 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1566 | 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
|
1567 | g_free(msg); |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1568 | } else if (g_list_length(resources) == 1) { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1569 | /* 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
|
1570 | * so no need to ask who to send to */ |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1571 | jbr = resources->data; |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1572 | do_transfer_send(xfer, jbr->name); |
| 8312 | 1573 | } else { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1574 | /* 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
|
1575 | 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
|
1576 | 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
|
1577 | 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
|
1578 | 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
|
1579 | PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL); |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1580 | |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1581 | for(l = resources; l; l = l->next) { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1582 | 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
|
1583 | 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
|
1584 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1585 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1586 | 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
|
1587 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1588 | 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
|
1589 | |
|
21175
c6d76b49c206
disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents:
21174
diff
changeset
|
1590 | 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
|
1591 | _("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
|
1592 | 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
|
1593 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1594 | g_free(msg); |
| 8312 | 1595 | } |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1596 | |
|
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1597 | g_list_free(resources); |
| 8312 | 1598 | } else { |
| 1599 | xmlnode *si, *feature, *x, *field, *value; | |
| 8262 | 1600 | |
| 8312 | 1601 | iq = jabber_iq_new(jsx->js, JABBER_IQ_RESULT); |
| 1602 | xmlnode_set_attrib(iq->node, "to", xfer->who); | |
| 1603 | if(jsx->iq_id) | |
| 1604 | 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
|
1605 | else |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1606 | purple_debug_error("jabber", "Sending SI result with new IQ id.\n"); |
| 8312 | 1607 | |
| 10940 | 1608 | jsx->accepted = TRUE; |
| 1609 | ||
| 8312 | 1610 | si = xmlnode_new_child(iq->node, "si"); |
| 13808 | 1611 | xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 8312 | 1612 | |
| 1613 | feature = xmlnode_new_child(si, "feature"); | |
| 13808 | 1614 | xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); |
| 8262 | 1615 | |
| 8312 | 1616 | x = xmlnode_new_child(feature, "x"); |
| 13808 | 1617 | xmlnode_set_namespace(x, "jabber:x:data"); |
| 8343 | 1618 | xmlnode_set_attrib(x, "type", "submit"); |
| 8312 | 1619 | field = xmlnode_new_child(x, "field"); |
| 1620 | 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
|
1621 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1622 | /* 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
|
1623 | 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
|
1624 | 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
|
1625 | /* 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
|
1626 | 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
|
1627 | 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
|
1628 | 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
|
1629 | 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
|
1630 | } 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
|
1631 | 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
|
1632 | 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
|
1633 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1634 | |
| 8312 | 1635 | jabber_iq_send(iq); |
| 1636 | } | |
| 8262 | 1637 | } |
| 1638 | ||
| 15884 | 1639 | PurpleXfer *jabber_si_new_xfer(PurpleConnection *gc, const char *who) |
| 8312 | 1640 | { |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1641 | JabberStream *js; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1642 | |
| 15884 | 1643 | PurpleXfer *xfer; |
| 8312 | 1644 | JabberSIXfer *jsx; |
| 1645 | ||
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1646 | js = gc->proto_data; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1647 | |
| 15884 | 1648 | xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1649 | if (xfer) |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1650 | { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1651 | xfer->data = jsx = g_new0(JabberSIXfer, 1); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1652 | jsx->js = js; |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
1653 | 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
|
1654 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1655 | jsx->ibb_session = NULL; |
| 8262 | 1656 | |
| 15884 | 1657 | purple_xfer_set_init_fnc(xfer, jabber_si_xfer_init); |
| 1658 | purple_xfer_set_cancel_send_fnc(xfer, jabber_si_xfer_cancel_send); | |
| 1659 | purple_xfer_set_end_fnc(xfer, jabber_si_xfer_end); | |
| 8312 | 1660 | |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1661 | js->file_transfers = g_list_append(js->file_transfers, xfer); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
1662 | } |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1663 | |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1664 | return xfer; |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1665 | } |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1666 | |
| 15884 | 1667 | 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
|
1668 | { |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1669 | JabberStream *js; |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1670 | |
| 15884 | 1671 | PurpleXfer *xfer; |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1672 | |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1673 | js = gc->proto_data; |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1674 | |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1675 | xfer = jabber_si_new_xfer(gc, who); |
| 8312 | 1676 | |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9030
diff
changeset
|
1677 | if (file) |
| 15884 | 1678 | purple_xfer_request_accepted(xfer, file); |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9030
diff
changeset
|
1679 | else |
| 15884 | 1680 | purple_xfer_request(xfer); |
| 8262 | 1681 | } |
| 1682 | ||
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1683 | #if ENABLE_FT_THUMBNAILS |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1684 | static void |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1685 | 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
|
1686 | { |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1687 | 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
|
1688 | |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1689 | if (data) { |
|
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1690 | 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
|
1691 | 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
|
1692 | /* 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
|
1693 | 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
|
1694 | } |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1695 | |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1696 | purple_xfer_request(xfer); |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1697 | } |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1698 | #endif |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1699 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
1700 | 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
|
1701 | const char *id, xmlnode *si) |
| 8262 | 1702 | { |
| 1703 | JabberSIXfer *jsx; | |
| 15884 | 1704 | PurpleXfer *xfer; |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1705 | 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
|
1706 | const char *stream_id, *filename, *filesize_c, *profile; |
| 8262 | 1707 | size_t filesize = 0; |
| 1708 | ||
| 1709 | if(!(profile = xmlnode_get_attrib(si, "profile")) || | |
|
30474
3f649d2041db
jabber: Don't show resources that we know for sure isn't supporting the file
Marcus Lundblad <malu@pidgin.im>
parents:
30422
diff
changeset
|
1710 | strcmp(profile, NS_SI_FILE_TRANSFER)) |
| 8262 | 1711 | return; |
| 1712 | ||
| 1713 | if(!(stream_id = xmlnode_get_attrib(si, "id"))) | |
| 1714 | return; | |
| 1715 | ||
| 1716 | if(!(file = xmlnode_get_child(si, "file"))) | |
| 1717 | return; | |
| 1718 | ||
| 1719 | if(!(filename = xmlnode_get_attrib(file, "name"))) | |
| 1720 | return; | |
| 1721 | ||
| 1722 | if((filesize_c = xmlnode_get_attrib(file, "size"))) | |
| 1723 | filesize = atoi(filesize_c); | |
| 1724 | ||
| 1725 | if(!(feature = xmlnode_get_child(si, "feature"))) | |
| 1726 | return; | |
| 1727 | ||
| 1728 | if(!(x = xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data"))) | |
| 1729 | return; | |
| 1730 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
1731 | if(!from) |
| 10939 | 1732 | return; |
| 1733 | ||
| 1734 | /* if they've already sent us this file transfer with the same damn id | |
| 1735 | * then we're gonna ignore it, until I think of something better to do | |
| 1736 | * with it */ | |
|
30626
bec413ce77c7
Fix some "Dead nested assignment"s and then kill off some useless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30474
diff
changeset
|
1737 | if(jabber_si_xfer_find(js, stream_id, from) != NULL) |
| 10939 | 1738 | return; |
| 1739 | ||
| 8262 | 1740 | jsx = g_new0(JabberSIXfer, 1); |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
1741 | 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
|
1742 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1743 | jsx->ibb_session = NULL; |
| 8262 | 1744 | |
| 1745 | for(field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { | |
| 1746 | const char *var = xmlnode_get_attrib(field, "var"); | |
| 1747 | if(var && !strcmp(var, "stream-method")) { | |
| 1748 | for(option = xmlnode_get_child(field, "option"); option; | |
| 1749 | option = xmlnode_get_next_twin(option)) { | |
| 1750 | if((value = xmlnode_get_child(option, "value"))) { | |
| 1751 | char *val; | |
| 1752 | 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
|
1753 | if(!strcmp(val, NS_BYTESTREAMS)) { |
| 8262 | 1754 | 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
|
1755 | } else if(!strcmp(val, NS_IBB)) { |
| 8262 | 1756 | jsx->stream_method |= STREAM_METHOD_IBB; |
| 1757 | } | |
| 1758 | g_free(val); | |
| 1759 | } | |
| 1760 | } | |
| 1761 | } | |
| 1762 | } | |
| 1763 | } | |
| 1764 | ||
| 1765 | if(jsx->stream_method == STREAM_METHOD_UNKNOWN) { | |
| 1766 | g_free(jsx); | |
| 1767 | return; | |
| 1768 | } | |
| 1769 | ||
| 1770 | jsx->js = js; | |
| 1771 | 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
|
1772 | jsx->iq_id = g_strdup(id); |
| 8262 | 1773 | |
| 15884 | 1774 | 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
|
1775 | 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
|
1776 | |
|
aa5fe0a2ce4a
purple_xfer_new only returns NULL if an assertion fails, so we should do
Mark Doliner <markdoliner@pidgin.im>
parents:
26066
diff
changeset
|
1777 | xfer->data = jsx; |
| 8262 | 1778 | |
|
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
|
1779 | 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
|
1780 | 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
|
1781 | purple_xfer_set_size(xfer, filesize); |
| 8262 | 1782 | |
|
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
|
1783 | 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
|
1784 | 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
|
1785 | 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
|
1786 | 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
|
1787 | |
|
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
|
1788 | js->file_transfers = g_list_append(js->file_transfers, xfer); |
| 8262 | 1789 | |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1790 | #if ENABLE_FT_THUMBNAILS |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1791 | /* 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
|
1792 | 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
|
1793 | NS_THUMBS))) { |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1794 | 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
|
1795 | if (cid) { |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1796 | 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
|
1797 | 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
|
1798 | } else { |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1799 | purple_xfer_request(xfer); |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1800 | } |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1801 | } else { |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1802 | purple_xfer_request(xfer); |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1803 | } |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1804 | #else |
|
30144
c93730f7c3ea
Silence a warning.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30132
diff
changeset
|
1805 | thumbnail = NULL; /* Silence warning */ |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1806 | purple_xfer_request(xfer); |
|
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1807 | #endif |
| 8262 | 1808 | } |
| 1809 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1810 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1811 | jabber_si_init(void) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1812 | { |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27140
diff
changeset
|
1813 | 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
|
1814 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1815 | 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
|
1816 | } |
| 7395 | 1817 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1818 | void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1819 | jabber_si_uninit(void) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1820 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1821 | 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
|
1822 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1823 |