src/protocols/yahoo/yahoo_filexfer.c

Mon, 01 May 2006 20:37:37 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Mon, 01 May 2006 20:37:37 +0000
changeset 13713
1ae8790174a4
parent 13467
f86303a455ae
child 13851
27bc39ea07f8
permissions
-rw-r--r--

[gaim-migrate @ 16115]
Resolve some unused value CIDs. This changeset just removes dead code.

jabber
chat.c
CID 180
CID 181
msn
httpconn.c
CID 179
msn.c
CID 185
CID 186
notification.c
CID 189
slp.c
CID 183
CID 184
switchboard.c
CID 178
sync.c
CID 187
CID 188
user.c
CID 182
novell
novell.c
CID 190
sametime
sametime.c
CID 214
CID 215
yahoo
yahoo.c
CID 200
CID 201
CID 202
yahoo_doodle.c
CID 168
CID 169
yahoo_filexfer.c
CID 170
CID 171
CID 172

7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /*
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * @file yahoo_filexfer.c Yahoo Filetransfer
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7827
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7827
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7827
diff changeset
6 * source distribution.
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
7 *
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 *
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 *
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23 #include "prpl.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25 #include "util.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27 #include "notify.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28 #include "proxy.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #include "ft.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "yahoo.h"
10392
6a9728e72c11 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10361
diff changeset
31 #include "yahoo_packet.h"
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32 #include "yahoo_filexfer.h"
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
33 #include "yahoo_doodle.h"
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35 struct yahoo_xfer_data {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36 gchar *host;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 gchar *path;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38 int port;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39 GaimConnection *gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
40 long expires;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41 gboolean started;
13272
fd4f3356640f [gaim-migrate @ 15637]
Daniel Atallah <datallah@pidgin.im>
parents: 13201
diff changeset
42 gchar *txbuf;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
43 gsize txbuflen;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
44 gsize txbuf_written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
45 guint tx_handler;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46 gchar *rxqueue;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47 guint rxlen;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 };
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
52 g_free(xd->host);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
53 g_free(xd->path);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
54 g_free(xd->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
55 if (xd->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
56 gaim_input_remove(xd->tx_handler);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 g_free(xd);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
58 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
59
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
60 static void yahoo_receivefile_connected(gpointer data, gint source, GaimInputCondition condition)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
61 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 struct yahoo_xfer_data *xd;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
64 int total_len, written;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
65
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 "AAA - in yahoo_receivefile_connected\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 if (!(xfer = data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 if (!(xd = xfer->data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 return;
13144
e8c3eafab5f8 [gaim-migrate @ 15506]
Evan Schoenberg <evands@pidgin.im>
parents: 12412
diff changeset
72 if ((source < 0) || (xd->path == NULL) || (xd->host == NULL)) {
10654
b2dd3be1b087 [gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents: 10651
diff changeset
73 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
b2dd3be1b087 [gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents: 10651
diff changeset
74 xfer->who, _("Unable to connect."));
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
75 gaim_xfer_cancel_remote(xfer);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
79 /* The first time we get here, assemble the tx buffer */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
80 if (xd->txbuflen == 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
81 xd->txbuf = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n",
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
82 xd->path, xd->host);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
83 xd->txbuflen = strlen(xd->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
84 xd->txbuf_written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
85 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
86
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
87 total_len = xd->txbuflen - xd->txbuf_written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
88
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 xfer->fd = source;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
90
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
91 written = write(xfer->fd, xd->txbuf + xd->txbuf_written, total_len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
92
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
93 if (written < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
94 written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
95 else if (written <= 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
96 gaim_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
97 gaim_xfer_cancel_remote(xfer);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
98 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
99 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
100
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
101 if (written < total_len) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
102 if (!xd->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
103 xd->tx_handler = gaim_input_add(source, GAIM_INPUT_WRITE,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
104 yahoo_receivefile_connected, xfer);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
105 xd->txbuf_written += written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
106 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
107 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
108
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
109 if (xd->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
110 gaim_input_remove(xd->tx_handler);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
111 xd->tx_handler = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
112 g_free(xd->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
113 xd->txbuf = NULL;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
114 xd->txbuflen = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
115
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 gaim_xfer_start(xfer, source, NULL, 0);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
118 }
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 static void yahoo_sendfile_connected(gpointer data, gint source, GaimInputCondition condition)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124 struct yahoo_xfer_data *xd;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
125 int written, total_len;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 "AAA - in yahoo_sendfile_connected\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 if (!(xfer = data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 if (!(xd = xfer->data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
133
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135 if (source < 0) {
10654
b2dd3be1b087 [gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents: 10651
diff changeset
136 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
b2dd3be1b087 [gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents: 10651
diff changeset
137 xfer->who, _("Unable to connect."));
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
138 gaim_xfer_cancel_remote(xfer);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
142 /* The first time we get here, assemble the tx buffer */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
143 if (xd->txbuflen == 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
144 struct yahoo_packet *pkt;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
145 gchar *size, *filename, *encoded_filename, *header;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
146 guchar *pkt_buf;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
147 const char *host;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
148 int port;
13277
c8a85dd74704 [gaim-migrate @ 15642]
Richard Laager <rlaager@pidgin.im>
parents: 13272
diff changeset
149 size_t content_length, header_len, pkt_buf_len;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
150 GaimConnection *gc;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
151 GaimAccount *account;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
152 struct yahoo_data *yd;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
154 gc = xd->gc;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
155 account = gaim_connection_get_account(gc);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
156 yd = gc->proto_data;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
157
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
158 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
159 YAHOO_STATUS_AVAILABLE, yd->session_id);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
161 size = g_strdup_printf("%" G_GSIZE_FORMAT, gaim_xfer_get_size(xfer));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
162 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
163 encoded_filename = yahoo_string_encode(gc, filename, NULL);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
164
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
165 yahoo_packet_hash(pkt, "sssss", 0, gaim_connection_get_display_name(gc),
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
166 5, xfer->who, 14, "", 27, encoded_filename, 28, size);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
167 g_free(size);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
168 g_free(encoded_filename);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
169 g_free(filename);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
170
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
171 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt);
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
172
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
173 pkt_buf_len = yahoo_packet_build(pkt, 8, FALSE, &pkt_buf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
174 yahoo_packet_free(pkt);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
176 host = gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
177 port = gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
178 header = g_strdup_printf(
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
179 "POST http://%s:%d/notifyft HTTP/1.0\r\n"
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
180 "Content-length: %" G_GSIZE_FORMAT "\r\n"
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
181 "Host: %s:%d\r\n"
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
182 "Cookie: Y=%s; T=%s\r\n"
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
183 "\r\n",
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
184 host, port, content_length + 4 + gaim_xfer_get_size(xfer),
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
185 host, port, yd->cookie_y, yd->cookie_t);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
187
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
188 header_len = strlen(header);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
189
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
190 xd->txbuflen = header_len + pkt_buf_len + 4;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
191 xd->txbuf = g_malloc(xd->txbuflen);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
192
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
193 memcpy(xd->txbuf, header, header_len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
194 g_free(header);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
195 memcpy(xd->txbuf + header_len, pkt_buf, pkt_buf_len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
196 g_free(pkt_buf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
197 memcpy(xd->txbuf + header_len + pkt_buf_len, "29\xc0\x80", 4);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
198
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
199 xd->txbuf_written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
200 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
202 total_len = xd->txbuflen - xd->txbuf_written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
203
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
204 xfer->fd = source;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
205
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
206 written = write(xfer->fd, xd->txbuf + xd->txbuf_written, total_len);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
208 if (written < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
209 written = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
210 else if (written <= 0) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
211 gaim_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
212 gaim_xfer_cancel_remote(xfer);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
213 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
214 }
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
216 if (written < total_len) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
217 if (!xd->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
218 xd->tx_handler = gaim_input_add(source, GAIM_INPUT_WRITE,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
219 yahoo_sendfile_connected, xfer);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
220 xd->txbuf_written += written;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
221 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
222 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
223
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
224 if (xd->tx_handler)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
225 gaim_input_remove(xd->tx_handler);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
226 xd->tx_handler = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
227 g_free(xd->txbuf);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
228 xd->txbuf = NULL;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
229 xd->txbuflen = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
230
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 13144
diff changeset
231 gaim_xfer_start(xfer, source, NULL, 0);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
232 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
234 static void yahoo_xfer_init(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237 GaimConnection *gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
238 GaimAccount *account;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
239 struct yahoo_data *yd;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
240
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242 gc = xfer_data->gc;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
243 yd = gc->proto_data;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244 account = gaim_connection_get_account(gc);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) {
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
247 if (yd->jp) {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
248 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
249 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
250 yahoo_sendfile_connected, xfer) == -1)
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
251 {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
252 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
253 _("Unable to establish file descriptor."));
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
254 gaim_xfer_cancel_remote(xfer);
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
255 }
8282
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
256 } else {
10937
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
257 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
258 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
259 yahoo_sendfile_connected, xfer) == -1)
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
260 {
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
261 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
262 _("Unable to establish file descriptor."));
1753f4709889 [gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents: 10654
diff changeset
263 gaim_xfer_cancel_remote(xfer);
8282
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
264 }
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
265 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
266 } else {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
267 xfer->fd = gaim_proxy_connect(account, xfer_data->host, xfer_data->port,
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
268 yahoo_receivefile_connected, xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
269 if (xfer->fd == -1) {
10654
b2dd3be1b087 [gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents: 10651
diff changeset
270 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
271 _("Unable to establish file descriptor."));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
272 gaim_xfer_cancel_remote(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
273 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
274 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
275 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
276
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
277 static void yahoo_xfer_start(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
278 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
279 /* We don't need to do anything here, do we? */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
280 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
281
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
282 static void yahoo_xfer_end(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
284 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
285
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
286 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
287
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
288 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
289 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
290 xfer->data = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
291
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
292 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
293
11897
10853b830964 [gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11801
diff changeset
294 static guint calculate_length(const gchar *l, size_t len)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
295 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
296 int i;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
297
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
298 for (i = 0; i < len; i++) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
299 if (!g_ascii_isdigit(l[i]))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
300 continue;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
301 return strtol(l + i, NULL, 10);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
302 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
303 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
304 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
305
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12151
diff changeset
306 static gssize yahoo_xfer_read(guchar **buffer, GaimXfer *xfer)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
307 {
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
308 gchar buf[4096];
12151
8002bb57756b [gaim-migrate @ 14452]
Richard Laager <rlaager@pidgin.im>
parents: 12143
diff changeset
309 gssize len;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
310 gchar *start = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
311 gchar *length;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
312 gchar *end;
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
313 int filelen;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314 struct yahoo_xfer_data *xd = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
315
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 if (gaim_xfer_get_type(xfer) != GAIM_XFER_RECEIVE) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 len = read(xfer->fd, buf, sizeof(buf));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321
7682
2f232f1f2584 [gaim-migrate @ 8326]
Kevin Stange <kstange@pidgin.im>
parents: 7651
diff changeset
322 if (len <= 0) {
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
323 if ((gaim_xfer_get_size(xfer) > 0) &&
9798
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
324 (gaim_xfer_get_bytes_sent(xfer) >= gaim_xfer_get_size(xfer))) {
7682
2f232f1f2584 [gaim-migrate @ 8326]
Kevin Stange <kstange@pidgin.im>
parents: 7651
diff changeset
325 gaim_xfer_set_completed(xfer, TRUE);
9798
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
326 return 0;
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
327 } else
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
328 return -1;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
329 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
330
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
331 if (!xd->started) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
332 xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
333 memcpy(xd->rxqueue + xd->rxlen, buf, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
334 xd->rxlen += len;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
335
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
336 length = g_strstr_len(xd->rxqueue, len, "Content-length:");
10579
f4576b2e0956 [gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10576
diff changeset
337 /* some proxies re-write this header, changing the capitalization :(
f4576b2e0956 [gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10576
diff changeset
338 * technically that's allowed since headers are case-insensitive
f4576b2e0956 [gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10576
diff changeset
339 * [RFC 2616, section 4.2] */
f4576b2e0956 [gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10576
diff changeset
340 if (length == NULL)
f4576b2e0956 [gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10576
diff changeset
341 length = g_strstr_len(xd->rxqueue, len, "Content-Length:");
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
342 if (length) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
343 end = g_strstr_len(length, length - xd->rxqueue, "\r\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
344 if (!end)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
345 return 0;
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
346 if ((filelen = calculate_length(length, len - (length - xd->rxqueue))))
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
347 gaim_xfer_set_size(xfer, filelen);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
348 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
349 start = g_strstr_len(xd->rxqueue, len, "\r\n\r\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
350 if (start)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351 start += 4;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352 if (!start || start > (xd->rxqueue + len))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 xd->started = TRUE;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356 len -= (start - xd->rxqueue);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358 *buffer = g_malloc(len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359 memcpy(*buffer, start, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360 g_free(xd->rxqueue);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361 xd->rxqueue = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 xd->rxlen = 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363 } else {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364 *buffer = g_malloc(len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
365 memcpy(*buffer, buf, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
366 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
367
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
368 return len;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
369 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
370
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12151
diff changeset
371 static gssize yahoo_xfer_write(const guchar *buffer, size_t size, GaimXfer *xfer)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
372 {
12151
8002bb57756b [gaim-migrate @ 14452]
Richard Laager <rlaager@pidgin.im>
parents: 12143
diff changeset
373 gssize len;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
374 struct yahoo_xfer_data *xd = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 if (!xd)
9798
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
377 return -1;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379 if (gaim_xfer_get_type(xfer) != GAIM_XFER_SEND) {
9798
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
380 return -1;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
381 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
382
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
383 len = write(xfer->fd, buffer, size);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
385 if (len == -1) {
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
386 if (gaim_xfer_get_bytes_sent(xfer) >= gaim_xfer_get_size(xfer))
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
387 gaim_xfer_set_completed(xfer, TRUE);
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
388 if ((errno != EAGAIN) && (errno != EINTR))
9798
9da203982089 [gaim-migrate @ 10666]
Joe Shaw <joe@joeshaw.org>
parents: 9466
diff changeset
389 return -1;
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
390 return 0;
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
391 }
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
392
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
393 if ((gaim_xfer_get_bytes_sent(xfer) + len) >= gaim_xfer_get_size(xfer))
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394 gaim_xfer_set_completed(xfer, TRUE);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 return len;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
397 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
398
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399 static void yahoo_xfer_cancel_send(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
402
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
403 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
404
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
405 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
406 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
407 xfer->data = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
408 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 static void yahoo_xfer_cancel_recv(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
412 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
413
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
414 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
418 xfer->data = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
419 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
420
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
421 void yahoo_process_p2pfilexfer(GaimConnection *gc, struct yahoo_packet *pkt)
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
422 {
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
423 GSList *l = pkt->hash;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
424
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
425 char *me = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
426 char *from = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
427 char *service = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
428 char *message = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
429 char *command = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
430 char *imv = NULL;
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
431 char *unknown = NULL;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
432
11801
c19b37ac661b [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
433 /* Get all the necessary values from this new packet */
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
434 while(l != NULL)
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
435 {
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
436 struct yahoo_pair *pair = l->data;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
437
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
438 if(pair->key == 5) /* Get who the packet is for */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
439 me = pair->value;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
440
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
441 if(pair->key == 4) /* Get who the packet is from */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
442 from = pair->value;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
443
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
444 if(pair->key == 49) /* Get the type of service */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
445 service = pair->value;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
446
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
447 if(pair->key == 14) /* Get the 'message' of the packet */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
448 message = pair->value;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
449
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
450 if(pair->key == 13) /* Get the command associated with this packet */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
451 command = pair->value;
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
452
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
453 if(pair->key == 63) /* IMVironment name and version */
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
454 imv = pair->value;
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
455
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
456 if(pair->key == 64) /* Not sure, but it does vary with initialization of Doodle */
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
457 unknown = pair->value; /* So, I'll keep it (for a little while atleast) */
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
458
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
459 l = l->next;
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
460 }
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
461
11801
c19b37ac661b [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
462 /* If this packet is an IMVIRONMENT, handle it accordingly */
13459
c20f00df92e5 [gaim-migrate @ 15833]
Daniel Atallah <datallah@pidgin.im>
parents: 13277
diff changeset
463 if(service != NULL && imv != NULL && !strcmp(service, "IMVIRONMENT"))
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
464 {
11801
c19b37ac661b [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
465 /* Check for a Doodle packet and handle it accordingly */
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
466 if(!strcmp(imv, "doodle;11"))
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
467 yahoo_doodle_process(gc, me, from, command, message);
11644
939411169d01 [gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents: 11475
diff changeset
468
11801
c19b37ac661b [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
469 /* If an IMVIRONMENT packet comes without a specific imviroment name */
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
470 if(!strcmp(imv, ";0"))
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
471 {
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
472 /* It is unfortunately time to close all IMVironments with the remote client */
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
473 yahoo_doodle_command_got_shutdown(gc, from);
11475
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
474 }
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
475 }
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
476 }
1e222e6e52a0 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
477
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
478 void yahoo_process_filetransfer(GaimConnection *gc, struct yahoo_packet *pkt)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
479 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480 char *from = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 char *to = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
482 char *msg = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
483 char *url = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
484 long expires = 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
487 char *service = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488 char *filename = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489 unsigned long filesize = 0L;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
490 GSList *l;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
492 for (l = pkt->hash; l; l = l->next) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
493 struct yahoo_pair *pair = l->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
495 if (pair->key == 4)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
496 from = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
497 if (pair->key == 5)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
498 to = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
499 if (pair->key == 14)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500 msg = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 if (pair->key == 20)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
502 url = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
503 if (pair->key == 38)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
504 expires = strtol(pair->value, NULL, 10);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505 if (pair->key == 27)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
506 filename = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
507 if (pair->key == 28)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508 filesize = atol(pair->value);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509 if (pair->key == 49)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
510 service = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
511 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
512
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
513 if (pkt->service == YAHOO_SERVICE_P2PFILEXFER) {
10261
fdea752a175c [gaim-migrate @ 11405]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
514 if (service && (strcmp("FILEXFER", service) != 0)) {
13467
f86303a455ae [gaim-migrate @ 15841]
Richard Laager <rlaager@pidgin.im>
parents: 13459
diff changeset
515 gaim_debug_misc("yahoo", "unhandled service 0x%02x\n", pkt->service);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
516 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
517 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
518 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
519
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520 if (msg) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521 char *tmp;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
522 tmp = strchr(msg, '\006');
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
523 if (tmp)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
524 *tmp = '\0';
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
525 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
526
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
527 if (!url || !from)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
528 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
529
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
530 /* Setup the Yahoo-specific file transfer data */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
531 xfer_data = g_new0(struct yahoo_xfer_data, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
532 xfer_data->gc = gc;
9227
95c28297b72c [gaim-migrate @ 10023]
Don Seiler <rizzo@gentoo.org>
parents: 9164
diff changeset
533 if (!gaim_url_parse(url, &(xfer_data->host), &(xfer_data->port), &(xfer_data->path), NULL, NULL)) {
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
534 g_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
535 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
536 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
538 gaim_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
539 xfer_data->host, xfer_data->port, xfer_data->path, url);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
540
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
541 /* Build the file transfer handle. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
542 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
543 xfer->data = xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
544
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
545 /* Set the info about the incoming file. */
10976
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
546 if (filename) {
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
547 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE);
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
548 gaim_xfer_set_filename(xfer, utf8_filename);
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
549 g_free(utf8_filename);
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
550 } else {
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
551 gchar *start, *end;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
552 start = g_strrstr(xfer_data->path, "/");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
553 if (start)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
554 start++;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
555 end = g_strrstr(xfer_data->path, "?");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
556 if (start && *start && end) {
10976
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
557 char *utf8_filename;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
558 filename = g_strndup(start, end - start);
10976
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
559 utf8_filename = yahoo_string_decode(gc, filename, TRUE);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
560 g_free(filename);
10976
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
561 gaim_xfer_set_filename(xfer, utf8_filename);
96153d16e808 [gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents: 10937
diff changeset
562 g_free(utf8_filename);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
563 filename = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
564 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
565 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
566
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
567 gaim_xfer_set_size(xfer, filesize);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
568
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
569 /* Setup our I/O op functions */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
570 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
571 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
572 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
573 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
574 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
575 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
576 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
577
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
578 /* Now perform the request */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
579 gaim_xfer_request(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
580 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
581
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
582 GaimXfer *yahoo_new_xfer(GaimConnection *gc, const char *who)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
583 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
584 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
585 struct yahoo_xfer_data *xfer_data;
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
586
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
587 g_return_val_if_fail(who != NULL, NULL);
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
588
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
589 xfer_data = g_new0(struct yahoo_xfer_data, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
590 xfer_data->gc = gc;
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
591
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
592 /* Build the file transfer handle. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
593 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
594 xfer->data = xfer_data;
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
595
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
596 /* Setup our I/O op functions */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
597 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
598 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
599 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
600 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
601 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
602 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
603 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
604
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
605 return xfer;
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
606 }
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
607
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
608 void yahoo_send_file(GaimConnection *gc, const char *who, const char *file)
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
609 {
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
610 GaimXfer *xfer = yahoo_new_xfer(gc, who);
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
611
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
612 g_return_if_fail(xfer != NULL);
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11914
diff changeset
613
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
614 /* Now perform the request */
11914
81ac838f3824 [gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11897
diff changeset
615 if (file)
9466
b6425eab60ca [gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents: 9306
diff changeset
616 gaim_xfer_request_accepted(xfer, file);
b6425eab60ca [gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents: 9306
diff changeset
617 else
b6425eab60ca [gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents: 9306
diff changeset
618 gaim_xfer_request(xfer);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
619 }

mercurial