libpurple/protocols/gg/edisc.c

Thu, 05 Jan 2023 22:40:46 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Thu, 05 Jan 2023 22:40:46 -0600
changeset 42005
92c8a7e3aaf5
parent 41921
24e5305ebcb6
child 42085
a76f1668564c
permissions
-rw-r--r--

Simplify hash tables that are used as sets

Testing Done:
Compiled only.

Reviewed at https://reviews.imfreedom.org/r/2179/

35358
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
1 /* purple
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
2 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
5 * source distribution.
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
6 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
7 * Component written by Tomek Wasilczyk (http://www.wasilczyk.pl).
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
8 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
9 * This file is dual-licensed under the GPL2+ and the X11 (MIT) licences.
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
10 * As a recipient of this file you may choose, which license to receive the
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
11 * code under. As a contributor, you have to ensure the new code is
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
12 * compatible with both.
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
13 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
14 * This program is free software; you can redistribute it and/or modify
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
15 * it under the terms of the GNU General Public License as published by
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
16 * the Free Software Foundation; either version 2 of the License, or
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
17 * (at your option) any later version.
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
18 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
19 * This program is distributed in the hope that it will be useful,
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
22 * GNU General Public License for more details.
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
23 *
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
24 * You should have received a copy of the GNU General Public License
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
25 * along with this program; if not, write to the Free Software
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7beae478c905 Style: fix gg (partially)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35190
diff changeset
27 */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
28 #include "edisc.h"
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
29
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
30 #include "gg.h"
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
31 #include "libgaduw.h"
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
32 #include "utils.h"
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
33
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
34 #include <json-glib/json-glib.h>
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
35
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
36 #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
37
40474
1341be8e3402 Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
38 #include <purple.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
39
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
40 #define GGP_EDISC_OS "WINNT x86-msvc"
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
41 #define GGP_EDISC_TYPE "desktop"
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
42 #define GGP_EDISC_API "6"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
43
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
44 #define GGP_EDISC_RESPONSE_MAX 10240
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
45 #define GGP_EDISC_FNAME_ALLOWED "1234567890" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
46 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
47 " [](){}-+=_;'<>,.&$!"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
48
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
49 typedef struct _ggp_edisc_xfer ggp_edisc_xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
50
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
51 struct _ggp_edisc_session_data
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
52 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
53 GHashTable *xfers_initialized;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
54 GHashTable *xfers_history;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
55
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
56 SoupSession *session;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
57 gchar *security_token;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
58
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
59 SoupMessage *auth_request;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
60 gboolean auth_done;
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
61 GSList *auth_pending;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
62 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
63
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
64 struct _GGPXfer
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
65 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
66 PurpleXfer parent;
41878
64e455cfb6b4 Port some of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41700
diff changeset
67 GCancellable *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: 38841
diff changeset
68
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
69 gchar *filename;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
70 gchar *ticket_id;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
71
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
72 gboolean allowed, ready;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
73
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
74 PurpleConnection *gc;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
75 SoupMessage *msg;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
76 gint handler;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
77 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
78
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
79 typedef enum
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
80 {
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
81 GGP_EDISC_XFER_ACK_STATUS_UNKNOWN,
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
82 GGP_EDISC_XFER_ACK_STATUS_ALLOWED,
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
83 GGP_EDISC_XFER_ACK_STATUS_REJECTED
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
84 } ggp_edisc_xfer_ack_status;
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
85
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
86 typedef void (*ggp_ggdrive_auth_cb)(PurpleConnection *gc, gboolean success,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
87 gpointer user_data);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
88
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
89 /*******************************************************************************
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
90 * Setting up.
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
91 ******************************************************************************/
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
92
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
93 static inline ggp_edisc_session_data *
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
94 ggp_edisc_get_sdata(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
95 {
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
96 GGPInfo *accdata;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
97
36068
e9b9320a985a Drop PURPLE_CONNECTION_IS_VALID in favor of (temporary) PURPLE_ASSERT_CONNECTION_IS_VALID
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35360
diff changeset
98 PURPLE_ASSERT_CONNECTION_IS_VALID(gc);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
99
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
100 accdata = purple_connection_get_protocol_data(gc);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
101 g_return_val_if_fail(accdata != NULL, NULL);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
102
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
103 return accdata->edisc_data;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
104 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
105
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
106 void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
107 ggp_edisc_setup(PurpleConnection *gc, GProxyResolver *resolver)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
108 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
109 GGPInfo *accdata = purple_connection_get_protocol_data(gc);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
110 ggp_edisc_session_data *sdata = g_new0(ggp_edisc_session_data, 1);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
111
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
112 accdata->edisc_data = sdata;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
113
40819
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40474
diff changeset
114 sdata->session = soup_session_new_with_options("proxy-resolver", resolver,
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40474
diff changeset
115 NULL);
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40474
diff changeset
116 soup_session_add_feature_by_type(sdata->session, SOUP_TYPE_COOKIE_JAR);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
117 sdata->xfers_initialized = g_hash_table_new(g_str_hash, g_str_equal);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
118 sdata->xfers_history = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
119 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
120
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
121 void ggp_edisc_cleanup(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
122 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
123 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
124
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
125 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
126
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
127 soup_session_abort(sdata->session);
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
128 g_slist_free_full(sdata->auth_pending, g_free);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
129 g_free(sdata->security_token);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
130
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
131 g_object_unref(sdata->session);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
132 g_hash_table_destroy(sdata->xfers_initialized);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
133 g_hash_table_destroy(sdata->xfers_history);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
134
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
135 g_free(sdata);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
136 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
137
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
138 /*******************************************************************************
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
139 * Misc.
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
140 ******************************************************************************/
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
141
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
142 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
143 ggp_edisc_set_defaults(SoupMessage *msg)
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
144 {
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
145 SoupMessageHeaders *headers = soup_message_get_request_headers(msg);
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
146
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
147 // purple_http_request_set_max_len(msg, GGP_EDISC_RESPONSE_MAX);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
148 soup_message_headers_replace(headers, "X-gged-api-version",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
149 GGP_EDISC_API);
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
150
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
151 /* optional fields */
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
152 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
153 headers, "User-Agent",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
154 "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20120613 "
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
155 "GG/11.0.0.8169 (WINNT_x86-msvc; pl; beta; standard)");
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
156 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
157 headers, "Accept",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
158 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
159 soup_message_headers_replace(headers, "Accept-Language",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
160 "pl,en-us;q=0.7,en;q=0.3");
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
161 /* soup_message_headers_replace(headers, "Accept-Encoding",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
162 * "gzip, deflate"); */
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
163 soup_message_headers_replace(headers, "Accept-Charset",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
164 "ISO-8859-2,utf-8;q=0.7,*;q=0.7");
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
165 soup_message_headers_replace(headers, "Connection", "keep-alive");
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
166 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
167 headers, "Content-Type",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
168 "application/x-www-form-urlencoded; charset=UTF-8");
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
169 }
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
170
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
171 static int ggp_edisc_parse_error(const gchar *data)
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
172 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
173 JsonParser *parser;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
174 JsonObject *result;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
175 int error_id;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
176
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
177 parser = ggp_json_parse(data);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
178 result = json_node_get_object(json_parser_get_root(parser));
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
179 result = json_object_get_object_member(result, "result");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
180 error_id = json_object_get_int_member(result, "appStatus");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
181 purple_debug_info("gg", "edisc error: %s (%d)\n",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
182 json_object_get_string_member(result, "errorMsg"),
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
183 error_id);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
184 g_object_unref(parser);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
185
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
186 return error_id;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
187 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
188
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
189 static ggp_edisc_xfer_ack_status
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
190 ggp_edisc_xfer_parse_ack_status(const gchar *str)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
191 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
192 g_return_val_if_fail(str != NULL, GGP_EDISC_XFER_ACK_STATUS_UNKNOWN);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
193
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
194 if (g_strcmp0("unknown", str) == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
195 return GGP_EDISC_XFER_ACK_STATUS_UNKNOWN;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
196 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
197 if (g_strcmp0("allowed", str) == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
198 return GGP_EDISC_XFER_ACK_STATUS_ALLOWED;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
199 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
200 if (g_strcmp0("rejected", str) == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
201 return GGP_EDISC_XFER_ACK_STATUS_REJECTED;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
202 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
203
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
204 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
205 "gg", "ggp_edisc_xfer_parse_ack_status: unknown status (%s)", str);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
206 return GGP_EDISC_XFER_ACK_STATUS_UNKNOWN;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
207 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
208
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
209 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
210 * General xfer functions.
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
211 ******************************************************************************/
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
212
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
213 static const gchar *
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
214 ggp_edisc_xfer_ticket_url(const gchar *ticket_id)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
215 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
216 static gchar ticket_url[150];
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
217
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
218 g_snprintf(ticket_url, sizeof(ticket_url),
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
219 "https://drive.mpa.gg.pl/send_ticket/%s", ticket_id);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
220
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
221 return ticket_url;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
222 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
223
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
224 static void ggp_edisc_xfer_error(PurpleXfer *xfer, const gchar *msg)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
225 {
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
226 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
227 g_return_if_reached();
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
228 purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_CANCEL_REMOTE);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
229 purple_xfer_conversation_write(xfer, msg, TRUE);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
230 purple_xfer_error(
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
231 purple_xfer_get_xfer_type(xfer),
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
232 purple_xfer_get_account(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
233 purple_xfer_get_remote_user(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
234 msg);
34387
288370cfc73c Cosmetic changes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34386
diff changeset
235 purple_xfer_end(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
236 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
237
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
238 /*******************************************************************************
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
239 * Authentication.
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
240 ******************************************************************************/
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
241
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
242 typedef struct _ggp_edisc_auth_data {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
243 ggp_ggdrive_auth_cb cb;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
244 gpointer user_data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
245 } ggp_edisc_auth_data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
246
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
247 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
248 ggp_ggdrive_auth_results(PurpleConnection *gc, gboolean success)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
249 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
250 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
251 GSList *it;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
252
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
253 purple_debug_info("gg", "ggp_ggdrive_auth_results(gc=%p): %d", gc, success);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
254
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
255 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
256
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
257 for (it = sdata->auth_pending; it; it = g_slist_delete_link(it, it)) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
258 ggp_edisc_auth_data *auth = it->data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
259
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
260 auth->cb(gc, success, auth->user_data);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
261 g_free(auth);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
262 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
263 sdata->auth_pending = NULL;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
264 sdata->auth_done = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
265 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
266
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
267 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
268 ggp_ggdrive_auth_done(GObject *source, GAsyncResult *async_result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
269 gpointer data)
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
270 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
271 PurpleConnection *gc = data;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
272 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
273 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
274 const char *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
275 gsize size = 0;
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
276 SoupStatus status_code;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
277 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
278 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
279 int status = -1;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
280 GError *error = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
281
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
282 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
283
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
284 status_code = soup_message_get_status(sdata->auth_request);
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
285 if (!SOUP_STATUS_IS_SUCCESSFUL(status_code)) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
286 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
287 "ggp_ggdrive_auth_done: authentication failed due to "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
288 "unsuccessful request (code = %d)",
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
289 status_code);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
290 g_clear_object(&sdata->auth_request);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
291 ggp_ggdrive_auth_results(gc, FALSE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
292 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
293 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
294
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
295 response_body = soup_session_send_and_read_finish(SOUP_SESSION(source),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
296 async_result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
297 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
298 purple_debug_misc("gg",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
299 "ggp_ggdrive_auth_done: authentication failed due to "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
300 "unsuccessful request (%s)",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
301 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
302 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
303 g_clear_object(&sdata->auth_request);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
304 ggp_ggdrive_auth_results(gc, FALSE);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
305 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
306 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
307
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
308 buffer = g_bytes_get_data(response_body, &size);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
309 parser = ggp_json_parse(buffer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
310 result = json_node_get_object(json_parser_get_root(parser));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
311 result = json_object_get_object_member(result, "result");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
312 if (json_object_has_member(result, "status"))
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
313 status = json_object_get_int_member(result, "status");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
314 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
315
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
316 if (status != 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
317 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
318 "ggp_ggdrive_auth_done: authentication failed due to "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
319 "bad result (status=%d)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
320 status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
321 if (purple_debug_is_verbose()) {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
322 purple_debug_misc("gg", "ggp_ggdrive_auth_done: result = %.*s",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
323 (int)size, buffer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
324 }
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
325 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
326 g_clear_object(&sdata->auth_request);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
327 ggp_ggdrive_auth_results(gc, FALSE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
328 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
329 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
330
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
331 sdata->security_token = g_strdup(soup_message_headers_get_one(
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
332 soup_message_get_response_headers(sdata->auth_request),
41215
43a4dc8903fb Use accessor for SoupMessage->response_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41214
diff changeset
333 "X-gged-security-token"));
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
334 if (!sdata->security_token) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
335 purple_debug_misc("gg", "ggp_ggdrive_auth_done: authentication failed "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
336 "due to missing security token header");
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
337 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
338 g_clear_object(&sdata->auth_request);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
339 ggp_ggdrive_auth_results(gc, FALSE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
340 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
341 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
342
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
343 if (purple_debug_is_unsafe()) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
344 purple_debug_misc("gg", "ggp_ggdrive_auth_done: security_token=%s",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
345 sdata->security_token);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
346 }
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
347
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
348 g_clear_pointer(&response_body, g_bytes_unref);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
349 g_clear_object(&sdata->auth_request);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
350
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
351 ggp_ggdrive_auth_results(gc, TRUE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
352 }
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
353
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
354 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
355 ggp_ggdrive_auth(PurpleConnection *gc, ggp_ggdrive_auth_cb cb,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
356 gpointer user_data)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
357 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
358 GGPInfo *accdata = purple_connection_get_protocol_data(gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
359 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
360 ggp_edisc_auth_data *auth;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
361 const gchar *imtoken;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
362 gchar *metadata;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
363 gchar *tmp;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
364 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
365 SoupMessageHeaders *headers;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
366
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
367 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
368
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
369 imtoken = ggp_get_imtoken(gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
370 if (!imtoken) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
371 cb(gc, FALSE, user_data);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
372 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
373 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
374
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
375 if (sdata->auth_done) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
376 cb(gc, sdata->security_token != NULL, user_data);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
377 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
378 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
379
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
380 auth = g_new0(ggp_edisc_auth_data, 1);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
381 auth->cb = cb;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
382 auth->user_data = user_data;
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
383 sdata->auth_pending = g_slist_prepend(sdata->auth_pending, auth);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
384
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
385 if (sdata->auth_request) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
386 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
387 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
388
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
389 purple_debug_info("gg", "ggp_ggdrive_auth(gc=%p)", gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
390
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
391 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/signin");
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
392 ggp_edisc_set_defaults(msg);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
393 headers = soup_message_get_request_headers(msg);
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
394
40126
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
395 metadata = g_strdup_printf("{"
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
396 "\"id\": \"%032x\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
397 "\"name\": \"%s\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
398 "\"os_version\": \"" GGP_EDISC_OS "\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
399 "\"client_version\": \"%s\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
400 "\"type\": \"" GGP_EDISC_TYPE "\"}",
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
401 g_random_int_range(1, 1 << 16),
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
402 g_get_host_name(), ggp_libgaduw_version(gc));
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
403
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
404 tmp = g_strdup_printf("IMToken %s", imtoken);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
405 soup_message_headers_replace(headers, "Authorization", tmp);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
406 g_free(tmp);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
407 tmp = g_strdup_printf("gg/pl:%u", accdata->session->uin);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
408 soup_message_headers_replace(headers, "X-gged-user", tmp);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
409 g_free(tmp);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
410 soup_message_headers_replace(headers, "X-gged-client-metadata", metadata);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
411 g_free(metadata);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
412
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
413 sdata->auth_request = msg;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
414 soup_session_send_and_read_async(sdata->session, msg, G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
415 NULL, ggp_ggdrive_auth_done, gc);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
416 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
417
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
418 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
419 ggp_edisc_xfer_send_ticket_changed(PurpleConnection *gc, PurpleXfer *xfer,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
420 gboolean is_allowed)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
421 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
422 GGPXfer *edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
423 if (!edisc_xfer) {
41091
fa2d6b0a4912 Use purple_debug_fatal only if actually fatal
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40819
diff changeset
424 purple_debug_error(
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
425 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
426 "ggp_edisc_event_ticket_changed: transfer %p already free'd",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
427 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
428 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
429 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
430
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
431 if (!is_allowed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
432 purple_debug_info(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
433 "gg", "ggp_edisc_event_ticket_changed: transfer %p rejected",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
434 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
435 purple_xfer_cancel_remote(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
436 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
437 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
438
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
439 if (edisc_xfer->allowed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
440 purple_debug_misc(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
441 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
442 "ggp_edisc_event_ticket_changed: transfer %p already allowed",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
443 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
444 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
445 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
446 edisc_xfer->allowed = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
447
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
448 purple_xfer_start(xfer, -1, NULL, 0);
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
449 }
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
450
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
451 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
452 * Sending a file.
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
453 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
454
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
455 gboolean
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
456 ggp_edisc_xfer_can_receive_file(PurpleProtocolXfer *prplxfer,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
457 PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
458 {
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
459 PurpleBuddy *buddy;
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
460
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
461 g_return_val_if_fail(gc != NULL, FALSE);
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
462 g_return_val_if_fail(who != NULL, FALSE);
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
463
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
464 buddy = purple_blist_find_buddy(purple_connection_get_account(gc), who);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
465 if (buddy == NULL) {
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
466 return FALSE;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
467 }
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
468
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
469 /* TODO: check, if this buddy have us on his list */
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
470
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
471 return PURPLE_BUDDY_IS_ONLINE(buddy);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
472 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
473
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
474 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
475 ggp_edisc_xfer_send_init_ticket_created(GObject *source, GAsyncResult *result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
476 gpointer data)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
477 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
478 PurpleXfer *xfer = 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: 38841
diff changeset
479 GGPXfer *edisc_xfer = GGP_XFER(xfer);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
480 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
481 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
482 const char *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
483 gsize size = 0;
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
484 ggp_edisc_xfer_ack_status ack_status;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
485 JsonParser *parser;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
486 JsonObject *ticket;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
487 GError *error = NULL;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
488
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
489 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
490 return;
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
491
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
492 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
493
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
494 response_body = soup_session_send_and_read_finish(SOUP_SESSION(source),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
495 result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
496 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
497 purple_debug_error("gg",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
498 "ggp_edisc_xfer_send_init_ticket_created: failed "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
499 "to send file: %s", error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
500 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
501 ggp_edisc_xfer_error(xfer, _("Unable to send file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
502 g_error_free(error);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
503 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
504 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
505
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
506 buffer = g_bytes_get_data(response_body, &size);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
507
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
508 if(!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(edisc_xfer->msg))) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
509 int error_id = ggp_edisc_parse_error(buffer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
510
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
511 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
512 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
513
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
514 if(error_id == 206) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
515 /* recipient not logged in */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
516 ggp_edisc_xfer_error(xfer, _("Recipient not logged in"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
517 } else if(error_id == 207) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
518 /* bad sender recipient relation */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
519 ggp_edisc_xfer_error(xfer,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
520 _("You aren't on the recipient's buddy list"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
521 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
522 ggp_edisc_xfer_error(xfer, _("Unable to send file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
523 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
524 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
525 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
526
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
527 parser = ggp_json_parse(buffer);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
528 ticket = json_node_get_object(json_parser_get_root(parser));
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
529 ticket = json_object_get_object_member(ticket, "result");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
530 ticket = json_object_get_object_member(ticket, "send_ticket");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
531 edisc_xfer->ticket_id = g_strdup(json_object_get_string_member(
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
532 ticket, "id"));
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
533 ack_status = ggp_edisc_xfer_parse_ack_status(
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
534 json_object_get_string_member(ticket, "ack_status"));
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
535 /* send_mode: "normal", "publink" (for legacy clients) */
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
536
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
537 g_object_unref(parser);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
538 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
539 g_clear_object(&edisc_xfer->msg);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
540
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
541 if (edisc_xfer->ticket_id == NULL) {
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
542 purple_debug_error("gg",
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
543 "ggp_edisc_xfer_send_init_ticket_created: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
544 "couldn't get ticket id\n");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
545 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
546 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
547
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
548 purple_debug_info("gg", "ggp_edisc_xfer_send_init_ticket_created: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
549 "ticket \"%s\" created\n", edisc_xfer->ticket_id);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
550
42005
92c8a7e3aaf5 Simplify hash tables that are used as sets
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41921
diff changeset
551 g_hash_table_insert(sdata->xfers_initialized, edisc_xfer->ticket_id, xfer);
92c8a7e3aaf5 Simplify hash tables that are used as sets
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41921
diff changeset
552 g_hash_table_add(sdata->xfers_history, g_strdup(edisc_xfer->ticket_id));
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
553
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
554 if (ack_status != GGP_EDISC_XFER_ACK_STATUS_UNKNOWN)
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
555 ggp_edisc_xfer_send_ticket_changed(edisc_xfer->gc, xfer,
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
556 ack_status == GGP_EDISC_XFER_ACK_STATUS_ALLOWED);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
557 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
558
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
559 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
560 ggp_edisc_xfer_send_init_authenticated(PurpleConnection *gc, gboolean success,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
561 gpointer _xfer)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
562 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
563 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
564 SoupMessage *msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
565 PurpleXfer *xfer = _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: 38841
diff changeset
566 GGPXfer *edisc_xfer = GGP_XFER(xfer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
567 gchar *data;
41700
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
568 GBytes *body = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
569
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
570 if (purple_xfer_is_cancelled(xfer)) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
571 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
572 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
573
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
574 if (!success) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
575 ggp_edisc_xfer_error(xfer, _("Authentication failed"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
576 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
577 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
578
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
579 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
580
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
581 msg = soup_message_new("PUT", "https://drive.mpa.gg.pl/send_ticket");
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
582 ggp_edisc_set_defaults(msg);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
583
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
584 soup_message_headers_replace(soup_message_get_request_headers(msg),
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
585 "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
586 sdata->security_token);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
587
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
588 data = g_strdup_printf("{\"send_ticket\":{"
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
589 "\"recipient\":\"%s\","
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
590 "\"file_name\":\"%s\","
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
591 "\"file_size\":\"%u\""
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
592 "}}",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
593 purple_xfer_get_remote_user(xfer),
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
594 edisc_xfer->filename,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
595 (int)purple_xfer_get_size(xfer));
41700
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
596 body = g_bytes_new_take(data, strlen(data));
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
597 soup_message_set_request_body_from_bytes(msg,
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
598 "application/x-www-form-urlencoded; charset=UTF-8",
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
599 body);
9f6a2c90800e Convert soup_message_set_request to soup_message_set_request_body_from_bytes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41215
diff changeset
600 g_bytes_unref(body);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
601
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
602 edisc_xfer->msg = msg;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
603 soup_session_send_and_read_async(sdata->session, msg, G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
604 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
605 ggp_edisc_xfer_send_init_ticket_created,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
606 xfer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
607 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
608
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
609 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
610 ggp_edisc_xfer_send_init(PurpleXfer *xfer)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
611 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
612 GGPXfer *edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
613
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
614 purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_NOT_STARTED);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
615
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
616 edisc_xfer->filename = g_strdup(purple_xfer_get_filename(xfer));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
617 g_strcanon(edisc_xfer->filename, GGP_EDISC_FNAME_ALLOWED, '_');
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
618
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
619 ggp_ggdrive_auth(edisc_xfer->gc, ggp_edisc_xfer_send_init_authenticated,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
620 xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
621 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
622
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
623 #if SOUP_MAJOR_VERSION >= 3
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
624
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
625 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
626 ggp_edisc_xfer_send_done(GObject *source, GAsyncResult *async_result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
627 gpointer data)
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
628 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
629 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
630 GGPXfer *edisc_xfer = GGP_XFER(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
631 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
632 JsonParser *parser = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
633 JsonObject *result = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
634 int result_status = -1;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
635 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
636
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
637 if(purple_xfer_is_cancelled(xfer)) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
638 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
639 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
640
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
641 g_return_if_fail(edisc_xfer != NULL);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
642
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
643 if(!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(edisc_xfer->msg))) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
644 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
645 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
646 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
647 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
648
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
649 response_body = soup_session_send_and_read_finish(SOUP_SESSION(source),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
650 async_result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
651 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
652 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
653 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
654 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
655 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
656 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
657
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
658 parser = ggp_json_parse(g_bytes_get_data(response_body, NULL));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
659 result = json_node_get_object(json_parser_get_root(parser));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
660 result = json_object_get_object_member(result, "result");
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
661 if(json_object_has_member(result, "status")) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
662 result_status = json_object_get_int_member(result, "status");
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
663 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
664 g_object_unref(parser);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
665 g_clear_pointer(&response_body, g_bytes_unref);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
666 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
667
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
668 if(result_status == 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
669 purple_xfer_set_completed(xfer, TRUE);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
670 purple_xfer_end(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
671 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
672 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
673 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
674 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
675
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
676 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
677 ggp_edisc_xfer_send_start_msg_cb(SoupMessage *msg, gpointer data) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
678 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
679 GInputStream *stream = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
680 /* TODO: Actually fill in stream with something. */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
681 soup_message_set_request_body(msg, NULL, stream,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
682 purple_xfer_get_size(xfer));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
683 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
684
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
685 #else /* SOUP_MAJOR_VERSION >= 3 */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
686
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
687 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
688 ggp_edisc_xfer_send_reader(SoupMessage *msg, gpointer _xfer)
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
689 {
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
690 PurpleXfer *xfer = _xfer;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
691 guchar *buffer;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
692 /* FIXME: The read/write xfer implementation sizes this dynamically. */
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
693 gsize length = 4096;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
694 gssize stored;
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
695
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
696 buffer = g_new(guchar, length);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
697 stored = purple_xfer_read_file(xfer, buffer, length);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
698
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
699 if (stored < 0) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
700 GGPXfer *edisc_xfer = GGP_XFER(xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
701 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
702 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
703 return;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
704 }
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
705
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
706 soup_message_body_append(msg->request_body, SOUP_MEMORY_TAKE, buffer,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
707 stored);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
708 if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer)) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
709 soup_message_body_complete(msg->request_body);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
710 }
34389
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
711 }
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
712
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
713 static void
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
714 ggp_edisc_xfer_send_done(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
715 gpointer _xfer)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
716 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
717 PurpleXfer *xfer = _xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
718 GGPXfer *edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
719 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
720 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
721 int result_status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
722
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
723 if (purple_xfer_is_cancelled(xfer)) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
724 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
725 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
726
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
727 g_return_if_fail(edisc_xfer != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
728
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
729 edisc_xfer->msg = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
730
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
731 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
732 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
733 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
734 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
735
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
736 parser = ggp_json_parse(msg->response_body->data);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
737 result = json_node_get_object(json_parser_get_root(parser));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
738 result = json_object_get_object_member(result, "result");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
739 if (json_object_has_member(result, "status")) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
740 result_status = json_object_get_int_member(result, "status");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
741 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
742 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
743
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
744 if (result_status == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
745 purple_xfer_set_completed(xfer, TRUE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
746 purple_xfer_end(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
747 } else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
748 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
749 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
750 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
751
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
752 #endif /* SOUP_MAJOR_VERSION >= 3 */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
753
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
754 static void ggp_edisc_xfer_send_start(PurpleXfer *xfer)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
755 {
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
756 ggp_edisc_session_data *sdata;
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
757 GGPXfer *edisc_xfer;
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
758 gchar *upload_url, *filename_e;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
759 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
760 SoupMessageHeaders *headers;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
761
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
762 g_return_if_fail(xfer != NULL);
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
763 edisc_xfer = GGP_XFER(xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
764 g_return_if_fail(edisc_xfer != NULL);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
765 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
766 g_return_if_fail(sdata != NULL);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
767
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
768 filename_e = purple_strreplace(edisc_xfer->filename, " ", "%20");
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
769 upload_url = g_strdup_printf("https://drive.mpa.gg.pl/me/file/outbox/"
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
770 "%s%%2C%s", edisc_xfer->ticket_id, filename_e);
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
771 g_free(filename_e);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
772 msg = soup_message_new("PUT", upload_url);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
773 g_free(upload_url);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
774
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
775 ggp_edisc_set_defaults(msg);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
776
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
777 headers = soup_message_get_request_headers(msg);
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
778 soup_message_headers_replace(headers, "X-gged-local-revision", "0");
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
779 soup_message_headers_replace(headers, "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
780 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
781 soup_message_headers_replace(headers, "X-gged-metadata",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
782 "{\"node_type\": \"file\"}");
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
783
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
784 soup_message_headers_set_content_length(headers,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
785 purple_xfer_get_size(xfer));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
786 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
787
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
788 #if SOUP_MAJOR_VERSION >= 3
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
789 g_signal_connect(msg, "starting",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
790 G_CALLBACK(ggp_edisc_xfer_send_start_msg_cb), xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
791 g_signal_connect(msg, "restarted",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
792 G_CALLBACK(ggp_edisc_xfer_send_start_msg_cb), xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
793 soup_session_send_and_read_async(sdata->session, msg, G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
794 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
795 ggp_edisc_xfer_send_done, xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
796 #else
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
797 soup_message_set_flags(msg, SOUP_MESSAGE_CAN_REBUILD);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
798 soup_message_body_set_accumulate(msg->request_body, FALSE);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
799 g_signal_connect(msg, "wrote-headers",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
800 G_CALLBACK(ggp_edisc_xfer_send_reader), xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
801 g_signal_connect(msg, "wrote-chunk", G_CALLBACK(ggp_edisc_xfer_send_reader),
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
802 xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
803 soup_session_queue_message(sdata->session, msg, ggp_edisc_xfer_send_done,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
804 xfer);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
805 #endif
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
806 }
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
807
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
808 PurpleXfer * ggp_edisc_xfer_send_new(PurpleProtocolXfer *prplxfer, PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
809 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
810 GGPXfer *xfer;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
811
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
812 g_return_val_if_fail(gc != NULL, NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
813 g_return_val_if_fail(who != NULL, NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
814
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
815 xfer = 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: 38841
diff changeset
816 GGP_TYPE_XFER,
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
817 "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: 38841
diff changeset
818 "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: 38841
diff changeset
819 "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: 38841
diff changeset
820 NULL
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
821 );
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
822
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
823 xfer->gc = gc;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
824
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
825 return PURPLE_XFER(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
826 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
827
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
828 void ggp_edisc_xfer_send_file(PurpleProtocolXfer *prplxfer, PurpleConnection *gc, const char *who,
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
829 const char *filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
830 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
831 PurpleXfer *xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
832
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
833 g_return_if_fail(gc != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
834 g_return_if_fail(who != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
835
36745
75ed0608dcd6 Updated comment
Ankit Vani <a@nevitus.org>
parents: 34946
diff changeset
836 /* Nothing interesting here, this code is common among protocols.
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
837 * See ggp_edisc_xfer_send_new. */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
838
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
839 xfer = ggp_edisc_xfer_send_new(prplxfer, gc, who);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
840 if (filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
841 purple_xfer_request_accepted(xfer, filename);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
842 else
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
843 purple_xfer_request(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
844 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
845
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
846 /*******************************************************************************
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
847 * Receiving a file.
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
848 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
849
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
850 static PurpleXfer *
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
851 ggp_edisc_xfer_recv_new(PurpleConnection *gc, const char *who)
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
852 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
853 GGPXfer *xfer;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
854
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
855 g_return_val_if_fail(gc != NULL, NULL);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
856 g_return_val_if_fail(who != NULL, NULL);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
857
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
858 xfer = g_object_new(GGP_TYPE_XFER, "account",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
859 purple_connection_get_account(gc), "type",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
860 PURPLE_XFER_TYPE_RECEIVE, "remote-user", who, NULL);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
861
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
862 xfer->gc = gc;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
863
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
864 return PURPLE_XFER(xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
865 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
866
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
867 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
868 ggp_edisc_xfer_recv_ack_done(GObject *source, GAsyncResult *result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
869 gpointer data)
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
870 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
871 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
872 GGPXfer *edisc_xfer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
873 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
874 const gchar *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
875 gsize size = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
876 GError *error = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
877
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
878 if (purple_xfer_is_cancelled(xfer)) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
879 g_return_if_reached();
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
880 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
881
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
882 edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
883
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
884 if(!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(edisc_xfer->msg))) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
885 g_clear_object(&edisc_xfer->msg);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
886 ggp_edisc_xfer_error(xfer, _("Cannot confirm file transfer."));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
887 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
888 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
889
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
890 response_body = soup_session_send_and_read_finish(SOUP_SESSION(source),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
891 result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
892 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
893 purple_debug_error("gg", "ggp_edisc_xfer_recv_ack_done: failed: %s",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
894 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
895 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
896 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
897 ggp_edisc_xfer_error(xfer, _("Cannot confirm file transfer."));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
898 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
899 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
900
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
901 buffer = g_bytes_get_data(response_body, &size);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
902 purple_debug_info("gg", "ggp_edisc_xfer_recv_ack_done: [%.*s]", (int)size,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
903 buffer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
904
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
905 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
906 g_clear_object(&edisc_xfer->msg);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
907 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
908
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
909 static void ggp_edisc_xfer_recv_ack(PurpleXfer *xfer, gboolean accept)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
910 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
911 GGPXfer *edisc_xfer = GGP_XFER(xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
912 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
913 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
914 SoupMessageHeaders *headers;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
915
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
916 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
917
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
918 edisc_xfer->allowed = accept;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
919
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
920 msg = soup_message_new("PUT",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
921 ggp_edisc_xfer_ticket_url(edisc_xfer->ticket_id));
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
922 ggp_edisc_set_defaults(msg);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
923
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
924 headers = soup_message_get_request_headers(msg);
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
925 soup_message_headers_replace(headers, "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
926 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
927 soup_message_headers_replace(headers, "X-gged-ack-status",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
928 accept ? "allow" : "reject");
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
929
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
930 if(accept) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
931 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
932 soup_session_send_and_read_async(sdata->session, msg,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
933 G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
934 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
935 ggp_edisc_xfer_recv_ack_done, xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
936 } else {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
937 edisc_xfer->msg = NULL;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
938 soup_session_send_and_read_async(sdata->session, msg,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
939 G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
940 edisc_xfer->cancellable, NULL, NULL);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
941 g_object_unref(msg);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
942 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
943 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
944
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
945 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
946 ggp_edisc_xfer_recv_reject(PurpleXfer *xfer)
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
947 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
948 ggp_edisc_xfer_recv_ack(xfer, FALSE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
949 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
950
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
951 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
952 ggp_edisc_xfer_recv_accept(PurpleXfer *xfer)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
953 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
954 ggp_edisc_xfer_recv_ack(xfer, TRUE);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
955 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
956
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
957 static void ggp_edisc_xfer_recv_ticket_completed(PurpleXfer *xfer)
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
958 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
959 GGPXfer *edisc_xfer = GGP_XFER(xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
960
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
961 if (edisc_xfer->ready)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
962 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
963 edisc_xfer->ready = TRUE;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
964
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
965 purple_xfer_start(xfer, -1, NULL, 0);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
966 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
967
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
968 #if SOUP_MAJOR_VERSION >= 3
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
969
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
970 static gboolean
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
971 ggp_edisc_xfer_recv_pollable_source_cb(GObject *pollable_stream, gpointer data)
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
972 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
973 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
974 GGPXfer *edisc_xfer = GGP_XFER(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
975 guchar buf[4096];
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
976 gssize len;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
977 gboolean stored;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
978 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
979
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
980 do {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
981 len = g_pollable_input_stream_read_nonblocking(
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
982 G_POLLABLE_INPUT_STREAM(pollable_stream), buf, sizeof(buf),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
983 edisc_xfer->cancellable, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
984 if(len == 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
985 /* End of file */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
986 if(purple_xfer_get_bytes_remaining(xfer) == 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
987 purple_xfer_set_completed(xfer, TRUE);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
988 purple_xfer_end(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
989 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
990 purple_debug_warning("gg", "ggp_edisc_xfer_recv_done: didn't "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
991 "receive everything");
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
992 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
993 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
994 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
995 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
996
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
997 } else if(len < 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
998 /* Errors occurred */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
999 if(error->code == G_IO_ERROR_WOULD_BLOCK) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1000 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1001 return G_SOURCE_CONTINUE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1002 } else if(error->code == G_IO_ERROR_CANCELLED) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1003 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1004 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1005 purple_debug_warning("gg", "ggp_edisc_xfer_recv_done: lost "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1006 "connection with server: %s",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1007 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1008 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1009 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1010 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1011 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1012 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1013 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1014
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1015 if(len > purple_xfer_get_bytes_remaining(xfer)) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1016 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: saved too "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1017 "much (%" G_GSIZE_FORMAT
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1018 " > %" G_GOFFSET_FORMAT ")",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1019 len, purple_xfer_get_bytes_remaining(xfer));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1020 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1021 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1022 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1023 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1024
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1025 stored = purple_xfer_write_file(xfer, buf, len);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1026 if(!stored) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1027 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: failed to save");
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1028 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1029 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1030 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1031 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1032 } while(len > 0);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1033
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1034 return G_SOURCE_CONTINUE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1035 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1036
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1037 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1038 ggp_edisc_xfer_recv_done_cb(GObject *source, GAsyncResult *result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1039 gpointer data)
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1040 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1041 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1042 GGPXfer *edisc_xfer = GGP_XFER(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1043 GInputStream *input = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1044 GSource *poll = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1045 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1046
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1047 if(!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(edisc_xfer->msg))) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1048 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1049 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1050 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1051 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1052
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1053 input = soup_session_send_finish(SOUP_SESSION(source), result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1054 if(input == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1055 purple_debug_warning("gg", "ggp_edisc_xfer_recv_done_cb: error "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1056 "receiving file: %s", error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1057 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1058 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1059 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1060 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1061 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1062
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1063 poll = g_pollable_input_stream_create_source(G_POLLABLE_INPUT_STREAM(input),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1064 edisc_xfer->cancellable);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1065 g_source_set_callback(poll,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1066 (GSourceFunc)ggp_edisc_xfer_recv_pollable_source_cb,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1067 xfer, NULL);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1068 edisc_xfer->handler = g_source_attach(poll, NULL);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1069 g_source_unref(poll);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1070 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1071 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1072
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1073 #else /* SOUP_MAJOR_VERSION >= 3 */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1074
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1075 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1076 ggp_edisc_xfer_recv_writer(SoupMessage *msg, SoupBuffer *chunk, gpointer _xfer)
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1077 {
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1078 PurpleXfer *xfer = _xfer;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1079 GGPXfer *edisc_xfer = GGP_XFER(xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1080 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1081 gboolean stored;
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1082
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1083 if (chunk->length > purple_xfer_get_bytes_remaining(xfer)) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1084 purple_debug_error(
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1085 "gg",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1086 "ggp_edisc_xfer_recv_writer: saved too much (%" G_GSIZE_FORMAT
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1087 " > %" G_GOFFSET_FORMAT ")",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1088 chunk->length, purple_xfer_get_bytes_remaining(xfer));
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1089 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1090 return;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1091 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1092
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1093 stored = purple_xfer_write_file(xfer, (const guchar *)chunk->data,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1094 chunk->length);
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1095
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1096 if (!stored) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1097 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: saved too less");
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1098 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1099 return;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1100 }
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1101 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1102
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1103 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1104 ggp_edisc_xfer_recv_done(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1105 gpointer _xfer)
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1106 {
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1107 PurpleXfer *xfer = _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: 38841
diff changeset
1108 GGPXfer *edisc_xfer = GGP_XFER(xfer);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1109
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1110 if (purple_xfer_is_cancelled(xfer))
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1111 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1112
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1113 edisc_xfer->msg = NULL;
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1114
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1115 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1116 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1117 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1118 }
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1119
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1120 if (purple_xfer_get_bytes_remaining(xfer) == 0) {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1121 purple_xfer_set_completed(xfer, TRUE);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1122 purple_xfer_end(xfer);
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1123 } else {
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1124 purple_debug_warning("gg", "ggp_edisc_xfer_recv_done: didn't "
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1125 "received everything\n");
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1126 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1127 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
1128 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
1129
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1130 #endif /* SOUP_MAJOR_VERSION >= 3 */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1131
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1132 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1133 ggp_edisc_xfer_recv_start(PurpleXfer *xfer)
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1134 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1135 ggp_edisc_session_data *sdata;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1136 GGPXfer *edisc_xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1137 gchar *upload_url;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1138 SoupMessage *msg;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1139
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1140 g_return_if_fail(xfer != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1141 edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1142 g_return_if_fail(edisc_xfer != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1143 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1144 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1145
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1146 upload_url =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1147 g_strdup_printf("https://drive.mpa.gg.pl/me/file/inbox/"
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1148 "%s,%s?api_version=%s&security_token=%s",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1149 edisc_xfer->ticket_id,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1150 purple_url_encode(purple_xfer_get_filename(xfer)),
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1151 GGP_EDISC_API, sdata->security_token);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1152 msg = soup_message_new("GET", upload_url);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1153 g_free(upload_url);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1154
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1155 ggp_edisc_set_defaults(msg);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1156 // purple_http_request_set_max_len(msg, purple_xfer_get_size(xfer) + 1);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1157
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1158 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1159 #if SOUP_MAJOR_VERSION >= 3
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1160 soup_session_send_async(sdata->session, msg, G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1161 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1162 ggp_edisc_xfer_recv_done_cb, xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1163 #else
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1164 soup_message_body_set_accumulate(msg->response_body, FALSE);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1165 g_signal_connect(msg, "got-chunk", G_CALLBACK(ggp_edisc_xfer_recv_writer),
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1166 xfer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1167
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1168 soup_session_queue_message(sdata->session, msg, ggp_edisc_xfer_recv_done,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1169 xfer);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1170 #endif
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1171 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1172
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1173 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1174 ggp_edisc_xfer_recv_ticket_update_got(GObject *source,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1175 GAsyncResult *async_result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1176 gpointer data)
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1177 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1178 SoupMessage *msg = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1179 PurpleConnection *gc = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1180 GBytes *response_body = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1181 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1182 GGPXfer *edisc_xfer;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1183 const char *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1184 gsize size = 0;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1185 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1186 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1187 int status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1188 ggp_edisc_session_data *sdata;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1189
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1190 const gchar *ticket_id, *file_name, *send_mode_str;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1191 uin_t sender, recipient;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1192 int file_size;
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1193 SoupStatus status_code;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1194 GError *error = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1195
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1196 status_code = soup_message_get_status(msg);
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1197 if (!SOUP_STATUS_IS_SUCCESSFUL(status_code)) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1198 purple_debug_error("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1199 "ggp_edisc_xfer_recv_ticket_update_got: cannot "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1200 "fetch update for ticket (code=%d)",
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1201 status_code);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1202 g_object_unref(msg);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1203 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1204 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1205
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1206 response_body = soup_session_send_and_read_finish(SOUP_SESSION(source),
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1207 async_result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1208 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1209 purple_debug_error("gg",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1210 "ggp_edisc_xfer_recv_ticket_update_got: cannot "
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1211 "fetch update for ticket (%s)",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1212 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1213 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1214 g_object_unref(msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1215 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1216 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1217
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1218 gc = g_object_get_data(G_OBJECT(msg), "purple-connection");
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1219 sdata = ggp_edisc_get_sdata(gc);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1220 if(sdata == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1221 g_bytes_unref(response_body);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1222 g_object_unref(msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1223 g_return_if_reached();
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1224 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1225 }
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1226
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1227 buffer = g_bytes_get_data(response_body, &size);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1228 parser = ggp_json_parse(buffer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1229 g_clear_pointer(&response_body, g_bytes_unref);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1230 g_clear_object(&msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1231
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1232 result = json_node_get_object(json_parser_get_root(parser));
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1233 result = json_object_get_object_member(result, "result");
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1234 if (json_object_has_member(result, "status"))
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1235 status = json_object_get_int_member(result, "status");
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1236 result = json_object_get_object_member(result, "send_ticket");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1237
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1238 if (status != 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1239 purple_debug_warning("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1240 "ggp_edisc_xfer_recv_ticket_update_got: failed to "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1241 "get update (status=%d)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1242 status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1243 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1244 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1245 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1246
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1247 ticket_id = json_object_get_string_member(result, "id");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1248 sender = ggp_str_to_uin(json_object_get_string_member(result, "sender"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1249 recipient =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1250 ggp_str_to_uin(json_object_get_string_member(result, "recipient"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1251 file_size = g_ascii_strtoll(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1252 json_object_get_string_member(result, "file_size"), NULL, 10);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1253 file_name = json_object_get_string_member(result, "file_name");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1254
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1255 /* GG11: normal
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1256 * AQQ 2.4.2.10: direct_inbox
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1257 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1258 send_mode_str = json_object_get_string_member(result, "send_mode");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1259
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1260 /* more fields:
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1261 * send_progress (float), ack_status, send_status
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1262 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1263
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1264 if (purple_debug_is_verbose() && purple_debug_is_unsafe()) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1265 purple_debug_info("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1266 "Got ticket update: id=%s, sender=%u, recipient=%u, "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1267 "file name=\"%s\", file size=%d, send mode=%s)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1268 ticket_id, sender, recipient, file_name, file_size,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1269 send_mode_str);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1270 }
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1271
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1272 xfer = g_hash_table_lookup(sdata->xfers_initialized, ticket_id);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1273 if (xfer != NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1274 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1275 "ggp_edisc_xfer_recv_ticket_update_got: ticket %s "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1276 "already updated",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1277 purple_debug_is_unsafe() ? ticket_id : "");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1278 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1279 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1280 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1281
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1282 if (recipient != ggp_get_my_uin(gc)) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1283 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1284 "ggp_edisc_xfer_recv_ticket_update_got: ticket %s is "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1285 "not for incoming transfer (its from %u to %u)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1286 purple_debug_is_unsafe() ? ticket_id : "", sender,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1287 recipient);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1288 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1289 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1290 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1291
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1292 xfer = ggp_edisc_xfer_recv_new(gc, ggp_uin_to_str(sender));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1293 purple_xfer_set_filename(xfer, file_name);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1294 purple_xfer_set_size(xfer, file_size);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1295 purple_xfer_request(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1296 edisc_xfer = GGP_XFER(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1297 edisc_xfer->ticket_id = g_strdup(ticket_id);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1298 g_hash_table_insert(sdata->xfers_initialized, edisc_xfer->ticket_id, xfer);
42005
92c8a7e3aaf5 Simplify hash tables that are used as sets
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41921
diff changeset
1299 g_hash_table_add(sdata->xfers_history, g_strdup(ticket_id));
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1300
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1301 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1302 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1303
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1304 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1305 ggp_edisc_xfer_recv_ticket_update_authenticated(PurpleConnection *gc,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1306 gboolean success,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1307 gpointer _ticket)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1308 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1309 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1310 SoupMessage *msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1311 gchar *ticket = _ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1312
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1313 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1314
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1315 if (!success) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1316 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1317 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1318 "ggp_edisc_xfer_recv_ticket_update_authenticated: update of "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1319 "ticket %s aborted due to authentication failure",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1320 ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1321 g_free(ticket);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1322 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1323 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1324
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1325 msg = soup_message_new("GET", ggp_edisc_xfer_ticket_url(ticket));
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1326 g_free(ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1327
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1328 ggp_edisc_set_defaults(msg);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1329
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
1330 soup_message_headers_replace(soup_message_get_request_headers(msg),
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
1331 "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1332 sdata->security_token);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1333
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1334 g_object_set_data(G_OBJECT(msg), "purple-connection", gc);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1335 soup_session_send_and_read_async(sdata->session, msg, G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1336 NULL,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1337 ggp_edisc_xfer_recv_ticket_update_got,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1338 msg);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1339 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1340
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1341 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1342 ggp_edisc_xfer_recv_ticket_got(PurpleConnection *gc, const gchar *ticket_id)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1343 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1344 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1345
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1346 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1347
42005
92c8a7e3aaf5 Simplify hash tables that are used as sets
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41921
diff changeset
1348 if (g_hash_table_contains(sdata->xfers_history, ticket_id)) {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1349 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1350 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1351
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1352 ggp_ggdrive_auth(gc, ggp_edisc_xfer_recv_ticket_update_authenticated,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1353 g_strdup(ticket_id));
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1354 }
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1355
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1356 void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1357 ggp_edisc_xfer_ticket_changed(PurpleConnection *gc, const char *data)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1358 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1359 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1360 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1361 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1362 JsonObject *ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1363 const gchar *ticket_id, *send_status;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1364 ggp_edisc_xfer_ack_status ack_status;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1365 gboolean is_completed;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1366
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1367 g_return_if_fail(sdata != NULL);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1368
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1369 parser = ggp_json_parse(data);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1370 ticket = json_node_get_object(json_parser_get_root(parser));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1371 ticket_id = json_object_get_string_member(ticket, "id");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1372 ack_status = ggp_edisc_xfer_parse_ack_status(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1373 json_object_get_string_member(ticket, "ack_status"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1374 send_status = json_object_get_string_member(ticket, "send_status");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1375
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1376 if (ticket_id == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1377 ticket_id = "";
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1378 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1379 xfer = g_hash_table_lookup(sdata->xfers_initialized, ticket_id);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1380 if (xfer == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1381 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1382 "ggp_edisc_event_ticket_changed: ticket %s not "
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1383 "found, updating it...",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1384 purple_debug_is_unsafe() ? ticket_id : "");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1385 ggp_edisc_xfer_recv_ticket_got(gc, ticket_id);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1386 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1387 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1388 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1389
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1390 is_completed = FALSE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1391 if (g_strcmp0("in_progress", send_status) == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1392 /* do nothing */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1393 } else if (g_strcmp0("completed", send_status) == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1394 is_completed = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1395 } else if (g_strcmp0("expired", send_status) == 0)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1396 ggp_edisc_xfer_error(xfer, _("File transfer expired."));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1397 else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1398 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1399 "gg", "ggp_edisc_event_ticket_changed: unknown send_status=%s",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1400 send_status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1401 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1402 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1403 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1404
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1405 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1406
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1407 if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_RECEIVE) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1408 if (is_completed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1409 ggp_edisc_xfer_recv_ticket_completed(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1410 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1411 } else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1412 if (ack_status != GGP_EDISC_XFER_ACK_STATUS_UNKNOWN) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1413 ggp_edisc_xfer_send_ticket_changed(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1414 gc, xfer, ack_status == GGP_EDISC_XFER_ACK_STATUS_ALLOWED);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1415 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1416 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1417 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1418
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1419 /*******************************************************************************
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1420 * GObject implementation
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1421 ******************************************************************************/
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1422
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1423 G_DEFINE_DYNAMIC_TYPE(GGPXfer, ggp_xfer, PURPLE_TYPE_XFER);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1424
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1425 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: 38841
diff changeset
1426 ggp_xfer_init_xfer(PurpleXfer *xfer) {
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1427 PurpleXferType type = purple_xfer_get_xfer_type(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1428
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1429 if(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: 38841
diff changeset
1430 ggp_edisc_xfer_send_init(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1431 } else if(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: 38841
diff changeset
1432 ggp_edisc_xfer_recv_accept(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1433 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1434 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1435
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1436 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: 38841
diff changeset
1437 ggp_xfer_start(PurpleXfer *xfer) {
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1438 PurpleXferType type = purple_xfer_get_xfer_type(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1439
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1440 if(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: 38841
diff changeset
1441 ggp_edisc_xfer_send_start(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1442 } else if(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: 38841
diff changeset
1443 ggp_edisc_xfer_recv_start(xfer);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1444 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1445 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1446
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1447 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: 38841
diff changeset
1448 ggp_xfer_init(GGPXfer *xfer) {
41878
64e455cfb6b4 Port some of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41700
diff changeset
1449 xfer->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: 38841
diff changeset
1450 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1451
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1452 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: 38841
diff changeset
1453 ggp_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: 38841
diff changeset
1454 GGPXfer *edisc_xfer = GGP_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: 38841
diff changeset
1455 ggp_edisc_session_data *sdata;
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1456
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1457 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1458
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1459 g_free(edisc_xfer->filename);
41878
64e455cfb6b4 Port some of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41700
diff changeset
1460 g_cancellable_cancel(edisc_xfer->cancellable);
64e455cfb6b4 Port some of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41700
diff changeset
1461 g_clear_object(&edisc_xfer->cancellable);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1462 #if SOUP_MAJOR_VERSION < 3
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1463 soup_session_cancel_message(sdata->session, edisc_xfer->msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1464 SOUP_STATUS_CANCELLED);
41878
64e455cfb6b4 Port some of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41700
diff changeset
1465 #endif
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1466 g_clear_object(&edisc_xfer->msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1467
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1468 if(edisc_xfer->handler) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1469 g_source_remove(edisc_xfer->handler);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1470 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1471 }
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1472
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1473 if (edisc_xfer->ticket_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: 38841
diff changeset
1474 g_hash_table_remove(sdata->xfers_initialized,
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1475 edisc_xfer->ticket_id);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1476 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1477
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1478 G_OBJECT_CLASS(ggp_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: 38841
diff changeset
1479 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1480
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1481 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: 38841
diff changeset
1482 ggp_xfer_class_finalize(GGPXferClass *klass) {
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1483
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1484 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1485
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1486 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: 38841
diff changeset
1487 ggp_xfer_class_init(GGPXferClass *klass) {
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1488 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: 38841
diff changeset
1489 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: 38841
diff changeset
1490
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1491 obj_class->finalize = ggp_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: 38841
diff changeset
1492
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1493 xfer_class->init = ggp_xfer_init_xfer;
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1494 xfer_class->start = ggp_xfer_start;
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1495 xfer_class->request_denied = ggp_edisc_xfer_recv_reject;
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1496 }
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1497
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1498 void
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1499 ggp_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: 38841
diff changeset
1500 ggp_xfer_register_type(module);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1501 }

mercurial