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