annotate src/protocols/yahoo/yahoo_filexfer.c @ 10654:f2e86683cafc

[gaim-migrate @ 12182] sf patch #1152664, from Richard Laager This patches does three things: First, it uses aliases in file transfer messages whenever possible. Second, it fixes the case where file transfer completion messages are not showing for MSN. Third, it makes the wording more consistent: Canceled is used to describe cases when the file transfer was actively canceled by either party. Failed is used otherwise. Aborted is no longer used at all. Previously, aborted was used in some places while failed was used under the same circumstances in other places. Also, in the file transfer box, canceled was used in one place for remotely or locally canceled files while in another place in the same box canceled was only used for locally canceled files (failed was used for remotely canceled files). committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 06 Mar 2005 00:23:54 +0000
parents 8fbab42659c2
children ca3e0882d377
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1 /*
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
2 * @file yahoo_filexfer.c Yahoo Filetransfer
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
3 *
8046
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7827
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7827
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
fa6395637e2c [gaim-migrate @ 8730]
Sean Egan <seanegan@gmail.com>
parents: 7827
diff changeset
6 * source distribution.
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
7 *
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
12 *
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
17 *
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
21 */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
22
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
23 #include "prpl.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
25 #include "util.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
27 #include "notify.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
28 #include "proxy.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
29 #include "ft.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
30 #include "yahoo.h"
10392
a8f9e5ce4f92 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10361
diff changeset
31 #include "yahoo_packet.h"
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
32 #include "yahoo_filexfer.h"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
33
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
34
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
35
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
36 struct yahoo_xfer_data {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
37 gchar *host;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
38 gchar *path;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
39 int port;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
40 GaimConnection *gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
41 long expires;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
42 gboolean started;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
43 gchar *rxqueue;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
44 guint rxlen;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
45 };
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
46
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
47 static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
48 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
49 if (xd->host)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
50 g_free(xd->host);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
51 if (xd->path)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
52 g_free(xd->path);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
53 g_free(xd);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
54 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
55
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
56 static void yahoo_receivefile_connected(gpointer data, gint source, GaimInputCondition condition)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
57 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
58 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
59 struct yahoo_xfer_data *xd;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
60 gchar *buf;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
61
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
62 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
63 "AAA - in yahoo_receivefile_connected\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
64 if (!(xfer = data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
65 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
66 if (!(xd = xfer->data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
67 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
68 if (source < 0) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
69 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
70 xfer->who, _("Unable to connect."));
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
71 gaim_xfer_cancel_remote(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
72 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
73 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
74
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
75 xfer->fd = source;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
76 gaim_xfer_start(xfer, source, NULL, 0);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
77
10651
8fbab42659c2 [gaim-migrate @ 12176]
Tim Ringenbach <marv@pidgin.im>
parents: 10579
diff changeset
78 buf = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n",
8fbab42659c2 [gaim-migrate @ 12176]
Tim Ringenbach <marv@pidgin.im>
parents: 10579
diff changeset
79 xd->path, xd->host);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
80 write(xfer->fd, buf, strlen(buf));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
81 g_free(buf);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
82
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
83 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
84 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
85
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
86 static void yahoo_sendfile_connected(gpointer data, gint source, GaimInputCondition condition)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
87 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
88 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
89 struct yahoo_xfer_data *xd;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
90 struct yahoo_packet *pkt;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
91 gchar *size, *post, *buf;
10576
6c6772d3ea31 [gaim-migrate @ 11970]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10575
diff changeset
92 const char *host;
10575
96307e1a47c9 [gaim-migrate @ 11968]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10394
diff changeset
93 int content_length, port;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
94 GaimConnection *gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
95 GaimAccount *account;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
96 struct yahoo_data *yd;
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
97 char *filename;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
98
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
99 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
100 "AAA - in yahoo_sendfile_connected\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
101 if (!(xfer = data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
102 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
103 if (!(xd = xfer->data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
104 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
105
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
106 gc = xd->gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
107 account = gaim_connection_get_account(gc);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
108 yd = gc->proto_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
109
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
110
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
111
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
112 if (source < 0) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
113 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
114 xfer->who, _("Unable to connect."));
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
115 gaim_xfer_cancel_remote(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
116 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
117 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
118
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
119 xfer->fd = source;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
120 gaim_xfer_start(xfer, source, NULL, 0);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
121
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
122
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
123 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, YAHOO_STATUS_AVAILABLE, yd->session_id);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
124
10111
8490f2e292a6 [gaim-migrate @ 11144]
Nathan Walp <nwalp@pidgin.im>
parents: 9798
diff changeset
125 size = g_strdup_printf("%" G_GSIZE_FORMAT, gaim_xfer_get_size(xfer));
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
126 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer));
10394
45a0a07e8b25 [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
127
45a0a07e8b25 [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
128 yahoo_packet_hash(pkt, "sssss", 0, gaim_connection_get_display_name(gc),
45a0a07e8b25 [gaim-migrate @ 11623]
Tim Ringenbach <marv@pidgin.im>
parents: 10392
diff changeset
129 5, xfer->who, 14, "", 27, filename, 28, size);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
130
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
131 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
132
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
133 buf = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
134
10576
6c6772d3ea31 [gaim-migrate @ 11970]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10575
diff changeset
135 host = gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST);
10575
96307e1a47c9 [gaim-migrate @ 11968]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10394
diff changeset
136 port = gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT);
96307e1a47c9 [gaim-migrate @ 11968]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10394
diff changeset
137 post = g_strdup_printf("POST http://%s:%d/notifyft HTTP/1.0\r\n"
10111
8490f2e292a6 [gaim-migrate @ 11144]
Nathan Walp <nwalp@pidgin.im>
parents: 9798
diff changeset
138 "Content-length: %" G_GSIZE_FORMAT "\r\n"
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
139 "Host: %s:%d\r\n"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
140 "Cookie: %s\r\n"
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
141 "\r\n",
10576
6c6772d3ea31 [gaim-migrate @ 11970]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10575
diff changeset
142 host, port, content_length + 4 + gaim_xfer_get_size(xfer), host, port, buf);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
143 write(xfer->fd, post, strlen(post));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
144
10392
a8f9e5ce4f92 [gaim-migrate @ 11620]
Tim Ringenbach <marv@pidgin.im>
parents: 10361
diff changeset
145 yahoo_packet_send_special(pkt, xfer->fd, 8);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
146 yahoo_packet_free(pkt);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
147
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
148 write(xfer->fd, "29\xc0\x80", 4);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
149
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
150 g_free(size);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
151 g_free(post);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
152 g_free(buf);
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
153 g_free(filename);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
154 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
155
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
156 static void yahoo_xfer_init(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
157 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
158 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
159 GaimConnection *gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
160 GaimAccount *account;
7827
ee32e030c9be [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
161 struct yahoo_data *yd;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
162
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
163 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
164 gc = xfer_data->gc;
7827
ee32e030c9be [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
165 yd = gc->proto_data;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
166 account = gaim_connection_get_account(gc);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
167
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
168 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) {
10361
f57369469684 [gaim-migrate @ 11579]
Tim Ringenbach <marv@pidgin.im>
parents: 10261
diff changeset
169 if (0 && gaim_xfer_get_size(xfer) >= 1048577) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
170 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
8282
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
171 _("Gaim cannot send files over Yahoo! that are bigger than "
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
172 "One Megabyte (1,048,576 bytes)."));
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
173 gaim_xfer_cancel_local(xfer);
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
174 } else {
9164
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
175 if (yd->jp) {
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
176 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST),
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
177 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
178 yahoo_sendfile_connected, xfer) == -1)
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
179 {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
180 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
9164
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
181 _("Unable to establish file descriptor."));
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
182 gaim_xfer_cancel_remote(xfer);
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
183 }
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
184 } else {
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
185 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
186 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
187 yahoo_sendfile_connected, xfer) == -1)
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
188 {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
189 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
9164
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
190 _("Unable to establish file descriptor."));
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
191 gaim_xfer_cancel_remote(xfer);
76125b842b23 [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
192 }
8282
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
193 }
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
194 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
195 } else {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
196 xfer->fd = gaim_proxy_connect(account, xfer_data->host, xfer_data->port,
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
197 yahoo_receivefile_connected, xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
198 if (xfer->fd == -1) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
199 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
200 _("Unable to establish file descriptor."));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
201 gaim_xfer_cancel_remote(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
202 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
203 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
204 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
205
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
206 static void yahoo_xfer_start(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
207 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
208 /* We don't need to do anything here, do we? */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
209 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
210
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
211 static void yahoo_xfer_end(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
212 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
213 GaimAccount *account;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
214 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
215
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
216 account = gaim_xfer_get_account(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
217 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
218
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
219
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
220 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
221 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
222 xfer->data = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
223
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
224 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
225
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
226 guint calculate_length(const gchar *l, size_t len)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
227 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
228 int i;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
229
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
230 for (i = 0; i < len; i++) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
231 if (!g_ascii_isdigit(l[i]))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
232 continue;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
233 return strtol(l + i, NULL, 10);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
234 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
235 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
236 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
237
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
238
8231
f50c059b6384 [gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
239 ssize_t yahoo_xfer_read(char **buffer, GaimXfer *xfer)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
240 {
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
241 gchar buf[4096];
7682
d9caaddaa56d [gaim-migrate @ 8326]
Luke Schierer <lschiere@pidgin.im>
parents: 7651
diff changeset
242 ssize_t len;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
243 gchar *start = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
244 gchar *length;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
245 gchar *end;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
246 int filelen;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
247 struct yahoo_xfer_data *xd = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
248
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
249 if (gaim_xfer_get_type(xfer) != GAIM_XFER_RECEIVE) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
250 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
251 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
252
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
253 len = read(xfer->fd, buf, sizeof(buf));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
254
7682
d9caaddaa56d [gaim-migrate @ 8326]
Luke Schierer <lschiere@pidgin.im>
parents: 7651
diff changeset
255 if (len <= 0) {
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
256 if ((gaim_xfer_get_size(xfer) > 0) &&
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
257 (gaim_xfer_get_bytes_sent(xfer) >= gaim_xfer_get_size(xfer))) {
7682
d9caaddaa56d [gaim-migrate @ 8326]
Luke Schierer <lschiere@pidgin.im>
parents: 7651
diff changeset
258 gaim_xfer_set_completed(xfer, TRUE);
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
259 return 0;
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
260 } else
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
261 return -1;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
262 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
263
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
264
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
265 if (!xd->started) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
266 xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
267 memcpy(xd->rxqueue + xd->rxlen, buf, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
268 xd->rxlen += len;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
269
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
270 length = g_strstr_len(xd->rxqueue, len, "Content-length:");
10579
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
271 /* some proxies re-write this header, changing the capitalization :(
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
272 * technically that's allowed since headers are case-insensitive
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
273 * [RFC 2616, section 4.2] */
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
274 if (length == NULL)
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
275 length = g_strstr_len(xd->rxqueue, len, "Content-Length:");
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
276 if (length) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
277 end = g_strstr_len(length, length - xd->rxqueue, "\r\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
278 if (!end)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
279 return 0;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
280 if ((filelen = calculate_length(length, len - (length - xd->rxqueue))))
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
281 gaim_xfer_set_size(xfer, filelen);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
282 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
283 start = g_strstr_len(xd->rxqueue, len, "\r\n\r\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
284 if (start)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
285 start += 4;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
286 if (!start || start > (xd->rxqueue + len))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
287 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
288 xd->started = TRUE;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
289
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
290 len -= (start - xd->rxqueue);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
291
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
292 *buffer = g_malloc(len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
293 memcpy(*buffer, start, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
294 g_free(xd->rxqueue);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
295 xd->rxqueue = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
296 xd->rxlen = 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
297 } else {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
298 *buffer = g_malloc(len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
299 memcpy(*buffer, buf, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
300 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
301
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
302 return len;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
303 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
304
8231
f50c059b6384 [gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents: 8046
diff changeset
305 ssize_t yahoo_xfer_write(const char *buffer, size_t size, GaimXfer *xfer)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
306 {
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
307 ssize_t len;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
308 struct yahoo_xfer_data *xd = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
309
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
310 if (!xd)
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
311 return -1;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
312
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
313 if (gaim_xfer_get_type(xfer) != GAIM_XFER_SEND) {
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
314 return -1;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
315 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
316
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
317 len = write(xfer->fd, buffer, size);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
318
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
319 if (len == -1) {
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
320 if (gaim_xfer_get_bytes_sent(xfer) >= gaim_xfer_get_size(xfer))
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
321 gaim_xfer_set_completed(xfer, TRUE);
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
322 if ((errno != EAGAIN) && (errno != EINTR))
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
323 return -1;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
324 return 0;
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
325 }
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
326
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
327 if ((gaim_xfer_get_bytes_sent(xfer) + len) >= gaim_xfer_get_size(xfer))
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
328 gaim_xfer_set_completed(xfer, TRUE);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
329
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
330 return len;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
331 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
332
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
333 static void yahoo_xfer_cancel_send(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
334 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
335 GaimAccount *account;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
336 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
337
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
338 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
339 account = gaim_xfer_get_account(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
340
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
341 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
342 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
343 xfer->data = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
344 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
345
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
346 static void yahoo_xfer_cancel_recv(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
347 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
348 GaimAccount *account;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
349 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
350
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
351 account = gaim_xfer_get_account(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
352 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
353
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
354 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
355 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
356 xfer->data = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
357 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
358
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
359 void yahoo_process_filetransfer(GaimConnection *gc, struct yahoo_packet *pkt)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
360 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
361 char *from = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
362 char *to = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
363 char *msg = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
364 char *url = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
365 long expires = 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
366 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
367 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
368
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
369 char *service = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
370
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
371 char *filename = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
372 unsigned long filesize = 0L;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
373
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
374 GSList *l;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
375
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
376 for (l = pkt->hash; l; l = l->next) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
377 struct yahoo_pair *pair = l->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
378
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
379 if (pair->key == 4)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
380 from = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
381 if (pair->key == 5)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
382 to = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
383 if (pair->key == 14)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
384 msg = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
385 if (pair->key == 20)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
386 url = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
387 if (pair->key == 38)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
388 expires = strtol(pair->value, NULL, 10);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
389
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
390 if (pair->key == 27)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
391 filename = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
392 if (pair->key == 28)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
393 filesize = atol(pair->value);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
394
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
395 if (pair->key == 49)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
396 service = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
397 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
398
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
399 if (pkt->service == YAHOO_SERVICE_P2PFILEXFER) {
10261
d4e9ff2edc4e [gaim-migrate @ 11405]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
400 if (service && (strcmp("FILEXFER", service) != 0)) {
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
401 gaim_debug_misc("yahoo", "unhandled service 0x%02x", pkt->service);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
402 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
403 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
404 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
405
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
406 if (msg) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
407 char *tmp;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
408 tmp = strchr(msg, '\006');
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
409 if (tmp)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
410 *tmp = '\0';
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
411 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
412
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
413 if (!url || !from)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
414 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
415
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
416
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
417 /* Setup the Yahoo-specific file transfer data */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
418 xfer_data = g_new0(struct yahoo_xfer_data, 1);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
419 xfer_data->gc = gc;
9227
9171e528d7e5 [gaim-migrate @ 10023]
Christian Hammond <chipx86@chipx86.com>
parents: 9164
diff changeset
420 if (!gaim_url_parse(url, &(xfer_data->host), &(xfer_data->port), &(xfer_data->path), NULL, NULL)) {
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
421 g_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
422 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
423 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
424
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
425 gaim_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n",
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
426 xfer_data->host, xfer_data->port, xfer_data->path, url);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
427
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
428 /* Build the file transfer handle. */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
429 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
430 xfer->data = xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
431
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
432 /* Set the info about the incoming file. */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
433 if (filename)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
434 gaim_xfer_set_filename(xfer, filename);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
435 else {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
436 gchar *start, *end;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
437 start = g_strrstr(xfer_data->path, "/");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
438 if (start)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
439 start++;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
440 end = g_strrstr(xfer_data->path, "?");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
441 if (start && *start && end) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
442 filename = g_strndup(start, end - start);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
443 gaim_xfer_set_filename(xfer, filename);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
444 g_free(filename);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
445 filename = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
446 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
447 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
448
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
449 gaim_xfer_set_size(xfer, filesize);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
450
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
451 /* Setup our I/O op functions */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
452 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
453 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
454 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
455 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
456 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
457 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
458 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
459
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
460 /* Now perform the request */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
461 gaim_xfer_request(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
462 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
463
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
464 void yahoo_send_file(GaimConnection *gc, const char *who, const char *file)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
465 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
466 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
467 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
468
9466
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
469 if (!who)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
470 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
471
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
472 xfer_data = g_new0(struct yahoo_xfer_data, 1);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
473 xfer_data->gc = gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
474
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
475
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
476 /* Build the file transfer handle. */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
477 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
478 xfer->data = xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
479
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
480 /* Setup our I/O op functions */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
481 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
482 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
483 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
484 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
485 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
486 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
487 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
488
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
489 /* Now perform the request */
9466
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
490 if (file)
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
491 gaim_xfer_request_accepted(xfer, file);
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
492 else
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
493 gaim_xfer_request(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
494 }