libpurple/protocols/gg/edisc.c

Wed, 25 May 2022 23:52:45 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Wed, 25 May 2022 23:52:45 -0500
changeset 41408
5323c0b51ddc
parent 41215
43a4dc8903fb
child 41700
9f6a2c90800e
permissions
-rw-r--r--

Remove prpl-gtalk from XMPP console

It no longer exists, and complicates the code a bit.

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>
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
39 #include "libpurple/soupcompat.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
40
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
41 #define GGP_EDISC_OS "WINNT x86-msvc"
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
42 #define GGP_EDISC_TYPE "desktop"
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
43 #define GGP_EDISC_API "6"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
44
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
45 #define GGP_EDISC_RESPONSE_MAX 10240
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
46 #define GGP_EDISC_FNAME_ALLOWED "1234567890" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
47 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
48 " [](){}-+=_;'<>,.&$!"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
49
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
50 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
51
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
52 struct _ggp_edisc_session_data
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
53 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
54 GHashTable *xfers_initialized;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
55 GHashTable *xfers_history;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
56
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
57 SoupSession *session;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
58 gchar *security_token;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
59
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
60 SoupMessage *auth_request;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
61 gboolean auth_done;
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
62 GSList *auth_pending;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
63 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
64
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
65 struct _GGPXfer
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
66 {
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
67 PurpleXfer parent;
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 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;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
76 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
77
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
78 typedef enum
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
79 {
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
80 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
81 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
82 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
83 } ggp_edisc_xfer_ack_status;
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
84
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
85 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
86 gpointer user_data);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
87
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 * Setting up.
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
90 ******************************************************************************/
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 static inline ggp_edisc_session_data *
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
93 ggp_edisc_get_sdata(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
94 {
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
95 GGPInfo *accdata;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
96
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
97 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
98
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
99 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
100 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
101
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
102 return accdata->edisc_data;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
103 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
104
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
105 void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
106 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
107 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
108 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
109 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
110
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
111 accdata->edisc_data = sdata;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
112
40819
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40474
diff changeset
113 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
114 NULL);
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40474
diff changeset
115 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
116 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
117 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
118 }
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 void ggp_edisc_cleanup(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
121 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
122 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
123
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
124 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
125
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
126 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
127 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
128 g_free(sdata->security_token);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
129
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
130 g_object_unref(sdata->session);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
131 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
132 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
133
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
134 g_free(sdata);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
135 }
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 /*******************************************************************************
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
138 * Misc.
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
139 ******************************************************************************/
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
140
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
141 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
142 ggp_edisc_set_defaults(SoupMessage *msg)
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
143 {
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
144 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
145
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
146 // 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
147 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
148 GGP_EDISC_API);
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
149
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
150 /* optional fields */
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
151 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
152 headers, "User-Agent",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
153 "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
154 "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
155 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
156 headers, "Accept",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
157 "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
158 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
159 "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
160 /* 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
161 * "gzip, deflate"); */
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
162 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
163 "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
164 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
165 soup_message_headers_replace(
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
166 headers, "Content-Type",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
167 "application/x-www-form-urlencoded; charset=UTF-8");
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
168 }
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
169
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
170 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
171 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
172 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
173 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
174 int error_id;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
175
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
176 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
177 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
178 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
179 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
180 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
181 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
182 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
183 g_object_unref(parser);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
184
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
185 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
186 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
187
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
188 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
189 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
190 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
191 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
192
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
193 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
194 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
195 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
196 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
197 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
198 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
199 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
200 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
201 }
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 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
204 "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
205 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
206 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
207
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
208 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
209 * 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
210 ******************************************************************************/
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
211
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
212 static const gchar *
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
213 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
214 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
215 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
216
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
217 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
218 "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
219
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
220 return ticket_url;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
221 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
222
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
223 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
224 {
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
225 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
226 g_return_if_reached();
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
227 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
228 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
229 purple_xfer_error(
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
230 purple_xfer_get_xfer_type(xfer),
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
231 purple_xfer_get_account(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
232 purple_xfer_get_remote_user(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
233 msg);
34387
288370cfc73c Cosmetic changes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34386
diff changeset
234 purple_xfer_end(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
235 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
236
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
237 /*******************************************************************************
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
238 * Authentication.
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
239 ******************************************************************************/
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 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
242 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
243 gpointer user_data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
244 } ggp_edisc_auth_data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
245
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
246 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
247 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
248 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
249 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
250 GSList *it;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
251
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
252 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
253
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
254 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
255
40026
63b74980bff0 Simplify handling of GG xfer auth queue.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40025
diff changeset
256 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
257 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
258
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
259 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
260 g_free(auth);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
261 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
262 sdata->auth_pending = NULL;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
263 sdata->auth_done = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
264 }
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 static void
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
267 ggp_ggdrive_auth_done(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
268 gpointer user_data)
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
269 {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
270 PurpleConnection *gc = user_data;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
271 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
272 SoupStatus status_code;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
273 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
274 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
275 int status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
276
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
277 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
278
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
279 sdata->auth_request = NULL;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
280
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
281 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
282 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
283 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
284 "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
285 "unsuccessful request (code = %d)",
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
286 status_code);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
287 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
288 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
289 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
290
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
291 parser = ggp_json_parse(msg->response_body->data);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
292 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
293 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
294 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
295 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
296 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
297
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
298 if (status != 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
299 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
300 "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
301 "bad result (status=%d)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
302 status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
303 if (purple_debug_is_verbose()) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
304 purple_debug_misc("gg", "ggp_ggdrive_auth_done: result = %s",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
305 msg->response_body->data);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
306 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
307 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
308 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
309 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
310
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
311 sdata->security_token = g_strdup(soup_message_headers_get_one(
41215
43a4dc8903fb Use accessor for SoupMessage->response_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41214
diff changeset
312 soup_message_get_response_headers(msg),
43a4dc8903fb Use accessor for SoupMessage->response_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41214
diff changeset
313 "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
314 if (!sdata->security_token) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
315 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
316 "due to missing security token header");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
317 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
318 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
319 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
320
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_unsafe()) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
322 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
323 sdata->security_token);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
324 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
325 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
326 }
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
327
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
328 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
329 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
330 gpointer user_data)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
331 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
332 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
333 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
334 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
335 const gchar *imtoken;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
336 gchar *metadata;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
337 gchar *tmp;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
338 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
339 SoupMessageHeaders *headers;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
340
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
341 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
342
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
343 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
344 if (!imtoken) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
345 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
346 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
347 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
348
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
349 if (sdata->auth_done) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
350 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
351 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
352 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
353
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
354 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
355 auth->cb = cb;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
356 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
357 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
358
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
359 if (sdata->auth_request) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
360 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
361 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
362
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
363 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
364
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
365 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
366 ggp_edisc_set_defaults(msg);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
367 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
368
40126
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
369 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
370 "\"id\": \"%032x\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
371 "\"name\": \"%s\", "
e353b2390ad8 Replace purple_get_host_name by g_get_host_name.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40058
diff changeset
372 "\"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
373 "\"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
374 "\"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
375 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
376 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
377
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
378 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
379 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
380 g_free(tmp);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
381 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
382 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
383 g_free(tmp);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
384 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
385 g_free(metadata);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
386
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
387 soup_session_queue_message(sdata->session, msg, ggp_ggdrive_auth_done, gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
388 sdata->auth_request = msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
389 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
390
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
391 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
392 ggp_edisc_xfer_send_ticket_changed(PurpleConnection *gc, PurpleXfer *xfer,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
393 gboolean is_allowed)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
394 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
395 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
396 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
397 purple_debug_error(
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
398 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
399 "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
400 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
401 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
402 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
403
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
404 if (!is_allowed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
405 purple_debug_info(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
406 "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
407 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
408 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
409 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
410 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
411
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
412 if (edisc_xfer->allowed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
413 purple_debug_misc(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
414 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
415 "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
416 xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
417 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
418 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
419 edisc_xfer->allowed = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
420
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
421 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
422 }
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
423
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
424 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
425 * 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
426 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
427
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
428 gboolean
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
429 ggp_edisc_xfer_can_receive_file(PurpleProtocolXfer *prplxfer,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
430 PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
431 {
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
432 PurpleBuddy *buddy;
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
433
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
434 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
435 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
436
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
437 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
438 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
439 return FALSE;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
440 }
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
441
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
442 /* 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
443
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
444 return PURPLE_BUDDY_IS_ONLINE(buddy);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
445 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
446
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
447 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
448 ggp_edisc_xfer_send_init_ticket_created(G_GNUC_UNUSED SoupSession *session,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
449 SoupMessage *msg, gpointer _xfer)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
450 {
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
451 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
452 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
453 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
454 ggp_edisc_xfer_ack_status ack_status;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
455 JsonParser *parser;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
456 JsonObject *ticket;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
457
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
458 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
459 return;
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
460
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
461 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
462
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
463 edisc_xfer->msg = NULL;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
464
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
465 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
466 int error_id = ggp_edisc_parse_error(msg->response_body->data);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
467 if (error_id == 206) /* recipient not logged in */
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
468 ggp_edisc_xfer_error(xfer,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
469 _("Recipient not logged in"));
34392
e5268a401d65 Gadu-Gadu: error message about bad sender-recipient relation while sending a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34391
diff changeset
470 else if (error_id == 207) /* bad sender recipient relation */
36168
0203e8dce52d Improve gg error message. Fixes #16196.
Daniel Atallah <datallah@pidgin.im>
parents: 36068
diff changeset
471 ggp_edisc_xfer_error(xfer, _("You aren't on the "
0203e8dce52d Improve gg error message. Fixes #16196.
Daniel Atallah <datallah@pidgin.im>
parents: 36068
diff changeset
472 "recipient's buddy list"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
473 else
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
474 ggp_edisc_xfer_error(xfer,
36168
0203e8dce52d Improve gg error message. Fixes #16196.
Daniel Atallah <datallah@pidgin.im>
parents: 36068
diff changeset
475 _("Unable to send file"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
476 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
477 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
478
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
479 parser = ggp_json_parse(msg->response_body->data);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
480 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
481 ticket = json_object_get_object_member(ticket, "result");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
482 ticket = json_object_get_object_member(ticket, "send_ticket");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
483 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
484 ticket, "id"));
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
485 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
486 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
487 /* send_mode: "normal", "publink" (for legacy clients) */
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
488
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
489 g_object_unref(parser);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
490
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
491 if (edisc_xfer->ticket_id == NULL) {
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
492 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
493 "ggp_edisc_xfer_send_init_ticket_created: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
494 "couldn't get ticket id\n");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
495 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
496 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
497
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
498 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
499 "ticket \"%s\" created\n", edisc_xfer->ticket_id);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
500
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
501 g_hash_table_insert(sdata->xfers_initialized,
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
502 edisc_xfer->ticket_id, xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
503 g_hash_table_insert(sdata->xfers_history,
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
504 g_strdup(edisc_xfer->ticket_id), GINT_TO_POINTER(1));
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
505
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
506 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
507 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
508 ack_status == GGP_EDISC_XFER_ACK_STATUS_ALLOWED);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
509 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
510
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
511 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
512 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
513 gpointer _xfer)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
514 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
515 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
516 SoupMessage *msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
517 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
518 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
519 gchar *data;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
520
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
521 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
522 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
523 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
524
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
525 if (!success) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
526 ggp_edisc_xfer_error(xfer, _("Authentication failed"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
527 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
528 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
529
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
530 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
531
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
532 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
533 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
534
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
535 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
536 "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
537 sdata->security_token);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
538
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
539 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
540 "\"recipient\":\"%s\","
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
541 "\"file_name\":\"%s\","
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
542 "\"file_size\":\"%u\""
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
543 "}}",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
544 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
545 edisc_xfer->filename,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
546 (int)purple_xfer_get_size(xfer));
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
547 soup_message_set_request(msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
548 "application/x-www-form-urlencoded; charset=UTF-8",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
549 SOUP_MEMORY_TAKE, data, -1);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
550
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
551 soup_session_queue_message(sdata->session, msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
552 ggp_edisc_xfer_send_init_ticket_created, xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
553 edisc_xfer->msg = msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
554 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
555
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
556 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
557 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
558 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
559 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
560
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
561 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
562
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
563 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
564 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
565
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
566 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
567 xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
568 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
569
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
570 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
571 ggp_edisc_xfer_send_reader(SoupMessage *msg, gpointer _xfer)
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
572 {
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
573 PurpleXfer *xfer = _xfer;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
574 guchar *buffer;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
575 /* FIXME: The read/write xfer implementation sizes this dynamically. */
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
576 gsize length = 4096;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
577 gssize stored;
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
578
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
579 buffer = g_new(guchar, length);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
580 stored = purple_xfer_read_file(xfer, buffer, length);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
581
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
582 if (stored < 0) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
583 GGPXfer *edisc_xfer = GGP_XFER(xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
584 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
585 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
586 return;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
587 }
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
588
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
589 soup_message_body_append(msg->request_body, SOUP_MEMORY_TAKE, buffer,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
590 stored);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
591 if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer)) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
592 soup_message_body_complete(msg->request_body);
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
593 }
34389
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
594 }
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
595
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
596 static void
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
597 ggp_edisc_xfer_send_done(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
598 gpointer _xfer)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
599 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
600 PurpleXfer *xfer = _xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
601 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
602 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
603 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
604 int result_status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
605
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
606 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
607 return;
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
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
610 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
611
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
612 edisc_xfer->msg = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
613
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
614 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
615 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
616 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
617 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
618
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
619 parser = ggp_json_parse(msg->response_body->data);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
620 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
621 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
622 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
623 result_status = json_object_get_int_member(result, "status");
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
624 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
625 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
626
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
627 if (result_status == 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
628 purple_xfer_set_completed(xfer, TRUE);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
629 purple_xfer_end(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
630 } else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
631 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
632 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
633 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
634
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
635 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
636 {
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
637 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
638 GGPXfer *edisc_xfer;
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
639 gchar *upload_url, *filename_e;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
640 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
641 SoupMessageHeaders *headers;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
642
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
643 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
644 edisc_xfer = GGP_XFER(xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
645 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
646 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
647 g_return_if_fail(sdata != NULL);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
648
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
649 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
650 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
651 "%s%%2C%s", edisc_xfer->ticket_id, filename_e);
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
652 g_free(filename_e);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
653 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
654 g_free(upload_url);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
655
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
656 ggp_edisc_set_defaults(msg);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
657
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
658 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
659 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
660 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
661 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
662 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
663 "{\"node_type\": \"file\"}");
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
664
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
665 soup_message_set_flags(msg, SOUP_MESSAGE_CAN_REBUILD);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
666 soup_message_body_set_accumulate(msg->request_body, FALSE);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
667 soup_message_headers_set_content_length(headers,
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
668 purple_xfer_get_size(xfer));
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
669 g_signal_connect(msg, "wrote-headers",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
670 G_CALLBACK(ggp_edisc_xfer_send_reader), xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
671 g_signal_connect(msg, "wrote-chunk", G_CALLBACK(ggp_edisc_xfer_send_reader),
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
672 xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
673
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
674 soup_session_queue_message(sdata->session, msg, ggp_edisc_xfer_send_done,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
675 xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
676 edisc_xfer->msg = msg;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
677 }
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
678
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
679 PurpleXfer * ggp_edisc_xfer_send_new(PurpleProtocolXfer *prplxfer, PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
680 {
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
681 GGPXfer *xfer;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
682
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
683 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
684 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
685
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 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
687 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
688 "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
689 "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
690 "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
691 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
692 );
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
693
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
694 xfer->gc = gc;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
695
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
696 return PURPLE_XFER(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
697 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
698
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
699 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
700 const char *filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
701 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
702 PurpleXfer *xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
703
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
704 g_return_if_fail(gc != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
705 g_return_if_fail(who != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
706
36745
75ed0608dcd6 Updated comment
Ankit Vani <a@nevitus.org>
parents: 34946
diff changeset
707 /* 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
708 * See ggp_edisc_xfer_send_new. */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
709
38841
518362268798 make sure all the PurpleProtocolXfer parameters are named prplxfer
Gary Kramlich <grim@reaperworld.com>
parents: 38835
diff changeset
710 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
711 if (filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
712 purple_xfer_request_accepted(xfer, filename);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
713 else
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
714 purple_xfer_request(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
715 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
716
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
717 /*******************************************************************************
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
718 * 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
719 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
720
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
721 static PurpleXfer *
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
722 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
723 {
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
724 GGPXfer *xfer;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
725
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
726 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
727 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
728
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
729 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
730 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
731 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
732
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
733 xfer->gc = gc;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
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 return PURPLE_XFER(xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
736 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
737
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
738 static void
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
739 ggp_edisc_xfer_recv_ack_done(G_GNUC_UNUSED SoupSession *session,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
740 SoupMessage *msg, gpointer _xfer)
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
741 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
742 PurpleXfer *xfer = _xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
743 GGPXfer *edisc_xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
744
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
745 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
746 g_return_if_reached();
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
747 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
748
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
749 edisc_xfer = GGP_XFER(xfer);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
750 edisc_xfer->msg = NULL;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
751
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
752 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
753 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
754 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
755 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
756
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
757 purple_debug_info("gg", "ggp_edisc_xfer_recv_ack_done: [%s]\n",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
758 msg->response_body->data);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
759 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
760
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
761 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
762 {
39669
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
763 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
764 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
765 SoupMessage *msg;
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
766 SoupMessageHeaders *headers;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
767
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
768 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
769
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
770 edisc_xfer->allowed = accept;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
771
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
772 msg = soup_message_new("PUT",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
773 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
774 ggp_edisc_set_defaults(msg);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
775
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
776 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
777 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
778 sdata->security_token);
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
779 soup_message_headers_replace(headers, "X-gged-ack-status",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
780 accept ? "allow" : "reject");
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
781
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
782 soup_session_queue_message(sdata->session, msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
783 accept ? ggp_edisc_xfer_recv_ack_done : NULL,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
784 xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
785 edisc_xfer->msg = msg;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
786
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
787 if (!accept) {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
788 edisc_xfer->msg = NULL;
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
789 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
790 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
791
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
792 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
793 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
794 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
795 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
796 }
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
797
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
798 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
799 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
800 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
801 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
802 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
803
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
804 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
805 {
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
806 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
807
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
808 if (edisc_xfer->ready)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
809 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
810 edisc_xfer->ready = TRUE;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
811
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
812 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
813 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
814
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
815 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
816 ggp_edisc_xfer_recv_writer(SoupMessage *msg, SoupBuffer *chunk, gpointer _xfer)
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
817 {
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
818 PurpleXfer *xfer = _xfer;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
819 GGPXfer *edisc_xfer = GGP_XFER(xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
820 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
821 gboolean stored;
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
822
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
823 if (chunk->length > purple_xfer_get_bytes_remaining(xfer)) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
824 purple_debug_error(
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
825 "gg",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
826 "ggp_edisc_xfer_recv_writer: saved too much (%" G_GSIZE_FORMAT
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
827 " > %" G_GOFFSET_FORMAT ")",
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
828 chunk->length, purple_xfer_get_bytes_remaining(xfer));
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
829 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
830 return;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
831 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
832
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
833 stored = purple_xfer_write_file(xfer, (const guchar *)chunk->data,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
834 chunk->length);
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
835
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
836 if (!stored) {
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
837 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: saved too less");
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
838 soup_session_cancel_message(sdata->session, msg, SOUP_STATUS_IO_ERROR);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
839 return;
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
840 }
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
841 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
842
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
843 static void
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
844 ggp_edisc_xfer_recv_done(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
845 gpointer _xfer)
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
846 {
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
847 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
848 GGPXfer *edisc_xfer = GGP_XFER(xfer);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
849
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
850 if (purple_xfer_is_cancelled(xfer))
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
851 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
852
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
853 edisc_xfer->msg = NULL;
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
854
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
855 if (!SOUP_STATUS_IS_SUCCESSFUL(soup_message_get_status(msg))) {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
856 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
857 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
858 }
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
859
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
860 if (purple_xfer_get_bytes_remaining(xfer) == 0) {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
861 purple_xfer_set_completed(xfer, TRUE);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
862 purple_xfer_end(xfer);
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
863 } else {
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
864 purple_debug_warning("gg", "ggp_edisc_xfer_recv_done: didn't "
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
865 "received everything\n");
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
866 ggp_edisc_xfer_error(xfer, _("Error while receiving a file"));
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
867 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
868 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
869
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
870 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
871 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
872 {
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
873 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
874 GGPXfer *edisc_xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
875 gchar *upload_url;
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
876 SoupMessage *msg;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
877
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
878 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
879 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
880 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
881 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
882 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
883
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
884 upload_url =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
885 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
886 "%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
887 edisc_xfer->ticket_id,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
888 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
889 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
890 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
891 g_free(upload_url);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
892
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
893 ggp_edisc_set_defaults(msg);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
894 // 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
895
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
896 soup_message_body_set_accumulate(msg->response_body, FALSE);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
897 g_signal_connect(msg, "got-chunk", G_CALLBACK(ggp_edisc_xfer_recv_writer),
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
898 xfer);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
899
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
900 soup_session_queue_message(sdata->session, msg, ggp_edisc_xfer_recv_done,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
901 xfer);
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
902 edisc_xfer->msg = msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
903 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
904
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
905 static void
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
906 ggp_edisc_xfer_recv_ticket_update_got(G_GNUC_UNUSED SoupSession *session,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
907 SoupMessage *msg, gpointer user_data)
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
908 {
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
909 PurpleConnection *gc = user_data;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
910 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
911 GGPXfer *edisc_xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
912 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
913 JsonObject *result;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
914 int status = -1;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
915 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
916
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
917 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
918 uin_t sender, recipient;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
919 int file_size;
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
920 SoupStatus status_code;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
921
41212
9f0f4c23132e Use accessor for SoupMessage->status_code
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41091
diff changeset
922 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
923 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
924 purple_debug_error("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
925 "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
926 "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
927 status_code);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
928 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
929 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
930
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
931 sdata = ggp_edisc_get_sdata(gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
932 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
933
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
934 parser = ggp_json_parse(msg->response_body->data);
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
935 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
936 result = json_object_get_object_member(result, "result");
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
937 if (json_object_has_member(result, "status"))
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
938 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
939 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
940
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
941 if (status != 0) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
942 purple_debug_warning("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
943 "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
944 "get update (status=%d)",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
945 status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
946 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
947 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
948 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
949
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
950 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
951 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
952 recipient =
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
953 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
954 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
955 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
956 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
957
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
958 /* GG11: normal
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
959 * 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
960 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
961 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
962
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
963 /* more fields:
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
964 * 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
965 */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
966
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
967 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
968 purple_debug_info("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
969 "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
970 "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
971 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
972 send_mode_str);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
973 }
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
974
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
975 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
976 if (xfer != NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
977 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
978 "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
979 "already updated",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
980 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
981 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
982 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
983 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
984
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
985 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
986 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
987 "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
988 "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
989 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
990 recipient);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
991 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
992 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
993 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
994
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
995 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
996 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
997 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
998 purple_xfer_request(xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
999 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
1000 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
1001 g_hash_table_insert(sdata->xfers_initialized, edisc_xfer->ticket_id, xfer);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1002 g_hash_table_insert(sdata->xfers_history, g_strdup(ticket_id),
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1003 GINT_TO_POINTER(1));
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1004
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1005 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1006 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1007
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1008 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1009 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
1010 gboolean success,
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1011 gpointer _ticket)
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1012 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1013 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
1014 SoupMessage *msg;
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1015 gchar *ticket = _ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1016
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1017 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
1018
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1019 if (!success) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1020 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1021 "gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1022 "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
1023 "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
1024 ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1025 g_free(ticket);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1026 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1027 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1028
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1029 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
1030 g_free(ticket);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1031
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1032 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
1033
41214
b0b7d118475f Use accessor for SoupMessage->request_headers
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 41212
diff changeset
1034 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
1035 "X-gged-security-token",
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1036 sdata->security_token);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1037
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1038 soup_session_queue_message(sdata->session, msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1039 ggp_edisc_xfer_recv_ticket_update_got, gc);
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1040 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1041
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1042 static void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1043 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
1044 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1045 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
1046
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1047 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
1048
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1049 if (g_hash_table_lookup(sdata->xfers_history, ticket_id)) {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1050 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1051 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1052
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1053 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
1054 g_strdup(ticket_id));
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1055 }
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
1056
40009
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1057 void
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1058 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
1059 {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1060 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
1061 PurpleXfer *xfer;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1062 JsonParser *parser;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1063 JsonObject *ticket;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1064 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
1065 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
1066 gboolean is_completed;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1067
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1068 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
1069
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1070 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
1071 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
1072 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
1073 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
1074 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
1075 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
1076
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1077 if (ticket_id == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1078 ticket_id = "";
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1079 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1080 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
1081 if (xfer == NULL) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1082 purple_debug_misc("gg",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1083 "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
1084 "found, updating it...",
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1085 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
1086 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
1087 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1088 return;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1089 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1090
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1091 is_completed = FALSE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1092 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
1093 /* do nothing */
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1094 } 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
1095 is_completed = TRUE;
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1096 } 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
1097 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
1098 else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1099 purple_debug_warning(
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1100 "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
1101 send_status);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1102 g_object_unref(parser);
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1103 return;
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
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1106 g_object_unref(parser);
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 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
1109 if (is_completed) {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1110 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
1111 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1112 } else {
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1113 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
1114 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
1115 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
1116 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1117 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1118 }
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1119
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1120 /*******************************************************************************
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1121 * GObject implementation
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1122 ******************************************************************************/
0f7a002a052a Re-arrange GG edisc file to avoid prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39670
diff changeset
1123
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
1124 G_DEFINE_DYNAMIC_TYPE(GGPXfer, ggp_xfer, PURPLE_TYPE_XFER);
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1125
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
1126 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
1127 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
1128 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
1129
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
1130 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
1131 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
1132 } 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
1133 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
1134 }
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
1135 }
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
1136
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
1137 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
1138 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
1139 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
1140
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
1141 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
1142 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
1143 } 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
1144 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
1145 }
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
1146 }
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
1147
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
1148 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
1149 ggp_xfer_init(GGPXfer *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
1150
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
1151 }
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
1152
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
1153 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
1154 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
1155 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
1156 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
1157
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1158 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
1159
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
1160 g_free(edisc_xfer->filename);
40025
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1161 soup_session_cancel_message(sdata->session, edisc_xfer->msg,
7668af6d772c Convert GG file transfers to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40009
diff changeset
1162 SOUP_STATUS_CANCELLED);
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
1163
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
1164 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
1165 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
1166 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
1167 }
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
1168
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
1169 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
1170 }
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
1171
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
1172 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
1173 ggp_xfer_class_finalize(GGPXferClass *klass) {
bab07ecb9330 Make PurpleXfer a derivable type and create subclasses in all the protocols that support file transfers
Gary Kramlich <grim@reaperworld.com>
parents: 38841
diff changeset
1174
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
1175 }
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
1176
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
1177 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
1178 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
1179 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
1180 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
1181
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
1182 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
1183
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
1184 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
1185 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
1186 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
1187 }
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
1188
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
1189 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
1190 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
1191 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
1192 }

mercurial