Sat, 08 Sep 2007 03:09:35 +0000
The FSF changed its address a while ago; our files were out of date.
This is a quick update done with a for loop, find, and sed.
| 7651 | 1 | /* |
| 2 | * @file yahoo_filexfer.c Yahoo Filetransfer | |
| 3 | * | |
| 15884 | 4 | * Purple is the legal property of its developers, whose names are too numerous |
| 8046 | 5 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 6 | * source distribution. | |
| 7651 | 7 | * |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19064
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 7651 | 21 | */ |
| 22 | ||
|
18273
e61c53184c52
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
23 | #include "internal.h" |
|
e61c53184c52
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
24 | |
| 7651 | 25 | #include "prpl.h" |
| 26 | #include "util.h" | |
| 27 | #include "debug.h" | |
| 28 | #include "notify.h" | |
| 29 | #include "proxy.h" | |
| 30 | #include "ft.h" | |
| 31 | #include "yahoo.h" | |
| 10392 | 32 | #include "yahoo_packet.h" |
| 7651 | 33 | #include "yahoo_filexfer.h" |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
34 | #include "yahoo_doodle.h" |
| 7651 | 35 | |
| 36 | struct yahoo_xfer_data { | |
| 37 | gchar *host; | |
| 38 | gchar *path; | |
| 39 | int port; | |
| 15884 | 40 | PurpleConnection *gc; |
| 7651 | 41 | long expires; |
| 42 | gboolean started; | |
|
13272
fd4f3356640f
[gaim-migrate @ 15637]
Daniel Atallah <datallah@pidgin.im>
parents:
13201
diff
changeset
|
43 | gchar *txbuf; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
44 | gsize txbuflen; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
45 | gsize txbuf_written; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
46 | guint tx_handler; |
| 7651 | 47 | gchar *rxqueue; |
| 48 | guint rxlen; | |
| 49 | }; | |
| 50 | ||
| 51 | static void yahoo_xfer_data_free(struct yahoo_xfer_data *xd) | |
| 52 | { | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
53 | g_free(xd->host); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
54 | g_free(xd->path); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
55 | g_free(xd->txbuf); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
56 | if (xd->tx_handler) |
| 15884 | 57 | purple_input_remove(xd->tx_handler); |
| 7651 | 58 | g_free(xd); |
| 59 | } | |
| 60 | ||
| 15884 | 61 | static void yahoo_receivefile_send_cb(gpointer data, gint source, PurpleInputCondition condition) |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
62 | { |
| 15884 | 63 | PurpleXfer *xfer; |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
64 | struct yahoo_xfer_data *xd; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
65 | int remaining, written; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
66 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
67 | xfer = data; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
68 | xd = xfer->data; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
69 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
70 | remaining = xd->txbuflen - xd->txbuf_written; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
71 | written = write(xfer->fd, xd->txbuf + xd->txbuf_written, remaining); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
72 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
73 | if (written < 0 && errno == EAGAIN) |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
74 | written = 0; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
75 | else if (written <= 0) { |
| 15884 | 76 | purple_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno); |
| 77 | purple_xfer_cancel_remote(xfer); | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
78 | return; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
79 | } |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
80 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
81 | if (written < remaining) { |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
82 | xd->txbuf_written += written; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
83 | return; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
84 | } |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
85 | |
| 15884 | 86 | purple_input_remove(xd->tx_handler); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
87 | xd->tx_handler = 0; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
88 | g_free(xd->txbuf); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
89 | xd->txbuf = NULL; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
90 | xd->txbuflen = 0; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
91 | |
| 15884 | 92 | purple_xfer_start(xfer, source, NULL, 0); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
93 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
94 | } |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
95 | |
|
14182
517f4531b8a0
[gaim-migrate @ 16754]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
96 | static void yahoo_receivefile_connected(gpointer data, gint source, const gchar *error_message) |
| 7651 | 97 | { |
| 15884 | 98 | PurpleXfer *xfer; |
| 7651 | 99 | struct yahoo_xfer_data *xd; |
| 100 | ||
| 15884 | 101 | purple_debug(PURPLE_DEBUG_INFO, "yahoo", |
| 7651 | 102 | "AAA - in yahoo_receivefile_connected\n"); |
| 103 | if (!(xfer = data)) | |
| 104 | return; | |
| 105 | if (!(xd = xfer->data)) | |
| 106 | return; | |
|
13144
e8c3eafab5f8
[gaim-migrate @ 15506]
Evan Schoenberg <evands@pidgin.im>
parents:
12412
diff
changeset
|
107 | if ((source < 0) || (xd->path == NULL) || (xd->host == NULL)) { |
| 15884 | 108 | purple_xfer_error(PURPLE_XFER_RECEIVE, purple_xfer_get_account(xfer), |
|
10654
b2dd3be1b087
[gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents:
10651
diff
changeset
|
109 | xfer->who, _("Unable to connect.")); |
| 15884 | 110 | purple_xfer_cancel_remote(xfer); |
| 7651 | 111 | return; |
| 112 | } | |
| 113 | ||
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
114 | xfer->fd = source; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
115 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
116 | /* The first time we get here, assemble the tx buffer */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
117 | if (xd->txbuflen == 0) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
118 | xd->txbuf = g_strdup_printf("GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n", |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
119 | xd->path, xd->host); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
120 | xd->txbuflen = strlen(xd->txbuf); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
121 | xd->txbuf_written = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
122 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
123 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
124 | if (!xd->tx_handler) |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
125 | { |
| 15884 | 126 | xd->tx_handler = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
127 | yahoo_receivefile_send_cb, xfer); |
| 15884 | 128 | yahoo_receivefile_send_cb(xfer, source, PURPLE_INPUT_WRITE); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
129 | } |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
130 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
131 | |
| 15884 | 132 | static void yahoo_sendfile_send_cb(gpointer data, gint source, PurpleInputCondition condition) |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
133 | { |
| 15884 | 134 | PurpleXfer *xfer; |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
135 | struct yahoo_xfer_data *xd; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
136 | int written, remaining; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
137 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
138 | xfer = data; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
139 | xd = xfer->data; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
140 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
141 | remaining = xd->txbuflen - xd->txbuf_written; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
142 | written = write(xfer->fd, xd->txbuf + xd->txbuf_written, remaining); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
143 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
144 | if (written < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
145 | written = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
146 | else if (written <= 0) { |
| 15884 | 147 | purple_debug_error("yahoo", "Unable to write in order to start ft errno = %d\n", errno); |
| 148 | purple_xfer_cancel_remote(xfer); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
149 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
150 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
151 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
152 | if (written < remaining) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
153 | xd->txbuf_written += written; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
154 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
155 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
156 | |
| 15884 | 157 | purple_input_remove(xd->tx_handler); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
158 | xd->tx_handler = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
159 | g_free(xd->txbuf); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
160 | xd->txbuf = NULL; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
161 | xd->txbuflen = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
162 | |
| 15884 | 163 | purple_xfer_start(xfer, source, NULL, 0); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
164 | } |
| 7651 | 165 | |
|
14182
517f4531b8a0
[gaim-migrate @ 16754]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
166 | static void yahoo_sendfile_connected(gpointer data, gint source, const gchar *error_message) |
| 7651 | 167 | { |
| 15884 | 168 | PurpleXfer *xfer; |
| 7651 | 169 | struct yahoo_xfer_data *xd; |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
170 | struct yahoo_packet *pkt; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
171 | gchar *size, *filename, *encoded_filename, *header; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
172 | guchar *pkt_buf; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
173 | const char *host; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
174 | int port; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
175 | size_t content_length, header_len, pkt_buf_len; |
| 15884 | 176 | PurpleConnection *gc; |
| 177 | PurpleAccount *account; | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
178 | struct yahoo_data *yd; |
| 7651 | 179 | |
| 15884 | 180 | purple_debug(PURPLE_DEBUG_INFO, "yahoo", |
| 7651 | 181 | "AAA - in yahoo_sendfile_connected\n"); |
| 182 | if (!(xfer = data)) | |
| 183 | return; | |
| 184 | if (!(xd = xfer->data)) | |
| 185 | return; | |
| 186 | ||
| 187 | if (source < 0) { | |
| 15884 | 188 | purple_xfer_error(PURPLE_XFER_RECEIVE, purple_xfer_get_account(xfer), |
|
10654
b2dd3be1b087
[gaim-migrate @ 12182]
Richard Laager <rlaager@pidgin.im>
parents:
10651
diff
changeset
|
189 | xfer->who, _("Unable to connect.")); |
| 15884 | 190 | purple_xfer_cancel_remote(xfer); |
| 7651 | 191 | return; |
| 192 | } | |
| 193 | ||
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
194 | xfer->fd = source; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
195 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
196 | /* Assemble the tx buffer */ |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
197 | gc = xd->gc; |
| 15884 | 198 | account = purple_connection_get_account(gc); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
199 | yd = gc->proto_data; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
200 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
201 | pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
202 | YAHOO_STATUS_AVAILABLE, yd->session_id); |
| 7651 | 203 | |
| 15884 | 204 | size = g_strdup_printf("%" G_GSIZE_FORMAT, purple_xfer_get_size(xfer)); |
| 205 | filename = g_path_get_basename(purple_xfer_get_local_filename(xfer)); | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
206 | encoded_filename = yahoo_string_encode(gc, filename, NULL); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
207 | |
| 15884 | 208 | yahoo_packet_hash(pkt, "sssss", 0, purple_connection_get_display_name(gc), |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
209 | 5, xfer->who, 14, "", 27, encoded_filename, 28, size); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
210 | g_free(size); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
211 | g_free(encoded_filename); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
212 | g_free(filename); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
213 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
214 | content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
215 | |
|
14508
02d80a119d80
[gaim-migrate @ 17160]
Evan Schoenberg <evands@pidgin.im>
parents:
14254
diff
changeset
|
216 | pkt_buf_len = yahoo_packet_build(pkt, 8, FALSE, yd->jp, &pkt_buf); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
217 | yahoo_packet_free(pkt); |
| 7651 | 218 | |
| 15884 | 219 | host = purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST); |
| 220 | port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
221 | header = g_strdup_printf( |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
222 | "POST http://%s:%d/notifyft HTTP/1.0\r\n" |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
223 | "Content-length: %" G_GSIZE_FORMAT "\r\n" |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
224 | "Host: %s:%d\r\n" |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
225 | "Cookie: Y=%s; T=%s\r\n" |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
226 | "\r\n", |
| 15884 | 227 | host, port, content_length + 4 + purple_xfer_get_size(xfer), |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
228 | host, port, yd->cookie_y, yd->cookie_t); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
229 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
230 | header_len = strlen(header); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
231 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
232 | xd->txbuflen = header_len + pkt_buf_len + 4; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
233 | xd->txbuf = g_malloc(xd->txbuflen); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
234 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
235 | memcpy(xd->txbuf, header, header_len); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
236 | g_free(header); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
237 | memcpy(xd->txbuf + header_len, pkt_buf, pkt_buf_len); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
238 | g_free(pkt_buf); |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
239 | memcpy(xd->txbuf + header_len + pkt_buf_len, "29\xc0\x80", 4); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13144
diff
changeset
|
240 | |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
241 | xd->txbuf_written = 0; |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
242 | |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
243 | if (xd->tx_handler == 0) |
|
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
244 | { |
| 15884 | 245 | xd->tx_handler = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
246 | yahoo_sendfile_send_cb, xfer); |
| 15884 | 247 | yahoo_sendfile_send_cb(xfer, source, PURPLE_INPUT_WRITE); |
|
14146
4413802cb7a9
[gaim-migrate @ 16705]
Mark Doliner <markdoliner@pidgin.im>
parents:
13851
diff
changeset
|
248 | } |
| 7651 | 249 | } |
| 250 | ||
| 15884 | 251 | static void yahoo_xfer_init(PurpleXfer *xfer) |
| 7651 | 252 | { |
| 253 | struct yahoo_xfer_data *xfer_data; | |
| 15884 | 254 | PurpleConnection *gc; |
| 255 | PurpleAccount *account; | |
| 7827 | 256 | struct yahoo_data *yd; |
| 7651 | 257 | |
| 258 | xfer_data = xfer->data; | |
| 259 | gc = xfer_data->gc; | |
| 7827 | 260 | yd = gc->proto_data; |
| 15884 | 261 | account = purple_connection_get_account(gc); |
| 7651 | 262 | |
| 15884 | 263 | if (purple_xfer_get_type(xfer) == PURPLE_XFER_SEND) { |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
264 | if (yd->jp) { |
| 15884 | 265 | if (purple_proxy_connect(NULL, account, purple_account_get_string(account, "xferjp_host", YAHOOJP_XFER_HOST), |
| 266 | purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), | |
|
14170
f611621bc8a0
[gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents:
14151
diff
changeset
|
267 | yahoo_sendfile_connected, xfer) == NULL) |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
268 | { |
| 15884 | 269 | purple_notify_error(gc, NULL, _("File Transfer Failed"), |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
270 | _("Unable to establish file descriptor.")); |
| 15884 | 271 | purple_xfer_cancel_remote(xfer); |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
272 | } |
| 8282 | 273 | } else { |
| 15884 | 274 | if (purple_proxy_connect(NULL, account, purple_account_get_string(account, "xfer_host", YAHOO_XFER_HOST), |
| 275 | purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT), | |
|
14170
f611621bc8a0
[gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents:
14151
diff
changeset
|
276 | yahoo_sendfile_connected, xfer) == NULL) |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
277 | { |
| 15884 | 278 | purple_notify_error(gc, NULL, _("File Transfer Failed"), |
|
10937
1753f4709889
[gaim-migrate @ 12721]
Peter Lawler <pidgin@bleeter.id.au>
parents:
10654
diff
changeset
|
279 | _("Unable to establish file descriptor.")); |
| 15884 | 280 | purple_xfer_cancel_remote(xfer); |
| 8282 | 281 | } |
| 7651 | 282 | } |
| 283 | } else { | |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14146
diff
changeset
|
284 | /* TODO: Using xfer->fd like this is probably a bad thing... */ |
| 15884 | 285 | if (purple_proxy_connect(NULL, account, xfer_data->host, xfer_data->port, |
|
14170
f611621bc8a0
[gaim-migrate @ 16742]
Mark Doliner <markdoliner@pidgin.im>
parents:
14151
diff
changeset
|
286 | yahoo_receivefile_connected, xfer) == NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14146
diff
changeset
|
287 | xfer->fd = -1; |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14146
diff
changeset
|
288 | else |
|
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14146
diff
changeset
|
289 | xfer->fd = 0; |
| 7651 | 290 | if (xfer->fd == -1) { |
| 15884 | 291 | purple_notify_error(gc, NULL, _("File Transfer Failed"), |
| 7651 | 292 | _("Unable to establish file descriptor.")); |
| 15884 | 293 | purple_xfer_cancel_remote(xfer); |
| 7651 | 294 | } |
| 295 | } | |
| 296 | } | |
| 297 | ||
| 15884 | 298 | static void yahoo_xfer_start(PurpleXfer *xfer) |
| 7651 | 299 | { |
| 300 | /* We don't need to do anything here, do we? */ | |
| 301 | } | |
| 302 | ||
| 15884 | 303 | static void yahoo_xfer_end(PurpleXfer *xfer) |
| 7651 | 304 | { |
| 305 | struct yahoo_xfer_data *xfer_data; | |
| 306 | ||
| 307 | xfer_data = xfer->data; | |
| 308 | ||
| 309 | if (xfer_data) | |
| 310 | yahoo_xfer_data_free(xfer_data); | |
| 311 | xfer->data = NULL; | |
| 312 | ||
| 313 | } | |
| 314 | ||
|
11897
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11801
diff
changeset
|
315 | static guint calculate_length(const gchar *l, size_t len) |
| 7651 | 316 | { |
| 317 | int i; | |
| 318 | ||
| 319 | for (i = 0; i < len; i++) { | |
| 320 | if (!g_ascii_isdigit(l[i])) | |
| 321 | continue; | |
| 322 | return strtol(l + i, NULL, 10); | |
| 323 | } | |
| 324 | return 0; | |
| 325 | } | |
| 326 | ||
| 15884 | 327 | static gssize yahoo_xfer_read(guchar **buffer, PurpleXfer *xfer) |
| 7651 | 328 | { |
| 7710 | 329 | gchar buf[4096]; |
|
12151
8002bb57756b
[gaim-migrate @ 14452]
Richard Laager <rlaager@pidgin.im>
parents:
12143
diff
changeset
|
330 | gssize len; |
| 7651 | 331 | gchar *start = NULL; |
| 332 | gchar *length; | |
| 333 | gchar *end; | |
| 7710 | 334 | int filelen; |
| 7651 | 335 | struct yahoo_xfer_data *xd = xfer->data; |
| 336 | ||
| 15884 | 337 | if (purple_xfer_get_type(xfer) != PURPLE_XFER_RECEIVE) { |
| 7651 | 338 | return 0; |
| 339 | } | |
| 340 | ||
| 341 | len = read(xfer->fd, buf, sizeof(buf)); | |
| 342 | ||
| 7682 | 343 | if (len <= 0) { |
| 15884 | 344 | if ((purple_xfer_get_size(xfer) > 0) && |
| 345 | (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer))) { | |
| 346 | purple_xfer_set_completed(xfer, TRUE); | |
| 9798 | 347 | return 0; |
| 348 | } else | |
| 349 | return -1; | |
| 7651 | 350 | } |
| 351 | ||
| 352 | if (!xd->started) { | |
| 353 | xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen); | |
| 354 | memcpy(xd->rxqueue + xd->rxlen, buf, len); | |
| 355 | xd->rxlen += len; | |
| 356 | ||
| 357 | length = g_strstr_len(xd->rxqueue, len, "Content-length:"); | |
|
10579
f4576b2e0956
[gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10576
diff
changeset
|
358 | /* some proxies re-write this header, changing the capitalization :( |
|
f4576b2e0956
[gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10576
diff
changeset
|
359 | * technically that's allowed since headers are case-insensitive |
|
f4576b2e0956
[gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10576
diff
changeset
|
360 | * [RFC 2616, section 4.2] */ |
|
f4576b2e0956
[gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10576
diff
changeset
|
361 | if (length == NULL) |
|
f4576b2e0956
[gaim-migrate @ 11976]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10576
diff
changeset
|
362 | length = g_strstr_len(xd->rxqueue, len, "Content-Length:"); |
| 7651 | 363 | if (length) { |
| 364 | end = g_strstr_len(length, length - xd->rxqueue, "\r\n"); | |
| 365 | if (!end) | |
| 366 | return 0; | |
| 7710 | 367 | if ((filelen = calculate_length(length, len - (length - xd->rxqueue)))) |
| 15884 | 368 | purple_xfer_set_size(xfer, filelen); |
| 7651 | 369 | } |
| 370 | start = g_strstr_len(xd->rxqueue, len, "\r\n\r\n"); | |
| 371 | if (start) | |
| 372 | start += 4; | |
| 373 | if (!start || start > (xd->rxqueue + len)) | |
| 374 | return 0; | |
| 375 | xd->started = TRUE; | |
| 376 | ||
| 377 | len -= (start - xd->rxqueue); | |
| 378 | ||
| 379 | *buffer = g_malloc(len); | |
| 380 | memcpy(*buffer, start, len); | |
| 381 | g_free(xd->rxqueue); | |
| 382 | xd->rxqueue = NULL; | |
| 383 | xd->rxlen = 0; | |
| 384 | } else { | |
| 385 | *buffer = g_malloc(len); | |
| 386 | memcpy(*buffer, buf, len); | |
| 387 | } | |
| 388 | ||
| 389 | return len; | |
| 390 | } | |
| 391 | ||
| 15884 | 392 | static gssize yahoo_xfer_write(const guchar *buffer, size_t size, PurpleXfer *xfer) |
| 7651 | 393 | { |
|
12151
8002bb57756b
[gaim-migrate @ 14452]
Richard Laager <rlaager@pidgin.im>
parents:
12143
diff
changeset
|
394 | gssize len; |
| 7651 | 395 | struct yahoo_xfer_data *xd = xfer->data; |
| 396 | ||
| 397 | if (!xd) | |
| 9798 | 398 | return -1; |
| 7651 | 399 | |
| 15884 | 400 | if (purple_xfer_get_type(xfer) != PURPLE_XFER_SEND) { |
| 9798 | 401 | return -1; |
| 7651 | 402 | } |
| 403 | ||
| 404 | len = write(xfer->fd, buffer, size); | |
| 405 | ||
| 7710 | 406 | if (len == -1) { |
| 15884 | 407 | if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer)) |
| 408 | purple_xfer_set_completed(xfer, TRUE); | |
| 7710 | 409 | if ((errno != EAGAIN) && (errno != EINTR)) |
| 9798 | 410 | return -1; |
| 7710 | 411 | return 0; |
| 412 | } | |
| 413 | ||
| 15884 | 414 | if ((purple_xfer_get_bytes_sent(xfer) + len) >= purple_xfer_get_size(xfer)) |
| 415 | purple_xfer_set_completed(xfer, TRUE); | |
| 7651 | 416 | |
| 417 | return len; | |
| 418 | } | |
| 419 | ||
| 15884 | 420 | static void yahoo_xfer_cancel_send(PurpleXfer *xfer) |
| 7651 | 421 | { |
| 422 | struct yahoo_xfer_data *xfer_data; | |
| 423 | ||
| 424 | xfer_data = xfer->data; | |
| 425 | ||
| 426 | if (xfer_data) | |
| 427 | yahoo_xfer_data_free(xfer_data); | |
| 428 | xfer->data = NULL; | |
| 429 | } | |
| 430 | ||
| 15884 | 431 | static void yahoo_xfer_cancel_recv(PurpleXfer *xfer) |
| 7651 | 432 | { |
| 433 | struct yahoo_xfer_data *xfer_data; | |
| 434 | ||
| 435 | xfer_data = xfer->data; | |
| 436 | ||
| 437 | if (xfer_data) | |
| 438 | yahoo_xfer_data_free(xfer_data); | |
| 439 | xfer->data = NULL; | |
| 440 | } | |
| 441 | ||
| 15884 | 442 | void yahoo_process_p2pfilexfer(PurpleConnection *gc, struct yahoo_packet *pkt) |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
443 | { |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
444 | GSList *l = pkt->hash; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
445 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
446 | char *me = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
447 | char *from = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
448 | char *service = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
449 | char *message = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
450 | char *command = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
451 | char *imv = NULL; |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
452 | char *unknown = NULL; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
453 | |
|
11801
c19b37ac661b
[gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents:
11644
diff
changeset
|
454 | /* Get all the necessary values from this new packet */ |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
455 | while(l != NULL) |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
456 | { |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
457 | struct yahoo_pair *pair = l->data; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
458 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
459 | if(pair->key == 5) /* Get who the packet is for */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
460 | me = pair->value; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
461 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
462 | if(pair->key == 4) /* Get who the packet is from */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
463 | from = pair->value; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
464 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
465 | if(pair->key == 49) /* Get the type of service */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
466 | service = pair->value; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
467 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
468 | if(pair->key == 14) /* Get the 'message' of the packet */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
469 | message = pair->value; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
470 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
471 | if(pair->key == 13) /* Get the command associated with this packet */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
472 | command = pair->value; |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
473 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
474 | if(pair->key == 63) /* IMVironment name and version */ |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
475 | imv = pair->value; |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
476 | |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
477 | if(pair->key == 64) /* Not sure, but it does vary with initialization of Doodle */ |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
478 | unknown = pair->value; /* So, I'll keep it (for a little while atleast) */ |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
479 | |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
480 | l = l->next; |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
481 | } |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
482 | |
|
11801
c19b37ac661b
[gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents:
11644
diff
changeset
|
483 | /* If this packet is an IMVIRONMENT, handle it accordingly */ |
|
13459
c20f00df92e5
[gaim-migrate @ 15833]
Daniel Atallah <datallah@pidgin.im>
parents:
13277
diff
changeset
|
484 | if(service != NULL && imv != NULL && !strcmp(service, "IMVIRONMENT")) |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
485 | { |
|
11801
c19b37ac661b
[gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents:
11644
diff
changeset
|
486 | /* Check for a Doodle packet and handle it accordingly */ |
|
19064
1680699bdbf4
Fix yahoo doodling to work with newer yahoo messenger clients. This breaks doodling with older Pidgin clients (trying to support both looked too painful). Fixes #1445.
Daniel Atallah <datallah@pidgin.im>
parents:
18273
diff
changeset
|
487 | if(strstr(imv, "doodle;") != NULL) |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
488 | yahoo_doodle_process(gc, me, from, command, message); |
|
11644
939411169d01
[gaim-migrate @ 13922]
Peter Lawler <pidgin@bleeter.id.au>
parents:
11475
diff
changeset
|
489 | |
|
11801
c19b37ac661b
[gaim-migrate @ 14092]
Gary Kramlich <grim@reaperworld.com>
parents:
11644
diff
changeset
|
490 | /* If an IMVIRONMENT packet comes without a specific imviroment name */ |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
491 | if(!strcmp(imv, ";0")) |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
492 | { |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
493 | /* It is unfortunately time to close all IMVironments with the remote client */ |
|
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
494 | yahoo_doodle_command_got_shutdown(gc, from); |
|
11475
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
495 | } |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
496 | } |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
497 | } |
|
1e222e6e52a0
[gaim-migrate @ 13717]
Gary Kramlich <grim@reaperworld.com>
parents:
11159
diff
changeset
|
498 | |
| 15884 | 499 | void yahoo_process_filetransfer(PurpleConnection *gc, struct yahoo_packet *pkt) |
| 7651 | 500 | { |
| 501 | char *from = NULL; | |
| 502 | char *to = NULL; | |
| 503 | char *msg = NULL; | |
| 504 | char *url = NULL; | |
|
13851
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
505 | char *imv = NULL; |
| 7651 | 506 | long expires = 0; |
| 15884 | 507 | PurpleXfer *xfer; |
|
13851
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
508 | struct yahoo_data *yd; |
| 7651 | 509 | struct yahoo_xfer_data *xfer_data; |
| 510 | char *service = NULL; | |
| 511 | char *filename = NULL; | |
| 512 | unsigned long filesize = 0L; | |
| 513 | GSList *l; | |
| 514 | ||
|
13851
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
515 | yd = gc->proto_data; |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
516 | |
| 7651 | 517 | for (l = pkt->hash; l; l = l->next) { |
| 518 | struct yahoo_pair *pair = l->data; | |
| 519 | ||
| 520 | if (pair->key == 4) | |
| 521 | from = pair->value; | |
| 522 | if (pair->key == 5) | |
| 523 | to = pair->value; | |
| 524 | if (pair->key == 14) | |
| 525 | msg = pair->value; | |
| 526 | if (pair->key == 20) | |
| 527 | url = pair->value; | |
| 528 | if (pair->key == 38) | |
| 529 | expires = strtol(pair->value, NULL, 10); | |
| 530 | if (pair->key == 27) | |
| 531 | filename = pair->value; | |
| 532 | if (pair->key == 28) | |
| 533 | filesize = atol(pair->value); | |
| 534 | if (pair->key == 49) | |
| 535 | service = pair->value; | |
|
13851
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
536 | if (pair->key == 63) |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
537 | imv = pair->value; |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
538 | } |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
539 | |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
540 | /* |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
541 | * The remote user has changed their IMVironment. We |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
542 | * record it for later use. |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
543 | */ |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
544 | if (from && imv && service && (strcmp("IMVIRONMENT", service) == 0)) { |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
545 | g_hash_table_replace(yd->imvironments, g_strdup(from), g_strdup(imv)); |
|
27bc39ea07f8
[gaim-migrate @ 16306]
Mark Doliner <markdoliner@pidgin.im>
parents:
13713
diff
changeset
|
546 | return; |
| 7651 | 547 | } |
| 548 | ||
| 549 | if (pkt->service == YAHOO_SERVICE_P2PFILEXFER) { | |
| 10261 | 550 | if (service && (strcmp("FILEXFER", service) != 0)) { |
| 15884 | 551 | purple_debug_misc("yahoo", "unhandled service 0x%02x\n", pkt->service); |
| 7651 | 552 | return; |
| 553 | } | |
| 554 | } | |
| 555 | ||
| 556 | if (msg) { | |
| 557 | char *tmp; | |
| 558 | tmp = strchr(msg, '\006'); | |
| 559 | if (tmp) | |
| 560 | *tmp = '\0'; | |
| 561 | } | |
| 562 | ||
| 563 | if (!url || !from) | |
| 564 | return; | |
| 565 | ||
| 566 | /* Setup the Yahoo-specific file transfer data */ | |
| 567 | xfer_data = g_new0(struct yahoo_xfer_data, 1); | |
| 568 | xfer_data->gc = gc; | |
| 15884 | 569 | if (!purple_url_parse(url, &(xfer_data->host), &(xfer_data->port), &(xfer_data->path), NULL, NULL)) { |
| 7651 | 570 | g_free(xfer_data); |
| 571 | return; | |
| 572 | } | |
| 573 | ||
| 15884 | 574 | purple_debug_misc("yahoo_filexfer", "Host is %s, port is %d, path is %s, and the full url was %s.\n", |
| 7651 | 575 | xfer_data->host, xfer_data->port, xfer_data->path, url); |
| 576 | ||
| 577 | /* Build the file transfer handle. */ | |
| 15884 | 578 | xfer = purple_xfer_new(gc->account, PURPLE_XFER_RECEIVE, from); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
579 | if (xfer) |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
580 | { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
581 | xfer->data = xfer_data; |
| 7651 | 582 | |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
583 | /* Set the info about the incoming file. */ |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
584 | if (filename) { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
585 | char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); |
| 15884 | 586 | purple_xfer_set_filename(xfer, utf8_filename); |
|
10976
96153d16e808
[gaim-migrate @ 12802]
Daniel Atallah <datallah@pidgin.im>
parents:
10937
diff
changeset
|
587 | g_free(utf8_filename); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
588 | } else { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
589 | gchar *start, *end; |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
590 | start = g_strrstr(xfer_data->path, "/"); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
591 | if (start) |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
592 | start++; |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
593 | end = g_strrstr(xfer_data->path, "?"); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
594 | if (start && *start && end) { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
595 | char *utf8_filename; |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
596 | filename = g_strndup(start, end - start); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
597 | utf8_filename = yahoo_string_decode(gc, filename, TRUE); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
598 | g_free(filename); |
| 15884 | 599 | purple_xfer_set_filename(xfer, utf8_filename); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
600 | g_free(utf8_filename); |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
601 | filename = NULL; |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
602 | } |
| 7651 | 603 | } |
| 604 | ||
| 15884 | 605 | purple_xfer_set_size(xfer, filesize); |
| 7651 | 606 | |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
607 | /* Setup our I/O op functions */ |
| 15884 | 608 | purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); |
| 609 | purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); | |
| 610 | purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); | |
| 611 | purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); | |
| 612 | purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | |
| 613 | purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | |
| 614 | purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
615 | |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
616 | /* Now perform the request */ |
| 15884 | 617 | purple_xfer_request(xfer); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
618 | } |
| 7651 | 619 | } |
| 620 | ||
| 15884 | 621 | PurpleXfer *yahoo_new_xfer(PurpleConnection *gc, const char *who) |
| 7651 | 622 | { |
| 15884 | 623 | PurpleXfer *xfer; |
| 7651 | 624 | struct yahoo_xfer_data *xfer_data; |
|
19064
1680699bdbf4
Fix yahoo doodling to work with newer yahoo messenger clients. This breaks doodling with older Pidgin clients (trying to support both looked too painful). Fixes #1445.
Daniel Atallah <datallah@pidgin.im>
parents:
18273
diff
changeset
|
625 | |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
626 | g_return_val_if_fail(who != NULL, NULL); |
|
19064
1680699bdbf4
Fix yahoo doodling to work with newer yahoo messenger clients. This breaks doodling with older Pidgin clients (trying to support both looked too painful). Fixes #1445.
Daniel Atallah <datallah@pidgin.im>
parents:
18273
diff
changeset
|
627 | |
| 7651 | 628 | xfer_data = g_new0(struct yahoo_xfer_data, 1); |
| 629 | xfer_data->gc = gc; | |
|
19064
1680699bdbf4
Fix yahoo doodling to work with newer yahoo messenger clients. This breaks doodling with older Pidgin clients (trying to support both looked too painful). Fixes #1445.
Daniel Atallah <datallah@pidgin.im>
parents:
18273
diff
changeset
|
630 | |
| 7651 | 631 | /* Build the file transfer handle. */ |
| 15884 | 632 | xfer = purple_xfer_new(gc->account, PURPLE_XFER_SEND, who); |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
633 | if (xfer) |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
634 | { |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
635 | xfer->data = xfer_data; |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
636 | |
|
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
637 | /* Setup our I/O op functions */ |
| 15884 | 638 | purple_xfer_set_init_fnc(xfer, yahoo_xfer_init); |
| 639 | purple_xfer_set_start_fnc(xfer, yahoo_xfer_start); | |
| 640 | purple_xfer_set_end_fnc(xfer, yahoo_xfer_end); | |
| 641 | purple_xfer_set_cancel_send_fnc(xfer, yahoo_xfer_cancel_send); | |
| 642 | purple_xfer_set_cancel_recv_fnc(xfer, yahoo_xfer_cancel_recv); | |
| 643 | purple_xfer_set_read_fnc(xfer, yahoo_xfer_read); | |
| 644 | purple_xfer_set_write_fnc(xfer, yahoo_xfer_write); | |
|
15345
797936e968ff
[gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents:
14899
diff
changeset
|
645 | } |
| 7651 | 646 | |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
647 | return xfer; |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
648 | } |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
649 | |
| 15884 | 650 | void yahoo_send_file(PurpleConnection *gc, const char *who, const char *file) |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
651 | { |
| 15884 | 652 | PurpleXfer *xfer = yahoo_new_xfer(gc, who); |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
653 | |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
654 | g_return_if_fail(xfer != NULL); |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11914
diff
changeset
|
655 | |
| 7651 | 656 | /* Now perform the request */ |
|
11914
81ac838f3824
[gaim-migrate @ 14205]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11897
diff
changeset
|
657 | if (file) |
| 15884 | 658 | purple_xfer_request_accepted(xfer, file); |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9306
diff
changeset
|
659 | else |
| 15884 | 660 | purple_xfer_request(xfer); |
| 7651 | 661 | } |