libpurple/protocols/gg/edisc.c

Tue, 23 Jan 2024 00:03:38 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Tue, 23 Jan 2024 00:03:38 -0600
changeset 42570
a980db2607fd
parent 42210
eb8592c26889
permissions
-rw-r--r--

Make sure all of the final types in the protocols are defined as such

Testing Done:
Consulted with the turtles and verified the demo protocol plugin could send messages.

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

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
42085
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
419 ggp_edisc_xfer_send_ticket_changed(G_GNUC_UNUSED PurpleConnection *gc,
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
420 PurpleXfer *xfer, gboolean is_allowed)
40009
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
42085
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
456 ggp_edisc_xfer_can_receive_file(G_GNUC_UNUSED PurpleProtocolXfer *prplxfer,
40009
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 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
624 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
625 gpointer data)
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
626 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
627 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
628 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
629 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
630 JsonParser *parser = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
631 JsonObject *result = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
632 int result_status = -1;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
633 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
634
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
635 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
636 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
637 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
638
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
639 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
640
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
641 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
642 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
643 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
644 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
645 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
646
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
647 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
648 async_result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
649 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
650 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
651 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
652 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
653 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
654 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
655
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
656 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
657 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
658 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
659 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
660 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
661 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
662 g_object_unref(parser);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
663 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
664 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
665
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
666 if(result_status == 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
667 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
668 purple_xfer_end(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
669 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
670 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
671 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
672 }
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 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
675 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
676 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
677 GInputStream *stream = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
678 /* 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
679 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
680 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
681 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
682
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
683 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
684 {
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
685 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
686 GGPXfer *edisc_xfer;
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
687 gchar *upload_url, *filename_e;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
688 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
689 SoupMessageHeaders *headers;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
690
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
691 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
692 edisc_xfer = GGP_XFER(xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
693 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
694 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
695 g_return_if_fail(sdata != NULL);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
696
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
697 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
698 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
699 "%s%%2C%s", edisc_xfer->ticket_id, filename_e);
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
700 g_free(filename_e);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
701 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
702 g_free(upload_url);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
703
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
704 ggp_edisc_set_defaults(msg);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
705
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
706 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
707 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
708 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
709 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
710 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
711 "{\"node_type\": \"file\"}");
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
712
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
713 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
714 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
715 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
716
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
717 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
718 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
719 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
720 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
721 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
722 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
723 ggp_edisc_xfer_send_done, xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
724 }
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
725
42085
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
726 PurpleXfer *
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
727 ggp_edisc_xfer_send_new(G_GNUC_UNUSED PurpleProtocolXfer *prplxfer,
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
728 PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
729 {
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
730 GGPXfer *xfer;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
731
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
732 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
733 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
734
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
735 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
736 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
737 "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
738 "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
739 "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
740 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
741 );
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
742
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
743 xfer->gc = gc;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
744
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
745 return PURPLE_XFER(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
746 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
747
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
748 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
749 const char *filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
750 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
751 PurpleXfer *xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
752
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
753 g_return_if_fail(gc != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
754 g_return_if_fail(who != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
755
36745
75ed0608dcd6 Updated comment
Ankit Vani <a@nevitus.org>
parents: 34946
diff changeset
756 /* 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
757 * See ggp_edisc_xfer_send_new. */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
758
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
759 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
760 if (filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
761 purple_xfer_request_accepted(xfer, filename);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
762 else
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
763 purple_xfer_request(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
764 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
765
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
766 /*******************************************************************************
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
767 * 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
768 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
769
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
770 static PurpleXfer *
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
771 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
772 {
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
773 GGPXfer *xfer;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
774
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
775 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
776 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
777
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
778 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
779 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
780 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
781
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
782 xfer->gc = gc;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
783
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
784 return PURPLE_XFER(xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
785 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
786
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
787 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
788 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
789 gpointer data)
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
790 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
791 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
792 GGPXfer *edisc_xfer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
793 GBytes *response_body = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
794 const gchar *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
795 gsize size = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
796 GError *error = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
797
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
798 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
799 g_return_if_reached();
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
800 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
801
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
802 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
803
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
804 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
805 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
806 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
807 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
808 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
809
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
810 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
811 result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
812 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
813 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
814 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
815 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
816 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
817 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
818 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
819 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
820
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
821 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
822 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
823 buffer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
824
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
825 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
826 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
827 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
828
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
829 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
830 {
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
831 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
832 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
833 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
834 SoupMessageHeaders *headers;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
835
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
836 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
837
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
838 edisc_xfer->allowed = accept;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
839
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
840 msg = soup_message_new("PUT",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
841 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
842 ggp_edisc_set_defaults(msg);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
843
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
844 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
845 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
846 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
847 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
848 accept ? "allow" : "reject");
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
849
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
850 if(accept) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
851 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
852 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
853 G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
854 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
855 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
856 } else {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
857 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
858 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
859 G_PRIORITY_DEFAULT,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
860 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
861 g_object_unref(msg);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
862 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
863 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
864
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
865 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
866 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
867 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
868 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
869 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
870
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
871 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
872 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
873 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
874 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
875 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
876
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
877 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
878 {
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
879 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
880
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
881 if (edisc_xfer->ready)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
882 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
883 edisc_xfer->ready = TRUE;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
884
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
885 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
886 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
887
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
888 static gboolean
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
889 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
890 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
891 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
892 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
893 guchar buf[4096];
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
894 gssize len;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
895 gboolean stored;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
896 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
897
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
898 do {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
899 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
900 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
901 edisc_xfer->cancellable, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
902 if(len == 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
903 /* End of file */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
904 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
905 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
906 purple_xfer_end(xfer);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
907 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
908 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
909 "receive everything");
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
910 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
911 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
912 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
913 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
914
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
915 } else if(len < 0) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
916 /* Errors occurred */
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
917 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
918 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
919 return G_SOURCE_CONTINUE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
920 } 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
921 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
922 } else {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
923 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
924 "connection with server: %s",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
925 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
926 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
927 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
928 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
929 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
930 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
931 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
932
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
933 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
934 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
935 "much (%" G_GSIZE_FORMAT
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
936 " > %" G_GOFFSET_FORMAT ")",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
937 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
938 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
939 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
940 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
941 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
942
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
943 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
944 if(!stored) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
945 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
946 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
947 edisc_xfer->handler = 0;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
948 return G_SOURCE_REMOVE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
949 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
950 } while(len > 0);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
951
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
952 return G_SOURCE_CONTINUE;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
953 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
954
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
955 static void
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
956 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
957 gpointer data)
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
958 {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
959 PurpleXfer *xfer = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
960 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
961 GInputStream *input = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
962 GSource *poll = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
963 GError *error = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
964
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
965 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
966 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
967 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
968 return;
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
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
971 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
972 if(input == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
973 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
974 "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
975 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
976 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
977 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
978 return;
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
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
981 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
982 edisc_xfer->cancellable);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
983 g_source_set_callback(poll,
42210
eb8592c26889 Use G_SOURCE_FUNC macro more
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42176
diff changeset
984 G_SOURCE_FUNC(ggp_edisc_xfer_recv_pollable_source_cb),
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
985 xfer, NULL);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
986 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
987 g_source_unref(poll);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
988 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
989 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
990
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
991 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
992 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
993 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
994 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
995 GGPXfer *edisc_xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
996 gchar *upload_url;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
997 SoupMessage *msg;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
998
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
999 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
1000 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
1001 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
1002 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1003 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1004
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1005 upload_url =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1006 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
1007 "%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
1008 edisc_xfer->ticket_id,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1009 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
1010 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
1011 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
1012 g_free(upload_url);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1013
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1014 ggp_edisc_set_defaults(msg);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1015 // 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
1016
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1017 edisc_xfer->msg = msg;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1018 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
1019 edisc_xfer->cancellable,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1020 ggp_edisc_xfer_recv_done_cb, xfer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1021 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1022
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1023 static void
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1024 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
1025 GAsyncResult *async_result,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1026 gpointer data)
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1027 {
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1028 SoupMessage *msg = data;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1029 PurpleConnection *gc = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1030 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
1031 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1032 GGPXfer *edisc_xfer;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1033 const char *buffer = NULL;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1034 gsize size = 0;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1035 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1036 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1037 int status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1038 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
1039
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1040 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
1041 uin_t sender, recipient;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1042 int file_size;
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1043 SoupStatus status_code;
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1044 GError *error = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1045
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
1046 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
1047 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
1048 purple_debug_error("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1049 "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
1050 "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
1051 status_code);
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1052 g_object_unref(msg);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1053 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1054 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1055
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1056 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
1057 async_result, &error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1058 if(response_body == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1059 purple_debug_error("gg",
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1060 "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
1061 "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
1062 error->message);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1063 g_error_free(error);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1064 g_object_unref(msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1065 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1066 }
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1067
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1068 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
1069 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
1070 if(sdata == NULL) {
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1071 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
1072 g_object_unref(msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1073 g_return_if_reached();
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1074 return;
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1075 }
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1076
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1077 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
1078 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
1079 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
1080 g_clear_object(&msg);
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1081
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1082 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
1083 result = json_object_get_object_member(result, "result");
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1084 if (json_object_has_member(result, "status"))
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1085 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
1086 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
1087
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1088 if (status != 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1089 purple_debug_warning("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1090 "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
1091 "get update (status=%d)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1092 status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1093 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1094 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1095 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1096
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1097 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
1098 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
1099 recipient =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1100 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
1101 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
1102 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
1103 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
1104
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1105 /* GG11: normal
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1106 * 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
1107 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1108 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
1109
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1110 /* more fields:
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1111 * 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
1112 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1113
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1114 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
1115 purple_debug_info("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1116 "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
1117 "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
1118 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
1119 send_mode_str);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1120 }
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1121
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1122 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
1123 if (xfer != NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1124 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1125 "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
1126 "already updated",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1127 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
1128 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1129 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1130 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1131
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1132 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
1133 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1134 "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
1135 "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
1136 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
1137 recipient);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1138 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1139 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1140 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1141
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1142 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
1143 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
1144 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
1145 purple_xfer_request(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1146 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
1147 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
1148 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
1149 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
1150
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1151 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1152 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1153
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1154 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1155 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
1156 gboolean success,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1157 gpointer _ticket)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1158 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1159 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
1160 SoupMessage *msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1161 gchar *ticket = _ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1162
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1163 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
1164
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1165 if (!success) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1166 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1167 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1168 "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
1169 "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
1170 ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1171 g_free(ticket);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1172 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1173 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1174
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1175 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
1176 g_free(ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1177
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1178 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
1179
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
1180 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
1181 "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1182 sdata->security_token);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1183
41886
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1184 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
1185 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
1186 NULL,
4a85a3384851 Port the rest of gg to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41878
diff changeset
1187 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
1188 msg);
40009
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
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1191 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1192 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
1193 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1194 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
1195
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1196 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
1197
42005
92c8a7e3aaf5 Simplify hash tables that are used as sets
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41921
diff changeset
1198 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
1199 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1200 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1201
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1202 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
1203 g_strdup(ticket_id));
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1204 }
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
1205
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1206 void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1207 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
1208 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1209 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
1210 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1211 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1212 JsonObject *ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1213 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
1214 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
1215 gboolean is_completed;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1216
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1217 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
1218
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1219 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
1220 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
1221 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
1222 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
1223 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
1224 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
1225
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1226 if (ticket_id == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1227 ticket_id = "";
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1228 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1229 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
1230 if (xfer == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1231 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1232 "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
1233 "found, updating it...",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1234 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
1235 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
1236 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1237 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1238 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1239
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1240 is_completed = FALSE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1241 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
1242 /* do nothing */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1243 } 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
1244 is_completed = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1245 } 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
1246 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
1247 else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1248 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1249 "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
1250 send_status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1251 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1252 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1253 }
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 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1256
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1257 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
1258 if (is_completed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1259 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
1260 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1261 } else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1262 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
1263 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
1264 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
1265 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1266 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1267 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1268
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1269 /*******************************************************************************
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1270 * GObject implementation
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1271 ******************************************************************************/
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1272
42570
a980db2607fd Make sure all of the final types in the protocols are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42210
diff changeset
1273 G_DEFINE_DYNAMIC_TYPE_EXTENDED(GGPXfer, ggp_xfer, PURPLE_TYPE_XFER,
a980db2607fd Make sure all of the final types in the protocols are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42210
diff changeset
1274 G_TYPE_FLAG_FINAL, {})
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
1275
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
1276 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
1277 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
1278 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
1279
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
1280 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
1281 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
1282 } 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
1283 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
1284 }
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
1285 }
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
1286
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
1287 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
1288 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
1289 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
1290
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
1291 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
1292 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
1293 } 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
1294 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
1295 }
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
1296 }
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
1297
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
1298 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
1299 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
1300 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
1301 }
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
1302
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
1303 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
1304 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
1305 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
1306 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
1307
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1308 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
1309
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1310 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
1311 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
1312 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
1313 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
1314
42175
4185b4043214 Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42085
diff changeset
1315 g_clear_handle_id(&edisc_xfer->handler, g_source_remove);
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1316
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
1317 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
1318 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
1319 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
1320 }
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
1321
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
1322 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
1323 }
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
1324
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
1325 static void
42085
a76f1668564c Make the gadu gadu protocol plugin clean for warning level 2
Gary Kramlich <grim@reaperworld.com>
parents: 42005
diff changeset
1326 ggp_xfer_class_finalize(G_GNUC_UNUSED GGPXferClass *klass) {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1327 }
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
1328
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
1329 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
1330 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
1331 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
1332 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
1333
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
1334 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
1335
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
1336 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
1337 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
1338 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
1339 }
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
1340
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
1341 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
1342 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
1343 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
1344 }

mercurial