libpurple/protocols/gg/edisc.c

Fri, 31 Jan 2014 18:14:33 +0530

author
Ankit Vani <a@nevitus.org>
date
Fri, 31 Jan 2014 18:14:33 +0530
branch
gtkdoc-conversion
changeset 35393
00f876b129bc
parent 35190
5986ee34c476
child 35358
7beae478c905
child 37015
28ee14bbe0ab
permissions
-rw-r--r--

Initial replacements for gtk-doc style comments

34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1 #include "edisc.h"
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
2
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
3 #include <debug.h>
35190
5986ee34c476 libpurple: Fix build and warnings with glib 2.24
Ankit Vani <a@nevitus.org>
parents: 35158
diff changeset
4 #include <glibcompat.h>
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
5
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
6 #include "gg.h"
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
7 #include "libgaduw.h"
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
8 #include "utils.h"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
9 #include <http.h>
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
10
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
11 #include <json-glib/json-glib.h>
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
12
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
13 #define GGP_EDISC_OS "WINNT x86-msvc"
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
14 #define GGP_EDISC_TYPE "desktop"
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
15 #define GGP_EDISC_API "6"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
16
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
17 #define GGP_EDISC_RESPONSE_MAX 10240
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
18 #define GGP_EDISC_FNAME_ALLOWED "1234567890" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
19 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" \
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
20 " [](){}-+=_;'<>,.&$!"
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
21
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
22 typedef struct _ggp_edisc_auth_data ggp_edisc_auth_data;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
23
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
24 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
25
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
26 struct _ggp_edisc_session_data
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
27 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
28 GHashTable *xfers_initialized;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
29 GHashTable *xfers_history;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
30
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
31 PurpleHttpCookieJar *cookies;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
32 gchar *security_token;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
33
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
34 PurpleHttpConnection *auth_request;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
35 gboolean auth_done;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
36 GList *auth_pending;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
37 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
38
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
39 struct _ggp_edisc_xfer
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
40 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
41 gchar *filename;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
42 gchar *ticket_id;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
43
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
44 gboolean allowed, ready;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
45
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
46 PurpleConnection *gc;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
47 PurpleHttpConnection *hc;
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
48
34430
15639e15839e Gadu-Gadu: fix -Wsign-compare errors
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34426
diff changeset
49 gsize already_read;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
50 };
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
51
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
52 typedef enum
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
53 {
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
54 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
55 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
56 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
57 } ggp_edisc_xfer_ack_status;
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
58
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
59 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
60 gpointer user_data);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
61
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
62 /* Setting up. */
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
63 static inline ggp_edisc_session_data *
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
64 ggp_edisc_get_sdata(PurpleConnection *gc);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
65
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
66 /* Misc. */
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
67 static void ggp_edisc_set_defaults(PurpleHttpRequest *req);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
68 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
69
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
70 /* 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
71 static void ggp_edisc_xfer_free(PurpleXfer *xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
72 static void ggp_edisc_xfer_error(PurpleXfer *xfer, const gchar *msg);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
73 static void ggp_edisc_xfer_cancel(PurpleXfer *xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
74 static const gchar * ggp_edisc_xfer_ticket_url(const gchar *ticket_id);
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
75 static void ggp_edisc_xfer_progress_watcher(PurpleHttpConnection *hc,
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
76 gboolean reading_state, int processed, int total, gpointer _xfer);
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
77 static ggp_edisc_xfer_ack_status
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
78 ggp_edisc_xfer_parse_ack_status(const gchar *str);
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
79
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
80
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
81 /* Sending a file. */
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
82 static void ggp_edisc_xfer_send_ticket_changed(PurpleConnection *gc,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
83 PurpleXfer *xfer, gboolean is_allowed);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
84
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
85 /* Receiving a file. */
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
86 static void 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
87 static void ggp_edisc_xfer_recv_ticket_got(PurpleConnection *gc,
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
88 const gchar *ticket_id);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
89 static void ggp_edisc_xfer_recv_ticket_completed(PurpleXfer *xfer);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
90
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
91 /* Authentication. */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
92 static void ggp_ggdrive_auth(PurpleConnection *gc, ggp_ggdrive_auth_cb cb,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
93 gpointer user_data);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
94
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
95 /*******************************************************************************
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
96 * Setting up.
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
97 ******************************************************************************/
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
98
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
99 static inline ggp_edisc_session_data *
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
100 ggp_edisc_get_sdata(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
101 {
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
102 GGPInfo *accdata;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
103
34999
90850ff4b5eb Backed out changeset 348356cbc657
Ankit Vani <a@nevitus.org>
parents: 34989
diff changeset
104 g_return_val_if_fail(PURPLE_CONNECTION_IS_VALID(gc), NULL);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
105
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
106 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
107 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
108
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
109 return accdata->edisc_data;
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
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
112 void ggp_edisc_setup(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
113 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
114 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
115 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
116
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
117 accdata->edisc_data = sdata;
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 sdata->cookies = purple_http_cookie_jar_new();
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
120 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
121 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
122 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
123
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
124 void ggp_edisc_cleanup(PurpleConnection *gc)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
125 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
126 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
127
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
128 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
129
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
130 purple_http_conn_cancel(sdata->auth_request);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
131 g_list_free_full(sdata->auth_pending, g_free);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
132 g_free(sdata->security_token);
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 purple_http_cookie_jar_unref(sdata->cookies);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
135 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
136 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
137
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
138 g_free(sdata);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
139 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
140
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
141 /*******************************************************************************
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
142 * Misc.
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
143 ******************************************************************************/
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
144
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
145 static void ggp_edisc_set_defaults(PurpleHttpRequest *req)
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
146 {
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
147 purple_http_request_set_max_len(req, GGP_EDISC_RESPONSE_MAX);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
148 purple_http_request_header_set(req, "X-gged-api-version",
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
149 GGP_EDISC_API);
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
150
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
151 /* optional fields */
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
152 purple_http_request_header_set(req, "User-Agent", "Mozilla/5.0 (Windows"
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
153 " NT 6.1; rv:11.0) Gecko/20120613 GG/11.0.0.8169 (WINNT_x86-msv"
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
154 "c; pl; beta; standard)");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
155 purple_http_request_header_set(req, "Accept", "text/html,application/xh"
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
156 "tml+xml,application/xml;q=0.9,*/*;q=0.8");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
157 purple_http_request_header_set(req, "Accept-Language",
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
158 "pl,en-us;q=0.7,en;q=0.3");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
159 /* purple_http_request_header_set(req, "Accept-Encoding",
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
160 * "gzip, deflate"); */
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
161 purple_http_request_header_set(req, "Accept-Charset",
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
162 "ISO-8859-2,utf-8;q=0.7,*;q=0.7");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
163 purple_http_request_header_set(req, "Connection", "keep-alive");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
164 purple_http_request_header_set(req, "Content-Type",
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
165 "application/x-www-form-urlencoded; charset=UTF-8");
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
166 }
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
167
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
168 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
169 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
170 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
171 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
172 int error_id;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
173
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
174 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
175 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
176 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
177 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
178 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
179 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
180 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
181 g_object_unref(parser);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
182
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
183 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
184 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
185
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 * 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
188 ******************************************************************************/
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
189
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
190 static void ggp_edisc_xfer_free(PurpleXfer *xfer)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
191 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
192 ggp_edisc_session_data *sdata;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
193 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
194
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
195 if (edisc_xfer == NULL)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
196 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
197
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
198 g_free(edisc_xfer->filename);
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
199 purple_http_conn_cancel(edisc_xfer->hc);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
200
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
201 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
202 g_return_if_fail(sdata != NULL);
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
203 if (edisc_xfer->ticket_id != NULL)
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
204 g_hash_table_remove(sdata->xfers_initialized,
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
205 edisc_xfer->ticket_id);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
206
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
207 g_free(edisc_xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
208 purple_xfer_set_protocol_data(xfer, NULL);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
209
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
210 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
211
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
212 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
213 {
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
214 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
215 g_return_if_reached();
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
216 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
217 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
218 purple_xfer_error(
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
219 purple_xfer_get_xfer_type(xfer),
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
220 purple_xfer_get_account(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
221 purple_xfer_get_remote_user(xfer),
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
222 msg);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
223 ggp_edisc_xfer_free(xfer);
34387
288370cfc73c Cosmetic changes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34386
diff changeset
224 purple_xfer_end(xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
225 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
226
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
227 void ggp_edisc_xfer_ticket_changed(PurpleConnection *gc, const char *data)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
228 {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
229 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
230 PurpleXfer *xfer;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
231 JsonParser *parser;
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
232 JsonObject *ticket;
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
233 const gchar *ticket_id, *send_status;
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
234 ggp_edisc_xfer_ack_status ack_status;
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
235 gboolean is_completed;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
236
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
237 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
238
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
239 parser = ggp_json_parse(data);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
240 ticket = 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
241 ticket_id = json_object_get_string_member(ticket, "id");
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
242 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
243 json_object_get_string_member(ticket, "ack_status"));
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
244 send_status = json_object_get_string_member(ticket, "send_status");
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
245
34408
ee5663c0ffe8 Gadu-Gadu: new libgadu debug handler
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34405
diff changeset
246 if (ticket_id == NULL)
ee5663c0ffe8 Gadu-Gadu: new libgadu debug handler
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34405
diff changeset
247 ticket_id = "";
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
248 xfer = g_hash_table_lookup(sdata->xfers_initialized, ticket_id);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
249 if (xfer == NULL) {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
250 purple_debug_misc("gg", "ggp_edisc_event_ticket_changed: "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
251 "ticket %s not found, updating it...\n",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
252 purple_debug_is_unsafe() ? ticket_id : "");
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
253 ggp_edisc_xfer_recv_ticket_got(gc, ticket_id);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
254 g_object_unref(parser);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
255 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
256 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
257
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
258 is_completed = FALSE;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
259 if (g_strcmp0("in_progress", send_status) == 0) {
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
260 /* do nothing */
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
261 } else if (g_strcmp0("completed", send_status) == 0) {
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
262 is_completed = TRUE;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
263 } else if (g_strcmp0("expired", send_status) == 0)
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
264 ggp_edisc_xfer_error(xfer, _("File transfer expired."));
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
265 else {
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
266 purple_debug_warning("gg", "ggp_edisc_event_ticket_changed: "
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
267 "unknown send_status=%s\n", send_status);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
268 g_object_unref(parser);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
269 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
270 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
271
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
272 g_object_unref(parser);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
273
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
274 if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_RECEIVE) {
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
275 if (is_completed)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
276 ggp_edisc_xfer_recv_ticket_completed(xfer);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
277 } else {
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
278 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
279 ggp_edisc_xfer_send_ticket_changed(gc, xfer, ack_status
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
280 == GGP_EDISC_XFER_ACK_STATUS_ALLOWED);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
281 }
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
282
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
283 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
284
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
285 static void ggp_edisc_xfer_cancel(PurpleXfer *xfer)
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
286 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
287 g_return_if_fail(xfer != NULL);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
288
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
289 ggp_edisc_xfer_free(xfer);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
290 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
291
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
292 static const gchar * ggp_edisc_xfer_ticket_url(const gchar *ticket_id)
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
293 {
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
294 static gchar ticket_url[150];
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
295
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
296 g_snprintf(ticket_url, sizeof(ticket_url),
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
297 "https://drive.mpa.gg.pl/send_ticket/%s", ticket_id);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
298
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
299 return ticket_url;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
300 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
301
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
302 static void ggp_edisc_xfer_progress_watcher(PurpleHttpConnection *hc,
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
303 gboolean reading_state, int processed, int total, gpointer _xfer)
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
304 {
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
305 PurpleXfer *xfer = _xfer;
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
306 gboolean eof;
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
307 int total_real;
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
308
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
309 if (purple_xfer_get_xfer_type(xfer) == PURPLE_XFER_TYPE_RECEIVE) {
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
310 if (!reading_state)
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
311 return;
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
312 } else {
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
313 if (reading_state)
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
314 return;
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
315 }
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
316
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
317 eof = (processed >= total);
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
318 total_real = purple_xfer_get_size(xfer);
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
319 if (eof || processed > total_real)
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
320 processed = total_real; /* just to be sure */
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
321
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
322 purple_xfer_set_bytes_sent(xfer, processed);
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
323 purple_xfer_update_progress(xfer);
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
324 }
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
325
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
326 static ggp_edisc_xfer_ack_status
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
327 ggp_edisc_xfer_parse_ack_status(const gchar *str)
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
328 {
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
329 g_return_val_if_fail(str != NULL, 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
330
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
331 if (g_strcmp0("unknown", str) == 0)
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
332 return 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
333 if (g_strcmp0("allowed", str) == 0)
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
334 return 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
335 if (g_strcmp0("rejected", str) == 0)
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
336 return 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
337
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
338 purple_debug_warning("gg", "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
339 "unknown status (%s)\n", str);
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
340 return 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
341 }
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
342
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
343 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
344 * 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
345 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
346
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
347 static void ggp_edisc_xfer_send_init(PurpleXfer *xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
348 static void ggp_edisc_xfer_send_init_authenticated(PurpleConnection *gc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
349 gboolean success, gpointer _xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
350 static void ggp_edisc_xfer_send_init_ticket_created(PurpleHttpConnection *hc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
351 PurpleHttpResponse *response, gpointer _xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
352 static void ggp_edisc_xfer_send_reader(PurpleHttpConnection *hc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
353 gchar *buffer, size_t offset, size_t length, gpointer _xfer,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
354 PurpleHttpContentReaderCb cb);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
355 static void ggp_edisc_xfer_send_start(PurpleXfer *xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
356 static void ggp_edisc_xfer_send_done(PurpleHttpConnection *hc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
357 PurpleHttpResponse *response, gpointer _xfer);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
358
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
359 gboolean ggp_edisc_xfer_can_receive_file(PurpleConnection *gc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
360 const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
361 {
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
362 PurpleBuddy *buddy;
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
363
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
364 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
365 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
366
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
367 buddy = purple_blist_find_buddy(purple_connection_get_account(gc), who);
34405
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
368 if (buddy == NULL)
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
369 return FALSE;
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
370
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
371 /* 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
372
923e68d55690 Gadu-Gadu: we are not allowed to send files to everyone
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34404
diff changeset
373 return PURPLE_BUDDY_IS_ONLINE(buddy);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
374 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
375
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
376 static void ggp_edisc_xfer_send_init(PurpleXfer *xfer)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
377 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
378 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
379
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
380 purple_xfer_set_status(xfer, PURPLE_XFER_STATUS_NOT_STARTED);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
381
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
382 edisc_xfer->filename = g_strdup(purple_xfer_get_filename(xfer));
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
383 g_strcanon(edisc_xfer->filename, GGP_EDISC_FNAME_ALLOWED, '_');
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
384
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
385 ggp_ggdrive_auth(edisc_xfer->gc, ggp_edisc_xfer_send_init_authenticated,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
386 xfer);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
387 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
388
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
389 static void ggp_edisc_xfer_send_init_authenticated(PurpleConnection *gc,
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
390 gboolean success, gpointer _xfer)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
391 {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
392 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
393 PurpleHttpRequest *req;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
394 PurpleXfer *xfer = _xfer;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
395 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
396 gchar *data;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
397
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
398 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
399 return;
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
400
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
401 if (!success) {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
402 ggp_edisc_xfer_error(xfer, _("Authentication failed"));
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
403 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
404 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
405
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
406 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
407
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
408 req = purple_http_request_new("https://drive.mpa.gg.pl/send_ticket");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
409 purple_http_request_set_method(req, "PUT");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
410
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
411 ggp_edisc_set_defaults(req);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
412 purple_http_request_set_cookie_jar(req, sdata->cookies);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
413
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
414 purple_http_request_header_set(req, "X-gged-security-token",
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
415 sdata->security_token);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
416
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
417 data = g_strdup_printf("{\"send_ticket\":{"
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
418 "\"recipient\":\"%s\","
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
419 "\"file_name\":\"%s\","
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
420 "\"file_size\":\"%u\""
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
421 "}}",
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
422 purple_xfer_get_remote_user(xfer),
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
423 edisc_xfer->filename,
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
424 (int)purple_xfer_get_size(xfer));
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
425 purple_http_request_set_contents(req, data, -1);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
426 g_free(data);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
427
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
428 edisc_xfer->hc = purple_http_request(gc, req,
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
429 ggp_edisc_xfer_send_init_ticket_created, xfer);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
430 purple_http_request_unref(req);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
431 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
432
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
433 static void ggp_edisc_xfer_send_init_ticket_created(PurpleHttpConnection *hc,
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
434 PurpleHttpResponse *response, gpointer _xfer)
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
435 {
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
436 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
437 purple_http_conn_get_purple_connection(hc));
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
438 PurpleXfer *xfer = _xfer;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
439 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
440 const gchar *data = purple_http_response_get_data(response, NULL);
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
441 ggp_edisc_xfer_ack_status ack_status;
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
442 JsonParser *parser;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
443 JsonObject *ticket;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
444
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
445 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
446 return;
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
447
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
448 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
449
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
450 edisc_xfer->hc = NULL;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
451
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
452 if (!purple_http_response_is_successful(response)) {
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
453 int error_id = ggp_edisc_parse_error(data);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
454 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
455 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
456 _("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
457 else if (error_id == 207) /* bad sender recipient relation */
e5268a401d65 Gadu-Gadu: error message about bad sender-recipient relation while sending a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34391
diff changeset
458 ggp_edisc_xfer_error(xfer, _("Recipient didn't added "
e5268a401d65 Gadu-Gadu: error message about bad sender-recipient relation while sending a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34391
diff changeset
459 "you to his buddy list"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
460 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
461 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
462 _("Cannot offer sending a file"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
463 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
464 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
465
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
466 parser = ggp_json_parse(data);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
467 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
468 ticket = json_object_get_object_member(ticket, "result");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
469 ticket = json_object_get_object_member(ticket, "send_ticket");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
470 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
471 ticket, "id"));
34404
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
472 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
473 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
474 /* send_mode: "normal", "publink" (for legacy clients) */
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
475
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
476 g_object_unref(parser);
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 if (edisc_xfer->ticket_id == NULL) {
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
479 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
480 "ggp_edisc_xfer_send_init_ticket_created: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
481 "couldn't get ticket id\n");
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
482 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
483 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
484
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
485 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
486 "ticket \"%s\" created\n", edisc_xfer->ticket_id);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
487
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
488 g_hash_table_insert(sdata->xfers_initialized,
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
489 edisc_xfer->ticket_id, xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
490 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
491 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
492
c6d3ad1669c9 Gadu-Gadu: support file transfers to legacy clients
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34402
diff changeset
493 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
494 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
495 ack_status == GGP_EDISC_XFER_ACK_STATUS_ALLOWED);
34383
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 void ggp_edisc_xfer_send_ticket_changed(PurpleConnection *gc, PurpleXfer *xfer,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
499 gboolean is_allowed)
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
500 {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
501 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
502 if (!edisc_xfer) {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
503 purple_debug_fatal("gg", "ggp_edisc_event_ticket_changed: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
504 "transfer %p already free'd\n", xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
505 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
506 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
507
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
508 if (!is_allowed) {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
509 purple_debug_info("gg", "ggp_edisc_event_ticket_changed: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
510 "transfer %p rejected\n", xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
511 purple_xfer_cancel_remote(xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
512 ggp_edisc_xfer_free(xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
513 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
514 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
515
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
516 if (edisc_xfer->allowed) {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
517 purple_debug_misc("gg", "ggp_edisc_event_ticket_changed: "
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
518 "transfer %p already allowed\n", xfer);
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
519 return;
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
520 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
521 edisc_xfer->allowed = TRUE;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
522
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
523 purple_xfer_start(xfer, -1, NULL, 0);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
524 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
525
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
526 static void ggp_edisc_xfer_send_reader(PurpleHttpConnection *hc,
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
527 gchar *buffer, size_t offset, size_t length, gpointer _xfer,
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
528 PurpleHttpContentReaderCb cb)
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
529 {
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
530 PurpleXfer *xfer = _xfer;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
531 ggp_edisc_xfer *edisc_xfer;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
532 int stored;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
533 gboolean success, eof = FALSE;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
534
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
535 g_return_if_fail(xfer != NULL);
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
536 edisc_xfer = purple_xfer_get_protocol_data(xfer);
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
537 g_return_if_fail(edisc_xfer != NULL);
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
538
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
539 if (edisc_xfer->already_read != offset) {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
540 purple_debug_error("gg", "ggp_edisc_xfer_send_reader: "
35029
f9f672dcaadf Fixed warnings
Ankit Vani <a@nevitus.org>
parents: 34999
diff changeset
541 "Invalid offset (%" G_GSIZE_FORMAT " != %" G_GSIZE_FORMAT ")\n",
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
542 edisc_xfer->already_read, offset);
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
543 ggp_edisc_xfer_error(xfer, _("Error while reading a file"));
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
544 return;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
545 }
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
546
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
547 stored = purple_xfer_read_file(xfer, (guchar *)buffer, length);
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
548
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
549 if (stored < 0)
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
550 success = FALSE;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
551 else {
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
552 success = TRUE;
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
553 edisc_xfer->already_read += stored;
35029
f9f672dcaadf Fixed warnings
Ankit Vani <a@nevitus.org>
parents: 34999
diff changeset
554 eof = ((goffset)edisc_xfer->already_read >= purple_xfer_get_size(xfer));
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
555 }
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
556
34389
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
557 cb(hc, success, eof, stored);
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
558 }
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
559
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
560 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
561 {
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
562 ggp_edisc_session_data *sdata;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
563 ggp_edisc_xfer *edisc_xfer;
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
564 gchar *upload_url, *filename_e;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
565 PurpleHttpRequest *req;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
566
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
567 g_return_if_fail(xfer != NULL);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
568 edisc_xfer = purple_xfer_get_protocol_data(xfer);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
569 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
570 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
571 g_return_if_fail(sdata != NULL);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
572
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
573 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
574 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
575 "%s%%2C%s", edisc_xfer->ticket_id, filename_e);
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
576 g_free(filename_e);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
577 req = purple_http_request_new(upload_url);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
578 g_free(upload_url);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
579
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
580 purple_http_request_set_method(req, "PUT");
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
581 purple_http_request_set_timeout(req, -1);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
582
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
583 ggp_edisc_set_defaults(req);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
584 purple_http_request_set_cookie_jar(req, sdata->cookies);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
585
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
586 purple_http_request_header_set(req, "X-gged-local-revision", "0");
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
587 purple_http_request_header_set(req, "X-gged-security-token",
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
588 sdata->security_token);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
589 purple_http_request_header_set(req, "X-gged-metadata",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
590 "{\"node_type\": \"file\"}");
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
591
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
592 purple_http_request_set_contents_reader(req, ggp_edisc_xfer_send_reader,
34386
d50851355988 Fully working outgoing file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34384
diff changeset
593 purple_xfer_get_size(xfer), xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
594
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
595 edisc_xfer->hc = purple_http_request(edisc_xfer->gc, req,
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
596 ggp_edisc_xfer_send_done, xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
597 purple_http_request_unref(req);
34389
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
598
6c08701e549f Better display of file transfer progress
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34387
diff changeset
599 purple_http_conn_set_progress_watcher(edisc_xfer->hc,
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
600 ggp_edisc_xfer_progress_watcher, xfer, 250000);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
601 }
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
602
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
603 static void ggp_edisc_xfer_send_done(PurpleHttpConnection *hc,
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
604 PurpleHttpResponse *response, gpointer _xfer)
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
605 {
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
606 PurpleXfer *xfer = _xfer;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
607 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
608 const gchar *data = purple_http_response_get_data(response, NULL);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
609 JsonParser *parser;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
610 JsonObject *result;
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
611 int result_status = -1;
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
612
34391
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
613 if (purple_xfer_is_cancelled(xfer))
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
614 return;
31dc448fa178 Allow cancelling a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34390
diff changeset
615
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
616 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
617
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
618 edisc_xfer->hc = NULL;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
619
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
620 if (!purple_http_response_is_successful(response)) {
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
621 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
622 return;
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
623 }
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
624
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
625 parser = ggp_json_parse(data);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
626 result = json_node_get_object(json_parser_get_root(parser));
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
627 result = json_object_get_object_member(result, "result");
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
628 if (json_object_has_member(result, "status"))
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
629 result_status = json_object_get_int_member(result, "status");
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
630 g_object_unref(parser);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
631
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
632 if (result_status == 0) {
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
633 purple_xfer_set_completed(xfer, TRUE);
34387
288370cfc73c Cosmetic changes
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34386
diff changeset
634 purple_xfer_end(xfer);
34384
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
635 ggp_edisc_xfer_free(xfer);
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
636 } else
c81441091162 Simple, but (partially) working outgoing file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34383
diff changeset
637 ggp_edisc_xfer_error(xfer, _("Error while sending a file"));
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
638 }
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
639
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
640 PurpleXfer * ggp_edisc_xfer_send_new(PurpleConnection *gc, const char *who)
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
641 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
642 PurpleXfer *xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
643 ggp_edisc_xfer *edisc_xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
644
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
645 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
646 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
647
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
648 xfer = purple_xfer_new(purple_connection_get_account(gc),
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
649 PURPLE_XFER_TYPE_SEND, who);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
650 edisc_xfer = g_new0(ggp_edisc_xfer, 1);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
651 purple_xfer_set_protocol_data(xfer, edisc_xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
652
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
653 edisc_xfer->gc = gc;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
654
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
655 purple_xfer_set_init_fnc(xfer, ggp_edisc_xfer_send_init);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
656 purple_xfer_set_start_fnc(xfer, ggp_edisc_xfer_send_start);
34383
4b1a106bbf1d Preparing a file transfer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34380
diff changeset
657 purple_xfer_set_cancel_send_fnc(xfer, ggp_edisc_xfer_cancel);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
658
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
659 return xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
660 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
661
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
662 void ggp_edisc_xfer_send_file(PurpleConnection *gc, const char *who,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
663 const char *filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
664 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
665 PurpleXfer *xfer;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
666
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
667 g_return_if_fail(gc != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
668 g_return_if_fail(who != NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
669
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
670 /* Nothing interesting here, this code is common among prpls.
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
671 * See ggp_edisc_xfer_send_new. */
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
672
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
673 xfer = ggp_edisc_xfer_send_new(gc, who);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
674 if (filename)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
675 purple_xfer_request_accepted(xfer, filename);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
676 else
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
677 purple_xfer_request(xfer);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
678 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
679
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
680 /*******************************************************************************
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
681 * 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
682 ******************************************************************************/
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
683
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
684 static void ggp_edisc_xfer_recv_ticket_update_authenticated(
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
685 PurpleConnection *gc, gboolean success, gpointer _ticket);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
686 static void ggp_edisc_xfer_recv_ticket_update_got(PurpleHttpConnection *hc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
687 PurpleHttpResponse *response, gpointer user_data);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
688 static PurpleXfer * ggp_edisc_xfer_recv_new(PurpleConnection *gc,
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
689 const char *who);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
690 static void ggp_edisc_xfer_recv_accept(PurpleXfer *xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
691 static void ggp_edisc_xfer_recv_start(PurpleXfer *xfer);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
692 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
693 static void ggp_edisc_xfer_recv_ack_done(PurpleHttpConnection *hc,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
694 PurpleHttpResponse *response, gpointer _xfer);
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
695 static gboolean ggp_edisc_xfer_recv_writer(PurpleHttpConnection *http_conn,
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
696 PurpleHttpResponse *response, const gchar *buffer, size_t offset,
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
697 size_t length, gpointer user_data);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
698 static void ggp_edisc_xfer_recv_done(PurpleHttpConnection *hc,
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
699 PurpleHttpResponse *response, gpointer _xfer);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
700
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
701 static void ggp_edisc_xfer_recv_ticket_got(PurpleConnection *gc,
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
702 const gchar *ticket_id)
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
703 {
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
704 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
705
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
706 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
707
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
708 if (g_hash_table_lookup(sdata->xfers_history, ticket_id))
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
709 return;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
710
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
711 ggp_ggdrive_auth(gc, ggp_edisc_xfer_recv_ticket_update_authenticated,
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
712 g_strdup(ticket_id));
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
713 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
714
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
715 static void ggp_edisc_xfer_recv_ticket_update_authenticated(
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
716 PurpleConnection *gc, gboolean success, gpointer _ticket)
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
717 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
718 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
719 PurpleHttpRequest *req;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
720 gchar *ticket = _ticket;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
721
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
722 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
723
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
724 if (!success) {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
725 purple_debug_warning("gg",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
726 "ggp_edisc_xfer_recv_ticket_update_authenticated: "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
727 "update of ticket %s aborted due to authentication "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
728 "failure\n", ticket);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
729 g_free(ticket);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
730 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
731 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
732
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
733 req = purple_http_request_new(ggp_edisc_xfer_ticket_url(ticket));
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
734 g_free(ticket);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
735
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
736 ggp_edisc_set_defaults(req);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
737 purple_http_request_set_cookie_jar(req, sdata->cookies);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
738
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
739 purple_http_request_header_set(req, "X-gged-security-token",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
740 sdata->security_token);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
741
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
742 purple_http_request(gc, req, ggp_edisc_xfer_recv_ticket_update_got,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
743 NULL);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
744 purple_http_request_unref(req);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
745 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
746
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
747 static void ggp_edisc_xfer_recv_ticket_update_got(PurpleHttpConnection *hc,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
748 PurpleHttpResponse *response, gpointer user_data)
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
749 {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
750 PurpleConnection *gc = purple_http_conn_get_purple_connection(hc);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
751 PurpleXfer *xfer;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
752 ggp_edisc_xfer *edisc_xfer;
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
753 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
754 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
755 int status = -1;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
756 ggp_edisc_session_data *sdata;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
757
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
758 const gchar *ticket_id, *file_name, *send_mode_str;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
759 uin_t sender, recipient;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
760 int file_size;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
761
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
762 if (!purple_http_response_is_successful(response)) {
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
763 purple_debug_error("gg",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
764 "ggp_edisc_xfer_recv_ticket_update_got: "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
765 "cannot fetch update for ticket (code=%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
766 purple_http_response_get_code(response));
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
767 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
768 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
769
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
770 sdata = ggp_edisc_get_sdata(gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
771 g_return_if_fail(sdata != NULL);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
772
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
773 parser = ggp_json_parse(purple_http_response_get_data(response, NULL));
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
774 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
775 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
776 if (json_object_has_member(result, "status"))
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
777 status = json_object_get_int_member(result, "status");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
778 result = json_object_get_object_member(result, "send_ticket");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
779
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
780 if (status != 0) {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
781 purple_debug_warning("gg",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
782 "ggp_edisc_xfer_recv_ticket_update_got: failed to get "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
783 "update (status=%d)\n", status);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
784 g_object_unref(parser);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
785 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
786 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
787
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
788 ticket_id = json_object_get_string_member(result, "id");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
789 sender = ggp_str_to_uin(json_object_get_string_member(result,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
790 "sender"));
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
791 recipient = ggp_str_to_uin(json_object_get_string_member(result,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
792 "recipient"));
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
793 file_size = g_ascii_strtoll(json_object_get_string_member(result,
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
794 "file_size"), NULL, 10);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
795 file_name = json_object_get_string_member(result, "file_name");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
796
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
797 /* GG11: normal
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
798 * AQQ 2.4.2.10: direct_inbox
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
799 */
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
800 send_mode_str = json_object_get_string_member(result, "send_mode");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
801
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
802 /* more fields:
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
803 * send_progress (float), ack_status, send_status
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
804 */
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
805
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
806 if (purple_debug_is_verbose() && purple_debug_is_unsafe())
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
807 purple_debug_info("gg", "Got ticket update: id=%s, sender=%u, "
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
808 "recipient=%u, file name=\"%s\", file size=%d, "
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
809 "send mode=%s)\n",
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
810 ticket_id,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
811 sender, recipient,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
812 file_name, file_size,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
813 send_mode_str);
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
814
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
815 xfer = g_hash_table_lookup(sdata->xfers_initialized, ticket_id);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
816 if (xfer != NULL) {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
817 purple_debug_misc("gg", "ggp_edisc_xfer_recv_ticket_update_got:"
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
818 " ticket %s already updated\n",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
819 purple_debug_is_unsafe() ? ticket_id : "");
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
820 g_object_unref(parser);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
821 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
822 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
823
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
824 if (recipient != ggp_get_my_uin(gc)) {
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
825 purple_debug_misc("gg", "ggp_edisc_xfer_recv_ticket_update_got:"
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
826 " ticket %s is not for incoming transfer "
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
827 "(its from %u to %u)\n",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
828 purple_debug_is_unsafe() ? ticket_id : "",
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
829 sender, recipient);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
830 g_object_unref(parser);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
831 return;
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
832 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
833
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
834 xfer = ggp_edisc_xfer_recv_new(gc, ggp_uin_to_str(sender));
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
835 purple_xfer_set_filename(xfer, file_name);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
836 purple_xfer_set_size(xfer, file_size);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
837 purple_xfer_request(xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
838 edisc_xfer = purple_xfer_get_protocol_data(xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
839 edisc_xfer->ticket_id = g_strdup(ticket_id);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
840 g_hash_table_insert(sdata->xfers_initialized,
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
841 edisc_xfer->ticket_id, xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
842 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
843 g_strdup(ticket_id), GINT_TO_POINTER(1));
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
844
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
845 g_object_unref(parser);
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
846 }
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
847
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
848 static PurpleXfer * ggp_edisc_xfer_recv_new(PurpleConnection *gc,
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
849 const char *who)
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
850 {
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
851 PurpleXfer *xfer;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
852 ggp_edisc_xfer *edisc_xfer;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
853
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
854 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
855 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
856
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
857 xfer = purple_xfer_new(purple_connection_get_account(gc),
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
858 PURPLE_XFER_TYPE_RECEIVE, who);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
859 edisc_xfer = g_new0(ggp_edisc_xfer, 1);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
860 purple_xfer_set_protocol_data(xfer, edisc_xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
861
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
862 edisc_xfer->gc = gc;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
863
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
864 purple_xfer_set_init_fnc(xfer, ggp_edisc_xfer_recv_accept);
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
865 purple_xfer_set_request_denied_fnc(xfer, ggp_edisc_xfer_recv_reject);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
866 purple_xfer_set_start_fnc(xfer, ggp_edisc_xfer_recv_start);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
867 purple_xfer_set_cancel_recv_fnc(xfer, ggp_edisc_xfer_cancel);
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 return xfer;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
870 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
871
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
872 static void ggp_edisc_xfer_recv_reject(PurpleXfer *xfer)
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
873 {
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
874 ggp_edisc_xfer_recv_ack(xfer, FALSE);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
875 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
876
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
877 static void ggp_edisc_xfer_recv_accept(PurpleXfer *xfer)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
878 {
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
879 ggp_edisc_xfer_recv_ack(xfer, TRUE);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
880 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
881
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
882 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
883 {
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
884 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
885 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
886 PurpleHttpRequest *req;
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
887
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
888 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
889
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
890 edisc_xfer->allowed = accept;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
891
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
892 req = purple_http_request_new(ggp_edisc_xfer_ticket_url(
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
893 edisc_xfer->ticket_id));
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
894 purple_http_request_set_method(req, "PUT");
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
895
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
896 ggp_edisc_set_defaults(req);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
897 purple_http_request_set_cookie_jar(req, sdata->cookies);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
898 purple_http_request_header_set(req, "X-gged-security-token",
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
899 sdata->security_token);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
900
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
901 purple_http_request_header_set(req, "X-gged-ack-status",
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
902 accept ? "allow" : "reject");
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
903
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
904 edisc_xfer->hc = purple_http_request(edisc_xfer->gc, req,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
905 accept ? ggp_edisc_xfer_recv_ack_done : NULL, xfer);
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
906 purple_http_request_unref(req);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
907
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
908 if (!accept) {
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
909 edisc_xfer->hc = NULL;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
910 ggp_edisc_xfer_free(xfer);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
911 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
912 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
913
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
914 static void ggp_edisc_xfer_recv_ack_done(PurpleHttpConnection *hc,
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
915 PurpleHttpResponse *response, gpointer _xfer)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
916 {
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
917 PurpleXfer *xfer = _xfer;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
918 ggp_edisc_xfer *edisc_xfer;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
919
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
920 if (purple_xfer_is_cancelled(xfer))
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
921 g_return_if_reached();
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
922
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
923 edisc_xfer = purple_xfer_get_protocol_data(xfer);
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
924 edisc_xfer->hc = NULL;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
925
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
926 if (!purple_http_response_is_successful(response)) {
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
927 ggp_edisc_xfer_error(xfer, _("Cannot confirm file transfer."));
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
928 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
929 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
930
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
931 purple_debug_info("gg", "ggp_edisc_xfer_recv_ack_done: [%s]\n",
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
932 purple_http_response_get_data(response, NULL));
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
933 }
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
934
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
935 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
936 {
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
937 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
938
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
939 if (edisc_xfer->ready)
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
940 return;
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
941 edisc_xfer->ready = TRUE;
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
942
34396
cd5a1cf7056b Gadu-Gadu: ability to accept received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34395
diff changeset
943 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
944 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
945
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
946 static void ggp_edisc_xfer_recv_start(PurpleXfer *xfer)
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
947 {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
948 ggp_edisc_session_data *sdata;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
949 ggp_edisc_xfer *edisc_xfer;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
950 gchar *upload_url;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
951 PurpleHttpRequest *req;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
952
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
953 g_return_if_fail(xfer != NULL);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
954 edisc_xfer = purple_xfer_get_protocol_data(xfer);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
955 g_return_if_fail(edisc_xfer != NULL);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
956 sdata = ggp_edisc_get_sdata(edisc_xfer->gc);
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
957 g_return_if_fail(sdata != NULL);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
958
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
959 upload_url = g_strdup_printf("https://drive.mpa.gg.pl/me/file/inbox/"
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
960 "%s,%s?api_version=%s&security_token=%s",
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
961 edisc_xfer->ticket_id, purple_url_encode(purple_xfer_get_filename(xfer)),
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
962 GGP_EDISC_API, sdata->security_token);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
963 req = purple_http_request_new(upload_url);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
964 g_free(upload_url);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
965
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
966 purple_http_request_set_timeout(req, -1);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
967
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
968 ggp_edisc_set_defaults(req);
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
969 purple_http_request_set_max_len(req, purple_xfer_get_size(xfer) + 1);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
970 purple_http_request_set_cookie_jar(req, sdata->cookies);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
971
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
972 purple_http_request_set_response_writer(req, ggp_edisc_xfer_recv_writer,
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
973 xfer);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
974
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
975 edisc_xfer->hc = purple_http_request(edisc_xfer->gc, req,
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
976 ggp_edisc_xfer_recv_done, xfer);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
977 purple_http_request_unref(req);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
978
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
979 purple_http_conn_set_progress_watcher(edisc_xfer->hc,
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
980 ggp_edisc_xfer_progress_watcher, xfer, 250000);
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
981 }
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
982
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
983 static gboolean ggp_edisc_xfer_recv_writer(PurpleHttpConnection *http_conn,
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
984 PurpleHttpResponse *response, const gchar *buffer, size_t offset,
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
985 size_t length, gpointer _xfer)
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
986 {
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
987 PurpleXfer *xfer = _xfer;
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
988 ggp_edisc_xfer *edisc_xfer;
34430
15639e15839e Gadu-Gadu: fix -Wsign-compare errors
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34426
diff changeset
989 gssize stored;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
990
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
991 g_return_val_if_fail(xfer != NULL, FALSE);
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
992 edisc_xfer = purple_xfer_get_protocol_data(xfer);
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
993 g_return_val_if_fail(edisc_xfer != NULL, FALSE);
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
994
34946
76aa2e0f8701 Merged default branch
Ankit Vani <a@nevitus.org>
parents: 34430
diff changeset
995 stored = purple_xfer_write_file(xfer, (guchar *)buffer, length) ?
35029
f9f672dcaadf Fixed warnings
Ankit Vani <a@nevitus.org>
parents: 34999
diff changeset
996 (gssize)length : -1;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
997
34430
15639e15839e Gadu-Gadu: fix -Wsign-compare errors
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 34426
diff changeset
998 if (stored < 0 || (gsize)stored != length) {
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
999 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: "
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1000 "saved too less\n");
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1001 return FALSE;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1002 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1003
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1004 if (stored > purple_xfer_get_bytes_remaining(xfer)) {
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1005 purple_debug_error("gg", "ggp_edisc_xfer_recv_writer: "
35029
f9f672dcaadf Fixed warnings
Ankit Vani <a@nevitus.org>
parents: 34999
diff changeset
1006 "saved too much (%" G_GSSIZE_FORMAT " > %" G_GOFFSET_FORMAT ")\n",
f9f672dcaadf Fixed warnings
Ankit Vani <a@nevitus.org>
parents: 34999
diff changeset
1007 stored, purple_xfer_get_bytes_remaining(xfer));
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1008 return FALSE;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1009 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1010
34401
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1011 /* May look redundant with ggp_edisc_xfer_progress_watcher,
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1012 * but it isn't!
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1013 */
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1014 purple_xfer_set_bytes_sent(xfer,
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1015 purple_xfer_get_bytes_sent(xfer) + stored);
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1016
d7a8271226d4 Gadu-Gadu: http writer for received files
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34399
diff changeset
1017 return TRUE;
34399
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1018 }
06b5a14a780c Gadu-Gadu: incoming file transfer - response writer
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34398
diff changeset
1019
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1020 static void ggp_edisc_xfer_recv_done(PurpleHttpConnection *hc,
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1021 PurpleHttpResponse *response, gpointer _xfer)
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1022 {
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1023 PurpleXfer *xfer = _xfer;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1024 ggp_edisc_xfer *edisc_xfer = purple_xfer_get_protocol_data(xfer);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1025
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1026 if (purple_xfer_is_cancelled(xfer))
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1027 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1028
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1029 g_return_if_fail(edisc_xfer != NULL);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1030
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1031 edisc_xfer->hc = NULL;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1032
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
1033 if (!purple_http_response_is_successful(response)) {
34397
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1034 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
1035 return;
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1036 }
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1037
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1038 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
1039 purple_xfer_set_completed(xfer, TRUE);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1040 purple_xfer_end(xfer);
ef40ffb28073 Gadu-Gadu: initial file transfer support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34396
diff changeset
1041 ggp_edisc_xfer_free(xfer);
34398
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1042 } else {
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1043 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
1044 "received everything\n");
0b51cb40c4f6 Gadu-Gadu: receiving of small files is possible
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34397
diff changeset
1045 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
1046 }
34395
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
1047 }
d82f00474867 Gadu-Gadu: ability to reject received file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34394
diff changeset
1048
34394
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
1049 /*******************************************************************************
ed78b0fc180e Gadu-Gadu: file transfer code tidying, first stage of receiving a file
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34393
diff changeset
1050 * Authentication.
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1051 ******************************************************************************/
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1052
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1053 struct _ggp_edisc_auth_data
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1054 {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1055 ggp_ggdrive_auth_cb cb;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1056 gpointer user_data;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1057 };
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1058
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1059 static void ggp_ggdrive_auth_done(PurpleHttpConnection *hc,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1060 PurpleHttpResponse *response, gpointer user_data);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1061
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1062 static void ggp_ggdrive_auth(PurpleConnection *gc, ggp_ggdrive_auth_cb cb,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1063 gpointer user_data)
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1064 {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1065 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
1066 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
1067 ggp_edisc_auth_data *auth;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1068 const gchar *imtoken;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1069 gchar *metadata;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1070 PurpleHttpRequest *req;
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1071
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1072 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1073
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1074 imtoken = ggp_get_imtoken(gc);
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1075 if (!imtoken)
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1076 {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1077 cb(gc, FALSE, user_data);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1078 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1079 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1080
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1081 if (sdata->auth_done)
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1082 {
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1083 cb(gc, sdata->security_token != NULL, user_data);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1084 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1085 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1086
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1087 auth = g_new0(ggp_edisc_auth_data, 1);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1088 auth->cb = cb;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1089 auth->user_data = user_data;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1090 sdata->auth_pending = g_list_prepend(sdata->auth_pending, auth);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1091
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1092 if (sdata->auth_request)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1093 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1094
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1095 purple_debug_info("gg", "ggp_ggdrive_auth(gc=%p)\n", gc);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1096
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1097 req = purple_http_request_new("https://drive.mpa.gg.pl/signin");
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1098 purple_http_request_set_method(req, "PUT");
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1099
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
1100 ggp_edisc_set_defaults(req);
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1101 purple_http_request_set_cookie_jar(req, sdata->cookies);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1102
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1103 metadata = g_strdup_printf("{"
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1104 "\"id\": \"%032x\", "
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
1105 "\"name\": \"%s\", "
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1106 "\"os_version\": \"" GGP_EDISC_OS "\", "
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1107 "\"client_version\": \"%s\", "
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1108 "\"type\": \"" GGP_EDISC_TYPE "\"}",
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1109 g_random_int_range(1, 1 << 16),
34390
bd5b690b5b95 Code polishing
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34389
diff changeset
1110 purple_get_host_name(),
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1111 ggp_libgaduw_version(gc));
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1112
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1113 purple_http_request_header_set_printf(req, "Authorization",
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1114 "IMToken %s", imtoken);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1115 purple_http_request_header_set_printf(req, "X-gged-user",
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1116 "gg/pl:%u", accdata->session->uin);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1117 purple_http_request_header_set(req, "X-gged-client-metadata", metadata);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1118 g_free(metadata);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1119
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1120 sdata->auth_request = purple_http_request(gc, req,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1121 ggp_ggdrive_auth_done, NULL);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1122 purple_http_request_unref(req);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1123 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1124
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1125 static void ggp_ggdrive_auth_results(PurpleConnection *gc, gboolean success)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1126 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1127 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
1128 GList *it;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1129
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1130 purple_debug_info("gg", "ggp_ggdrive_auth_results(gc=%p): %d\n",
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1131 gc, success);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1132
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1133 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1134
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1135 it = g_list_first(sdata->auth_pending);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1136 while (it) {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1137 ggp_edisc_auth_data *auth = it->data;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1138 it = g_list_next(it);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1139
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1140 auth->cb(gc, success, auth->user_data);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1141 g_free(auth);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1142 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1143 g_list_free(sdata->auth_pending);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1144 sdata->auth_pending = NULL;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1145 sdata->auth_done = TRUE;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1146 }
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1147
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1148 static void ggp_ggdrive_auth_done(PurpleHttpConnection *hc,
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1149 PurpleHttpResponse *response, gpointer user_data)
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1150 {
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1151 PurpleConnection *gc = purple_http_conn_get_purple_connection(hc);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1152 ggp_edisc_session_data *sdata = ggp_edisc_get_sdata(gc);
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1153 JsonParser *parser;
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1154 JsonObject *result;
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1155 int status = -1;
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1156
35158
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1157 g_return_if_fail(sdata != NULL);
ea58ad0e2414 Gadu-Gadu: fix clang warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35029
diff changeset
1158
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1159 sdata->auth_request = NULL;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1160
34426
1c70f07fecc0 Gadu-Gadu: fix compile errors
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34418
diff changeset
1161 if (!purple_http_response_is_successful(response)) {
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1162 purple_debug_misc("gg", "ggp_ggdrive_auth_done: authentication "
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1163 "failed due to unsuccessful request (code = %d)\n",
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1164 purple_http_response_get_code(response));
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1165 ggp_ggdrive_auth_results(gc, FALSE);
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1166 return;
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1167 }
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1168
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
1169 parser = ggp_json_parse(purple_http_response_get_data(response, NULL));
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1170 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
1171 result = json_object_get_object_member(result, "result");
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1172 if (json_object_has_member(result, "status"))
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1173 status = json_object_get_int_member(result, "status");
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1174 g_object_unref(parser);
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1175
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1176 if (status != 0 ) {
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1177 purple_debug_misc("gg", "ggp_ggdrive_auth_done: authentication "
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1178 "failed due to bad result (status=%d)\n", status);
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1179 if (purple_debug_is_verbose())
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1180 purple_debug_misc("gg", "ggp_ggdrive_auth_done: "
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1181 "result = %s\n",
34416
95be3544aa84 Gadu-Gadu: fix purple_http_response_get_data uses against trunk
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34408
diff changeset
1182 purple_http_response_get_data(response, NULL));
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1183 ggp_ggdrive_auth_results(gc, FALSE);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1184 return;
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1185 }
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1186
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1187 sdata->security_token = g_strdup(purple_http_response_get_header(
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1188 response, "X-gged-security-token"));
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1189 if (!sdata->security_token) {
34393
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1190 purple_debug_misc("gg", "ggp_ggdrive_auth_done: authentication "
fd4379677b3b Gadu-Gadu: fix edisc authentication
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34392
diff changeset
1191 "failed due to missing security token header\n");
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1192 ggp_ggdrive_auth_results(gc, FALSE);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1193 return;
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1194 }
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1195
34380
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1196 if (purple_debug_is_unsafe())
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1197 purple_debug_misc("gg", "ggp_ggdrive_auth_done: "
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1198 "security_token=%s\n", sdata->security_token);
2179667660bc Edisc authentication, file transfer implementation started
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34378
diff changeset
1199 ggp_ggdrive_auth_results(gc, TRUE);
34373
169db6aa5e08 Gadu-Gadu: very initial GGDrive authentication support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1200 }

mercurial