Mercurial > pidgin
annotate src/rvous.c @ 217:fba779cc01f5
[gaim-migrate @ 227]
Removed the really buggy thread code, and almost got Get File (where gaim
sends to Oscar clients) to work. At least they can get a list of files now.
Btw, the 2 bytes that were bugging weren't the problem, it was network byte
order. I'm stupid sometimes.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 05 May 2000 22:33:38 +0000 |
| parents | f7e17fb767eb |
| children | 1a5ee1f8b39e |
| 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> | |
| 35 | |
| 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 | |
| 77 g_snprintf(send, 255, "toc_rvous_cancel %s %s %s", normalize(ft->user), | |
| 78 ft->cookie, ft->UID); | |
| 79 sflap_send(send, strlen(send), TYPE_DATA); | |
| 80 g_free(send); | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
81 free_ft(ft); |
| 198 | 82 } |
| 83 | |
| 84 static void accept_callback(GtkWidget *widget, struct file_transfer *ft) | |
| 85 { | |
| 86 char *buf = g_malloc(BUF_LEN); | |
| 87 char *fname = g_malloc(BUF_LEN); | |
| 88 char *c; | |
| 89 | |
| 90 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
| 91 c = ft->filename + strlen(ft->filename); | |
| 92 | |
| 93 while (c != ft->filename) { | |
| 94 if (*c == '/' || *c == '\\') { | |
| 95 strcpy(fname, c+1); | |
| 96 break; | |
| 97 } | |
| 98 c--; | |
| 99 } | |
| 100 | |
| 101 if (c == ft->filename) | |
| 102 strcpy(fname, ft->filename); | |
| 103 } | |
| 104 | |
| 105 gtk_widget_destroy(ft->window); | |
| 106 ft->window = NULL; | |
| 107 | |
| 108 ft->window = gtk_file_selection_new("Gaim - Save As..."); | |
| 109 | |
| 110 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(ft->window)); | |
| 111 | |
| 112 if (!strcmp(ft->UID, FILE_SEND_UID)) | |
| 113 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), fname); | |
| 114 else | |
| 115 g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME")); | |
| 116 gtk_file_selection_set_filename(GTK_FILE_SELECTION(ft->window), buf); | |
| 117 | |
| 118 gtk_signal_connect(GTK_OBJECT(ft->window), "destroy", | |
| 119 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
| 120 | |
| 121 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
| 122 gtk_signal_connect(GTK_OBJECT( | |
| 123 GTK_FILE_SELECTION(ft->window)->ok_button), | |
| 124 "clicked", GTK_SIGNAL_FUNC(do_get_file), ft); | |
| 125 } else { | |
| 126 gtk_signal_connect(GTK_OBJECT( | |
| 127 GTK_FILE_SELECTION(ft->window)->ok_button), | |
| 128 "clicked", GTK_SIGNAL_FUNC(do_send_file), ft); | |
| 129 } | |
| 130 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), | |
| 131 "clicked", GTK_SIGNAL_FUNC(cancel_callback), ft); | |
| 132 | |
| 133 gtk_widget_show(ft->window); | |
| 134 | |
| 135 g_free(buf); | |
| 136 g_free(fname); | |
| 137 } | |
| 138 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
139 static int write_file_header(int fd, struct file_header *header) { |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
140 char buf[257]; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
141 memcpy(buf + 0, &header->magic, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
142 memcpy(buf + 4, &header->hdrlen, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
143 memcpy(buf + 6, &header->hdrtype, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
144 memcpy(buf + 8, &header->bcookie, 8); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
145 memcpy(buf + 16, &header->encrypt, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
146 memcpy(buf + 18, &header->compress, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
147 memcpy(buf + 20, &header->totfiles, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
148 memcpy(buf + 22, &header->filesleft, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
149 memcpy(buf + 24, &header->totparts, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
150 memcpy(buf + 26, &header->partsleft, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
151 memcpy(buf + 28, &header->totsize, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
152 memcpy(buf + 32, &header->size, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
153 memcpy(buf + 36, &header->modtime, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
154 memcpy(buf + 40, &header->checksum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
155 memcpy(buf + 44, &header->rfrcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
156 memcpy(buf + 48, &header->rfsize, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
157 memcpy(buf + 52, &header->cretime, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
158 memcpy(buf + 56, &header->rfcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
159 memcpy(buf + 60, &header->nrecvd, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
160 memcpy(buf + 64, &header->recvcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
161 memcpy(buf + 68, &header->idstring, 32); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
162 memcpy(buf + 100, &header->flags, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
163 memcpy(buf + 101, &header->lnameoffset, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
164 memcpy(buf + 102, &header->lsizeoffset, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
165 memcpy(buf + 103, &header->dummy, 69); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
166 memcpy(buf + 172, &header->macfileinfo, 16); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
167 memcpy(buf + 188, &header->nencode, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
168 memcpy(buf + 190, &header->nlanguage, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
169 memcpy(buf + 192, &header->name, 64); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
170 return write(fd, buf, 256); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
171 } |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
172 |
| 198 | 173 static void do_get_file(GtkWidget *w, struct file_transfer *ft) |
| 174 { | |
| 175 char *send = g_malloc(256); | |
| 176 char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window)); | |
| 177 char *buf; | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
178 struct file_header *header = g_new0(struct file_header, 1); |
| 198 | 179 int read_rv; |
| 180 guint32 rcv; | |
| 181 char *c; | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
182 int cont = 1; |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
183 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
|
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
184 GtkWidget *button = NULL, *pct = NULL; |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
185 |
| 198 | 186 if (!(ft->f = fopen(file,"w"))) { |
| 187 buf = g_malloc(BUF_LONG); | |
| 188 g_snprintf(buf, BUF_LONG / 2, "Error writing file %s", file); | |
| 189 do_error_dialog(buf, "Error"); | |
| 190 g_free(buf); | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
191 g_free(header); |
| 198 | 192 ft->accepted = 0; |
| 193 accept_callback(NULL, ft); | |
| 194 return; | |
| 195 } | |
| 196 | |
| 197 ft->accepted = 1; | |
| 198 | |
| 199 gtk_widget_destroy(ft->window); | |
| 200 ft->window = NULL; | |
| 201 g_snprintf(send, 255, "toc_rvous_accept %s %s %s", normalize(ft->user), | |
| 202 ft->cookie, ft->UID); | |
| 203 sflap_send(send, strlen(send), TYPE_DATA); | |
| 204 g_free(send); | |
| 205 | |
| 206 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
207 ft->fd = connect_address(inet_addr(ft->ip), ft->port); |
| 198 | 208 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
209 if (ft->fd <= -1) { |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
210 g_free(header); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
211 fclose(ft->f); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
212 free_ft(ft); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
213 return; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
214 } |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
215 |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
216 read_rv = read(ft->fd, header, 256); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
217 if(read_rv < 0) { |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
218 close(ft->fd); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
219 fclose(ft->f); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
220 g_free(header); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
221 free_ft(ft); |
| 198 | 222 return; |
| 223 } | |
| 224 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
225 sprintf(debug_buff, "header length %d\n", header->hdrlen); |
| 198 | 226 debug_print(debug_buff); |
| 227 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
228 header->hdrtype = 0x202; |
| 198 | 229 |
| 230 buf = frombase64(ft->cookie); | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
231 memcpy(header->bcookie, buf, 8); |
| 198 | 232 g_free(buf); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
233 snprintf(header->idstring, 32, "Gaim"); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
234 header->encrypt = 0; header->compress = 0; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
235 header->totparts = 1; header->partsleft = 1; |
| 198 | 236 |
| 237 sprintf(debug_buff, "sending confirmation\n"); | |
| 238 debug_print(debug_buff); | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
239 write_file_header(ft->fd, header); |
| 198 | 240 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
241 buf = g_malloc(2048); |
| 198 | 242 rcv = 0; |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
243 |
| 198 | 244 fw = gtk_dialog_new(); |
| 245 buf = g_malloc(2048); | |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
246 snprintf(buf, 2048, "Receiving %s from %s", ft->filename, ft->user); |
| 198 | 247 label = gtk_label_new(buf); |
| 248 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); | |
| 249 gtk_widget_show(label); | |
| 250 fbar = gtk_progress_bar_new(); | |
| 251 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); | |
| 252 gtk_widget_show(fbar); | |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
253 pct = gtk_label_new("0 %"); |
|
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
254 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
|
255 gtk_widget_show(pct); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
256 button = gtk_button_new_with_label("Cancel"); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
257 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
|
258 gtk_widget_show(button); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
259 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
260 gtk_window_set_title(GTK_WINDOW(fw), "Gaim - File Transfer"); |
| 198 | 261 gtk_widget_realize(fw); |
| 262 aol_icon(fw->window); | |
| 263 gtk_widget_show(fw); | |
| 264 | |
| 265 sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename, | |
| 266 ft->user, ft->size); | |
| 267 debug_print(debug_buff); | |
| 268 | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
269 while (rcv != ft->size && cont) { |
| 198 | 270 int i; |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
271 float pcnt = ((float)rcv)/((float)ft->size); |
| 198 | 272 int remain = ft->size - rcv > 1024 ? 1024 : ft->size - rcv; |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
273 read_rv = recv(ft->fd, buf, remain, O_NONBLOCK); |
| 198 | 274 if(read_rv < 0) { |
| 275 fclose(ft->f); | |
| 276 close(ft->fd); | |
| 277 g_free(buf); | |
| 278 g_free(header); | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
279 free_ft(ft); |
| 198 | 280 return; |
| 281 } | |
| 282 rcv += read_rv; | |
| 283 for (i = 0; i < read_rv; i++) | |
| 284 fprintf(ft->f, "%c", buf[i]); | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
285 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
286 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
|
287 gtk_label_set_text(GTK_LABEL(pct), buf); |
| 198 | 288 while(gtk_events_pending()) |
| 289 gtk_main_iteration(); | |
| 290 } | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
291 fclose(ft->f); |
|
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
292 gtk_widget_destroy(fw); |
|
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
293 fw = NULL; |
| 198 | 294 |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
295 if (!cont) { |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
296 char *tmp = frombase64(ft->cookie); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
297 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
|
298 sflap_send(buf, strlen(buf), TYPE_DATA); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
299 close(ft->fd); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
300 free_ft(ft); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
301 g_free(header); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
302 return; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
303 } |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
304 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
305 sprintf(debug_buff, "Download complete.\n"); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
306 debug_print(debug_buff); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
307 |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
308 header->hdrtype = 0x402; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
309 header->totparts = 0; header->partsleft = 0; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
310 header->flags = 0; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
311 header->recvcsum = header->checksum; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
312 header->nrecvd = header->totsize; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
313 write_file_header(ft->fd, header); |
| 198 | 314 close(ft->fd); |
| 315 | |
| 316 g_free(buf); | |
| 317 g_free(header); | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
318 free_ft(ft); |
| 198 | 319 } |
| 320 | |
| 321 static void do_send_file(GtkWidget *w, struct file_transfer *ft) { | |
| 322 char *send = g_malloc(256); | |
| 323 char *file = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window))); | |
| 324 char *buf; | |
| 325 int read_rv; | |
| 326 struct file_header *fhdr = g_new0(struct file_header, 1); | |
| 327 struct sockaddr_in sin; | |
| 328 guint32 rcv; | |
|
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
329 char *c; |
| 198 | 330 struct stat st; |
|
204
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
331 struct tm *fortime; |
| 198 | 332 |
| 333 stat(file, &st); | |
| 334 if (!(ft->f = fopen(file, "r"))) { | |
| 335 buf = g_malloc(BUF_LONG); | |
| 336 g_snprintf(buf, BUF_LONG / 2, "Error reading file %s", file); | |
| 337 do_error_dialog(buf, "Error"); | |
| 338 g_free(buf); | |
| 339 ft->accepted = 0; | |
| 340 accept_callback(NULL, ft); | |
| 341 return; | |
| 342 } | |
| 343 | |
| 344 ft->accepted = 1; | |
| 345 | |
| 346 gtk_widget_destroy(ft->window); | |
| 347 ft->window = NULL; | |
| 348 g_snprintf(send, 255, "toc_rvous_accept %s %s %s", normalize(ft->user), | |
| 349 ft->cookie, ft->UID); | |
| 350 sflap_send(send, strlen(send), TYPE_DATA); | |
| 351 g_free(send); | |
| 352 | |
| 353 | |
| 354 | |
| 355 sin.sin_addr.s_addr = inet_addr(ft->ip); | |
| 356 sin.sin_family = AF_INET; | |
| 357 sin.sin_port = htons(ft->port); | |
| 358 | |
| 359 ft->fd = socket(AF_INET, SOCK_STREAM, 0); | |
| 360 | |
|
214
2e0c2450280b
[gaim-migrate @ 224]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
212
diff
changeset
|
361 if (ft->fd <= -1 || connect(ft->fd, (struct sockaddr *)&sin, sizeof(sin))) { |
| 198 | 362 return; |
| 363 } | |
| 364 | |
| 365 /* here's where we differ from do_get_file */ | |
| 366 /* 1. build/send header | |
| 367 * 2. receive header | |
|
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
368 * 3. send listing file |
|
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
369 * 4. receive header |
|
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
370 * |
|
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
371 * then we need to wait to actually send the file. |
| 198 | 372 */ |
| 373 | |
| 374 /* 1. build/send header */ | |
|
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
375 c = file + strlen(file); |
|
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
376 while (*(c - 1) != '/') c--; |
| 198 | 377 buf = frombase64(ft->cookie); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
378 sprintf(debug_buff, "Building header to send %s (cookie: %s)\n", file, buf); |
| 198 | 379 debug_print(debug_buff); |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
380 fhdr->magic[0] = 'O'; fhdr->magic[1] = 'F'; |
|
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
381 fhdr->magic[2] = 'T'; fhdr->magic[3] = '2'; |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
382 fhdr->hdrlen = htons(256); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
383 fhdr->hdrtype = htons(0x1108); |
|
202
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
384 snprintf(fhdr->bcookie, 8, "%s", buf); |
| 198 | 385 g_free(buf); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
386 fhdr->encrypt = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
387 fhdr->compress = 0; |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
388 fhdr->totfiles = htons(1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
389 fhdr->filesleft = htons(1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
390 fhdr->totparts = htons(1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
391 fhdr->partsleft = htons(1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
392 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
|
393 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
394 fhdr->size = htonl(30 + strlen(c)); /* size of listing.txt */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
395 fhdr->modtime = htonl(time(NULL)); /* time since UNIX epoch */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
396 fhdr->checksum = htonl(0x89f70000); /* ? */ |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
397 fhdr->rfrcsum = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
398 fhdr->rfsize = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
399 fhdr->cretime = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
400 fhdr->rfcsum = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
401 fhdr->nrecvd = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
402 fhdr->recvcsum = 0; |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
403 snprintf(fhdr->idstring, 32, "OFT_Windows ICBMFT V1.1 32"); |
|
205
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
404 fhdr->flags = 0x02; /* don't ask me why */ |
|
202
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
405 fhdr->lnameoffset = 0x1A; /* ? still no clue */ |
|
bcc54ee34531
[gaim-migrate @ 212]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
201
diff
changeset
|
406 fhdr->lsizeoffset = 0x10; /* whatever */ |
|
205
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
407 memset(fhdr->dummy, 0, 69); |
|
5531861bf3f5
[gaim-migrate @ 215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
204
diff
changeset
|
408 memset(fhdr->macfileinfo, 0, 16); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
409 fhdr->nencode = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
410 fhdr->nlanguage = 0; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
411 snprintf(fhdr->name, 64, "listing.txt"); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
412 read_rv = write_file_header(ft->fd, fhdr); |
| 198 | 413 if (read_rv <= -1) { |
|
210
ec0686b3b03f
[gaim-migrate @ 220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
205
diff
changeset
|
414 sprintf(debug_buff, "Couldn't write opening header\n"); |
| 198 | 415 debug_print(debug_buff); |
| 416 close(ft->fd); | |
| 417 return; | |
| 418 } | |
| 419 | |
| 420 /* 2. receive header */ | |
| 421 sprintf(debug_buff, "Receiving header\n"); | |
| 422 debug_print(debug_buff); | |
|
210
ec0686b3b03f
[gaim-migrate @ 220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
205
diff
changeset
|
423 read_rv = read(ft->fd, fhdr, 256); |
| 198 | 424 if (read_rv <= -1) { |
| 425 sprintf(debug_buff, "Couldn't read header\n"); | |
| 426 debug_print(debug_buff); | |
| 427 close(ft->fd); | |
| 428 return; | |
| 429 } | |
| 430 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
431 /* 3. qend listing file */ |
|
203
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
432 /* mm/dd/yyyy hh:mm sizesize name.ext\r\n */ |
|
4fa63e83406b
[gaim-migrate @ 213]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
202
diff
changeset
|
433 /* creation date ^ */ |
| 198 | 434 sprintf(debug_buff, "Sending file\n"); |
| 435 debug_print(debug_buff); | |
|
204
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
436 buf = g_malloc(ft->size + 1); |
|
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
437 fortime = localtime(&st.st_ctime); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
438 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
|
439 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, |
|
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
440 fortime->tm_hour + 1, fortime->tm_min + 1, |
|
579e59e66381
[gaim-migrate @ 214]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
203
diff
changeset
|
441 st.st_size, c); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
442 sprintf(debug_buff, "Sending listing.txt (%ld bytes) to %s\n", |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
443 ntohl(fhdr->size) + 1, ft->user); |
| 198 | 444 debug_print(debug_buff); |
| 445 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
446 read_rv = write(ft->fd, buf, ntohl(fhdr->size)); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
447 if (read_rv <= -1) { |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
448 sprintf(debug_buff, "Could not send file, wrote %d\n", rcv); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
449 debug_print(debug_buff); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
450 close(ft->fd); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
451 return; |
| 198 | 452 } |
| 453 | |
|
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
454 /* 4. receive header */ |
| 198 | 455 sprintf(debug_buff, "Receiving closing header\n"); |
| 456 debug_print(debug_buff); | |
|
210
ec0686b3b03f
[gaim-migrate @ 220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
205
diff
changeset
|
457 read_rv = read(ft->fd, fhdr, 256); |
| 198 | 458 if (read_rv <= -1) { |
| 459 sprintf(debug_buff, "Couldn't read closing header\n"); | |
| 460 debug_print(debug_buff); | |
| 461 close(ft->fd); | |
| 462 return; | |
| 463 } | |
| 464 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
465 /* 5. wait to see if we're sending it */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
466 /* read_rv = read(ft->fd, fhdr, 256); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
467 * if (read_rv <= -1 !! connection_is_closed()) { // uh huh |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
468 * clean_up(); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
469 * return(); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
470 * } |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
471 */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
472 |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
473 /* 6. send the file */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
474 |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
475 /* 7. receive closing header */ |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
476 |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
477 /* done */ |
| 198 | 478 } |
| 479 | |
| 480 void accept_file_dialog(struct file_transfer *ft) | |
| 481 { | |
| 482 GtkWidget *accept, *info, *warn, *cancel; | |
| 483 GtkWidget *label; | |
| 484 GtkWidget *vbox, *bbox; | |
| 485 char buf[1024]; | |
| 486 | |
| 487 | |
| 488 ft->window = gtk_window_new(GTK_WINDOW_DIALOG); | |
| 489 | |
| 490 accept = gtk_button_new_with_label("Accept"); | |
| 491 info = gtk_button_new_with_label("Info"); | |
| 492 warn = gtk_button_new_with_label("Warn"); | |
| 493 cancel = gtk_button_new_with_label("Cancel"); | |
| 494 | |
| 495 bbox = gtk_hbox_new(TRUE, 10); | |
| 496 vbox = gtk_vbox_new(FALSE, 5); | |
| 497 | |
| 498 gtk_widget_show(accept); | |
| 499 gtk_widget_show(info); | |
| 500 gtk_widget_show(warn); | |
| 501 gtk_widget_show(cancel); | |
| 502 | |
| 503 gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10); | |
| 504 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10); | |
| 505 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10); | |
| 506 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10); | |
| 507 | |
| 508 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
| 509 g_snprintf(buf, sizeof(buf), "%s requests you to accept the file: %s (%d bytes)", | |
| 510 ft->user, ft->filename, ft->size); | |
| 511 } else { | |
| 512 g_snprintf(buf, sizeof(buf), "%s requests you to send them a file", | |
| 513 ft->user); | |
| 514 } | |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
515 if (ft->message) |
|
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
516 strncat(buf, ft->message, sizeof(buf) - strlen(buf)); |
| 198 | 517 label = gtk_label_new(buf); |
| 518 gtk_widget_show(label); | |
| 519 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); | |
| 520 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); | |
| 521 | |
| 522 gtk_window_set_title(GTK_WINDOW(ft->window), "Gaim - File Transfer?"); | |
| 523 gtk_window_set_focus(GTK_WINDOW(ft->window), accept); | |
| 524 gtk_container_add(GTK_CONTAINER(ft->window), vbox); | |
| 525 gtk_container_border_width(GTK_CONTAINER(ft->window), 10); | |
| 526 gtk_widget_show(vbox); | |
| 527 gtk_widget_show(bbox); | |
| 528 gtk_widget_realize(ft->window); | |
| 529 aol_icon(ft->window->window); | |
| 530 | |
| 531 gtk_widget_show(ft->window); | |
| 532 | |
| 533 | |
| 534 gtk_signal_connect(GTK_OBJECT(accept), "clicked", | |
| 535 GTK_SIGNAL_FUNC(accept_callback), ft); | |
| 536 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", | |
| 537 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
| 538 gtk_signal_connect(GTK_OBJECT(warn), "clicked", | |
| 539 GTK_SIGNAL_FUNC(warn_callback), ft); | |
| 540 gtk_signal_connect(GTK_OBJECT(info), "clicked", | |
| 541 GTK_SIGNAL_FUNC(info_callback), ft); | |
| 542 | |
| 543 | |
| 544 if (ft->message) { | |
| 545 /* we'll do this later | |
| 546 while(gtk_events_pending()) | |
| 547 gtk_main_iteration(); | |
| 548 html_print(text, ft->message); | |
| 549 */ | |
| 550 } | |
| 551 } |
