annotate src/protocols/yahoo/yahoo_filexfer.c @ 13849:8d1c55309e3c

[gaim-migrate @ 16306] Keep track of the Yahoo! IMVironment specified by the people we're IMing with. When we reply to their IMs, we now send the same IMVironment instead of always sending an empty IMVironment because sending an empty IMVironment would reset their IMVironment back to nothing. This shouldn't negatively affect the Doodle stuff... but it didn't work for me when I tested it, so it's hard to tell. This is a change I made while at Meebo committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 22 Jun 2006 06:26:38 +0000
parents 967ef719cb62
children b7e4180af1db
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"
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
33 #include "yahoo_doodle.h"
7651
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 struct yahoo_xfer_data {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
36 gchar *host;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
37 gchar *path;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
38 int port;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
39 GaimConnection *gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
40 long expires;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
41 gboolean started;
13271
aaeb6ea63c56 [gaim-migrate @ 15637]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13200
diff changeset
42 gchar *txbuf;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
43 gsize txbuflen;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
44 gsize txbuf_written;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
45 guint tx_handler;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
46 gchar *rxqueue;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
47 guint rxlen;
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
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
50 static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
51 {
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
52 g_free(xd->host);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
53 g_free(xd->path);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
54 g_free(xd->txbuf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
55 if (xd->tx_handler)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
56 gaim_input_remove(xd->tx_handler);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
57 g_free(xd);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
58 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
59
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
60 static void yahoo_receivefile_connected(gpointer data, gint source, GaimInputCondition condition)
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 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
63 struct yahoo_xfer_data *xd;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
64 int total_len, written;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
65
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
66 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
67 "AAA - in yahoo_receivefile_connected\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
68 if (!(xfer = data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
69 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
70 if (!(xd = xfer->data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
71 return;
13143
a1d5f154585b [gaim-migrate @ 15506]
Richard Laager <rlaager@wiktel.com>
parents: 12412
diff changeset
72 if ((source < 0) || (xd->path == NULL) || (xd->host == NULL)) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
73 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
74 xfer->who, _("Unable to connect."));
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
75 gaim_xfer_cancel_remote(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
76 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
77 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
78
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
79 /* The first time we get here, assemble the tx buffer */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
80 if (xd->txbuflen == 0) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
81 xd->txbuf = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n",
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
82 xd->path, xd->host);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
83 xd->txbuflen = strlen(xd->txbuf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
84 xd->txbuf_written = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
85 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
86
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
87 total_len = xd->txbuflen - xd->txbuf_written;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
88
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
89 xfer->fd = source;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
90
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
91 written = write(xfer->fd, xd->txbuf + xd->txbuf_written, total_len);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
92
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
93 if (written < 0 && errno == EAGAIN)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
94 written = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
95 else if (written <= 0) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
96 gaim_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
97 gaim_xfer_cancel_remote(xfer);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
98 return;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
99 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
100
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
101 if (written < total_len) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
102 if (!xd->tx_handler)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
103 xd->tx_handler = gaim_input_add(source, GAIM_INPUT_WRITE,
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
104 yahoo_receivefile_connected, xfer);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
105 xd->txbuf_written += written;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
106 return;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
107 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
108
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
109 if (xd->tx_handler)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
110 gaim_input_remove(xd->tx_handler);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
111 xd->tx_handler = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
112 g_free(xd->txbuf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
113 xd->txbuf = NULL;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
114 xd->txbuflen = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
115
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
116 gaim_xfer_start(xfer, source, NULL, 0);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
117
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
118 }
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
119
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
120
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
121 static void yahoo_sendfile_connected(gpointer data, gint source, GaimInputCondition condition)
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 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
124 struct yahoo_xfer_data *xd;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
125 int written, total_len;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
126
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
127 gaim_debug(GAIM_DEBUG_INFO, "yahoo",
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
128 "AAA - in yahoo_sendfile_connected\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
129 if (!(xfer = data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
130 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
131 if (!(xd = xfer->data))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
132 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
133
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
134
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
135 if (source < 0) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
136 gaim_xfer_error(GAIM_XFER_RECEIVE, gaim_xfer_get_account(xfer),
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
137 xfer->who, _("Unable to connect."));
7805
5f0bb52c0609 [gaim-migrate @ 8452]
Mark Doliner <mark@kingant.net>
parents: 7710
diff changeset
138 gaim_xfer_cancel_remote(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
139 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
140 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
141
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
142 /* The first time we get here, assemble the tx buffer */
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
143 if (xd->txbuflen == 0) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
144 struct yahoo_packet *pkt;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
145 gchar *size, *filename, *encoded_filename, *header;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
146 guchar *pkt_buf;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
147 const char *host;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
148 int port;
13276
d6a799421657 [gaim-migrate @ 15642]
Richard Laager <rlaager@wiktel.com>
parents: 13271
diff changeset
149 size_t content_length, header_len, pkt_buf_len;
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
150 GaimConnection *gc;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
151 GaimAccount *account;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
152 struct yahoo_data *yd;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
153
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
154 gc = xd->gc;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
155 account = gaim_connection_get_account(gc);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
156 yd = gc->proto_data;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
157
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
158 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER,
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
159 YAHOO_STATUS_AVAILABLE, yd->session_id);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
160
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
161 size = g_strdup_printf("%" G_GSIZE_FORMAT, gaim_xfer_get_size(xfer));
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
162 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer));
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
163 encoded_filename = yahoo_string_encode(gc, filename, NULL);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
164
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
165 yahoo_packet_hash(pkt, "sssss", 0, gaim_connection_get_display_name(gc),
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
166 5, xfer->who, 14, "", 27, encoded_filename, 28, size);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
167 g_free(size);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
168 g_free(encoded_filename);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
169 g_free(filename);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
170
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
171 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt);
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
172
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
173 pkt_buf_len = yahoo_packet_build(pkt, 8, FALSE, &pkt_buf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
174 yahoo_packet_free(pkt);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
175
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
176 host = gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
177 port = gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
178 header = g_strdup_printf(
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
179 "POST http://%s:%d/notifyft HTTP/1.0\r\n"
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
180 "Content-length: %" G_GSIZE_FORMAT "\r\n"
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
181 "Host: %s:%d\r\n"
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
182 "Cookie: Y=%s; T=%s\r\n"
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
183 "\r\n",
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
184 host, port, content_length + 4 + gaim_xfer_get_size(xfer),
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
185 host, port, yd->cookie_y, yd->cookie_t);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
186
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
187
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
188 header_len = strlen(header);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
189
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
190 xd->txbuflen = header_len + pkt_buf_len + 4;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
191 xd->txbuf = g_malloc(xd->txbuflen);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
192
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
193 memcpy(xd->txbuf, header, header_len);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
194 g_free(header);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
195 memcpy(xd->txbuf + header_len, pkt_buf, pkt_buf_len);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
196 g_free(pkt_buf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
197 memcpy(xd->txbuf + header_len + pkt_buf_len, "29\xc0\x80", 4);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
198
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
199 xd->txbuf_written = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
200 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
201
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
202 total_len = xd->txbuflen - xd->txbuf_written;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
203
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
204 xfer->fd = source;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
205
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
206 written = write(xfer->fd, xd->txbuf + xd->txbuf_written, total_len);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
207
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
208 if (written < 0 && errno == EAGAIN)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
209 written = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
210 else if (written <= 0) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
211 gaim_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
212 gaim_xfer_cancel_remote(xfer);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
213 return;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
214 }
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
215
13200
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
216 if (written < total_len) {
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
217 if (!xd->tx_handler)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
218 xd->tx_handler = gaim_input_add(source, GAIM_INPUT_WRITE,
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
219 yahoo_sendfile_connected, xfer);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
220 xd->txbuf_written += written;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
221 return;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
222 }
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
223
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
224 if (xd->tx_handler)
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
225 gaim_input_remove(xd->tx_handler);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
226 xd->tx_handler = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
227 g_free(xd->txbuf);
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
228 xd->txbuf = NULL;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
229 xd->txbuflen = 0;
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
230
33bef17125c2 [gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13143
diff changeset
231 gaim_xfer_start(xfer, source, NULL, 0);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
232 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
233
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
234 static void yahoo_xfer_init(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
235 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
236 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
237 GaimConnection *gc;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
238 GaimAccount *account;
7827
ee32e030c9be [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
239 struct yahoo_data *yd;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
240
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
241 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
242 gc = xfer_data->gc;
7827
ee32e030c9be [gaim-migrate @ 8479]
Ethan Blanton <elb@pidgin.im>
parents: 7805
diff changeset
243 yd = gc->proto_data;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
244 account = gaim_connection_get_account(gc);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
245
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
246 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) {
10937
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
247 if (yd->jp) {
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
248 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
249 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
250 yahoo_sendfile_connected, xfer) == -1)
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
251 {
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
252 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
253 _("Unable to establish file descriptor."));
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
254 gaim_xfer_cancel_remote(xfer);
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
255 }
8282
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
256 } else {
10937
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
257 if (gaim_proxy_connect(account, gaim_account_get_string(account, "xfer_host", YAHOO_XFER_HOST),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
258 gaim_account_get_int(account, "xfer_port", YAHOO_XFER_PORT),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
259 yahoo_sendfile_connected, xfer) == -1)
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
260 {
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
261 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
262 _("Unable to establish file descriptor."));
ca3e0882d377 [gaim-migrate @ 12721]
Mark Doliner <mark@kingant.net>
parents: 10654
diff changeset
263 gaim_xfer_cancel_remote(xfer);
8282
ab35a0bec13a [gaim-migrate @ 9006]
Luke Schierer <lschiere@pidgin.im>
parents: 8231
diff changeset
264 }
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
265 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
266 } else {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
267 xfer->fd = gaim_proxy_connect(account, xfer_data->host, xfer_data->port,
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
268 yahoo_receivefile_connected, xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
269 if (xfer->fd == -1) {
10654
f2e86683cafc [gaim-migrate @ 12182]
Mark Doliner <mark@kingant.net>
parents: 10651
diff changeset
270 gaim_notify_error(gc, NULL, _("File Transfer Failed"),
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
271 _("Unable to establish file descriptor."));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
272 gaim_xfer_cancel_remote(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
273 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
274 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
275 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
276
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
277 static void yahoo_xfer_start(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
278 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
279 /* We don't need to do anything here, do we? */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
280 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
281
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
282 static void yahoo_xfer_end(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
283 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
284 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
285
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
286 xfer_data = xfer->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
287
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
288 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
289 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
290 xfer->data = NULL;
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 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
293
11897
a1aa681f1448 [gaim-migrate @ 14188]
Stu Tomlinson <stu@nosnilmot.com>
parents: 11801
diff changeset
294 static guint calculate_length(const gchar *l, size_t len)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
295 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
296 int i;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
297
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
298 for (i = 0; i < len; i++) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
299 if (!g_ascii_isdigit(l[i]))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
300 continue;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
301 return strtol(l + i, NULL, 10);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
302 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
303 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
304 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
305
12412
a88ca6da0b38 [gaim-migrate @ 14719]
Richard Laager <rlaager@wiktel.com>
parents: 12151
diff changeset
306 static gssize yahoo_xfer_read(guchar **buffer, GaimXfer *xfer)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
307 {
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
308 gchar buf[4096];
12151
de798f2f4bf1 [gaim-migrate @ 14452]
Richard Laager <rlaager@wiktel.com>
parents: 12143
diff changeset
309 gssize len;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
310 gchar *start = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
311 gchar *length;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
312 gchar *end;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
313 int filelen;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
314 struct yahoo_xfer_data *xd = xfer->data;
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 if (gaim_xfer_get_type(xfer) != GAIM_XFER_RECEIVE) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
317 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
318 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
319
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
320 len = read(xfer->fd, buf, sizeof(buf));
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
321
7682
d9caaddaa56d [gaim-migrate @ 8326]
Luke Schierer <lschiere@pidgin.im>
parents: 7651
diff changeset
322 if (len <= 0) {
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
323 if ((gaim_xfer_get_size(xfer) > 0) &&
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
324 (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
325 gaim_xfer_set_completed(xfer, TRUE);
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
326 return 0;
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
327 } else
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
328 return -1;
7651
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
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
331 if (!xd->started) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
332 xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
333 memcpy(xd->rxqueue + xd->rxlen, buf, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
334 xd->rxlen += len;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
335
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
336 length = g_strstr_len(xd->rxqueue, len, "Content-length:");
10579
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
337 /* some proxies re-write this header, changing the capitalization :(
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
338 * technically that's allowed since headers are case-insensitive
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
339 * [RFC 2616, section 4.2] */
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
340 if (length == NULL)
71478e6a6074 [gaim-migrate @ 11976]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10576
diff changeset
341 length = g_strstr_len(xd->rxqueue, len, "Content-Length:");
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
342 if (length) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
343 end = g_strstr_len(length, length - xd->rxqueue, "\r\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
344 if (!end)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
345 return 0;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
346 if ((filelen = calculate_length(length, len - (length - xd->rxqueue))))
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
347 gaim_xfer_set_size(xfer, filelen);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
348 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
349 start = g_strstr_len(xd->rxqueue, len, "\r\n\r\n");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
350 if (start)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
351 start += 4;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
352 if (!start || start > (xd->rxqueue + len))
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
353 return 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
354 xd->started = TRUE;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
355
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
356 len -= (start - xd->rxqueue);
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 *buffer = g_malloc(len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
359 memcpy(*buffer, start, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
360 g_free(xd->rxqueue);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
361 xd->rxqueue = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
362 xd->rxlen = 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
363 } else {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
364 *buffer = g_malloc(len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
365 memcpy(*buffer, buf, len);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
366 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
367
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
368 return len;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
369 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
370
12412
a88ca6da0b38 [gaim-migrate @ 14719]
Richard Laager <rlaager@wiktel.com>
parents: 12151
diff changeset
371 static gssize yahoo_xfer_write(const guchar *buffer, size_t size, GaimXfer *xfer)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
372 {
12151
de798f2f4bf1 [gaim-migrate @ 14452]
Richard Laager <rlaager@wiktel.com>
parents: 12143
diff changeset
373 gssize len;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
374 struct yahoo_xfer_data *xd = xfer->data;
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 if (!xd)
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
377 return -1;
7651
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 (gaim_xfer_get_type(xfer) != GAIM_XFER_SEND) {
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
380 return -1;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
381 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
382
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
383 len = write(xfer->fd, buffer, size);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
384
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
385 if (len == -1) {
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
386 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
387 gaim_xfer_set_completed(xfer, TRUE);
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
388 if ((errno != EAGAIN) && (errno != EINTR))
9798
255596f41014 [gaim-migrate @ 10666]
Tim Ringenbach <marv@pidgin.im>
parents: 9466
diff changeset
389 return -1;
7710
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
390 return 0;
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
391 }
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
392
45fd907e1d48 [gaim-migrate @ 8355]
Luke Schierer <lschiere@pidgin.im>
parents: 7682
diff changeset
393 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
394 gaim_xfer_set_completed(xfer, TRUE);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
395
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
396 return len;
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 static void yahoo_xfer_cancel_send(GaimXfer *xfer)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
400 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
401 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
402
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
403 xfer_data = xfer->data;
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 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
406 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
407 xfer->data = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
408 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
409
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
410 static void yahoo_xfer_cancel_recv(GaimXfer *xfer)
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 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
413
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
414 xfer_data = xfer->data;
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 if (xfer_data)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
417 yahoo_xfer_data_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
418 xfer->data = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
419 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
420
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
421 void yahoo_process_p2pfilexfer(GaimConnection *gc, struct yahoo_packet *pkt)
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
422 {
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
423 GSList *l = pkt->hash;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
424
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
425 char *me = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
426 char *from = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
427 char *service = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
428 char *message = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
429 char *command = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
430 char *imv = NULL;
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
431 char *unknown = NULL;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
432
11801
81806e9241be [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
433 /* Get all the necessary values from this new packet */
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
434 while(l != NULL)
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
435 {
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
436 struct yahoo_pair *pair = l->data;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
437
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
438 if(pair->key == 5) /* Get who the packet is for */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
439 me = pair->value;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
440
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
441 if(pair->key == 4) /* Get who the packet is from */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
442 from = pair->value;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
443
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
444 if(pair->key == 49) /* Get the type of service */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
445 service = pair->value;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
446
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
447 if(pair->key == 14) /* Get the 'message' of the packet */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
448 message = pair->value;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
449
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
450 if(pair->key == 13) /* Get the command associated with this packet */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
451 command = pair->value;
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
452
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
453 if(pair->key == 63) /* IMVironment name and version */
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
454 imv = pair->value;
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
455
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
456 if(pair->key == 64) /* Not sure, but it does vary with initialization of Doodle */
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
457 unknown = pair->value; /* So, I'll keep it (for a little while atleast) */
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
458
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
459 l = l->next;
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
460 }
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
461
11801
81806e9241be [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
462 /* If this packet is an IMVIRONMENT, handle it accordingly */
13458
6e50059617d3 [gaim-migrate @ 15833]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13276
diff changeset
463 if(service != NULL && imv != NULL && !strcmp(service, "IMVIRONMENT"))
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
464 {
11801
81806e9241be [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
465 /* Check for a Doodle packet and handle it accordingly */
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
466 if(!strcmp(imv, "doodle;11"))
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
467 yahoo_doodle_process(gc, me, from, command, message);
11644
f4e58e94ced3 [gaim-migrate @ 13922]
Mark Doliner <mark@kingant.net>
parents: 11475
diff changeset
468
11801
81806e9241be [gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents: 11644
diff changeset
469 /* If an IMVIRONMENT packet comes without a specific imviroment name */
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
470 if(!strcmp(imv, ";0"))
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
471 {
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
472 /* It is unfortunately time to close all IMVironments with the remote client */
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
473 yahoo_doodle_command_got_shutdown(gc, from);
11475
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
474 }
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
475 }
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
476 }
7fab28c991f3 [gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents: 11159
diff changeset
477
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
478 void yahoo_process_filetransfer(GaimConnection *gc, struct yahoo_packet *pkt)
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 char *from = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
481 char *to = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
482 char *msg = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
483 char *url = NULL;
13849
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
484 char *imv = NULL;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
485 long expires = 0;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
486 GaimXfer *xfer;
13849
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
487 struct yahoo_data *yd;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
488 struct yahoo_xfer_data *xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
489 char *service = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
490 char *filename = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
491 unsigned long filesize = 0L;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
492 GSList *l;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
493
13849
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
494 yd = gc->proto_data;
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
495
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
496 for (l = pkt->hash; l; l = l->next) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
497 struct yahoo_pair *pair = l->data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
498
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
499 if (pair->key == 4)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
500 from = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
501 if (pair->key == 5)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
502 to = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
503 if (pair->key == 14)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
504 msg = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
505 if (pair->key == 20)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
506 url = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
507 if (pair->key == 38)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
508 expires = strtol(pair->value, NULL, 10);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
509 if (pair->key == 27)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
510 filename = pair->value;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
511 if (pair->key == 28)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
512 filesize = atol(pair->value);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
513 if (pair->key == 49)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
514 service = pair->value;
13849
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
515 if (pair->key == 63)
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
516 imv = pair->value;
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
517 }
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
518
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
519 /*
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
520 * The remote user has changed their IMVironment. We
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
521 * record it for later use.
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
522 */
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
523 if (from && imv && service && (strcmp("IMVIRONMENT", service) == 0)) {
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
524 g_hash_table_replace(yd->imvironments, g_strdup(from), g_strdup(imv));
8d1c55309e3c [gaim-migrate @ 16306]
Mark Doliner <mark@kingant.net>
parents: 13711
diff changeset
525 return;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
526 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
527
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
528 if (pkt->service == YAHOO_SERVICE_P2PFILEXFER) {
10261
d4e9ff2edc4e [gaim-migrate @ 11405]
Tim Ringenbach <marv@pidgin.im>
parents: 10111
diff changeset
529 if (service && (strcmp("FILEXFER", service) != 0)) {
13466
d7b01bcfb031 [gaim-migrate @ 15841]
Richard Laager <rlaager@wiktel.com>
parents: 13458
diff changeset
530 gaim_debug_misc("yahoo", "unhandled service 0x%02x\n", pkt->service);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
531 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
532 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
533 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
534
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
535 if (msg) {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
536 char *tmp;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
537 tmp = strchr(msg, '\006');
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
538 if (tmp)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
539 *tmp = '\0';
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
540 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
541
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
542 if (!url || !from)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
543 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
544
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
545 /* Setup the Yahoo-specific file transfer data */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
546 xfer_data = g_new0(struct yahoo_xfer_data, 1);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
547 xfer_data->gc = gc;
9227
9171e528d7e5 [gaim-migrate @ 10023]
Christian Hammond <chipx86@chipx86.com>
parents: 9164
diff changeset
548 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
549 g_free(xfer_data);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
550 return;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
551 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
552
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
553 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
554 xfer_data->host, xfer_data->port, xfer_data->path, url);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
555
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
556 /* Build the file transfer handle. */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
557 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
558 xfer->data = xfer_data;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
559
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
560 /* Set the info about the incoming file. */
10976
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
561 if (filename) {
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
562 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE);
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
563 gaim_xfer_set_filename(xfer, utf8_filename);
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
564 g_free(utf8_filename);
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
565 } else {
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
566 gchar *start, *end;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
567 start = g_strrstr(xfer_data->path, "/");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
568 if (start)
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
569 start++;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
570 end = g_strrstr(xfer_data->path, "?");
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
571 if (start && *start && end) {
10976
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
572 char *utf8_filename;
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
573 filename = g_strndup(start, end - start);
10976
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
574 utf8_filename = yahoo_string_decode(gc, filename, TRUE);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
575 g_free(filename);
10976
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
576 gaim_xfer_set_filename(xfer, utf8_filename);
be22eb8fa671 [gaim-migrate @ 12802]
Daniel Atallah <daniel.atallah@gmail.com>
parents: 10937
diff changeset
577 g_free(utf8_filename);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
578 filename = NULL;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
579 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
580 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
581
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
582 gaim_xfer_set_size(xfer, filesize);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
583
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
584 /* Setup our I/O op functions */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
585 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
586 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
587 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
588 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
589 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
590 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
591 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
592
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
593 /* Now perform the request */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
594 gaim_xfer_request(xfer);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
595 }
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
596
12143
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
597 GaimXfer *yahoo_new_xfer(GaimConnection *gc, const char *who)
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
598 {
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
599 GaimXfer *xfer;
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
600 struct yahoo_xfer_data *xfer_data;
12143
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
601
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
602 g_return_val_if_fail(who != NULL, NULL);
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
603
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
604 xfer_data = g_new0(struct yahoo_xfer_data, 1);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
605 xfer_data->gc = gc;
12143
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
606
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
607 /* Build the file transfer handle. */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
608 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, who);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
609 xfer->data = xfer_data;
12143
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
610
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
611 /* Setup our I/O op functions */
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
612 gaim_xfer_set_init_fnc(xfer, yahoo_xfer_init);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
613 gaim_xfer_set_start_fnc(xfer, yahoo_xfer_start);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
614 gaim_xfer_set_end_fnc(xfer, yahoo_xfer_end);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
615 gaim_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
616 gaim_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
617 gaim_xfer_set_read_fnc(xfer, yahoo_xfer_read);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
618 gaim_xfer_set_write_fnc(xfer, yahoo_xfer_write);
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
619
12143
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
620 return xfer;
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
621 }
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
622
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
623 void yahoo_send_file(GaimConnection *gc, const char *who, const char *file)
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
624 {
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
625 GaimXfer *xfer = yahoo_new_xfer(gc, who);
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
626
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
627 g_return_if_fail(xfer != NULL);
cbebda5f019c [gaim-migrate @ 14444]
Richard Laager <rlaager@wiktel.com>
parents: 11914
diff changeset
628
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
629 /* Now perform the request */
11914
2219f4bf4a57 [gaim-migrate @ 14205]
Richard Laager <rlaager@wiktel.com>
parents: 11897
diff changeset
630 if (file)
9466
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
631 gaim_xfer_request_accepted(xfer, file);
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
632 else
d27156c9c876 [gaim-migrate @ 10291]
Luke Schierer <lschiere@pidgin.im>
parents: 9306
diff changeset
633 gaim_xfer_request(xfer);
7651
580bd39219a2 [gaim-migrate @ 8295]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
634 }