Mercurial > pidgin.yaz
annotate src/rvous.c @ 253:5b28ef2b550e
[gaim-migrate @ 263]
A few things happened in this update:
- Commented out the libfaim deny/permit list stuff because it's seriously buggy
- Added Socks v4 support
- improved proxy support for things like getting users' info
- i think that's it
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Tue, 23 May 2000 05:26:30 +0000 |
parents | 6ced2f1c8b24 |
children | 325d9804df10 |
rev | line source |
---|---|
198 | 1 /* |
2 * gaim | |
3 * | |
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 * | |
20 */ | |
21 | |
22 #include <string.h> | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <time.h> | |
26 #include <sys/types.h> | |
27 #include <sys/stat.h> | |
28 #include <fcntl.h> | |
29 #include <sys/socket.h> | |
30 #include <netdb.h> | |
31 #include <netinet/in.h> | |
32 #include <unistd.h> | |
33 #include <netinet/in.h> | |
34 #include <arpa/inet.h> | |
218 | 35 #include <errno.h> |
198 | 36 #include <gtk/gtk.h> |
37 #include "gaim.h" | |
38 | |
39 static void do_send_file(GtkWidget *, struct file_transfer *); | |
40 static void do_get_file (GtkWidget *, struct file_transfer *); | |
41 | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
42 static void toggle(GtkWidget *w, int *m) |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
43 { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
44 *m = !(*m); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
45 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
46 |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
47 static void free_ft(struct file_transfer *ft) |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
48 { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
49 if (ft->window) { gtk_widget_destroy(ft->window); ft->window = NULL; } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
50 if (ft->filename) g_free(ft->filename); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
51 if (ft->user) g_free(ft->user); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
52 if (ft->message) g_free(ft->message); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
53 if (ft->ip) g_free(ft->ip); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
54 if (ft->cookie) g_free(ft->cookie); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
55 g_free(ft); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
56 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
57 |
198 | 58 static void warn_callback(GtkWidget *widget, struct file_transfer *ft) |
59 { | |
60 show_warn_dialog(ft->user); | |
61 } | |
62 | |
63 static void info_callback(GtkWidget *widget, struct file_transfer *ft) | |
64 { | |
65 serv_get_info(ft->user); | |
66 } | |
67 | |
68 static void cancel_callback(GtkWidget *widget, struct file_transfer *ft) | |
69 { | |
70 char *send = g_malloc(256); | |
71 | |
72 if (ft->accepted) { | |
73 g_free(send); | |
74 return; | |
75 } | |
76 | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
77 #ifndef USE_OSCAR |
198 | 78 g_snprintf(send, 255, "toc_rvous_cancel %s %s %s", normalize(ft->user), |
79 ft->cookie, ft->UID); | |
80 sflap_send(send, strlen(send), TYPE_DATA); | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
81 #else |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
82 /* FIXME : can we really do this? */ |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
83 #endif |
198 | 84 g_free(send); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
85 free_ft(ft); |
198 | 86 } |
87 | |
88 static void accept_callback(GtkWidget *widget, struct file_transfer *ft) | |
89 { | |
90 char *buf = g_malloc(BUF_LEN); | |
91 char *fname = g_malloc(BUF_LEN); | |
92 char *c; | |
93 | |
94 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
95 c = ft->filename + strlen(ft->filename); | |
96 | |
97 while (c != ft->filename) { | |
98 if (*c == '/' || *c == '\\') { | |
99 strcpy(fname, c+1); | |
100 break; | |
101 } | |
102 c--; | |
103 } | |
104 | |
105 if (c == ft->filename) | |
106 strcpy(fname, ft->filename); | |
107 } | |
108 | |
109 gtk_widget_destroy(ft->window); | |
110 ft->window = NULL; | |
111 | |
112 ft->window = gtk_file_selection_new("Gaim - Save As..."); | |
113 | |
114 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(ft->window)); | |
115 | |
116 if (!strcmp(ft->UID, FILE_SEND_UID)) | |
117 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), fname); | |
118 else | |
119 g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME")); | |
120 gtk_file_selection_set_filename(GTK_FILE_SELECTION(ft->window), buf); | |
121 | |
122 gtk_signal_connect(GTK_OBJECT(ft->window), "destroy", | |
123 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
124 | |
125 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
126 gtk_signal_connect(GTK_OBJECT( | |
127 GTK_FILE_SELECTION(ft->window)->ok_button), | |
128 "clicked", GTK_SIGNAL_FUNC(do_get_file), ft); | |
129 } else { | |
130 gtk_signal_connect(GTK_OBJECT( | |
131 GTK_FILE_SELECTION(ft->window)->ok_button), | |
132 "clicked", GTK_SIGNAL_FUNC(do_send_file), ft); | |
133 } | |
134 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), | |
135 "clicked", GTK_SIGNAL_FUNC(cancel_callback), ft); | |
136 | |
137 gtk_widget_show(ft->window); | |
138 | |
139 g_free(buf); | |
140 g_free(fname); | |
141 } | |
142 | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
143 static int read_file_header(int fd, struct file_header *header) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
144 char buf[257]; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
145 int read_rv = read(fd, buf, 256); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
146 memcpy(&header->magic, buf + 0, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
147 memcpy(&header->hdrlen, buf + 4, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
148 memcpy(&header->hdrtype, buf + 6, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
149 memcpy(&header->bcookie, buf + 8, 8); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
150 memcpy(&header->encrypt, buf + 16, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
151 memcpy(&header->compress, buf + 18, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
152 memcpy(&header->totfiles, buf + 20, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
153 memcpy(&header->filesleft, buf + 22, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
154 memcpy(&header->totparts, buf + 24, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
155 memcpy(&header->partsleft, buf + 26, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
156 memcpy(&header->totsize, buf + 28, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
157 memcpy(&header->size, buf + 32, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
158 memcpy(&header->modtime, buf + 36, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
159 memcpy(&header->checksum, buf + 40, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
160 memcpy(&header->rfrcsum, buf + 44, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
161 memcpy(&header->rfsize, buf + 48, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
162 memcpy(&header->cretime, buf + 52, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
163 memcpy(&header->rfcsum, buf + 56, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
164 memcpy(&header->nrecvd, buf + 60, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
165 memcpy(&header->recvcsum, buf + 64, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
166 memcpy(&header->idstring, buf + 68, 32); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
167 memcpy(&header->flags, buf + 100, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
168 memcpy(&header->lnameoffset, buf + 101, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
169 memcpy(&header->lsizeoffset, buf + 102, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
170 memcpy(&header->dummy, buf + 103, 69); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
171 memcpy(&header->macfileinfo, buf + 172, 16); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
172 memcpy(&header->nencode, buf + 188, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
173 memcpy(&header->nlanguage, buf + 190, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
174 memcpy(&header->name, buf + 192, 64); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
175 return read_rv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
176 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
177 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
178 static int write_file_header(int fd, struct file_header *header) { |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
179 char buf[257]; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
180 memcpy(buf + 0, &header->magic, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
181 memcpy(buf + 4, &header->hdrlen, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
182 memcpy(buf + 6, &header->hdrtype, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
183 memcpy(buf + 8, &header->bcookie, 8); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
184 memcpy(buf + 16, &header->encrypt, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
185 memcpy(buf + 18, &header->compress, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
186 memcpy(buf + 20, &header->totfiles, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
187 memcpy(buf + 22, &header->filesleft, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
188 memcpy(buf + 24, &header->totparts, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
189 memcpy(buf + 26, &header->partsleft, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
190 memcpy(buf + 28, &header->totsize, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
191 memcpy(buf + 32, &header->size, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
192 memcpy(buf + 36, &header->modtime, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
193 memcpy(buf + 40, &header->checksum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
194 memcpy(buf + 44, &header->rfrcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
195 memcpy(buf + 48, &header->rfsize, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
196 memcpy(buf + 52, &header->cretime, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
197 memcpy(buf + 56, &header->rfcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
198 memcpy(buf + 60, &header->nrecvd, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
199 memcpy(buf + 64, &header->recvcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
200 memcpy(buf + 68, &header->idstring, 32); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
201 memcpy(buf + 100, &header->flags, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
202 memcpy(buf + 101, &header->lnameoffset, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
203 memcpy(buf + 102, &header->lsizeoffset, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
204 memcpy(buf + 103, &header->dummy, 69); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
205 memcpy(buf + 172, &header->macfileinfo, 16); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
206 memcpy(buf + 188, &header->nencode, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
207 memcpy(buf + 190, &header->nlanguage, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
208 memcpy(buf + 192, &header->name, 64); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
209 return write(fd, buf, 256); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
210 } |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
211 |
198 | 212 static void do_get_file(GtkWidget *w, struct file_transfer *ft) |
213 { | |
214 char *send = g_malloc(256); | |
215 char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window)); | |
216 char *buf; | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
217 struct file_header *header = g_new0(struct file_header, 1); |
198 | 218 int read_rv; |
219 guint32 rcv; | |
220 char *c; | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
221 int cont = 1; |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
222 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
223 GtkWidget *button = NULL, *pct = NULL; |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
224 |
198 | 225 if (!(ft->f = fopen(file,"w"))) { |
226 buf = g_malloc(BUF_LONG); | |
227 g_snprintf(buf, BUF_LONG / 2, "Error writing file %s", file); | |
228 do_error_dialog(buf, "Error"); | |
229 g_free(buf); | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
230 g_free(header); |
198 | 231 ft->accepted = 0; |
232 accept_callback(NULL, ft); | |
233 return; | |
234 } | |
235 | |
236 ft->accepted = 1; | |
237 | |
238 gtk_widget_destroy(ft->window); | |
239 ft->window = NULL; | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
240 #ifndef USE_OSCAR |
198 | 241 g_snprintf(send, 255, "toc_rvous_accept %s %s %s", normalize(ft->user), |
242 ft->cookie, ft->UID); | |
243 sflap_send(send, strlen(send), TYPE_DATA); | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
244 #else |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
245 /* FIXME (?) */ |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
246 #endif |
198 | 247 g_free(send); |
248 | |
249 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
250 ft->fd = connect_address(inet_addr(ft->ip), ft->port); |
198 | 251 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
252 if (ft->fd <= -1) { |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
253 g_free(header); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
254 fclose(ft->f); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
255 free_ft(ft); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
256 return; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
257 } |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
258 |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
259 read_rv = read_file_header(ft->fd, header); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
260 if(read_rv < 0) { |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
261 close(ft->fd); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
262 fclose(ft->f); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
263 g_free(header); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
264 free_ft(ft); |
198 | 265 return; |
266 } | |
267 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
268 sprintf(debug_buff, "header length %d\n", header->hdrlen); |
198 | 269 debug_print(debug_buff); |
270 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
271 header->hdrtype = 0x202; |
198 | 272 |
273 buf = frombase64(ft->cookie); | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
274 memcpy(header->bcookie, buf, 8); |
198 | 275 g_free(buf); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
276 snprintf(header->idstring, 32, "Gaim"); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
277 header->encrypt = 0; header->compress = 0; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
278 header->totparts = 1; header->partsleft = 1; |
198 | 279 |
280 sprintf(debug_buff, "sending confirmation\n"); | |
281 debug_print(debug_buff); | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
282 write_file_header(ft->fd, header); |
198 | 283 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
284 buf = g_malloc(2048); |
198 | 285 rcv = 0; |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
286 |
198 | 287 fw = gtk_dialog_new(); |
288 buf = g_malloc(2048); | |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
289 snprintf(buf, 2048, "Receiving %s from %s", ft->filename, ft->user); |
198 | 290 label = gtk_label_new(buf); |
291 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); | |
292 gtk_widget_show(label); | |
293 fbar = gtk_progress_bar_new(); | |
294 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); | |
295 gtk_widget_show(fbar); | |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
296 pct = gtk_label_new("0 %"); |
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
297 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), pct, 0, 0, 5); |
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
298 gtk_widget_show(pct); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
299 button = gtk_button_new_with_label("Cancel"); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
300 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), button, 0, 0, 5); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
301 gtk_widget_show(button); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
302 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
303 gtk_window_set_title(GTK_WINDOW(fw), "Gaim - File Transfer"); |
198 | 304 gtk_widget_realize(fw); |
305 aol_icon(fw->window); | |
306 gtk_widget_show(fw); | |
307 | |
308 sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename, | |
309 ft->user, ft->size); | |
310 debug_print(debug_buff); | |
311 | |
218 | 312 fcntl(ft->fd, F_SETFL, O_NONBLOCK); |
313 | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
314 while (rcv != ft->size && cont) { |
198 | 315 int i; |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
316 float pcnt = ((float)rcv)/((float)ft->size); |
198 | 317 int remain = ft->size - rcv > 1024 ? 1024 : ft->size - rcv; |
218 | 318 read_rv = read(ft->fd, buf, remain); |
198 | 319 if(read_rv < 0) { |
218 | 320 if (errno == EWOULDBLOCK) { |
321 while(gtk_events_pending()) | |
322 gtk_main_iteration(); | |
323 continue; | |
324 } | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
325 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
326 fw = NULL; |
198 | 327 fclose(ft->f); |
328 close(ft->fd); | |
329 g_free(buf); | |
330 g_free(header); | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
331 free_ft(ft); |
198 | 332 return; |
333 } | |
334 rcv += read_rv; | |
335 for (i = 0; i < read_rv; i++) | |
336 fprintf(ft->f, "%c", buf[i]); | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
337 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
338 sprintf(buf, "%d / %d K (%2.0f %%)", rcv/1024, ft->size/1024, 100*pcnt); |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
339 gtk_label_set_text(GTK_LABEL(pct), buf); |
198 | 340 while(gtk_events_pending()) |
341 gtk_main_iteration(); | |
342 } | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
343 fclose(ft->f); |
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
344 gtk_widget_destroy(fw); |
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
345 fw = NULL; |
198 | 346 |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
347 if (!cont) { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
348 char *tmp = frombase64(ft->cookie); |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
349 #ifndef USE_OSCAR |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
350 sprintf(buf, "toc_rvous_cancel %s %s %s", ft->user, tmp, ft->UID); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
351 sflap_send(buf, strlen(buf), TYPE_DATA); |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
352 #else |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
353 /* FIXME (?) */ |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
354 #endif |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
355 close(ft->fd); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
356 free_ft(ft); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
357 g_free(header); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
358 return; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
359 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
360 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
361 sprintf(debug_buff, "Download complete.\n"); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
362 debug_print(debug_buff); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
363 |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
364 header->hdrtype = 0x402; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
365 header->totparts = 0; header->partsleft = 0; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
366 header->flags = 0; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
367 header->recvcsum = header->checksum; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
368 header->nrecvd = header->totsize; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
369 write_file_header(ft->fd, header); |
198 | 370 close(ft->fd); |
371 | |
372 g_free(buf); | |
373 g_free(header); | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
374 free_ft(ft); |
198 | 375 } |
376 | |
377 static void do_send_file(GtkWidget *w, struct file_transfer *ft) { | |
378 char *send = g_malloc(256); | |
379 char *file = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window))); | |
380 char *buf; | |
381 int read_rv; | |
382 struct file_header *fhdr = g_new0(struct file_header, 1); | |
383 struct sockaddr_in sin; | |
384 guint32 rcv; | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
385 int cont; |
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
386 char *c; |
198 | 387 struct stat st; |
204
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
388 struct tm *fortime; |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
389 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
390 GtkWidget *button = NULL, *pct = NULL; |
198 | 391 |
392 stat(file, &st); | |
393 if (!(ft->f = fopen(file, "r"))) { | |
394 buf = g_malloc(BUF_LONG); | |
395 g_snprintf(buf, BUF_LONG / 2, "Error reading file %s", file); | |
396 do_error_dialog(buf, "Error"); | |
397 g_free(buf); | |
398 ft->accepted = 0; | |
399 accept_callback(NULL, ft); | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
400 free_ft(ft); |
198 | 401 return; |
402 } | |
403 | |
404 ft->accepted = 1; | |
405 | |
406 gtk_widget_destroy(ft->window); | |
407 ft->window = NULL; | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
408 #ifndef USE_OSCAR |
198 | 409 g_snprintf(send, 255, "toc_rvous_accept %s %s %s", normalize(ft->user), |
410 ft->cookie, ft->UID); | |
411 sflap_send(send, strlen(send), TYPE_DATA); | |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
412 #else |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
413 /* FIXME */ |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
414 #endif |
198 | 415 g_free(send); |
416 | |
417 | |
418 | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
419 ft->fd = connect_address(inet_addr(ft->ip), ft->port); |
198 | 420 |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
421 if (ft->fd <= -1) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
422 g_free(fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
423 free_ft(ft); |
198 | 424 return; |
425 } | |
426 | |
427 /* here's where we differ from do_get_file */ | |
428 /* 1. build/send header | |
429 * 2. receive header | |
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
430 * 3. send listing file |
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
431 * 4. receive header |
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
432 * |
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
433 * then we need to wait to actually send the file. |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
434 * |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
435 * 5. either (receive header) or (remote host cancels) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
436 * 6. if received header, send file |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
437 * 7. ? haven't gotten this far yet |
198 | 438 */ |
439 | |
440 /* 1. build/send header */ | |
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
441 c = file + strlen(file); |
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
442 while (*(c - 1) != '/') c--; |
198 | 443 buf = frombase64(ft->cookie); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
444 sprintf(debug_buff, "Building header to send %s (cookie: %s)\n", file, buf); |
198 | 445 debug_print(debug_buff); |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
446 fhdr->magic[0] = 'O'; fhdr->magic[1] = 'F'; |
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
447 fhdr->magic[2] = 'T'; fhdr->magic[3] = '2'; |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
448 fhdr->hdrlen = htons(256); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
449 fhdr->hdrtype = htons(0x1108); |
202
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
450 snprintf(fhdr->bcookie, 8, "%s", buf); |
198 | 451 g_free(buf); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
452 fhdr->encrypt = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
453 fhdr->compress = 0; |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
454 fhdr->totfiles = htons(1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
455 fhdr->filesleft = htons(1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
456 fhdr->totparts = htons(1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
457 fhdr->partsleft = htons(1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
458 fhdr->totsize = htonl((long)st.st_size); /* combined size of all files */ |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
459 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
460 fhdr->size = htonl(28 + strlen(c)); /* size of listing.txt */ |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
461 fhdr->modtime = htonl(time(NULL)); /* time since UNIX epoch */ |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
462 fhdr->checksum = htonl(0x89f70000); /* ? i don't think this matters */ |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
463 fhdr->rfrcsum = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
464 fhdr->rfsize = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
465 fhdr->cretime = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
466 fhdr->rfcsum = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
467 fhdr->nrecvd = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
468 fhdr->recvcsum = 0; |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
469 snprintf(fhdr->idstring, 32, "OFT_Windows ICBMFT V1.1 32"); |
205
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
470 fhdr->flags = 0x02; /* don't ask me why */ |
202
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
471 fhdr->lnameoffset = 0x1A; /* ? still no clue */ |
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
472 fhdr->lsizeoffset = 0x10; /* whatever */ |
205
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
473 memset(fhdr->dummy, 0, 69); |
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
474 memset(fhdr->macfileinfo, 0, 16); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
475 fhdr->nencode = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
476 fhdr->nlanguage = 0; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
477 snprintf(fhdr->name, 64, "listing.txt"); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
478 read_rv = write_file_header(ft->fd, fhdr); |
198 | 479 if (read_rv <= -1) { |
210
ec0686b3b03f
[gaim-migrate @ 220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
205
diff
changeset
|
480 sprintf(debug_buff, "Couldn't write opening header\n"); |
198 | 481 debug_print(debug_buff); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
482 g_free(fhdr); |
198 | 483 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
484 free_ft(ft); |
198 | 485 return; |
486 } | |
487 | |
488 /* 2. receive header */ | |
489 sprintf(debug_buff, "Receiving header\n"); | |
490 debug_print(debug_buff); | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
491 read_rv = read_file_header(ft->fd, fhdr); |
198 | 492 if (read_rv <= -1) { |
493 sprintf(debug_buff, "Couldn't read header\n"); | |
494 debug_print(debug_buff); | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
495 g_free(fhdr); |
198 | 496 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
497 free_ft(ft); |
198 | 498 return; |
499 } | |
500 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
501 /* 3. qend listing file */ |
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
502 /* mm/dd/yyyy hh:mm sizesize name.ext\r\n */ |
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
503 /* creation date ^ */ |
198 | 504 sprintf(debug_buff, "Sending file\n"); |
505 debug_print(debug_buff); | |
204
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
506 buf = g_malloc(ft->size + 1); |
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
507 fortime = localtime(&st.st_ctime); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
508 snprintf(buf, ntohl(fhdr->size) + 1, "%2d/%2d/%4d %2d:%2d %8ld %s\r\n", |
204
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
509 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, |
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
510 fortime->tm_hour + 1, fortime->tm_min + 1, |
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
511 st.st_size, c); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
512 sprintf(debug_buff, "Sending listing.txt (%ld bytes) to %s\n", |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
513 ntohl(fhdr->size) + 1, ft->user); |
198 | 514 debug_print(debug_buff); |
515 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
516 read_rv = write(ft->fd, buf, ntohl(fhdr->size)); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
517 if (read_rv <= -1) { |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
518 sprintf(debug_buff, "Could not send file, wrote %d\n", rcv); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
519 debug_print(debug_buff); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
520 g_free(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
521 g_free(fhdr); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
522 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
523 free_ft(ft); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
524 return; |
198 | 525 } |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
526 g_free(buf); |
198 | 527 |
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
528 /* 4. receive header */ |
198 | 529 sprintf(debug_buff, "Receiving closing header\n"); |
530 debug_print(debug_buff); | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
531 read_rv = read_file_header(ft->fd, fhdr); |
198 | 532 if (read_rv <= -1) { |
533 sprintf(debug_buff, "Couldn't read closing header\n"); | |
534 debug_print(debug_buff); | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
535 g_free(fhdr); |
198 | 536 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
537 free_ft(ft); |
198 | 538 return; |
539 } | |
540 | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
541 /* 5. wait to see if we're sending it */ |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
542 fcntl(ft->fd, F_SETFL, O_NONBLOCK); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
543 rcv = 0; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
544 while (rcv != 256) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
545 int i; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
546 read_rv = read_file_header(ft->fd, fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
547 if(read_rv < 0) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
548 if (errno == EWOULDBLOCK) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
549 while(gtk_events_pending()) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
550 gtk_main_iteration(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
551 continue; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
552 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
553 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
554 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
555 g_free(fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
556 free_ft(ft); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
557 return; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
558 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
559 rcv += read_rv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
560 } |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
561 |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
562 /* 6. send the file */ |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
563 fw = gtk_dialog_new(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
564 buf = g_malloc(2048); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
565 snprintf(buf, 2048, "Sending %s to %s", fhdr->name, ft->user); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
566 label = gtk_label_new(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
567 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
568 gtk_widget_show(label); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
569 fbar = gtk_progress_bar_new(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
570 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
571 gtk_widget_show(fbar); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
572 pct = gtk_label_new("0 %"); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
573 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), pct, 0, 0, 5); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
574 gtk_widget_show(pct); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
575 button = gtk_button_new_with_label("Cancel"); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
576 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), button, 0, 0, 5); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
577 gtk_widget_show(button); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
578 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
579 gtk_window_set_title(GTK_WINDOW(fw), "Gaim - File Transfer"); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
580 gtk_widget_realize(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
581 aol_icon(fw->window); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
582 gtk_widget_show(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
583 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
584 sprintf(debug_buff, "Sending %s to %s (%d bytes)\n", fhdr->name, |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
585 ft->user, fhdr->totsize); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
586 debug_print(debug_buff); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
587 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
588 rcv = 0; cont = 1; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
589 while (rcv != fhdr->totsize && cont) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
590 int i; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
591 float pcnt = ((float)rcv)/((float)fhdr->totsize); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
592 int remain = fhdr->totsize - rcv > 1024 ? 1024 : fhdr->totsize - rcv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
593 for (i = 0; i < 1024; i++) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
594 fscanf(ft->f, "%c", &buf[i]); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
595 read_rv = write(ft->fd, buf, remain); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
596 if (read_rv < 0) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
597 if (errno == EWOULDBLOCK) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
598 while (gtk_events_pending()) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
599 gtk_main_iteration(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
600 continue; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
601 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
602 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
603 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
604 fw = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
605 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
606 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
607 g_free(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
608 g_free(fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
609 free_ft(ft); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
610 return; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
611 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
612 rcv += read_rv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
613 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
614 sprintf(buf, "%d / %d K (%2.0f %%)", rcv/1024, ft->size/1024, 100*pcnt); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
615 gtk_label_set_text(GTK_LABEL(pct), buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
616 while(gtk_events_pending()) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
617 gtk_main_iteration(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
618 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
619 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
620 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
621 fw = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
622 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
623 if (!cont) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
624 char *tmp = frombase64(ft->cookie); |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
625 #ifndef USE_OSCAR |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
626 sprintf(buf, "toc_rvous_cancel %s %s %s", ft->user, tmp, ft->UID); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
627 sflap_send(buf, strlen(buf), TYPE_DATA); |
253
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
628 #else |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
629 /* FIXME */ |
5b28ef2b550e
[gaim-migrate @ 263]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
237
diff
changeset
|
630 #endif |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
631 g_free(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
632 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
633 free_ft(ft); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
634 g_free(fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
635 return; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
636 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
637 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
638 sprintf(debug_buff, "Upload complete.\n"); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
639 debug_print(debug_buff); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
640 |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
641 /* 7. receive closing header */ |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
642 |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
643 /* done */ |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
644 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
645 g_free(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
646 g_free(fhdr); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
647 free_ft(ft); |
198 | 648 } |
649 | |
650 void accept_file_dialog(struct file_transfer *ft) | |
651 { | |
652 GtkWidget *accept, *info, *warn, *cancel; | |
653 GtkWidget *label; | |
654 GtkWidget *vbox, *bbox; | |
655 char buf[1024]; | |
656 | |
657 | |
658 ft->window = gtk_window_new(GTK_WINDOW_DIALOG); | |
659 | |
660 accept = gtk_button_new_with_label("Accept"); | |
661 info = gtk_button_new_with_label("Info"); | |
662 warn = gtk_button_new_with_label("Warn"); | |
663 cancel = gtk_button_new_with_label("Cancel"); | |
664 | |
665 bbox = gtk_hbox_new(TRUE, 10); | |
666 vbox = gtk_vbox_new(FALSE, 5); | |
667 | |
668 gtk_widget_show(accept); | |
669 gtk_widget_show(info); | |
670 gtk_widget_show(warn); | |
671 gtk_widget_show(cancel); | |
672 | |
673 gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10); | |
674 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10); | |
675 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10); | |
676 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10); | |
677 | |
678 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
679 g_snprintf(buf, sizeof(buf), "%s requests you to accept the file: %s (%d bytes)", | |
680 ft->user, ft->filename, ft->size); | |
681 } else { | |
682 g_snprintf(buf, sizeof(buf), "%s requests you to send them a file", | |
683 ft->user); | |
684 } | |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
685 if (ft->message) |
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
686 strncat(buf, ft->message, sizeof(buf) - strlen(buf)); |
198 | 687 label = gtk_label_new(buf); |
688 gtk_widget_show(label); | |
689 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); | |
690 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); | |
691 | |
692 gtk_window_set_title(GTK_WINDOW(ft->window), "Gaim - File Transfer?"); | |
693 gtk_window_set_focus(GTK_WINDOW(ft->window), accept); | |
694 gtk_container_add(GTK_CONTAINER(ft->window), vbox); | |
695 gtk_container_border_width(GTK_CONTAINER(ft->window), 10); | |
696 gtk_widget_show(vbox); | |
697 gtk_widget_show(bbox); | |
698 gtk_widget_realize(ft->window); | |
699 aol_icon(ft->window->window); | |
700 | |
701 gtk_widget_show(ft->window); | |
702 | |
703 | |
704 gtk_signal_connect(GTK_OBJECT(accept), "clicked", | |
705 GTK_SIGNAL_FUNC(accept_callback), ft); | |
706 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", | |
707 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
708 gtk_signal_connect(GTK_OBJECT(warn), "clicked", | |
709 GTK_SIGNAL_FUNC(warn_callback), ft); | |
710 gtk_signal_connect(GTK_OBJECT(info), "clicked", | |
711 GTK_SIGNAL_FUNC(info_callback), ft); | |
712 | |
713 | |
714 if (ft->message) { | |
715 /* we'll do this later | |
716 while(gtk_events_pending()) | |
717 gtk_main_iteration(); | |
718 html_print(text, ft->message); | |
719 */ | |
720 } | |
721 } |