Tue, 21 Mar 2023 01:59:19 -0500
Use g_clear_handle_id everywhere
Testing Done:
Compiled and ran tests in valgrind.
Reviewed at https://reviews.imfreedom.org/r/2374/
| 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 | |
|
40441
f23c7e772667
Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents:
40439
diff
changeset
|
25 | #include <config.h> |
|
40439
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
26 | |
|
40462
24ed25d87550
Fix some issues on macos that resulted from the internal.h cleanup
Gary Kramlich <grim@reaperworld.com>
parents:
40443
diff
changeset
|
27 | #include <errno.h> |
|
40439
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
28 | #include <sys/types.h> |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
29 | |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
30 | #include <glib/gi18n-lib.h> |
|
e9838d634d5e
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents:
40358
diff
changeset
|
31 | |
|
40358
e6fe6fc1f516
move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents:
40158
diff
changeset
|
32 | #include <purple.h> |
| 7395 | 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 | ||
|
40155
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
42 | #define STREAMHOST_CONNECT_TIMEOUT 5 |
|
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 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
45 | struct _JabberSIXfer { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
46 | PurpleXfer parent; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
47 | |
| 8262 | 48 | JabberStream *js; |
| 49 | ||
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
50 | GCancellable *cancellable; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
51 | GSocketClient *client; |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
52 | GSocketService *service; |
|
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
|
53 | guint connect_timeout; |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
54 | |
| 10940 | 55 | gboolean accepted; |
| 56 | ||
| 8262 | 57 | char *stream_id; |
| 58 | char *iq_id; | |
| 59 | ||
| 60 | enum { | |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
61 | STREAM_METHOD_UNKNOWN = 0, |
| 8262 | 62 | 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
|
63 | STREAM_METHOD_IBB = 2 << 2, |
|
35977
9b7b48f446f4
Backport warning fixes from default
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
31740
diff
changeset
|
64 | STREAM_METHOD_UNSUPPORTED = 2 << 30 |
| 8262 | 65 | } stream_method; |
| 66 | ||
| 67 | GList *streamhosts; | |
| 8316 | 68 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
69 | gchar *socks_buf; |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
70 | GSocketConnection *local_streamhost_conn; |
|
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; |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
74 | PurpleCircularBuffer *ibb_buffer; |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
75 | }; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
76 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
77 | G_DEFINE_DYNAMIC_TYPE(JabberSIXfer, jabber_si_xfer, PURPLE_TYPE_XFER); |
| 8262 | 78 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
79 | /* some forward declarations */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
80 | 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
|
81 | |
| 15884 | 82 | static PurpleXfer* |
| 8262 | 83 | jabber_si_xfer_find(JabberStream *js, const char *sid, const char *from) |
| 7395 | 84 | { |
| 85 | GList *xfers; | |
| 86 | ||
| 8262 | 87 | if(!sid || !from) |
| 7395 | 88 | return NULL; |
| 89 | ||
| 90 | for(xfers = js->file_transfers; xfers; xfers = xfers->next) { | |
| 15884 | 91 | PurpleXfer *xfer = xfers->data; |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
92 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
93 | if(jsx->stream_id && purple_xfer_get_remote_user(xfer) && |
| 38358 | 94 | purple_strequal(jsx->stream_id, sid) && purple_strequal(purple_xfer_get_remote_user(xfer), from)) |
| 7395 | 95 | return xfer; |
| 96 | } | |
| 97 | ||
| 98 | return NULL; | |
| 99 | } | |
| 100 | ||
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
101 | |
| 8262 | 102 | |
| 15884 | 103 | static void jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer); |
| 8262 | 104 | |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
105 | static void |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
106 | jabber_si_bytestreams_try_next_streamhost(PurpleXfer *xfer, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
107 | const gchar *error_message) |
| 8262 | 108 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
109 | JabberSIXfer *jsx = JABBER_SI_XFER(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
|
110 | JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data; |
| 7395 | 111 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
112 | purple_debug_warning( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
113 | "jabber", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
114 | "si connection failed, jid was %s, host was %s, error was %s", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
115 | streamhost->jid, streamhost->host, error_message); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
116 | jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
117 | jabber_bytestreams_streamhost_free(streamhost); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
118 | g_clear_object(&jsx->client); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
119 | jabber_si_bytestreams_attempt_connect(xfer); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
120 | } |
|
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
|
121 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
122 | static void |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
123 | jabber_si_bytestreams_connect_cb(GObject *source, GAsyncResult *result, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
124 | gpointer user_data) |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
125 | { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
126 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
127 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
128 | GIOStream *stream = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
129 | GError *error = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
130 | GSocket *socket = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
131 | JabberIq *iq = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
132 | JabberBytestreamsStreamhost *streamhost = jsx->streamhosts->data; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
133 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
134 | stream = g_proxy_connect_finish(G_PROXY(source), result, &error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
135 | if (stream == NULL) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
136 | if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
137 | purple_debug_error("jabber", |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
138 | "Unable to connect to destination host: %s", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
139 | error->message); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
140 | jabber_si_bytestreams_try_next_streamhost( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
141 | xfer, "Unable to connect to destination host."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
142 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
143 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
144 | g_clear_error(&error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
145 | return; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
146 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
147 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
148 | if (!G_IS_SOCKET_CONNECTION(stream)) { |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
149 | purple_debug_error("jabber", |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
150 | "GProxy didn't return a GSocketConnection."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
151 | jabber_si_bytestreams_try_next_streamhost( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
152 | xfer, "GProxy didn't return a GSocketConnection."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
153 | g_object_unref(stream); |
| 8262 | 154 | return; |
| 155 | } | |
| 156 | ||
|
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
|
157 | /* unknown file transfer type is assumed to be RECEIVE */ |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
158 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
159 | PurpleXmlNode *query, *activate; |
|
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_SET, NS_BYTESTREAMS); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
161 | purple_xmlnode_set_attrib(iq->node, "to", streamhost->jid); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
162 | query = purple_xmlnode_get_child(iq->node, "query"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
163 | purple_xmlnode_set_attrib(query, "sid", jsx->stream_id); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
164 | activate = purple_xmlnode_new_child(query, "activate"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
165 | purple_xmlnode_insert_data(activate, purple_xfer_get_remote_user(xfer), -1); |
|
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
|
166 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
167 | /* TODO: We need to wait for an activation result before starting */ |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
168 | } else { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
169 | PurpleXmlNode *query, *su; |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
170 | iq = jabber_iq_new_query(jsx->js, JABBER_IQ_RESULT, NS_BYTESTREAMS); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
171 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(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
|
172 | jabber_iq_set_id(iq, jsx->iq_id); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
173 | query = purple_xmlnode_get_child(iq->node, "query"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
174 | su = purple_xmlnode_new_child(query, "streamhost-used"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
175 | purple_xmlnode_set_attrib(su, "jid", 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
|
176 | } |
| 8262 | 177 | |
| 178 | jabber_iq_send(iq); | |
| 179 | ||
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
180 | jsx->local_streamhost_conn = G_SOCKET_CONNECTION(stream); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
181 | socket = g_socket_connection_get_socket(jsx->local_streamhost_conn); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
182 | purple_xfer_start(xfer, g_socket_get_fd(socket), NULL, -1); |
|
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
|
183 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next 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 | |
|
26016
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
185 | 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
|
186 | 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
|
187 | { |
|
42175
4185b4043214
Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42139
diff
changeset
|
188 | g_clear_handle_id(&jsx->ibb_timeout_handle, g_source_remove); |
|
26016
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
189 | } |
|
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
190 | |
|
26014
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
191 | static gboolean |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
192 | 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
|
193 | { |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
194 | PurpleXfer *xfer = (PurpleXfer *) data; |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
195 | JabberSIXfer *jsx = JABBER_SI_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
|
196 | |
|
26016
9e3b8bdeed61
Remove timeout for IBB when receiving an IBB session open from the initiator
Marcus Lundblad <malu@pidgin.im>
parents:
26015
diff
changeset
|
197 | 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
|
198 | 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
|
199 | "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
|
200 | " up yet, cancel transfer"); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
201 | 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
|
202 | 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
|
203 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
204 | |
|
26014
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
205 | return FALSE; |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
206 | } |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
207 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
208 | /* This is called when we connect to the SOCKS5 proxy server (through any |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
209 | * relevant account proxy) |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
210 | */ |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
211 | static void |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
212 | jabber_si_bytestreams_socks5_connect_to_host_cb(GObject *source, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
213 | GAsyncResult *result, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
214 | gpointer user_data) |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
215 | { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
216 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
217 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
218 | JabberID *dstjid; |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
219 | const JabberID *from_jid, *to_jid; |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
220 | GSocketConnection *conn; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
221 | GProxy *proxy; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
222 | GSocketAddress *addr; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
223 | GInetSocketAddress *inet_addr; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
224 | GSocketAddress *proxy_addr; |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
225 | gchar *dstaddr, *hash_input; |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
226 | GError *error = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
227 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
228 | conn = g_socket_client_connect_to_host_finish(G_SOCKET_CLIENT(source), |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
229 | result, &error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
230 | if (conn == NULL) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
231 | if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
232 | purple_debug_error("jabber", "Unable to connect to SOCKS5 host: %s", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
233 | error->message); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
234 | jabber_si_bytestreams_try_next_streamhost( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
235 | xfer, "Unable to connect to SOCKS5 host."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
236 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
237 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
238 | g_clear_error(&error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
239 | return; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
240 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
241 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
242 | proxy = g_proxy_get_default_for_protocol("socks5"); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
243 | if (proxy == NULL) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
244 | purple_debug_error("jabber", "SOCKS5 proxy backend missing."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
245 | jabber_si_bytestreams_try_next_streamhost( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
246 | xfer, "SOCKS5 proxy backend missing."); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
247 | g_object_unref(conn); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
248 | return; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
249 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
250 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
251 | addr = g_socket_connection_get_remote_address(conn, &error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
252 | if (addr == NULL) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
253 | purple_debug_error( |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
254 | "jabber", |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
255 | "Unable to retrieve SOCKS5 host address from connection: %s", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
256 | error->message); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
257 | jabber_si_bytestreams_try_next_streamhost( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
258 | xfer, "Unable to retrieve SOCKS5 host address from connection"); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
259 | g_object_unref(conn); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
260 | g_object_unref(proxy); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
261 | g_clear_error(&error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
262 | return; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
263 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
264 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
265 | dstjid = jabber_id_new(purple_xfer_get_remote_user(xfer)); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
266 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
267 | /* unknown file transfer type is assumed to be RECEIVE */ |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
268 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND) { |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
269 | from_jid = jsx->js->user; |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
270 | to_jid = dstjid; |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
271 | } else { |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
272 | from_jid = dstjid; |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
273 | to_jid = jsx->js->user; |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
274 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
275 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
276 | /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
277 | hash_input = g_strdup_printf("%s%s@%s/%s%s@%s/%s", jsx->stream_id, |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
278 | from_jid->node, from_jid->domain, |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
279 | from_jid->resource, to_jid->node, |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
280 | to_jid->domain, to_jid->resource); |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
281 | dstaddr = g_compute_checksum_for_string(G_CHECKSUM_SHA1, hash_input, -1); |
|
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
282 | g_free(hash_input); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
283 | jabber_id_free(dstjid); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
284 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
285 | inet_addr = G_INET_SOCKET_ADDRESS(addr); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
286 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
287 | proxy_addr = |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
288 | g_proxy_address_new(g_inet_socket_address_get_address(inet_addr), |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
289 | g_inet_socket_address_get_port(inet_addr), |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
290 | "socks5", dstaddr, 0, NULL, NULL); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
291 | g_object_unref(inet_addr); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
292 | |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
293 | purple_debug_info("jabber", "Connecting to %s using SOCKS5 proxy", dstaddr); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
294 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
295 | g_proxy_connect_async(proxy, G_IO_STREAM(conn), G_PROXY_ADDRESS(proxy_addr), |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
296 | jsx->cancellable, jabber_si_bytestreams_connect_cb, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
297 | user_data); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
298 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
299 | g_object_unref(proxy_addr); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
300 | g_object_unref(conn); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
301 | g_object_unref(proxy); |
|
40588
abf38be27d21
Rename a few things in Jabber SI xfer to be clearer.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40587
diff
changeset
|
302 | g_free(dstaddr); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
303 | } |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
304 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
305 | static void |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
306 | jabber_si_bytestreams_attempt_connect(PurpleXfer *xfer) |
| 8262 | 307 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
308 | JabberSIXfer *jsx = JABBER_SI_XFER(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
|
309 | JabberBytestreamsStreamhost *streamhost; |
| 14561 | 310 | JabberID *dstjid; |
| 8262 | 311 | |
| 312 | if(!jsx->streamhosts) { | |
| 313 | JabberIq *iq = jabber_iq_new(jsx->js, JABBER_IQ_ERROR); | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
314 | PurpleXmlNode *error, *inf; |
| 8262 | 315 | |
| 316 | if(jsx->iq_id) | |
| 317 | jabber_iq_set_id(iq, jsx->iq_id); | |
| 318 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
319 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer)); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
320 | error = purple_xmlnode_new_child(iq->node, "error"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
321 | purple_xmlnode_set_attrib(error, "code", "404"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
322 | purple_xmlnode_set_attrib(error, "type", "cancel"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
323 | inf = purple_xmlnode_new_child(error, "item-not-found"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
324 | purple_xmlnode_set_namespace(inf, NS_XMPP_STANZAS); |
| 8262 | 325 | |
| 326 | jabber_iq_send(iq); | |
| 327 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
328 | /* 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
|
329 | 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
|
330 | /* 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
|
331 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
332 | "jabber_si_bytestreams_attempt_connect: " |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
333 | "no streamhosts found, trying IBB\n"); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
334 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
335 | jsx->stream_method &= ~STREAM_METHOD_BYTESTREAMS; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
336 | } |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
337 | /* 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
|
338 | 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
|
339 | receiver already... */ |
|
34926
c5b444d1447d
Changed prefix of PurpleXferType enums to PURPLE_XFER_TYPE_*
Ankit Vani <a@nevitus.org>
parents:
34921
diff
changeset
|
340 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
341 | && !jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
342 | 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
|
343 | } else { |
|
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
344 | /* setup a timeout to cancel waiting for IBB open */ |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
345 | jsx->ibb_timeout_handle = g_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
|
346 | 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
|
347 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
348 | /* 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
|
349 | already set up... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
350 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
351 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
352 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
353 | |
| 8262 | 354 | return; |
| 355 | } | |
| 356 | ||
| 357 | streamhost = jsx->streamhosts->data; | |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
358 | dstjid = jabber_id_new(purple_xfer_get_remote_user(xfer)); |
| 8262 | 359 | |
|
21688
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
360 | /* 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
|
361 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
362 | if(dstjid != NULL && streamhost->host && streamhost->port > 0) { |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
363 | GError *error = NULL; |
|
31680
d3902c687705
Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <datallah@pidgin.im>
parents:
31645
diff
changeset
|
364 | PurpleAccount *account; |
| 8262 | 365 | |
|
31680
d3902c687705
Use the new account-contextual DNS API everywhere. Refs #11110
Daniel Atallah <datallah@pidgin.im>
parents:
31645
diff
changeset
|
366 | account = purple_connection_get_account(jsx->js->gc); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
367 | jsx->client = purple_gio_socket_client_new(account, &error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
368 | if (jsx->client != NULL) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
369 | if (purple_xfer_get_xfer_type(xfer) != PURPLE_XFER_TYPE_SEND) { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
370 | /* When selecting a streamhost, timeout after |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
371 | * STREAMHOST_CONNECT_TIMEOUT seconds, otherwise it takes |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
372 | * forever |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
373 | */ |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
374 | g_socket_client_set_timeout(jsx->client, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
375 | STREAMHOST_CONNECT_TIMEOUT); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
376 | } |
| 14561 | 377 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
378 | purple_debug_info("jabber", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
379 | "Connecting to SOCKS5 streamhost proxy %s:%d", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
380 | streamhost->host, streamhost->port); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
381 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
382 | g_socket_client_connect_to_host_async( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
383 | jsx->client, streamhost->host, streamhost->port, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
384 | jsx->cancellable, |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
385 | jabber_si_bytestreams_socks5_connect_to_host_cb, xfer); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
386 | } else { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
387 | purple_debug_error( |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
388 | "jabber", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
389 | "Failed to connect to SOCKS5 streamhost proxy: %s", |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
390 | error->message); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
391 | g_clear_error(&error); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
392 | } |
|
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
|
393 | |
| 14561 | 394 | jabber_id_free(dstjid); |
| 395 | } | |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
396 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
397 | if (jsx->client == NULL) { |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
398 | jsx->streamhosts = g_list_remove(jsx->streamhosts, streamhost); |
|
40137
016690872c6c
Add new and free functions for structs to reduce duplication
qarkai <qarkai@gmail.com>
parents:
39670
diff
changeset
|
399 | jabber_bytestreams_streamhost_free(streamhost); |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
400 | jabber_si_bytestreams_attempt_connect(xfer); |
|
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
401 | } |
| 8262 | 402 | } |
| 403 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
404 | void jabber_bytestreams_parse(JabberStream *js, const char *from, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
405 | JabberIqType type, const char *id, PurpleXmlNode *query) |
| 8262 | 406 | { |
| 15884 | 407 | PurpleXfer *xfer; |
| 8262 | 408 | JabberSIXfer *jsx; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
409 | PurpleXmlNode *streamhost; |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
410 | const char *sid; |
| 14356 | 411 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
412 | if(type != JABBER_IQ_SET) |
| 14356 | 413 | return; |
| 8262 | 414 | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
415 | if(!from) |
| 8262 | 416 | return; |
| 417 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
418 | if(!(sid = purple_xmlnode_get_attrib(query, "sid"))) |
| 8262 | 419 | return; |
| 420 | ||
| 421 | if(!(xfer = jabber_si_xfer_find(js, sid, from))) | |
| 422 | return; | |
| 423 | ||
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
424 | jsx = JABBER_SI_XFER(xfer); |
| 10940 | 425 | |
| 426 | if(!jsx->accepted) | |
| 427 | return; | |
| 428 | ||
|
37423
d2f0259aa43f
Remove NULL-checks before free(). No functional change.
Michael McConville <mmcco@mykolab.com>
parents:
37158
diff
changeset
|
429 | 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
|
430 | jsx->iq_id = g_strdup(id); |
| 8262 | 431 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
432 | for(streamhost = purple_xmlnode_get_child(query, "streamhost"); streamhost; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
433 | streamhost = purple_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
|
434 | 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
|
435 | int portnum = 0; |
| 8262 | 436 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
437 | if((jid = purple_xmlnode_get_attrib(streamhost, "jid")) && |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
438 | ((zeroconf = purple_xmlnode_get_attrib(streamhost, "zeroconf")) || |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
439 | ((host = purple_xmlnode_get_attrib(streamhost, "host")) && |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
440 | (port = purple_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
|
441 | (portnum = atoi(port))))) { |
|
40155
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
442 | /* ignore 0.0.0.0 */ |
|
40157
e74e34093dfa
Fix an error caused by misreading purple_strequal()
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
40155
diff
changeset
|
443 | if(purple_strequal(host, "0.0.0.0") == FALSE) { |
|
40155
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
444 | JabberBytestreamsStreamhost *sh = g_new0(JabberBytestreamsStreamhost, 1); |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
445 | sh->jid = g_strdup(jid); |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
446 | sh->host = g_strdup(host); |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
447 | sh->port = portnum; |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
448 | sh->zeroconf = g_strdup(zeroconf); |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
449 | |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
450 | /* If there were a lot of these, it'd be worthwhile to prepend and reverse. */ |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
451 | jsx->streamhosts = g_list_append(jsx->streamhosts, sh); |
|
8f9d5d0acbbf
Less delay for XMPP file transfer using streamhosts. Ignore 0.0.0.0.
Evert Mouw <post@evert.net>
parents:
39670
diff
changeset
|
452 | } |
| 8262 | 453 | } |
| 454 | } | |
| 455 | ||
| 456 | jabber_si_bytestreams_attempt_connect(xfer); | |
| 7395 | 457 | } |
| 458 | ||
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
459 | static void |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
460 | jabber_si_xfer_bytestreams_send_write_response_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
461 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
462 | gpointer user_data) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
463 | { |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
464 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
465 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
466 | gsize bytes_written = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
467 | GError *error = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
468 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
469 | if (!g_output_stream_write_all_finish(G_OUTPUT_STREAM(source), result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
470 | &bytes_written, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
471 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
472 | purple_xfer_cancel_remote(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
473 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
474 | g_clear_error(&error); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
475 | } else { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
476 | /* Before actually starting sending the file, we need to wait until the |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
477 | * recipient sends the IQ result with <streamhost-used/> |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
478 | */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
479 | purple_debug_info("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
480 | "SOCKS5 connection negotiation completed. Waiting " |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
481 | "for IQ result to start file transfer."); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
482 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
483 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
484 | g_clear_pointer(&jsx->socks_buf, g_free); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
485 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
486 | |
| 8312 | 487 | static void |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
488 | jabber_si_xfer_bytestreams_send_read_request_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
489 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
490 | gpointer user_data) |
| 8312 | 491 | { |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
492 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
493 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
494 | gsize bytes_read = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
495 | GError *error = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
496 | GOutputStream *output = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
497 | gsize bufsize; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
498 | gchar *dstaddr, *hash; |
|
40110
bc2b94f2595a
Make purple_network_get_my_ip_from_gio return non-const.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40107
diff
changeset
|
499 | gchar *host; |
| 8316 | 500 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
501 | purple_debug_info("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
502 | "in jabber_si_xfer_bytestreams_send_read_request_cb"); |
| 8312 | 503 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
504 | if (!g_input_stream_read_all_finish(G_INPUT_STREAM(source), result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
505 | &bytes_read, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
506 | if (error->code != G_IO_ERROR_CANCELLED) { |
| 15884 | 507 | purple_xfer_cancel_remote(xfer); |
| 8316 | 508 | } |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
509 | g_clear_error(&error); |
| 8316 | 510 | return; |
| 511 | } | |
| 8312 | 512 | |
| 8316 | 513 | dstaddr = g_strdup_printf("%s%s@%s/%s%s", jsx->stream_id, |
| 514 | jsx->js->user->node, jsx->js->user->domain, | |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
515 | jsx->js->user->resource, purple_xfer_get_remote_user(xfer)); |
|
10684
0325b164a7eb
[gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
10112
diff
changeset
|
516 | |
|
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
|
517 | /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ |
|
38327
c842a56b9967
jabber: Port to use GChecksum instead of PurpleHash
Mike Ruprecht <cmaiku@gmail.com>
parents:
37423
diff
changeset
|
518 | hash = g_compute_checksum_for_string(G_CHECKSUM_SHA1, dstaddr, -1); |
| 8316 | 519 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
520 | if (strncmp(hash, jsx->socks_buf + 5, 40) || jsx->socks_buf[45] != 0x00 || |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
521 | jsx->socks_buf[46] != 0x00) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
522 | if (jsx->socks_buf[45] != 0x00 || jsx->socks_buf[46] != 0x00) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
523 | purple_debug_error("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
524 | "Got SOCKS5 BS conn with the wrong DST.PORT " |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
525 | "(must be 0 - got[0x%x,0x%x]).", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
526 | jsx->socks_buf[45], jsx->socks_buf[46]); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
527 | } else { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
528 | purple_debug_error("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
529 | "Got SOCKS5 BS conn with the wrong DST.ADDR " |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
530 | "(expected '%s' - got '%.40s').", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
531 | hash, jsx->socks_buf + 5); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
532 | } |
| 15884 | 533 | 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
|
534 | 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
|
535 | g_free(dstaddr); |
| 8312 | 536 | return; |
| 537 | } | |
| 538 | ||
|
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
|
539 | 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
|
540 | 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
|
541 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
542 | g_free(jsx->socks_buf); |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39670
diff
changeset
|
543 | host = purple_network_get_my_ip_from_gio( |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39670
diff
changeset
|
544 | G_SOCKET_CONNECTION(jsx->js->stream)); |
| 8316 | 545 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
546 | bufsize = 5 + strlen(host) + 2; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
547 | jsx->socks_buf = g_malloc(bufsize); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
548 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
549 | jsx->socks_buf[0] = 0x05; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
550 | jsx->socks_buf[1] = 0x00; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
551 | jsx->socks_buf[2] = 0x00; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
552 | jsx->socks_buf[3] = 0x03; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
553 | jsx->socks_buf[4] = strlen(host); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
554 | memcpy(jsx->socks_buf + 5, host, strlen(host)); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
555 | jsx->socks_buf[5 + strlen(host)] = 0x00; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
556 | jsx->socks_buf[6 + strlen(host)] = 0x00; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
557 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
558 | output = g_io_stream_get_output_stream( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
559 | G_IO_STREAM(jsx->local_streamhost_conn)); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
560 | g_output_stream_write_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
561 | output, jsx->socks_buf, bufsize, G_PRIORITY_DEFAULT, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
562 | jsx->cancellable, jabber_si_xfer_bytestreams_send_write_response_cb, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
563 | xfer); |
|
40110
bc2b94f2595a
Make purple_network_get_my_ip_from_gio return non-const.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40107
diff
changeset
|
564 | |
|
bc2b94f2595a
Make purple_network_get_my_ip_from_gio return non-const.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40107
diff
changeset
|
565 | g_free(host); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
566 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
567 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
568 | static void |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
569 | jabber_si_xfer_bytestreams_send_read_request_header_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
570 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
571 | gpointer user_data) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
572 | { |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
573 | GInputStream *input = G_INPUT_STREAM(source); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
574 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
575 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
576 | gsize bytes_read = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
577 | GError *error = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
578 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
579 | purple_debug_info( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
580 | "jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
581 | "in jabber_si_xfer_bytestreams_send_read_request_header_cb"); |
| 8316 | 582 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
583 | if (!g_input_stream_read_all_finish(input, result, &bytes_read, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
584 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
585 | purple_xfer_cancel_remote(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
586 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
587 | g_clear_error(&error); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
588 | return; |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
589 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
590 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
591 | if (jsx->socks_buf[0] != 0x05 || jsx->socks_buf[1] != 0x01 || |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
592 | jsx->socks_buf[3] != 0x03 || jsx->socks_buf[4] != 40) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
593 | purple_debug_info( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
594 | "jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
595 | "Invalid socks5 conn req. header[0x%x,0x%x,0x%x,0x%x,0x%x]", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
596 | jsx->socks_buf[0], jsx->socks_buf[1], jsx->socks_buf[2], |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
597 | jsx->socks_buf[3], jsx->socks_buf[4]); |
| 15884 | 598 | purple_xfer_cancel_remote(xfer); |
|
13493
598d8f618a31
[gaim-migrate @ 15868]
Richard Laager <rlaager@pidgin.im>
parents:
13441
diff
changeset
|
599 | return; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
600 | } |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
601 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
602 | /* Read DST.ADDR and the following 2-byte port number. */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
603 | purple_debug_info("jabber", "reading %u bytes for DST.ADDR + port num", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
604 | jsx->socks_buf[4] + 2); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
605 | g_input_stream_read_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
606 | input, jsx->socks_buf + 5, jsx->socks_buf[4] + 2, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
607 | G_PRIORITY_DEFAULT, jsx->cancellable, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
608 | jabber_si_xfer_bytestreams_send_read_request_cb, xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
609 | } |
| 8316 | 610 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
611 | static void |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
612 | jabber_si_xfer_bytestreams_send_write_method_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
613 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
614 | gpointer user_data) |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
615 | { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
616 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
617 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
618 | gsize bytes_written = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
619 | GError *error = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
620 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
621 | if (!g_output_stream_write_all_finish(G_OUTPUT_STREAM(source), result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
622 | &bytes_written, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
623 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
624 | purple_xfer_cancel_remote(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
625 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
626 | g_clear_pointer(&jsx->socks_buf, g_free); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
627 | g_clear_error(&error); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
628 | return; |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
629 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
630 | |
|
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
|
631 | /* If we sent a "Success", wait for a response, otherwise give up and cancel */ |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
632 | if (jsx->socks_buf[1] == 0x00) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
633 | GInputStream *input = g_io_stream_get_input_stream( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
634 | G_IO_STREAM(jsx->local_streamhost_conn)); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
635 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
636 | g_free(jsx->socks_buf); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
637 | /* Request is: Version, Command, Reserved, Address type, Address length, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
638 | * Address (up to 255), 2-byte port */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
639 | jsx->socks_buf = g_malloc(5 + 255 + 2); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
640 | g_input_stream_read_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
641 | input, jsx->socks_buf, 5, G_PRIORITY_DEFAULT, jsx->cancellable, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
642 | jabber_si_xfer_bytestreams_send_read_request_header_cb, xfer); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
643 | } else { |
| 15884 | 644 | purple_xfer_cancel_remote(xfer); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13146
diff
changeset
|
645 | } |
| 8316 | 646 | } |
| 647 | ||
| 648 | static void | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
649 | jabber_si_xfer_bytestreams_send_read_methods_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
650 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
651 | gpointer user_data) |
| 8316 | 652 | { |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
653 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
654 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
655 | gsize bytes_read = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
656 | GError *error = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
657 | GOutputStream *output; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
658 | gboolean valid_method_found = FALSE; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
659 | gint i; |
| 8316 | 660 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
661 | purple_debug_info("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
662 | "in jabber_si_xfer_bytestreams_send_read_methods_cb"); |
| 8316 | 663 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
664 | if (!g_input_stream_read_all_finish(G_INPUT_STREAM(source), result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
665 | &bytes_read, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
666 | if (error->code != G_IO_ERROR_CANCELLED) { |
| 15884 | 667 | purple_xfer_cancel_remote(xfer); |
| 8316 | 668 | } |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
669 | g_clear_error(&error); |
| 8316 | 670 | return; |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
671 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
672 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
673 | purple_debug_info("jabber", "going to test %u different methods", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
674 | jsx->socks_buf[1]); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
675 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
676 | for (i = 0; i < jsx->socks_buf[1]; i++) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
677 | purple_debug_info("jabber", "testing %u", jsx->socks_buf[i + 2]); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
678 | if (jsx->socks_buf[i + 2] == 0x00) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
679 | valid_method_found = TRUE; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
680 | break; |
| 8316 | 681 | } |
| 682 | } | |
| 683 | ||
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
684 | g_free(jsx->socks_buf); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
685 | jsx->socks_buf = g_malloc(2); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
686 | jsx->socks_buf[0] = 0x05; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
687 | jsx->socks_buf[1] = valid_method_found ? 0x00 : 0xFF; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
688 | output = g_io_stream_get_output_stream( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
689 | G_IO_STREAM(jsx->local_streamhost_conn)); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
690 | g_output_stream_write_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
691 | output, jsx->socks_buf, 2, G_PRIORITY_DEFAULT, jsx->cancellable, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
692 | jabber_si_xfer_bytestreams_send_write_method_cb, xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
693 | } |
| 8316 | 694 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
695 | static void |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
696 | jabber_si_xfer_bytestreams_send_read_version_cb(GObject *source, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
697 | GAsyncResult *result, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
698 | gpointer user_data) |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
699 | { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
700 | GInputStream *input = G_INPUT_STREAM(source); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
701 | PurpleXfer *xfer = PURPLE_XFER(user_data); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
702 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
703 | gsize bytes_read = 0; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
704 | GError *error = NULL; |
| 8316 | 705 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
706 | purple_debug_info("jabber", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
707 | "in jabber_si_xfer_bytestreams_send_read_version_cb"); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
708 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
709 | /* Try to read the SOCKS5 header */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
710 | if (!g_input_stream_read_all_finish(input, result, &bytes_read, &error)) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
711 | if (error->code != G_IO_ERROR_CANCELLED) { |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
712 | purple_xfer_cancel_remote(xfer); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
713 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
714 | g_clear_error(&error); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
715 | return; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
716 | } |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
717 | |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
718 | purple_debug_info("jabber", "checking to make sure we're socks FIVE"); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
719 | if (jsx->socks_buf[0] != 0x05) { |
| 15884 | 720 | purple_xfer_cancel_remote(xfer); |
| 8316 | 721 | return; |
| 722 | } | |
| 723 | ||
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
724 | /* Number of methods is given in second byte. */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
725 | purple_debug_info("jabber", "reading %u bytes for auth methods", |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
726 | jsx->socks_buf[1]); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
727 | g_input_stream_read_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
728 | input, jsx->socks_buf + 2, jsx->socks_buf[1], G_PRIORITY_DEFAULT, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
729 | jsx->cancellable, jabber_si_xfer_bytestreams_send_read_methods_cb, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
730 | xfer); |
| 8312 | 731 | } |
| 732 | ||
|
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
|
733 | 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
|
734 | 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
|
735 | { |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
736 | 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
|
737 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
738 | 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
|
739 | 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
|
740 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
741 | 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
|
742 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
743 | |
| 8312 | 744 | static void |
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
745 | jabber_si_xfer_bytestreams_send_connected_cb(G_GNUC_UNUSED GSocketService *service, |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
746 | GSocketConnection *connection, |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
747 | GObject *source_object, |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
748 | G_GNUC_UNUSED gpointer data) |
| 8316 | 749 | { |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
750 | PurpleXfer *xfer = PURPLE_XFER(source_object); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
751 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
752 | GInputStream *input = NULL; |
| 8316 | 753 | |
| 15884 | 754 | purple_debug_info("jabber", "in jabber_si_xfer_bytestreams_send_connected_cb\n"); |
| 8316 | 755 | |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
756 | jsx->local_streamhost_conn = g_object_ref(connection); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
757 | g_socket_service_stop(jsx->service); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
758 | g_clear_object(&jsx->service); |
| 8316 | 759 | |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
760 | /* Initial message is: Version, Method count, up to 255 methods. */ |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
761 | jsx->socks_buf = g_malloc(2 + 255); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
762 | input = g_io_stream_get_input_stream( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
763 | G_IO_STREAM(jsx->local_streamhost_conn)); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
764 | g_input_stream_read_all_async( |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
765 | input, jsx->socks_buf, 2, G_PRIORITY_DEFAULT, jsx->cancellable, |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
766 | jabber_si_xfer_bytestreams_send_read_version_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
|
767 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
768 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
769 | 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
|
770 | jabber_si_connect_proxy_cb(JabberStream *js, const char *from, |
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
771 | JabberIqType type, G_GNUC_UNUSED const char *id, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
772 | PurpleXmlNode *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
|
773 | { |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
774 | PurpleXfer *xfer = data; |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
775 | JabberSIXfer *jsx; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
776 | PurpleXmlNode *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
|
777 | 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
|
778 | 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
|
779 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
780 | /* 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
|
781 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
782 | /* 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
|
783 | if (!g_list_find(js->file_transfers, xfer)) { |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
784 | 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
|
785 | return; |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
786 | } |
|
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
787 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
788 | jsx = JABBER_SI_XFER(xfer); |
|
32245
6e7b93c200fe
Convert the jabber prpl to use the new API.
Andrew Victor <andrew.victor@mxit.com>
parents:
31740
diff
changeset
|
789 | |
|
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
|
790 | /* In the case of a direct file transfer, this is expected to return */ |
|
32245
6e7b93c200fe
Convert the jabber prpl to use the new API.
Andrew Victor <andrew.victor@mxit.com>
parents:
31740
diff
changeset
|
791 | if(!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
|
792 | 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
|
793 | |
|
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
|
794 | 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
|
795 | 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
|
796 | "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
|
797 | /* 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
|
798 | 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
|
799 | "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
|
800 | 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
|
801 | if (jsx->stream_method & STREAM_METHOD_IBB) { |
|
41084
72d6941bfa2e
Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40817
diff
changeset
|
802 | /* if we previously tried bytestreams, we need to disable it. */ |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
803 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
804 | jsx->stream_method &= ~STREAM_METHOD_BYTESTREAMS; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
805 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
806 | |
|
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
|
807 | 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
|
808 | /* 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
|
809 | 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
|
810 | the bytestream proxy ourselves when receiving this <iq/> */ |
|
34926
c5b444d1447d
Changed prefix of PurpleXferType enums to PURPLE_XFER_TYPE_*
Ankit Vani <a@nevitus.org>
parents:
34921
diff
changeset
|
811 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND |
|
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
|
812 | && !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
|
813 | 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
|
814 | } else { |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
815 | jsx->ibb_timeout_handle = g_timeout_add_seconds(30, |
|
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
|
816 | 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
|
817 | } |
|
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
|
818 | /* 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
|
819 | 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
|
820 | } 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
|
821 | 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
|
822 | } |
|
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
|
823 | return; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
824 | } |
|
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
|
825 | |
|
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
|
826 | 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
|
827 | 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
|
828 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
829 | if(!(query = purple_xmlnode_get_child(packet, "query"))) |
|
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
|
830 | 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
|
831 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
832 | if(!(streamhost_used = purple_xmlnode_get_child(query, "streamhost-used"))) |
|
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
|
833 | 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
|
834 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
835 | if(!(jid = purple_xmlnode_get_attrib(streamhost_used, "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
|
836 | 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
|
837 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
838 | 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
|
839 | 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
|
840 | |
|
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
|
841 | 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
|
842 | { |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
843 | 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
|
844 | jsx->js->user->domain, jsx->js->user->resource); |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
845 | if (purple_strequal(jid, my_jid)) { |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
846 | GSocket *sock = NULL; |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
847 | gint fd = -1; |
|
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
|
848 | purple_debug_info("jabber", "Got local SOCKS5 streamhost-used.\n"); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
849 | sock = g_socket_connection_get_socket(jsx->local_streamhost_conn); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
850 | fd = g_socket_get_fd(sock); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
851 | _purple_network_set_common_socket_flags(fd); |
|
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
852 | purple_xfer_start(xfer, fd, NULL, -1); |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
853 | } else { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
854 | /* 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
|
855 | if (jsx->stream_method & STREAM_METHOD_IBB) { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
856 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
857 | jsx->stream_method &= ~STREAM_METHOD_BYTESTREAMS; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
858 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
859 | |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
860 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
861 | "jabber_si_connect_proxy_cb: trying to revert to IBB\n"); |
|
34926
c5b444d1447d
Changed prefix of PurpleXferType enums to PURPLE_XFER_TYPE_*
Ankit Vani <a@nevitus.org>
parents:
34921
diff
changeset
|
862 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND) { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
863 | 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
|
864 | } else { |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
865 | jsx->ibb_timeout_handle = g_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
|
866 | 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
|
867 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
868 | /* 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
|
869 | } 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
|
870 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
871 | "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
|
872 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
873 | } |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
874 | } |
|
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
|
875 | 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
|
876 | 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
|
877 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
878 | |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
879 | /* Clean up the local streamhost - it isn't going to be used.*/ |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
880 | g_clear_object(&jsx->local_streamhost_conn); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
881 | if (jsx->service) { |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
882 | g_socket_service_stop(jsx->service); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
883 | g_clear_object(&jsx->service); |
|
23169
dcdd90413703
applied changes from 904a276588f7de13ba13b578905c82c0493184ce
Daniel Atallah <datallah@pidgin.im>
parents:
23075
diff
changeset
|
884 | } |
|
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
|
885 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
886 | jsx->streamhosts = g_list_remove_link(jsx->streamhosts, matched); |
|
40137
016690872c6c
Add new and free functions for structs to reduce duplication
qarkai <qarkai@gmail.com>
parents:
39670
diff
changeset
|
887 | g_list_free_full(jsx->streamhosts, (GDestroyNotify)jabber_bytestreams_streamhost_free); |
|
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
|
888 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
889 | 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
|
890 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
891 | jabber_si_bytestreams_attempt_connect(xfer); |
| 8316 | 892 | } |
| 893 | ||
| 894 | static void | |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
895 | jabber_si_xfer_bytestreams_send_local_info(PurpleXfer *xfer, GList *local_ips) |
| 8312 | 896 | { |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
897 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
| 8312 | 898 | JabberIq *iq; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
899 | PurpleXmlNode *query, *streamhost; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
900 | 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
|
901 | 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
|
902 | JabberBytestreamsStreamhost *sh, *sh2; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
903 | int streamhost_count = 0; |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
904 | |
|
28984
1d84517d56eb
jabber: More namespaces! This is a good stopping point for now.
Paul Aurich <darkrain42@pidgin.im>
parents:
28979
diff
changeset
|
905 | iq = jabber_iq_new_query(jsx->js, JABBER_IQ_SET, NS_BYTESTREAMS); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
906 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer)); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
907 | query = purple_xmlnode_get_child(iq->node, "query"); |
| 8312 | 908 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
909 | purple_xmlnode_set_attrib(query, "sid", jsx->stream_id); |
| 8312 | 910 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
911 | /* If we successfully started listening locally */ |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
912 | if (local_ips) { |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
913 | gchar *jid; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
914 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
915 | 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
|
916 | jsx->js->user->domain, jsx->js->user->resource); |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
917 | g_snprintf(port, sizeof(port), "%hu", purple_xfer_get_local_port(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
|
918 | |
|
29510
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
919 | /* 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
|
920 | while (local_ips) { |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
921 | gchar *local_ip = local_ips->data; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
922 | streamhost_count++; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
923 | streamhost = purple_xmlnode_new_child(query, "streamhost"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
924 | purple_xmlnode_set_attrib(streamhost, "jid", jid); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
925 | purple_xmlnode_set_attrib(streamhost, "host", local_ip); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
926 | purple_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
|
927 | g_free(local_ip); |
|
9c636f4b965c
Add a function to enumerate all local IPs
Marcus Lundblad <malu@pidgin.im>
parents:
28322
diff
changeset
|
928 | 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
|
929 | } |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
930 | |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
931 | g_free(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
|
932 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
933 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
934 | 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
|
935 | 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
|
936 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
937 | /* 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
|
938 | |
|
40405
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
939 | if (!sh->jid) { |
|
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
940 | continue; |
|
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
941 | } else if (!sh->host) { |
|
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
|
942 | continue; |
|
40405
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
943 | } else if (sh->port <= 0) { |
|
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
|
944 | continue; |
|
40405
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
945 | } else if (g_list_find_custom(jsx->streamhosts, sh->jid, |
|
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
946 | 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
|
947 | continue; |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
948 | } |
|
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
|
949 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
950 | streamhost_count++; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
951 | streamhost = purple_xmlnode_new_child(query, "streamhost"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
952 | purple_xmlnode_set_attrib(streamhost, "jid", sh->jid); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
953 | purple_xmlnode_set_attrib(streamhost, "host", sh->host); |
|
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
|
954 | g_snprintf(port, sizeof(port), "%hu", sh->port); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
955 | purple_xmlnode_set_attrib(streamhost, "port", 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
|
956 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next 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 | 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
|
958 | 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
|
959 | sh2->host = g_strdup(sh->host); |
|
23075
b25e0581e5a8
Reuse cleanup function.
Daniel Atallah <datallah@pidgin.im>
parents:
22816
diff
changeset
|
960 | /*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
|
961 | 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
|
962 | |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
963 | 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
|
964 | } |
|
a16385b34219
Implement more of XEP-0065 to support sending files through a proxy. To avoid adding strings this close to a release, it only supports using a proxy that is discovered from the server, but we'll include an account option to manually specify a ft proxy in the next release. Lots of this is based on a patch from galt - Fixes #3730, #116, #1768
Daniel Atallah <datallah@pidgin.im>
parents:
21646
diff
changeset
|
965 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
966 | /* 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
|
967 | if (streamhost_count == 0) { |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
968 | 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
|
969 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
970 | /* if available, revert to IBB */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
971 | if (jsx->stream_method & STREAM_METHOD_IBB) { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
972 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
973 | jsx->stream_method &= ~STREAM_METHOD_BYTESTREAMS; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
974 | } |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
975 | purple_debug_info("jabber", "jabber_si_xfer_bytestreams_send_local_" |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
976 | "info: trying to revert to IBB\n"); |
|
34926
c5b444d1447d
Changed prefix of PurpleXferType enums to PURPLE_XFER_TYPE_*
Ankit Vani <a@nevitus.org>
parents:
34921
diff
changeset
|
977 | if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND) { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
978 | /* 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
|
979 | 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
|
980 | } else { |
|
38433
361c801c4536
Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents:
38358
diff
changeset
|
981 | jsx->ibb_timeout_handle = g_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
|
982 | 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
|
983 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
984 | /* 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
|
985 | 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
|
986 | } 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
|
987 | /* 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
|
988 | 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
|
989 | purple_xfer_cancel_local(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
990 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
991 | |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
992 | return; |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
993 | } |
|
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
994 | |
|
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
|
995 | 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
|
996 | |
| 8312 | 997 | jabber_iq_send(iq); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
998 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
999 | |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
1000 | static void |
| 15884 | 1001 | jabber_si_xfer_bytestreams_send_init(PurpleXfer *xfer) |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
1002 | { |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1003 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
31735
6285e4a52844
xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <datallah@pidgin.im>
parents:
31680
diff
changeset
|
1004 | PurpleProxyType proxy_type; |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1005 | GList *local_ips = NULL; |
|
23506
aeba2ae6a455
Improve error handling for xmpp file transfers.
Daniel Atallah <datallah@pidgin.im>
parents:
23505
diff
changeset
|
1006 | |
|
31735
6285e4a52844
xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <datallah@pidgin.im>
parents:
31680
diff
changeset
|
1007 | /* TODO: This should probably be done with an account option instead of |
|
6285e4a52844
xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <datallah@pidgin.im>
parents:
31680
diff
changeset
|
1008 | * piggy-backing on the TOR proxy type. */ |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
35115
diff
changeset
|
1009 | proxy_type = purple_proxy_info_get_proxy_type( |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1010 | purple_proxy_get_setup(purple_connection_get_account(jsx->js->gc))); |
|
41318
56092ffeae95
Move PurpleProxyInfo from a boxed type to a GObject
Gary Kramlich <grim@reaperworld.com>
parents:
41084
diff
changeset
|
1011 | if (proxy_type == PURPLE_PROXY_TYPE_TOR) { |
|
31735
6285e4a52844
xmpp: Don't advertise our IPs as available streamhosts when using a TOR proxy.
Daniel Atallah <datallah@pidgin.im>
parents:
31680
diff
changeset
|
1012 | purple_debug_info("jabber", "Skipping attempting local streamhost.\n"); |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1013 | jsx->service = NULL; |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1014 | } else { |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1015 | guint16 port = 0; |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1016 | GError *error = NULL; |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1017 | jsx->service = g_socket_service_new(); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1018 | port = purple_socket_listener_add_any_inet_port( |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1019 | G_SOCKET_LISTENER(jsx->service), G_OBJECT(xfer), &error); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1020 | if (port != 0) { |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1021 | purple_xfer_set_local_port(xfer, port); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1022 | } else { |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1023 | purple_debug_error("jabber", |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1024 | "Unable to create streamhost socket listener: " |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1025 | "%s. Trying proxy instead.", |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1026 | error->message); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1027 | g_error_free(error); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1028 | g_clear_object(&jsx->service); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1029 | } |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
1030 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
1031 | |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1032 | if (jsx->service) { |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1033 | gchar *public_ip; |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1034 | |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1035 | /* Include the public IP (assuming there is a port mapped somehow) */ |
|
40405
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
1036 | public_ip = purple_network_get_my_ip_from_gio( |
|
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
1037 | G_SOCKET_CONNECTION(jsx->js->stream)); |
|
41826
0c1829dae5b6
Remove the libnice dependency
Gary Kramlich <grim@reaperworld.com>
parents:
41791
diff
changeset
|
1038 | if (!purple_strequal(public_ip, "0.0.0.0")) { |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1039 | local_ips = g_list_append(local_ips, public_ip); |
|
40405
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
1040 | } else { |
|
dc115c3b7694
Cleanup some list iteration.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40404
diff
changeset
|
1041 | g_free(public_ip); |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1042 | } |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1043 | |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1044 | g_signal_connect( |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1045 | G_OBJECT(jsx->service), "incoming", |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1046 | G_CALLBACK(jabber_si_xfer_bytestreams_send_connected_cb), NULL); |
|
40403
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1047 | } |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1048 | |
|
5529108bd66e
Split jabber_si_xfer_bytestreams_listen_cb in half.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40358
diff
changeset
|
1049 | jabber_si_xfer_bytestreams_send_local_info(xfer, local_ips); |
| 8312 | 1050 | } |
| 1051 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1052 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1053 | 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
|
1054 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1055 | PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(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
|
1056 | |
|
27525
579b9d64b364
A semi-random collection of English spelling and grammatical changes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27332
diff
changeset
|
1057 | purple_debug_error("jabber", "an error occurred during IBB file transfer\n"); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1058 | 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
|
1059 | } |
|
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 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1062 | 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
|
1063 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1064 | PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(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
|
1065 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1066 | 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
|
1067 | if (purple_xfer_get_bytes_remaining(xfer) > 0) { |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1068 | 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
|
1069 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1070 | purple_xfer_set_completed(xfer, TRUE); |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1071 | purple_xfer_end(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1072 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1073 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1074 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1075 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1076 | 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
|
1077 | gsize size) |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1078 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1079 | PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1080 | JabberSIXfer *jsx = JABBER_SI_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
|
1081 | |
| 35029 | 1082 | if ((goffset)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
|
1083 | 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
|
1084 | size); |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1085 | purple_circular_buffer_append(jsx->ibb_buffer, data, size); |
|
36545
23b59a16c808
Replaced some _prpl_ stuff with _protocol_
Ankit Vani <a@nevitus.org>
parents:
34706
diff
changeset
|
1086 | purple_xfer_protocol_ready(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1087 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1088 | /* 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
|
1089 | 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
|
1090 | purple_debug_error("jabber", |
|
26020
0e7f4920e969
Trigger error callbacks when receiving a malformed-ish packet.
Paul Aurich <darkrain42@pidgin.im>
parents:
26016
diff
changeset
|
1091 | "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
|
1092 | 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
|
1093 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1094 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1095 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1096 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1097 | static gssize |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1098 | jabber_si_xfer_ibb_read(PurpleXfer *xfer, guchar **out_buffer, size_t buf_size) |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1099 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1100 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1101 | guchar *buffer; |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1102 | gsize size; |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1103 | gsize tmp; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1104 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1105 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1106 | return PURPLE_XFER_CLASS(jabber_si_xfer_parent_class)->read(xfer, out_buffer, buf_size); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1107 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1108 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1109 | size = purple_circular_buffer_get_used(jsx->ibb_buffer); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1110 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1111 | *out_buffer = buffer = g_malloc(size); |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1112 | while ((tmp = purple_circular_buffer_get_max_read(jsx->ibb_buffer))) { |
|
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1113 | const gchar *output = purple_circular_buffer_get_output(jsx->ibb_buffer); |
|
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1114 | memcpy(buffer, output, tmp); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1115 | buffer += tmp; |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1116 | purple_circular_buffer_mark_read(jsx->ibb_buffer, tmp); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1117 | } |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1118 | |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1119 | return size; |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1120 | } |
|
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1121 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1122 | 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
|
1123 | jabber_si_xfer_ibb_open_cb(JabberStream *js, const char *who, const char *id, |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1124 | PurpleXmlNode *open) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1125 | { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1126 | const gchar *sid = purple_xmlnode_get_attrib(open, "sid"); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1127 | PurpleXfer *xfer = jabber_si_xfer_find(js, sid, who); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1128 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1129 | if (xfer) { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1130 | JabberSIXfer *jsx = JABBER_SI_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
|
1131 | 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
|
1132 | 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
|
1133 | |
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1134 | jabber_si_bytestreams_ibb_timeout_remove(jsx); |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1135 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1136 | if (sess) { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1137 | /* setup callbacks here...*/ |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1138 | 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
|
1139 | 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
|
1140 | 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
|
1141 | 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
|
1142 | 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
|
1143 | 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
|
1144 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1145 | 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
|
1146 | /* 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
|
1147 | 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
|
1148 | (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
|
1149 | jsx->ibb_buffer = |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1150 | purple_circular_buffer_new(jabber_ibb_session_get_block_size(sess)); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1151 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1152 | /* 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
|
1153 | 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
|
1154 | return TRUE; |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1155 | } else { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1156 | /* 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
|
1157 | 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
|
1158 | 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
|
1159 | return FALSE; |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1160 | } |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1161 | } else { |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1162 | /* 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
|
1163 | 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
|
1164 | "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
|
1165 | return FALSE; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1166 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1167 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1168 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1169 | static gssize |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1170 | jabber_si_xfer_ibb_write(PurpleXfer *xfer, const guchar *buffer, size_t len) |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1171 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1172 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1173 | JabberIBBSession *sess = jsx->ibb_session; |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1174 | gsize packet_size; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1175 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1176 | if(jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1177 | purple_debug_error("jabber", "falling back to raw socket\n"); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1178 | return PURPLE_XFER_CLASS(jabber_si_xfer_parent_class)->write(xfer, buffer, len); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1179 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1180 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1181 | packet_size = MIN(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
|
1182 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1183 | 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
|
1184 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1185 | return packet_size; |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1186 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1187 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1188 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1189 | 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
|
1190 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1191 | PurpleXfer *xfer = (PurpleXfer *) jabber_ibb_session_get_user_data(sess); |
|
32665
1ddb514482cb
Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32594
diff
changeset
|
1192 | goffset 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
|
1193 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1194 | if (remaining == 0) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1195 | /* close the session */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1196 | jabber_ibb_session_close(sess); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1197 | 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
|
1198 | purple_xfer_end(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1199 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1200 | /* send more... */ |
|
36545
23b59a16c808
Replaced some _prpl_ stuff with _protocol_
Ankit Vani <a@nevitus.org>
parents:
34706
diff
changeset
|
1201 | purple_xfer_protocol_ready(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1202 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1203 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1204 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1205 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1206 | 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
|
1207 | { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1208 | 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
|
1209 | |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1210 | 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
|
1211 | purple_xfer_start(xfer, -1, NULL, 0); |
|
36545
23b59a16c808
Replaced some _prpl_ stuff with _protocol_
Ankit Vani <a@nevitus.org>
parents:
34706
diff
changeset
|
1212 | purple_xfer_protocol_ready(xfer); |
|
25997
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1213 | } else { |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1214 | /* error */ |
|
e871edaa1835
Set state error on IBBSession if the receiver gives an error.
Marcus Lundblad <malu@pidgin.im>
parents:
25995
diff
changeset
|
1215 | 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
|
1216 | } |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1217 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1218 | |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1219 | static void |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1220 | 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
|
1221 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1222 | JabberSIXfer *jsx = JABBER_SI_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
|
1223 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1224 | 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
|
1225 | 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
|
1226 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1227 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1228 | /* should set callbacks here... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1229 | 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
|
1230 | 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
|
1231 | 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
|
1232 | 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
|
1233 | 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
|
1234 | 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
|
1235 | 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
|
1236 | 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
|
1237 | |
|
28157
03df7915ebb4
jabber: Migrate IBB to the new code added in the previous commit.
Paul Aurich <darkrain42@pidgin.im>
parents:
28152
diff
changeset
|
1238 | jsx->ibb_buffer = |
|
34529
68cf25486001
GObjectify PurpleCircBuffer as PurpleCircularBuffer (from gobjectification branch)
Ankit Vani <a@nevitus.org>
parents:
33895
diff
changeset
|
1239 | purple_circular_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
|
1240 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1241 | /* open the IBB session */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1242 | 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
|
1243 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1244 | } else { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1245 | /* 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
|
1246 | purple_debug_error("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1247 | "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
|
1248 | 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
|
1249 | } |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1250 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1251 | |
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1252 | static void |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1253 | jabber_si_xfer_send_method_cb(JabberStream *js, G_GNUC_UNUSED const char *from, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1254 | G_GNUC_UNUSED JabberIqType type, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1255 | G_GNUC_UNUSED const char *id, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1256 | PurpleXmlNode *packet, gpointer data) |
| 8312 | 1257 | { |
| 15884 | 1258 | PurpleXfer *xfer = data; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1259 | PurpleXmlNode *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
|
1260 | gboolean found_method = FALSE; |
| 8312 | 1261 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1262 | if(!(si = purple_xmlnode_get_child_with_namespace(packet, "si", "http://jabber.org/protocol/si"))) { |
| 15884 | 1263 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1264 | return; |
| 1265 | } | |
| 1266 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1267 | if(!(feature = purple_xmlnode_get_child_with_namespace(si, "feature", "http://jabber.org/protocol/feature-neg"))) { |
| 15884 | 1268 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1269 | return; |
| 1270 | } | |
| 1271 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1272 | if(!(x = purple_xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data"))) { |
| 15884 | 1273 | purple_xfer_cancel_remote(xfer); |
| 8312 | 1274 | return; |
| 1275 | } | |
| 1276 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1277 | for(field = purple_xmlnode_get_child(x, "field"); field; field = purple_xmlnode_get_next_twin(field)) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1278 | const char *var = purple_xmlnode_get_attrib(field, "var"); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1279 | JabberSIXfer *jsx = JABBER_SI_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
|
1280 | |
| 38260 | 1281 | if(purple_strequal(var, "stream-method")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1282 | if((value = purple_xmlnode_get_child(field, "value"))) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1283 | char *val = purple_xmlnode_get_data(value); |
| 38260 | 1284 | if(purple_strequal(val, NS_BYTESTREAMS)) { |
| 8312 | 1285 | 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
|
1286 | 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
|
1287 | found_method = TRUE; |
| 38260 | 1288 | } else if (purple_strequal(val, NS_IBB)) { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1289 | 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
|
1290 | if (!found_method) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1291 | /* 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
|
1292 | start IBB right away... */ |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1293 | 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
|
1294 | found_method = TRUE; |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1295 | } |
| 8312 | 1296 | } |
| 1297 | g_free(val); | |
| 1298 | } | |
| 1299 | } | |
| 1300 | } | |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1301 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1302 | if (!found_method) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1303 | purple_xfer_cancel_remote(xfer); |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1304 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1305 | |
| 8312 | 1306 | } |
| 1307 | ||
| 15884 | 1308 | static void jabber_si_xfer_send_request(PurpleXfer *xfer) |
| 8312 | 1309 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1310 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
| 8312 | 1311 | JabberIq *iq; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1312 | PurpleXmlNode *si, *file, *feature, *x, *field, *option, *value; |
| 8312 | 1313 | 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
|
1314 | #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
|
1315 | 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
|
1316 | gsize thumb_size; |
| 8312 | 1317 | |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1318 | 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
|
1319 | #endif |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1320 | purple_xfer_set_filename(xfer, g_path_get_basename(purple_xfer_get_local_filename(xfer))); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31123
diff
changeset
|
1321 | |
| 8312 | 1322 | iq = jabber_iq_new(jsx->js, JABBER_IQ_SET); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1323 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer)); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1324 | si = purple_xmlnode_new_child(iq->node, "si"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1325 | purple_xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 8312 | 1326 | jsx->stream_id = jabber_get_next_id(jsx->js); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1327 | purple_xmlnode_set_attrib(si, "id", jsx->stream_id); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1328 | purple_xmlnode_set_attrib(si, "profile", NS_SI_FILE_TRANSFER); |
| 8312 | 1329 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1330 | file = purple_xmlnode_new_child(si, "file"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1331 | purple_xmlnode_set_namespace(file, NS_SI_FILE_TRANSFER); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1332 | purple_xmlnode_set_attrib(file, "name", purple_xfer_get_filename(xfer)); |
|
32665
1ddb514482cb
Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32594
diff
changeset
|
1333 | g_snprintf(buf, sizeof(buf), "%" G_GOFFSET_FORMAT, purple_xfer_get_size(xfer)); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1334 | purple_xmlnode_set_attrib(file, "size", buf); |
| 8312 | 1335 | /* maybe later we'll do hash and date attribs */ |
| 1336 | ||
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1337 | #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
|
1338 | /* 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
|
1339 | 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
|
1340 | 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
|
1341 | 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
|
1342 | 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
|
1343 | mimetype, TRUE, jsx->js); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1344 | PurpleXmlNode *thumbnail = purple_xmlnode_new_child(file, "thumbnail"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1345 | purple_xmlnode_set_namespace(thumbnail, NS_THUMBS); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1346 | purple_xmlnode_set_attrib(thumbnail, "cid", |
|
27424
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1347 | jabber_data_get_cid(thumbnail_data)); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1348 | purple_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
|
1349 | /* cache data */ |
|
c19f67250659
Create the thumbnail data and include the "thumbnail" element in the file
Marcus Lundblad <malu@pidgin.im>
parents:
27420
diff
changeset
|
1350 | 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
|
1351 | } |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1352 | #endif |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31123
diff
changeset
|
1353 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1354 | feature = purple_xmlnode_new_child(si, "feature"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1355 | purple_xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1356 | x = purple_xmlnode_new_child(feature, "x"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1357 | purple_xmlnode_set_namespace(x, "jabber:x:data"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1358 | purple_xmlnode_set_attrib(x, "type", "form"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1359 | field = purple_xmlnode_new_child(x, "field"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1360 | purple_xmlnode_set_attrib(field, "var", "stream-method"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1361 | purple_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
|
1362 | /* 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
|
1363 | behind troublesome firewalls */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1364 | option = purple_xmlnode_new_child(field, "option"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1365 | value = purple_xmlnode_new_child(option, "value"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1366 | purple_xmlnode_insert_data(value, NS_BYTESTREAMS, -1); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1367 | option = purple_xmlnode_new_child(field, "option"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1368 | value = purple_xmlnode_new_child(option, "value"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1369 | purple_xmlnode_insert_data(value, NS_IBB, -1); |
| 8312 | 1370 | |
| 1371 | jabber_iq_set_callback(iq, jabber_si_xfer_send_method_cb, xfer); | |
| 1372 | ||
|
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
|
1373 | /* 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
|
1374 | 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
|
1375 | 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
|
1376 | |
| 8312 | 1377 | jabber_iq_send(iq); |
| 1378 | } | |
| 1379 | ||
|
26021
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1380 | /* |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1381 | * 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
|
1382 | * (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
|
1383 | * purple_xfer_request_denied. |
|
d566a418eeee
Standardize all the IBB stream cleanup
Paul Aurich <darkrain42@pidgin.im>
parents:
26020
diff
changeset
|
1384 | */ |
| 15884 | 1385 | static void jabber_si_xfer_cancel_send(PurpleXfer *xfer) |
| 8316 | 1386 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1387 | JabberSIXfer *jsx = JABBER_SI_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
|
1388 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1389 | /* 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
|
1390 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1391 | 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
|
1392 | } |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1393 | purple_debug_info("jabber", "in jabber_si_xfer_cancel_send\n"); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1394 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1395 | g_cancellable_cancel(jsx->cancellable); |
| 8312 | 1396 | } |
| 1397 | ||
| 1398 | ||
| 15884 | 1399 | static void jabber_si_xfer_request_denied(PurpleXfer *xfer) |
| 13146 | 1400 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1401 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
27817
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1402 | JabberStream *js = jsx->js; |
|
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 | /* |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1405 | * 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
|
1406 | * might be warranted. |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1407 | */ |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1408 | 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
|
1409 | JabberIq *iq; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1410 | PurpleXmlNode *error, *child; |
|
27817
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1411 | iq = jabber_iq_new(js, JABBER_IQ_ERROR); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1412 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer)); |
|
27817
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1413 | 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
|
1414 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1415 | error = purple_xmlnode_new_child(iq->node, "error"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1416 | purple_xmlnode_set_attrib(error, "type", "cancel"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1417 | child = purple_xmlnode_new_child(error, "forbidden"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1418 | purple_xmlnode_set_namespace(child, NS_XMPP_STANZAS); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1419 | child = purple_xmlnode_new_child(error, "text"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1420 | purple_xmlnode_set_namespace(child, NS_XMPP_STANZAS); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1421 | purple_xmlnode_insert_data(child, "Offer Declined", -1); |
|
27817
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1422 | |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1423 | jabber_iq_send(iq); |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1424 | } |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1425 | |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1426 | purple_debug_info("jabber", "in jabber_si_xfer_request_denied\n"); |
| 13146 | 1427 | } |
| 1428 | ||
| 1429 | ||
| 15884 | 1430 | static void jabber_si_xfer_cancel_recv(PurpleXfer *xfer) |
| 8312 | 1431 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1432 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1433 | /* 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
|
1434 | if (jsx->ibb_session) { |
|
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1435 | 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
|
1436 | } |
|
28828
7c1855f037e7
jabber: Convert to purple_debug_* convenience functions.
Paul Aurich <darkrain42@pidgin.im>
parents:
28322
diff
changeset
|
1437 | purple_debug_info("jabber", "in jabber_si_xfer_cancel_recv\n"); |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1438 | |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1439 | g_cancellable_cancel(jsx->cancellable); |
| 8312 | 1440 | } |
| 1441 | ||
| 1442 | ||
| 1443 | static void jabber_si_xfer_send_disco_cb(JabberStream *js, const char *who, | |
| 1444 | JabberCapabilities capabilities, gpointer data) | |
| 1445 | { | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1446 | PurpleXfer *xfer = PURPLE_XFER(data); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1447 | JabberSIXfer *jsx = JABBER_SI_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
|
1448 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1449 | 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
|
1450 | purple_debug_info("jabber", |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1451 | "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
|
1452 | 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
|
1453 | } |
| 8312 | 1454 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1455 | if (capabilities & JABBER_CAP_SI_FILE_XFER) { |
| 8312 | 1456 | jabber_si_xfer_send_request(xfer); |
| 1457 | } else { | |
| 1458 | char *msg = g_strdup_printf(_("Unable to send file to %s, user does not support file transfers"), who); | |
| 15884 | 1459 | purple_notify_error(js->gc, _("File Send Failed"), |
|
34449
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1460 | _("File Send Failed"), msg, |
|
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1461 | purple_request_cpar_from_connection(js->gc)); |
| 8312 | 1462 | g_free(msg); |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1463 | purple_xfer_cancel_local(xfer); |
| 8312 | 1464 | } |
| 1465 | } | |
| 1466 | ||
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1467 | static void |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1468 | resource_select_cancel_cb(PurpleXfer *xfer, |
|
42128
118067ca0367
Convert PurpleRequestPage into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42127
diff
changeset
|
1469 | G_GNUC_UNUSED PurpleRequestPage *page) |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1470 | { |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1471 | 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
|
1472 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1473 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1474 | 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
|
1475 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1476 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1477 | char **who_v = g_strsplit(purple_xfer_get_remote_user(xfer), "/", 2); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1478 | char *who; |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1479 | JabberBuddy *jb; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1480 | JabberBuddyResource *jbr = NULL; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1481 | |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1482 | 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
|
1483 | if (jb) { |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1484 | 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
|
1485 | } |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1486 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1487 | 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
|
1488 | g_strfreev(who_v); |
|
34913
21017b84a070
Refactored jabber to use the GObject xfer API.
Ankit Vani <a@nevitus.org>
parents:
34912
diff
changeset
|
1489 | purple_xfer_set_remote_user(xfer, who); |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1490 | |
|
29118
8d6805679729
Use the jabber_resource_know_capabilities function to determine if a buddy
Marcus Lundblad <malu@pidgin.im>
parents:
29041
diff
changeset
|
1491 | 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
|
1492 | char *msg; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1493 | |
|
28979
191942cc7747
jabber: Start putting all the namespaces in one location with consistent naming.
Paul Aurich <darkrain42@pidgin.im>
parents:
28828
diff
changeset
|
1494 | 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
|
1495 | 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
|
1496 | 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
|
1497 | jabber_si_xfer_send_request(xfer); |
| 34921 | 1498 | g_free(who); |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1499 | return; |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1500 | } |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1501 | |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1502 | 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
|
1503 | purple_notify_error(jsx->js->gc, _("File Send Failed"), |
|
34449
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1504 | _("File Send Failed"), msg, |
|
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1505 | purple_request_cpar_from_connection(jsx->js->gc)); |
|
27816
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1506 | g_free(msg); |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1507 | 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
|
1508 | } else { |
|
2771743d6fdc
Use Entity Caps for determining file transfer abilities, if possible.
Paul Aurich <darkrain42@pidgin.im>
parents:
27525
diff
changeset
|
1509 | 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
|
1510 | 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
|
1511 | } |
| 34921 | 1512 | |
| 1513 | g_free(who); | |
|
17424
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 | |
|
42128
118067ca0367
Convert PurpleRequestPage into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42127
diff
changeset
|
1516 | static void |
|
118067ca0367
Convert PurpleRequestPage into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42127
diff
changeset
|
1517 | resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestPage *page) |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1518 | { |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1519 | const char *selected_label = purple_request_page_get_choice(page, "resource"); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1520 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1521 | 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
|
1522 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1523 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1524 | static void jabber_si_xfer_xfer_init(PurpleXfer *xfer) |
| 8262 | 1525 | { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1526 | JabberSIXfer *jsx = JABBER_SI_XFER(xfer); |
| 8262 | 1527 | JabberIq *iq; |
|
34926
c5b444d1447d
Changed prefix of PurpleXferType enums to PURPLE_XFER_TYPE_*
Ankit Vani <a@nevitus.org>
parents:
34921
diff
changeset
|
1528 | if(purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_SEND) { |
| 8312 | 1529 | JabberBuddy *jb; |
| 1530 | 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
|
1531 | 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
|
1532 | GList *resources = NULL; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31123
diff
changeset
|
1533 | |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1534 | if(NULL != (resource = jabber_get_resource(purple_xfer_get_remote_user(xfer)))) { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1535 | /* 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
|
1536 | * 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
|
1537 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1538 | 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
|
1539 | 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
|
1540 | return; |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1541 | } |
| 8312 | 1542 | |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1543 | jb = jabber_buddy_find(jsx->js, purple_xfer_get_remote_user(xfer), TRUE); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1544 | |
|
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
|
1545 | 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
|
1546 | 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
|
1547 | |
|
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 | 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
|
1549 | 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
|
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 | 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
|
1552 | (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
|
1553 | && (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
|
1554 | || 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
|
1555 | 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
|
1556 | } |
|
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
|
1557 | } |
|
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
|
1558 | } |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31123
diff
changeset
|
1559 | |
|
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
|
1560 | 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
|
1561 | /* 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
|
1562 | * 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
|
1563 | * 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
|
1564 | char *msg; |
| 8262 | 1565 | |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1566 | if(!jb) { |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1567 | msg = g_strdup_printf(_("Unable to send file to %s, invalid JID"), purple_xfer_get_remote_user(xfer)); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1568 | } else if(jb->subscription & JABBER_SUB_TO) { |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1569 | msg = g_strdup_printf(_("Unable to send file to %s, user is not online"), purple_xfer_get_remote_user(xfer)); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1570 | } else { |
|
32270
028a4b3c0402
Steps toward hiding PurpleXfer.
Daniel Atallah <datallah@pidgin.im>
parents:
32245
diff
changeset
|
1571 | msg = g_strdup_printf(_("Unable to send file to %s, not subscribed to user presence"), purple_xfer_get_remote_user(xfer)); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1572 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1573 | |
|
34449
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1574 | purple_notify_error(jsx->js->gc, _("File Send Failed"), |
|
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1575 | _("File Send Failed"), msg, |
|
bbcb198650b7
Notify API: extend purple_notify_message with PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34338
diff
changeset
|
1576 | purple_request_cpar_from_connection(jsx->js->gc)); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1577 | 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
|
1578 | } 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
|
1579 | /* 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
|
1580 | * 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
|
1581 | 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
|
1582 | do_transfer_send(xfer, jbr->name); |
| 8312 | 1583 | } else { |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1584 | /* 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
|
1585 | GList *l; |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1586 | PurpleRequestPage *page = NULL; |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1587 | PurpleRequestField *field = NULL; |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1588 | PurpleRequestFieldChoice *choice = NULL; |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1589 | PurpleRequestGroup *group = NULL; |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1590 | char *msg = NULL; |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
31123
diff
changeset
|
1591 | |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1592 | field = purple_request_field_choice_new("resource", _("Resource"), 0); |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1593 | choice = PURPLE_REQUEST_FIELD_CHOICE(field); |
|
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
|
1594 | 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
|
1595 | jbr = l->data; |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1596 | purple_request_field_choice_add_full(choice, jbr->name, |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1597 | g_strdup(jbr->name), |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1598 | g_free); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1599 | } |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1600 | |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1601 | group = purple_request_group_new(NULL); |
|
42127
18acb99a0fa6
Convert PurpleRequestGroup into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41967
diff
changeset
|
1602 | purple_request_group_add_field(group, field); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1603 | |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1604 | page = purple_request_page_new(); |
|
42128
118067ca0367
Convert PurpleRequestPage into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42127
diff
changeset
|
1605 | purple_request_page_add_group(page, group); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1606 | |
|
42139
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1607 | msg = g_strdup_printf(_("Please select the resource of %s to " |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1608 | "which you would like to send a file"), |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1609 | purple_xfer_get_remote_user(xfer)); |
|
c053558f1236
Make PurpleRequestFieldChoice into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42128
diff
changeset
|
1610 | |
|
42128
118067ca0367
Convert PurpleRequestPage into a GObject
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42127
diff
changeset
|
1611 | purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, page, |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1612 | _("Send File"), G_CALLBACK(resource_select_ok_cb), _("Cancel"), G_CALLBACK(resource_select_cancel_cb), |
|
34332
876483829700
Request API refactoring: switch purple_request_fields to PurpleRequestCommonParameters
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
34304
diff
changeset
|
1613 | purple_request_cpar_from_connection(jsx->js->gc), xfer); |
|
17424
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1614 | |
|
3fd87c1c0320
if there are multiple resources available, ask the user which resource to
Nathan Walp <nwalp@pidgin.im>
parents:
15884
diff
changeset
|
1615 | g_free(msg); |
| 8312 | 1616 | } |
|
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
|
1617 | |
|
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
|
1618 | g_list_free(resources); |
| 8312 | 1619 | } else { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1620 | PurpleXmlNode *si, *feature, *x, *field, *value; |
| 8262 | 1621 | |
| 8312 | 1622 | iq = jabber_iq_new(jsx->js, JABBER_IQ_RESULT); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1623 | purple_xmlnode_set_attrib(iq->node, "to", purple_xfer_get_remote_user(xfer)); |
| 8312 | 1624 | if(jsx->iq_id) |
| 1625 | 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
|
1626 | else |
|
1192c3f37355
Properly send rejection to initiator if we reject a transfer.
Paul Aurich <darkrain42@pidgin.im>
parents:
27816
diff
changeset
|
1627 | purple_debug_error("jabber", "Sending SI result with new IQ id.\n"); |
| 8312 | 1628 | |
| 10940 | 1629 | jsx->accepted = TRUE; |
| 1630 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1631 | si = purple_xmlnode_new_child(iq->node, "si"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1632 | purple_xmlnode_set_namespace(si, "http://jabber.org/protocol/si"); |
| 8312 | 1633 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1634 | feature = purple_xmlnode_new_child(si, "feature"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1635 | purple_xmlnode_set_namespace(feature, "http://jabber.org/protocol/feature-neg"); |
| 8262 | 1636 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1637 | x = purple_xmlnode_new_child(feature, "x"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1638 | purple_xmlnode_set_namespace(x, "jabber:x:data"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1639 | purple_xmlnode_set_attrib(x, "type", "submit"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1640 | field = purple_xmlnode_new_child(x, "field"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1641 | purple_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
|
1642 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1643 | /* 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
|
1644 | same session) with this JID, and only present IBB as an option to |
|
41084
72d6941bfa2e
Fix typos in protocol plugins
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40817
diff
changeset
|
1645 | avoid unnecessary timeout */ |
|
26014
884c77a43f5a
Add timeout when receiver waits for initiator to open an IBB session
Marcus Lundblad <malu@pidgin.im>
parents:
26009
diff
changeset
|
1646 | /* 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
|
1647 | 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
|
1648 | if (jsx->stream_method & STREAM_METHOD_BYTESTREAMS) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1649 | value = purple_xmlnode_new_child(field, "value"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1650 | purple_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
|
1651 | } else if(jsx->stream_method & STREAM_METHOD_IBB) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1652 | value = purple_xmlnode_new_child(field, "value"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1653 | purple_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
|
1654 | } |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1655 | |
| 8312 | 1656 | jabber_iq_send(iq); |
| 1657 | } | |
| 8262 | 1658 | } |
| 1659 | ||
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1660 | PurpleXfer * |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1661 | jabber_si_new_xfer(G_GNUC_UNUSED PurpleProtocolXfer *prplxfer, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1662 | PurpleConnection *gc, const char *who) |
| 8312 | 1663 | { |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1664 | JabberStream *js; |
| 8312 | 1665 | JabberSIXfer *jsx; |
| 1666 | ||
|
32277
97f16af01a05
Convert jabber prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
32270
diff
changeset
|
1667 | js = purple_connection_get_protocol_data(gc); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
8838
diff
changeset
|
1668 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1669 | jsx = g_object_new( |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1670 | JABBER_TYPE_SI_XFER, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1671 | "account", purple_connection_get_account(gc), |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1672 | "type", PURPLE_XFER_TYPE_SEND, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1673 | "remote-user", who, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1674 | NULL |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1675 | ); |
|
26042
4dabdb5fe213
Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26037
diff
changeset
|
1676 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1677 | jsx->js = js; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1678 | js->file_transfers = g_list_append(js->file_transfers, jsx); |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1679 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1680 | return PURPLE_XFER(jsx); |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1681 | } |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1682 | |
|
38841
518362268798
make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents:
38838
diff
changeset
|
1683 | void jabber_si_xfer_send(PurpleProtocolXfer *prplxfer, PurpleConnection *gc, const char *who, const char *file) |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1684 | { |
| 15884 | 1685 | PurpleXfer *xfer; |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11656
diff
changeset
|
1686 | |
|
38841
518362268798
make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents:
38838
diff
changeset
|
1687 | xfer = jabber_si_new_xfer(prplxfer, gc, who); |
| 8312 | 1688 | |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9030
diff
changeset
|
1689 | if (file) |
| 15884 | 1690 | purple_xfer_request_accepted(xfer, file); |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9030
diff
changeset
|
1691 | else |
| 15884 | 1692 | purple_xfer_request(xfer); |
| 8262 | 1693 | } |
| 1694 | ||
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1695 | #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
|
1696 | static void |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1697 | 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
|
1698 | { |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1699 | 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
|
1700 | |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1701 | if (data) { |
|
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1702 | 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
|
1703 | 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
|
1704 | /* 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
|
1705 | 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
|
1706 | } |
|
30118
cee45670f6ef
Updated to use new BoB request functionallity
Marcus Lundblad <malu@pidgin.im>
parents:
30116
diff
changeset
|
1707 | |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1708 | purple_xfer_request(xfer); |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1709 | } |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1710 | #endif |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1711 | |
|
41791
3bf884522663
xmpp: Remove unused prototypes and code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41741
diff
changeset
|
1712 | static void |
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1713 | jabber_si_parse(JabberStream *js, const char *from, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1714 | G_GNUC_UNUSED JabberIqType type, const char *id, |
|
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1715 | PurpleXmlNode *si) |
| 8262 | 1716 | { |
| 1717 | JabberSIXfer *jsx; | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1718 | PurpleXmlNode *file, *feature, *x, *field, *option, *value; |
|
31739
88b0a203e2e0
Silence a swath of warnings regarding set-but-unused.
Paul Aurich <darkrain42@pidgin.im>
parents:
31735
diff
changeset
|
1719 | #if ENABLE_FT_THUMBNAILS |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1720 | PurpleXmlNode *thumbnail; |
|
31739
88b0a203e2e0
Silence a swath of warnings regarding set-but-unused.
Paul Aurich <darkrain42@pidgin.im>
parents:
31735
diff
changeset
|
1721 | #endif |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
1722 | const char *stream_id, *filename, *filesize_c, *profile; |
|
32665
1ddb514482cb
Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32594
diff
changeset
|
1723 | goffset filesize = 0; |
| 8262 | 1724 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1725 | if(!(profile = purple_xmlnode_get_attrib(si, "profile")) || |
|
38259
c593fc9f5438
Replace strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
38258
diff
changeset
|
1726 | !purple_strequal(profile, NS_SI_FILE_TRANSFER)) |
| 8262 | 1727 | return; |
| 1728 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1729 | if(!(stream_id = purple_xmlnode_get_attrib(si, "id"))) |
| 8262 | 1730 | return; |
| 1731 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1732 | if(!(file = purple_xmlnode_get_child(si, "file"))) |
| 8262 | 1733 | return; |
| 1734 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1735 | if(!(filename = purple_xmlnode_get_attrib(file, "name"))) |
| 8262 | 1736 | return; |
| 1737 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1738 | if((filesize_c = purple_xmlnode_get_attrib(file, "size"))) |
|
32665
1ddb514482cb
Update XMPP for 64-bit transfers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32594
diff
changeset
|
1739 | filesize = g_ascii_strtoull(filesize_c, NULL, 10); |
| 8262 | 1740 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1741 | if(!(feature = purple_xmlnode_get_child(si, "feature"))) |
| 8262 | 1742 | return; |
| 1743 | ||
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1744 | if(!(x = purple_xmlnode_get_child_with_namespace(feature, "x", "jabber:x:data"))) |
| 8262 | 1745 | return; |
| 1746 | ||
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
1747 | if(!from) |
| 10939 | 1748 | return; |
| 1749 | ||
| 1750 | /* if they've already sent us this file transfer with the same damn id | |
| 1751 | * then we're gonna ignore it, until I think of something better to do | |
| 1752 | * 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
|
1753 | if(jabber_si_xfer_find(js, stream_id, from) != NULL) |
| 10939 | 1754 | return; |
| 1755 | ||
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1756 | jsx = g_object_new( |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1757 | JABBER_TYPE_SI_XFER, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1758 | "account", purple_connection_get_account(js->gc), |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1759 | "type", PURPLE_XFER_TYPE_RECEIVE, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1760 | "remote-user", from, |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1761 | NULL |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1762 | ); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1763 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1764 | for(field = purple_xmlnode_get_child(x, "field"); field; field = purple_xmlnode_get_next_twin(field)) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1765 | const char *var = purple_xmlnode_get_attrib(field, "var"); |
| 38260 | 1766 | if(purple_strequal(var, "stream-method")) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1767 | for(option = purple_xmlnode_get_child(field, "option"); option; |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1768 | option = purple_xmlnode_get_next_twin(option)) { |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1769 | if((value = purple_xmlnode_get_child(option, "value"))) { |
| 8262 | 1770 | char *val; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1771 | if((val = purple_xmlnode_get_data(value))) { |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
1772 | if(purple_strequal(val, NS_BYTESTREAMS)) { |
| 8262 | 1773 | jsx->stream_method |= STREAM_METHOD_BYTESTREAMS; |
|
38258
9a6551eba09c
Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents:
36256
diff
changeset
|
1774 | } else if(purple_strequal(val, NS_IBB)) { |
| 8262 | 1775 | jsx->stream_method |= STREAM_METHOD_IBB; |
| 1776 | } | |
| 1777 | g_free(val); | |
| 1778 | } | |
| 1779 | } | |
| 1780 | } | |
| 1781 | } | |
| 1782 | } | |
| 1783 | ||
| 1784 | if(jsx->stream_method == STREAM_METHOD_UNKNOWN) { | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1785 | g_object_unref(G_OBJECT(jsx)); |
| 8262 | 1786 | return; |
| 1787 | } | |
| 1788 | ||
| 1789 | jsx->js = js; | |
| 1790 | 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
|
1791 | jsx->iq_id = g_strdup(id); |
| 8262 | 1792 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1793 | purple_xfer_set_filename(PURPLE_XFER(jsx), filename); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1794 | if(filesize > 0) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1795 | purple_xfer_set_size(PURPLE_XFER(jsx), filesize); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1796 | } |
| 8262 | 1797 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1798 | js->file_transfers = g_list_append(js->file_transfers, jsx); |
| 8262 | 1799 | |
|
30132
064f5dc73a6f
Disable thumbnails for XMPP (in si.c) by using an #define
Marcus Lundblad <malu@pidgin.im>
parents:
30126
diff
changeset
|
1800 | #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
|
1801 | /* if there is a thumbnail, we should request it... */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1802 | if ((thumbnail = purple_xmlnode_get_child_with_namespace(file, "thumbnail", |
|
29466
9263cce2f6b3
Added the "thumbs" namespace to namespaces.h
Marcus Lundblad <malu@pidgin.im>
parents:
29465
diff
changeset
|
1803 | NS_THUMBS))) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34926
diff
changeset
|
1804 | const char *cid = purple_xmlnode_get_attrib(thumbnail, "cid"); |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1805 | if (cid) { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1806 | jabber_data_request(js, cid, purple_xfer_get_remote_user(PURPLE_XFER(jsx)), |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1807 | NULL, TRUE, jabber_si_thumbnail_cb, jsx); |
|
31740
6a4a29d1541f
jabber: This seems slightly more straightforward to me.
Paul Aurich <darkrain42@pidgin.im>
parents:
31739
diff
changeset
|
1808 | return; |
|
27425
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1809 | } |
|
c16aa3c94fb4
Actually request the thumbnail when getting one in an offer.
Marcus Lundblad <malu@pidgin.im>
parents:
27424
diff
changeset
|
1810 | } |
|
31740
6a4a29d1541f
jabber: This seems slightly more straightforward to me.
Paul Aurich <darkrain42@pidgin.im>
parents:
31739
diff
changeset
|
1811 | #endif |
|
6a4a29d1541f
jabber: This seems slightly more straightforward to me.
Paul Aurich <darkrain42@pidgin.im>
parents:
31739
diff
changeset
|
1812 | |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1813 | purple_xfer_request(PURPLE_XFER(jsx)); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1814 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1815 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1816 | /****************************************************************************** |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1817 | * GObject Implementation |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1818 | *****************************************************************************/ |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1819 | static void |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1820 | jabber_si_xfer_init(JabberSIXfer *jsx) |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1821 | { |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1822 | jsx->ibb_session = NULL; |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1823 | jsx->cancellable = g_cancellable_new(); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1824 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1825 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1826 | static void |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1827 | jabber_si_xfer_finalize(GObject *obj) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1828 | JabberSIXfer *jsx = JABBER_SI_XFER(obj); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1829 | JabberStream *js = jsx->js; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1830 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1831 | js->file_transfers = g_list_remove(js->file_transfers, jsx); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1832 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1833 | g_cancellable_cancel(jsx->cancellable); |
|
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1834 | g_clear_object(&jsx->cancellable); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1835 | |
|
40587
f2d29265494b
Embed SOCKS5 proxying in Jabber SI xfer code
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40474
diff
changeset
|
1836 | g_clear_object(&jsx->client); |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1837 | g_clear_object(&jsx->local_streamhost_conn); |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1838 | if (jsx->service) { |
|
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1839 | g_socket_service_stop(jsx->service); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1840 | } |
|
40404
d85e4d3f17be
xmpp: Convert si xfer to gio socket server.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40403
diff
changeset
|
1841 | g_clear_object(&jsx->service); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1842 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1843 | if (jsx->iq_id != NULL) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1844 | jabber_iq_remove_callback_by_id(js, jsx->iq_id); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1845 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1846 | |
|
42175
4185b4043214
Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42139
diff
changeset
|
1847 | g_clear_handle_id(&jsx->connect_timeout, g_source_remove); |
|
4185b4043214
Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42139
diff
changeset
|
1848 | g_clear_handle_id(&jsx->ibb_timeout_handle, g_source_remove); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1849 | |
|
40137
016690872c6c
Add new and free functions for structs to reduce duplication
qarkai <qarkai@gmail.com>
parents:
39670
diff
changeset
|
1850 | g_list_free_full(jsx->streamhosts, (GDestroyNotify)jabber_bytestreams_streamhost_free); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1851 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1852 | if (jsx->ibb_session) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1853 | purple_debug_info("jabber", |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1854 | "jabber_si_xfer_free: destroying IBB session\n"); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1855 | jabber_ibb_session_destroy(jsx->ibb_session); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1856 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1857 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1858 | if (jsx->ibb_buffer) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1859 | g_object_unref(G_OBJECT(jsx->ibb_buffer)); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1860 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1861 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1862 | purple_debug_info("jabber", "jabber_si_xfer_free(): freeing jsx %p\n", jsx); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1863 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1864 | g_free(jsx->stream_id); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1865 | g_free(jsx->iq_id); |
|
40603
46f9691e2ac7
Rewrite XMPP SOCKS5 communication using Gio.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40588
diff
changeset
|
1866 | g_free(jsx->socks_buf); |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1867 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1868 | G_OBJECT_CLASS(jabber_si_xfer_parent_class)->finalize(obj); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1869 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1870 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1871 | static void |
|
41967
025eee9e6f1d
Bump C standard to C99 for XMPP and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41826
diff
changeset
|
1872 | jabber_si_xfer_class_finalize(G_GNUC_UNUSED JabberSIXferClass *klass) { |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1873 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1874 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1875 | static void |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1876 | jabber_si_xfer_class_init(JabberSIXferClass *klass) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1877 | GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1878 | PurpleXferClass *xfer_class = PURPLE_XFER_CLASS(klass); |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1879 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1880 | obj_class->finalize = jabber_si_xfer_finalize; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1881 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1882 | xfer_class->init = jabber_si_xfer_xfer_init; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1883 | xfer_class->request_denied = jabber_si_xfer_request_denied; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1884 | xfer_class->cancel_send = jabber_si_xfer_cancel_send; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1885 | xfer_class->cancel_recv = jabber_si_xfer_cancel_recv; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1886 | xfer_class->read = jabber_si_xfer_ibb_read; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1887 | xfer_class->write = jabber_si_xfer_ibb_write; |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1888 | } |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1889 | |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1890 | /****************************************************************************** |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1891 | * Public API |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1892 | *****************************************************************************/ |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1893 | void |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1894 | jabber_si_xfer_register(GTypeModule *module) { |
|
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1895 | jabber_si_xfer_register_type(module); |
| 8262 | 1896 | } |
| 1897 | ||
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1898 | void |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1899 | jabber_si_init(void) { |
|
27155
53502d71efdd
Remove trailing whitespace that has snuck in.
Paul Aurich <darkrain42@pidgin.im>
parents:
27140
diff
changeset
|
1900 | 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
|
1901 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1902 | 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
|
1903 | } |
| 7395 | 1904 | |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1905 | void |
|
39669
bab07ecb9330
Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents:
39556
diff
changeset
|
1906 | jabber_si_uninit(void) { |
|
24372
830701cec96f
Implements file transfers using in-band bytestreams for XMPP
Marcus Lundblad <malu@pidgin.im>
parents:
24038
diff
changeset
|
1907 | 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
|
1908 | } |