src/protocols/yahoo/yahoo_filexfer.c

Wed, 02 Jun 2004 03:02:50 +0000

author
Tim Ringenbach <marv@pidgin.im>
date
Wed, 02 Jun 2004 03:02:50 +0000
changeset 9164
46904c930b6e
parent 8282
2c6d8739141a
child 9227
95c28297b72c
permissions
-rw-r--r--

[gaim-migrate @ 9949]
This is proper yahoo japan support. Technically it worked before, but
you had to know the yahoo japan server, and typing in nonascii didn't work.

The account options are kind of ugly. Eventually Chip is going to replace
the check box with something more like a dropdown thingy, that automaticly
hides the settings that aren't used (Pager Host vs. Japan Pager Host, etc)
But it's not too bad now. And I think I orignally wrote this patch for
0.64 or something, so I got tired of waiting.

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"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #include "yahoo_filexfer.h"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33
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;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
42 gchar *rxqueue;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
43 guint rxlen;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
44 };
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
45
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46 static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 if (xd->host)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49 g_free(xd->host);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 if (xd->path)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51 g_free(xd->path);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 g_free(xd);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
54
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
55 static void yahoo_receivefile_connected(gpointer data, gint source, GaimInputCondition condition)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
58 struct yahoo_xfer_data *xd;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
59 gchar *buf;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
60
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
61 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62 "AAA - in yahoo_receivefile_connected\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 if (!(xfer = data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
64 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
65 if (!(xd = xfer->data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 if (source < 0) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 gaim_xfer_error(GAIM_XFER_RECEIVE, xfer->who, _("Unable to connect."));
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
69 gaim_xfer_cancel_remote(xfer);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
72
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73 xfer->fd = source;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74 gaim_xfer_start(xfer, source, NULL, 0);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
75
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 buf = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n", xd->path, xd->host);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 write(xfer->fd, buf, strlen(buf));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 g_free(buf);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83 static int yahoo_send_packet_special(int fd, struct yahoo_packet *pkt, int pad)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 int pktlen = yahoo_packet_length(pkt);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 int len = YAHOO_PACKET_HDRLEN + pktlen;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87 int ret;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 guchar *data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 int pos = 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 if (fd < 0)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 return -1;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95 data = g_malloc0(len + 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 memcpy(data + pos, "YMSG", 4); pos += 4;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 pos += yahoo_put16(data + pos, YAHOO_PROTO_VER);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 pos += yahoo_put16(data + pos, 0x0000);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 pos += yahoo_put16(data + pos, pktlen + pad);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101 pos += yahoo_put16(data + pos, pkt->service);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 pos += yahoo_put32(data + pos, pkt->status);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 pos += yahoo_put32(data + pos, pkt->id);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 yahoo_packet_write(pkt, data + pos);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 ret = write(fd, data, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 g_free(data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 return ret;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113 static void yahoo_sendfile_connected(gpointer data, gint source, GaimInputCondition condition)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
114 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 struct yahoo_xfer_data *xd;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117 struct yahoo_packet *pkt;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118 gchar *size, *post, *buf;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119 int content_length;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120 GaimConnection *gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 GaimAccount *account;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 struct yahoo_data *yd;
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
123 char *filename;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126 "AAA - in yahoo_sendfile_connected\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127 if (!(xfer = data))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129 if (!(xd = 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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 gc = xd->gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
133 account = gaim_connection_get_account(gc);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134 yd = gc->proto_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
137
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
138 if (source < 0) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 gaim_xfer_error(GAIM_XFER_RECEIVE, xfer->who, _("Unable to connect."));
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
140 gaim_xfer_cancel_remote(xfer);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144 xfer->fd = source;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 gaim_xfer_start(xfer, source, NULL, 0);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, YAHOO_STATUS_AVAILABLE, yd->session_id);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
149
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150 size = g_strdup_printf("%d", gaim_xfer_get_size(xfer));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152 yahoo_packet_hash(pkt, 0, gaim_connection_get_display_name(gc));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 yahoo_packet_hash(pkt, 5, xfer->who);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 yahoo_packet_hash(pkt, 14, "");
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
155 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer));
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
156 yahoo_packet_hash(pkt, 27, filename);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157 yahoo_packet_hash(pkt, 28, size);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
158
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
159 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
161 buf = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163 post = g_strdup_printf("POST /notifyft HTTP/1.0\r\n"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 "Content-length: %d\r\n"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165 "Host: %s:%d\r\n"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166 "Cookie: %s\r\n"
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 "\r\n",
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168 content_length + 4 + gaim_xfer_get_size(xfer),
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169 gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 buf);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172 write(xfer->fd, post, strlen(post));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
173
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174 yahoo_send_packet_special(xfer->fd, pkt, 8);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175 yahoo_packet_free(pkt);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177 write(xfer->fd, "29\xc0\x80", 4);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
179 g_free(size);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 g_free(post);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
181 g_free(buf);
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
182 g_free(filename);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185 static void yahoo_xfer_init(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
187 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
188 GaimConnection *gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 GaimAccount *account;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
190 struct yahoo_data *yd;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
191
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
192 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 gc = xfer_data->gc;
7827
080c98045e12 [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
194 yd = gc->proto_data;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195 account = gaim_connection_get_account(gc);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) {
8282
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
198 if (gaim_xfer_get_size(xfer) >= 1048577) {
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 gaim_notify_error(gc, NULL, _("File Transfer Aborted"),
8282
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
200 _("Gaim cannot send files over Yahoo! that are bigger than "
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
201 "One Megabyte (1,048,576 bytes)."));
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
202 gaim_xfer_cancel_local(xfer);
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
203 } else {
9164
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
204 if (yd->jp) {
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
205 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
206 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
207 yahoo_sendfile_connected, xfer) == -1)
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
208 {
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
209 gaim_notify_error(gc, NULL, _("File Transfer Aborted"),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
210 _("Unable to establish file descriptor."));
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
211 gaim_xfer_cancel_remote(xfer);
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
212 }
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
213 } else {
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
214 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
215 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
216 yahoo_sendfile_connected, xfer) == -1)
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
217 {
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
218 gaim_notify_error(gc, NULL, _("File Transfer Aborted"),
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
219 _("Unable to establish file descriptor."));
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
220 gaim_xfer_cancel_remote(xfer);
46904c930b6e [gaim-migrate @ 9949]
Tim Ringenbach <marv@pidgin.im>
parents: 8282
diff changeset
221 }
8282
2c6d8739141a [gaim-migrate @ 9006]
Tim Ringenbach <marv@pidgin.im>
parents: 8231
diff changeset
222 }
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
223 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224 } else {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
225 xfer->fd = gaim_proxy_connect(account, xfer_data->host, xfer_data->port,
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
226 yahoo_receivefile_connected, xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
227 if (xfer->fd == -1) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228 gaim_notify_error(gc, NULL, _("File Transfer Aborted"),
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
229 _("Unable to establish file descriptor."));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230 gaim_xfer_cancel_remote(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
231 }
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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 static void yahoo_xfer_start(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237 /* We don't need to do anything here, do we? */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
238 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
239
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
240 static void yahoo_xfer_end(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242 GaimAccount *account;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
243 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245 account = gaim_xfer_get_account(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
247
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
249 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251 xfer->data = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
255 guint calculate_length(const gchar *l, size_t len)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
257 int i;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
258
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
259 for (i = 0; i < len; i++) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
260 if (!g_ascii_isdigit(l[i]))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
261 continue;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
262 return strtol(l + i, NULL, 10);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
263 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
264 return 0;
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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
267
8231
347c8992c445 [gaim-migrate @ 8954]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
268 ssize_t yahoo_xfer_read(char **buffer, GaimXfer *xfer)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
269 {
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
270 gchar buf[4096];
7682
2f232f1f2584 [gaim-migrate @ 8326]
Kevin Stange <kstange@pidgin.im>
parents: 7651
diff changeset
271 ssize_t len;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
272 gchar *start = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
273 gchar *length;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
274 gchar *end;
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
275 int filelen;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
276 struct yahoo_xfer_data *xd = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
277
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
278 if (gaim_xfer_get_type(xfer) != GAIM_XFER_RECEIVE) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
279 return 0;
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 len = read(xfer->fd, buf, sizeof(buf));
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283
7682
2f232f1f2584 [gaim-migrate @ 8326]
Kevin Stange <kstange@pidgin.im>
parents: 7651
diff changeset
284 if (len <= 0) {
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
285 if ((gaim_xfer_get_size(xfer) > 0) &&
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
286 (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
287 gaim_xfer_set_completed(xfer, TRUE);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
288 else
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
289 gaim_xfer_cancel_remote(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
290 return 0;
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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
294 if (!xd->started) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
295 xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
296 memcpy(xd->rxqueue + xd->rxlen, buf, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
297 xd->rxlen += len;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
298
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
299 length = g_strstr_len(xd->rxqueue, len, "Content-length:");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
300 if (length) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
301 end = g_strstr_len(length, length - xd->rxqueue, "\r\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
302 if (!end)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
303 return 0;
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
304 if ((filelen = calculate_length(length, len - (length - xd->rxqueue))))
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
305 gaim_xfer_set_size(xfer, filelen);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
306 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
307 start = g_strstr_len(xd->rxqueue, len, "\r\n\r\n");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
308 if (start)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
309 start += 4;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
310 if (!start || start > (xd->rxqueue + len))
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
311 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
312 xd->started = TRUE;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
313
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314 len -= (start - xd->rxqueue);
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 *buffer = g_malloc(len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317 memcpy(*buffer, start, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318 g_free(xd->rxqueue);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319 xd->rxqueue = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 xd->rxlen = 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321 } else {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
322 *buffer = g_malloc(len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323 memcpy(*buffer, buf, len);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
326 return len;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
327 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
328
8231
347c8992c445 [gaim-migrate @ 8954]
Tim Ringenbach <marv@pidgin.im>
parents: 8046
diff changeset
329 ssize_t yahoo_xfer_write(const char *buffer, size_t size, GaimXfer *xfer)
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
330 {
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
331 ssize_t len;
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
332 struct yahoo_xfer_data *xd = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
333
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
334 if (!xd)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
335 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
336
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
337 if (gaim_xfer_get_type(xfer) != GAIM_XFER_SEND) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
338 return 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
339 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
340
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
341 len = write(xfer->fd, buffer, size);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
342
7710
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
343 if (len == -1) {
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
344 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
345 gaim_xfer_set_completed(xfer, TRUE);
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
346 if ((errno != EAGAIN) && (errno != EINTR))
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
347 gaim_xfer_cancel_remote(xfer);
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
348 return 0;
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
349 }
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
350
9e0642837d83 [gaim-migrate @ 8355]
Tim Ringenbach <marv@pidgin.im>
parents: 7682
diff changeset
351 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
352 gaim_xfer_set_completed(xfer, TRUE);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 return len;
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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 static void yahoo_xfer_cancel_send(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
358 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
359 GaimAccount *account;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
361
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
362 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
363 account = gaim_xfer_get_account(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
364
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
365 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
366 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
367 xfer->data = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
368 }
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 static void yahoo_xfer_cancel_recv(GaimXfer *xfer)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
371 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
372 GaimAccount *account;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
373 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
374
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
375 account = gaim_xfer_get_account(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
376 xfer_data = xfer->data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
377
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
378 if (xfer_data)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
379 yahoo_xfer_data_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
380 xfer->data = NULL;
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 void yahoo_process_filetransfer(GaimConnection *gc, struct yahoo_packet *pkt)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
384 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
385 char *from = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
386 char *to = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
387 char *msg = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
388 char *url = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
389 long expires = 0;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
390 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
391 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
392
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
393 char *service = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
394
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
395 char *filename = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
396 unsigned long filesize = 0L;
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 GSList *l;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
399
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
400 for (l = pkt->hash; l; l = l->next) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
401 struct yahoo_pair *pair = l->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 if (pair->key == 4)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
404 from = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
405 if (pair->key == 5)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
406 to = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
407 if (pair->key == 14)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
408 msg = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
409 if (pair->key == 20)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
410 url = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
411 if (pair->key == 38)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
412 expires = strtol(pair->value, NULL, 10);
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 if (pair->key == 27)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
415 filename = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
416 if (pair->key == 28)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
417 filesize = atol(pair->value);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
418
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
419 if (pair->key == 49)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
420 service = pair->value;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
421 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
422
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
423 if (pkt->service == YAHOO_SERVICE_P2PFILEXFER) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
424 if (strcmp("FILEXFER", service) != 0) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
425 gaim_debug_misc("yahoo", "unhandled service 0x%02x", pkt->service);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
426 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
427 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
428 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
429
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
430 if (msg) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
431 char *tmp;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
432 tmp = strchr(msg, '\006');
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
433 if (tmp)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
434 *tmp = '\0';
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
435 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
436
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
437 if (!url || !from)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
438 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
439
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
440
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
441 /* Setup the Yahoo-specific file transfer data */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
442 xfer_data = g_new0(struct yahoo_xfer_data, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
443 xfer_data->gc = gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
444 if (!gaim_url_parse(url, &(xfer_data->host), &(xfer_data->port), &(xfer_data->path))) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
445 g_free(xfer_data);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
446 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
447 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
448
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
449 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
450 xfer_data->host, xfer_data->port, xfer_data->path, url);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
451
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
452 /* Build the file transfer handle. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
453 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
454 xfer->data = xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
455
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
456 /* Set the info about the incoming file. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
457 if (filename)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
458 gaim_xfer_set_filename(xfer, filename);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
459 else {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
460 gchar *start, *end;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
461 start = g_strrstr(xfer_data->path, "/");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
462 if (start)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
463 start++;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
464 end = g_strrstr(xfer_data->path, "?");
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
465 if (start && *start && end) {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
466 filename = g_strndup(start, end - start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
467 gaim_xfer_set_filename(xfer, filename);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
468 g_free(filename);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
469 filename = NULL;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
470 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
471 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
472
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
473 gaim_xfer_set_size(xfer, filesize);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
474
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
475 /* Setup our I/O op functions */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
476 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
477 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
478 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
479 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
480 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
481 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
482 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
483
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
484 /* Now perform the request */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
485 gaim_xfer_request(xfer);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
486 }
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
487
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
488 void yahoo_ask_send_file(GaimConnection *gc, const char *who)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
489 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
490 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
491 struct yahoo_xfer_data *xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
492
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
493 xfer_data = g_new0(struct yahoo_xfer_data, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
494 xfer_data->gc = gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
495
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
496
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
497 /* Build the file transfer handle. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
498 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
499 xfer->data = xfer_data;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
500
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
501 /* Setup our I/O op functions */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
502 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
503 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
504 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
505 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
506 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
507 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
508 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
509
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
510 /* Now perform the request */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
511 gaim_xfer_request(xfer);
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
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
514 void yahoo_send_file(GaimConnection *gc, const char *who, const char *file)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
515 {
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
516 GaimXfer *xfer;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
517 struct yahoo_xfer_data *xfer_data;
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 if (!who || !file)
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
520 return;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
521
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
522 xfer_data = g_new0(struct yahoo_xfer_data, 1);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
523 xfer_data->gc = gc;
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
524
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 /* Build the file transfer handle. */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
527 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
528 xfer->data = xfer_data;
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 our I/O op functions */
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
531 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
532 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
533 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
534 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
535 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
536 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
537 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
538
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
539 /* Now perform the request */
7805
6045c467441e [gaim-migrate @ 8452]
Tim Ringenbach <marv@pidgin.im>
parents: 7710
diff changeset
540 gaim_xfer_request_accepted(xfer, file);
7651
43663aa7ef68 [gaim-migrate @ 8295]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
541 }

mercurial