Mercurial > pidgin
annotate src/rvous.c @ 1082:13df4e342cff
[gaim-migrate @ 1092]
oops
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Fri, 10 Nov 2000 23:26:57 +0000 |
| parents | 80a47e3b1bca |
| children | 56c7ceb986a8 |
| 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 | |
|
349
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
264
diff
changeset
|
22 #ifdef HAVE_CONFIG_H |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
264
diff
changeset
|
23 #include "../config.h" |
|
b402a23f35df
[gaim-migrate @ 359]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
264
diff
changeset
|
24 #endif |
| 198 | 25 #include <string.h> |
| 26 #include <stdio.h> | |
| 27 #include <stdlib.h> | |
| 28 #include <time.h> | |
| 29 #include <sys/types.h> | |
| 30 #include <sys/stat.h> | |
| 31 #include <fcntl.h> | |
| 32 #include <sys/socket.h> | |
| 33 #include <netdb.h> | |
| 34 #include <netinet/in.h> | |
| 35 #include <unistd.h> | |
| 36 #include <netinet/in.h> | |
| 37 #include <arpa/inet.h> | |
| 218 | 38 #include <errno.h> |
| 198 | 39 #include <gtk/gtk.h> |
| 40 #include "gaim.h" | |
| 41 | |
| 42 static void do_send_file(GtkWidget *, struct file_transfer *); | |
| 43 static void do_get_file (GtkWidget *, struct file_transfer *); | |
| 44 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
45 static int snpa = -1; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
46 |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
47 static void toggle(GtkWidget *w, int *m) |
|
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 *m = !(*m); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
50 } |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
51 |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
52 static void free_ft(struct file_transfer *ft) |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
53 { |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
54 if (ft->window) { gtk_widget_destroy(ft->window); ft->window = NULL; } |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
55 if (ft->filename) g_free(ft->filename); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
56 if (ft->user) g_free(ft->user); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
57 if (ft->message) g_free(ft->message); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
58 if (ft->ip) g_free(ft->ip); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
59 if (ft->cookie) g_free(ft->cookie); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
60 g_free(ft); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
61 } |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
62 |
| 198 | 63 static void warn_callback(GtkWidget *widget, struct file_transfer *ft) |
| 64 { | |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
65 show_warn_dialog(ft->gc, ft->user); |
| 198 | 66 } |
| 67 | |
| 68 static void info_callback(GtkWidget *widget, struct file_transfer *ft) | |
| 69 { | |
|
1032
643a4d81c18a
[gaim-migrate @ 1042]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
978
diff
changeset
|
70 serv_get_info(ft->gc, ft->user); |
| 198 | 71 } |
| 72 | |
| 73 static void cancel_callback(GtkWidget *widget, struct file_transfer *ft) | |
| 74 { | |
| 75 if (ft->accepted) { | |
| 76 return; | |
| 77 } | |
| 78 | |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
79 serv_rvous_cancel(ft->gc, ft->user, ft->cookie, ft->UID); |
|
260
325d9804df10
[gaim-migrate @ 270]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
80 |
|
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 { | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
86 char buf[BUF_LEN]; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
87 char fname[BUF_LEN]; |
| 198 | 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 | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
108 ft->window = gtk_file_selection_new(_("Gaim - Save As...")); |
| 198 | 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 | |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
136 static int read_file_header(int fd, struct file_header *header) { |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
137 char buf[257]; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
138 int read_rv = read(fd, buf, 256); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
139 if (read_rv < 0) |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
140 return read_rv; |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
141 memcpy(&header->magic, buf + 0, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
142 memcpy(&header->hdrlen, buf + 4, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
143 memcpy(&header->hdrtype, buf + 6, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
144 memcpy(&header->bcookie, buf + 8, 8); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
145 memcpy(&header->encrypt, buf + 16, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
146 memcpy(&header->compress, buf + 18, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
147 memcpy(&header->totfiles, buf + 20, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
148 memcpy(&header->filesleft, buf + 22, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
149 memcpy(&header->totparts, buf + 24, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
150 memcpy(&header->partsleft, buf + 26, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
151 memcpy(&header->totsize, buf + 28, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
152 memcpy(&header->size, buf + 32, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
153 memcpy(&header->modtime, buf + 36, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
154 memcpy(&header->checksum, buf + 40, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
155 memcpy(&header->rfrcsum, buf + 44, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
156 memcpy(&header->rfsize, buf + 48, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
157 memcpy(&header->cretime, buf + 52, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
158 memcpy(&header->rfcsum, buf + 56, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
159 memcpy(&header->nrecvd, buf + 60, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
160 memcpy(&header->recvcsum, buf + 64, 4); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
161 memcpy(&header->idstring, buf + 68, 32); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
162 memcpy(&header->flags, buf + 100, 1); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
163 memcpy(&header->lnameoffset, buf + 101, 1); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
164 memcpy(&header->lsizeoffset, buf + 102, 1); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
165 memcpy(&header->dummy, buf + 103, 69); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
166 memcpy(&header->macfileinfo, buf + 172, 16); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
167 memcpy(&header->nencode, buf + 188, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
168 memcpy(&header->nlanguage, buf + 190, 2); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
169 memcpy(&header->name, buf + 192, 64); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
170 return read_rv; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
171 } |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
172 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
173 static int write_file_header(int fd, struct file_header *header) { |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
174 char buf[257]; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
175 memcpy(buf + 0, &header->magic, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
176 memcpy(buf + 4, &header->hdrlen, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
177 memcpy(buf + 6, &header->hdrtype, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
178 memcpy(buf + 8, &header->bcookie, 8); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
179 memcpy(buf + 16, &header->encrypt, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
180 memcpy(buf + 18, &header->compress, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
181 memcpy(buf + 20, &header->totfiles, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
182 memcpy(buf + 22, &header->filesleft, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
183 memcpy(buf + 24, &header->totparts, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
184 memcpy(buf + 26, &header->partsleft, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
185 memcpy(buf + 28, &header->totsize, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
186 memcpy(buf + 32, &header->size, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
187 memcpy(buf + 36, &header->modtime, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
188 memcpy(buf + 40, &header->checksum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
189 memcpy(buf + 44, &header->rfrcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
190 memcpy(buf + 48, &header->rfsize, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
191 memcpy(buf + 52, &header->cretime, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
192 memcpy(buf + 56, &header->rfcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
193 memcpy(buf + 60, &header->nrecvd, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
194 memcpy(buf + 64, &header->recvcsum, 4); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
195 memcpy(buf + 68, &header->idstring, 32); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
196 memcpy(buf + 100, &header->flags, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
197 memcpy(buf + 101, &header->lnameoffset, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
198 memcpy(buf + 102, &header->lsizeoffset, 1); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
199 memcpy(buf + 103, &header->dummy, 69); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
200 memcpy(buf + 172, &header->macfileinfo, 16); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
201 memcpy(buf + 188, &header->nencode, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
202 memcpy(buf + 190, &header->nlanguage, 2); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
203 memcpy(buf + 192, &header->name, 64); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
204 return write(fd, buf, 256); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
205 } |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
206 |
| 198 | 207 static void do_get_file(GtkWidget *w, struct file_transfer *ft) |
| 208 { | |
| 209 char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window)); | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
210 char buf[BUF_LONG]; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
211 char *buf2; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
212 struct file_header header; |
| 198 | 213 int read_rv; |
| 214 guint32 rcv; | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
215 int cont = 1; |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
216 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
|
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
217 GtkWidget *button = NULL, *pct = NULL; |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
218 |
|
1035
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
219 if (file_is_dir(file, ft->window)) { |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
220 return; |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
221 } |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
222 |
| 198 | 223 if (!(ft->f = fopen(file,"w"))) { |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
224 g_snprintf(buf, BUF_LONG / 2, _("Error writing file %s"), file); |
|
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
225 do_error_dialog(buf, _("Error")); |
| 198 | 226 ft->accepted = 0; |
| 227 accept_callback(NULL, ft); | |
| 228 return; | |
| 229 } | |
| 230 | |
| 231 ft->accepted = 1; | |
| 232 | |
| 233 gtk_widget_destroy(ft->window); | |
| 234 ft->window = NULL; | |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
235 serv_rvous_accept(ft->gc, ft->user, ft->cookie, ft->UID); |
| 198 | 236 |
| 237 | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
238 ft->fd = connect_address(inet_addr(ft->ip), ft->port); |
| 198 | 239 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
240 if (ft->fd <= -1) { |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
241 fclose(ft->f); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
242 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
243 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
244 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
245 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
246 read_rv = read_file_header(ft->fd, &header); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
247 if(read_rv < 0) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
248 close(ft->fd); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
249 fclose(ft->f); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
250 free_ft(ft); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
251 return; |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
252 } |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
253 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
254 sprintf(debug_buff, "header length %d\n", header.hdrlen); |
| 198 | 255 debug_print(debug_buff); |
| 256 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
257 header.hdrtype = 0x202; |
| 198 | 258 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
259 buf2 = frombase64(ft->cookie); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
260 memcpy(header.bcookie, buf2, 8); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
261 snprintf(header.idstring, 32, "Gaim"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
262 g_free(buf2); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
263 header.encrypt = 0; header.compress = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
264 header.totparts = 1; header.partsleft = 1; |
| 198 | 265 |
| 266 sprintf(debug_buff, "sending confirmation\n"); | |
| 267 debug_print(debug_buff); | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
268 write_file_header(ft->fd, &header); |
| 198 | 269 |
| 270 rcv = 0; | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
271 |
| 198 | 272 fw = gtk_dialog_new(); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
273 snprintf(buf, 2048, _("Receiving %s from %s"), ft->filename, ft->user); |
| 198 | 274 label = gtk_label_new(buf); |
| 275 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); | |
| 276 gtk_widget_show(label); | |
| 277 fbar = gtk_progress_bar_new(); | |
| 278 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); | |
| 279 gtk_widget_show(fbar); | |
|
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
280 pct = gtk_label_new("0 %"); |
|
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
281 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
|
282 gtk_widget_show(pct); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
283 button = gtk_button_new_with_label(_("Cancel")); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
284 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
|
285 gtk_widget_show(button); |
|
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
286 if (display_options & OPT_DISP_COOL_LOOK) |
|
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
287 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
288 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
289 gtk_window_set_title(GTK_WINDOW(fw), _("Gaim - File Transfer")); |
| 198 | 290 gtk_widget_realize(fw); |
| 291 aol_icon(fw->window); | |
| 292 gtk_widget_show(fw); | |
| 293 | |
| 294 sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename, | |
| 295 ft->user, ft->size); | |
| 296 debug_print(debug_buff); | |
| 297 | |
| 218 | 298 fcntl(ft->fd, F_SETFL, O_NONBLOCK); |
| 299 | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
300 while (rcv != ft->size && cont) { |
| 198 | 301 int i; |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
302 float pcnt = ((float)rcv)/((float)ft->size); |
| 198 | 303 int remain = ft->size - rcv > 1024 ? 1024 : ft->size - rcv; |
| 218 | 304 read_rv = read(ft->fd, buf, remain); |
| 198 | 305 if(read_rv < 0) { |
| 218 | 306 if (errno == EWOULDBLOCK) { |
| 307 while(gtk_events_pending()) | |
| 308 gtk_main_iteration(); | |
| 309 continue; | |
| 310 } | |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
311 gtk_widget_destroy(fw); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
312 fw = NULL; |
| 198 | 313 fclose(ft->f); |
| 314 close(ft->fd); | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
315 free_ft(ft); |
| 198 | 316 return; |
| 317 } | |
| 318 rcv += read_rv; | |
| 319 for (i = 0; i < read_rv; i++) | |
| 320 fprintf(ft->f, "%c", buf[i]); | |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
321 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
322 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
|
323 gtk_label_set_text(GTK_LABEL(pct), buf); |
| 198 | 324 while(gtk_events_pending()) |
| 325 gtk_main_iteration(); | |
| 326 } | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
327 fclose(ft->f); |
|
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
328 gtk_widget_destroy(fw); |
|
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
329 fw = NULL; |
| 198 | 330 |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
331 if (!cont) { |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
332 char *tmp = frombase64(ft->cookie); |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
333 serv_rvous_cancel(ft->gc, ft->user, tmp, ft->UID); |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
334 close(ft->fd); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
335 free_ft(ft); |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
336 return; |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
337 } |
|
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
338 |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
339 sprintf(debug_buff, "Download complete.\n"); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
340 debug_print(debug_buff); |
|
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
341 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
342 header.hdrtype = 0x402; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
343 header.totparts = 0; header.partsleft = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
344 header.flags = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
345 header.recvcsum = header.checksum; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
346 header.nrecvd = header.totsize; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
347 write_file_header(ft->fd, &header); |
| 198 | 348 close(ft->fd); |
| 349 | |
|
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
350 free_ft(ft); |
| 198 | 351 } |
| 352 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
353 static void send_file_callback(gpointer data, gint source, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
354 GdkInputCondition condition) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
355 struct file_transfer *ft = (struct file_transfer *)data; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
356 struct file_header fhdr; |
| 198 | 357 int read_rv; |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
358 char buf[2048]; |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
359 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
360 GtkWidget *button = NULL, *pct = NULL; |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
361 int rcv, cont; |
| 198 | 362 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
363 gdk_input_remove(snpa); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
364 snpa = -1; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
365 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
366 if (condition & GDK_INPUT_EXCEPTION) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
367 fclose(ft->f); |
| 198 | 368 close(ft->fd); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
369 free_ft(ft); |
| 198 | 370 return; |
| 371 } | |
| 372 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
373 /* OK, so here's what's going on: we need to send a file. The person |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
374 * sends us a file_header, then we send a file_header, then they send |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
375 * us a file header, then we send the file, then they send a header, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
376 * and we're done. */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
377 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
378 /* we can do some neat tricks because the other person sends us back |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
379 * all the information we need in the file_header */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
380 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
381 read_rv = read_file_header(ft->fd, &fhdr); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
382 if (read_rv < 0) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
383 fclose(ft->f); |
| 198 | 384 close(ft->fd); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
385 free_ft(ft); |
| 198 | 386 return; |
| 387 } | |
| 388 | |
|
264
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
389 if (fhdr.hdrtype != 0xc12) { |
|
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
390 sprintf(debug_buff, "%s decided to cancel. (%x)\n", ft->user, |
|
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
391 fhdr.hdrtype); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
392 debug_print(debug_buff); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
393 fclose(ft->f); |
| 198 | 394 close(ft->fd); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
395 free_ft(ft); |
| 198 | 396 return; |
| 397 } | |
| 398 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
399 /* now we need to set the hdrtype to a certain value, but I don't know |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
400 * what that value is, and I don't happen to have a win computer to do |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
401 * my sniffing from :-P */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
402 fhdr.hdrtype = ntohs(0x101); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
403 fhdr.totfiles = 1; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
404 fhdr.filesleft = 1; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
405 fhdr.flags = 0x20; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
406 write_file_header(ft->fd, &fhdr); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
407 read_file_header(ft->fd, &fhdr); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
408 |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
409 fw = gtk_dialog_new(); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
410 snprintf(buf, 2048, _("Sending %s to %s"), fhdr.name, ft->user); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
411 label = gtk_label_new(buf); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
412 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
|
413 gtk_widget_show(label); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
414 fbar = gtk_progress_bar_new(); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
415 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
|
416 gtk_widget_show(fbar); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
417 pct = gtk_label_new("0 %"); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
418 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), pct, 0, 0, 5); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
419 gtk_widget_show(pct); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
420 button = gtk_button_new_with_label(_("Cancel")); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
421 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
|
422 gtk_widget_show(button); |
|
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
423 if (display_options & OPT_DISP_COOL_LOOK) |
|
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
424 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
425 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
426 gtk_window_set_title(GTK_WINDOW(fw), _("Gaim - File Transfer")); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
427 gtk_widget_realize(fw); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
428 aol_icon(fw->window); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
429 gtk_widget_show(fw); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
430 |
|
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
431 sprintf(debug_buff, "Sending %s to %s (%ld bytes)\n", fhdr.name, |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
432 ft->user, fhdr.totsize); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
433 debug_print(debug_buff); |
|
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 rcv = 0; cont = 1; |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
436 while (rcv != ntohl(fhdr.totsize) && cont) { |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
437 int i; |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
438 float pcnt = ((float)rcv)/((float)ntohl(fhdr.totsize)); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
439 int remain = ntohl(fhdr.totsize) - rcv > 1024 ? 1024 : |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
440 ntohl(fhdr.totsize) - rcv; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
441 for (i = 0; i < remain; i++) |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
442 fscanf(ft->f, "%c", &buf[i]); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
443 read_rv = write(ft->fd, buf, remain); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
444 if (read_rv < 0) { |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
445 fclose(ft->f); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
446 gtk_widget_destroy(fw); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
447 fw = NULL; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
448 fclose(ft->f); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
449 close(ft->fd); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
450 free_ft(ft); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
451 return; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
452 } |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
453 rcv += read_rv; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
454 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
455 sprintf(buf, "%d / %d K (%2.0f %%)", rcv/1024, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
456 ntohl(fhdr.totsize)/1024, 100*pcnt); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
457 gtk_label_set_text(GTK_LABEL(pct), buf); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
458 while(gtk_events_pending()) |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
459 gtk_main_iteration(); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
460 } |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
461 fclose(ft->f); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
462 gtk_widget_destroy(fw); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
463 fw = NULL; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
464 |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
465 if (!cont) { |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
466 char *tmp = frombase64(ft->cookie); |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
467 serv_rvous_cancel(ft->gc, ft->user, tmp, ft->UID); |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
468 close(ft->fd); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
469 free_ft(ft); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
470 return; |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
471 } |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
472 |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
473 sprintf(debug_buff, "Upload complete.\n"); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
474 debug_print(debug_buff); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
475 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
476 read_file_header(ft->fd, &fhdr); |
|
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
477 |
|
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
478 close(ft->fd); |
|
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
479 free_ft(ft); |
| 198 | 480 } |
| 481 | |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
482 static void do_send_file(GtkWidget *w, struct file_transfer *ft) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
483 char *file = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(ft->window))); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
484 char buf[BUF_LONG]; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
485 char *buf2; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
486 int read_rv; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
487 struct file_header fhdr; |
|
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
488 guint32 rcv = 0; |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
489 char *c; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
490 struct stat st; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
491 struct tm *fortime; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
492 |
|
1035
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
493 if (file_is_dir (file, ft->window)) { |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
494 g_free(file); |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
495 return; |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
496 } |
|
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
497 |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
498 stat(file, &st); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
499 if (!(ft->f = fopen(file, "r"))) { |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
500 g_snprintf(buf, BUF_LONG / 2, _("Error reading file %s"), file); |
|
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
501 do_error_dialog(buf, _("Error")); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
502 ft->accepted = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
503 accept_callback(NULL, ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
504 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
505 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
506 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
507 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
508 ft->accepted = 1; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
509 ft->filename = file; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
510 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
511 gtk_widget_destroy(ft->window); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
512 ft->window = NULL; |
|
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
513 serv_rvous_accept(ft->gc, ft->user, ft->cookie, ft->UID); |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
514 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
515 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
516 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
517 ft->fd = connect_address(inet_addr(ft->ip), ft->port); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
518 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
519 if (ft->fd <= -1) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
520 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
521 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
522 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
523 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
524 /* here's where we differ from do_get_file */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
525 /* 1. build/send header |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
526 * 2. receive header |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
527 * 3. send listing file |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
528 * 4. receive header |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
529 * |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
530 * then we need to wait to actually send the file, if they want. |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
531 * |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
532 */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
533 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
534 /* 1. build/send header */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
535 c = file + strlen(file); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
536 while (*(c - 1) != '/') c--; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
537 buf2 = frombase64(ft->cookie); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
538 sprintf(debug_buff, "Building header to send %s (cookie: %s)\n", file, buf2); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
539 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
540 fhdr.magic[0] = 'O'; fhdr.magic[1] = 'F'; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
541 fhdr.magic[2] = 'T'; fhdr.magic[3] = '2'; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
542 fhdr.hdrlen = htons(256); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
543 fhdr.hdrtype = htons(0x1108); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
544 snprintf(fhdr.bcookie, 8, "%s", buf2); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
545 g_free(buf2); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
546 fhdr.encrypt = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
547 fhdr.compress = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
548 fhdr.totfiles = htons(1); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
549 fhdr.filesleft = htons(1); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
550 fhdr.totparts = htons(1); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
551 fhdr.partsleft = htons(1); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
552 fhdr.totsize = htonl((long)st.st_size); /* combined size of all files */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
553 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
554 fhdr.size = htonl(28 + strlen(c)); /* size of listing.txt */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
555 fhdr.modtime = htonl(time(NULL)); /* time since UNIX epoch */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
556 fhdr.checksum = htonl(0x89f70000); /* ? i don't think this matters */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
557 fhdr.rfrcsum = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
558 fhdr.rfsize = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
559 fhdr.cretime = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
560 fhdr.rfcsum = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
561 fhdr.nrecvd = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
562 fhdr.recvcsum = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
563 snprintf(fhdr.idstring, 32, "OFT_Windows ICBMFT V1.1 32"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
564 fhdr.flags = 0x02; /* don't ask me why */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
565 fhdr.lnameoffset = 0x1A; /* ? still no clue */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
566 fhdr.lsizeoffset = 0x10; /* whatever */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
567 memset(fhdr.dummy, 0, 69); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
568 memset(fhdr.macfileinfo, 0, 16); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
569 fhdr.nencode = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
570 fhdr.nlanguage = 0; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
571 snprintf(fhdr.name, 64, "listing.txt"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
572 read_rv = write_file_header(ft->fd, &fhdr); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
573 if (read_rv <= -1) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
574 sprintf(debug_buff, "Couldn't write opening header\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
575 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
576 close(ft->fd); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
577 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
578 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
579 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
580 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
581 /* 2. receive header */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
582 sprintf(debug_buff, "Receiving header\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
583 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
584 read_rv = read_file_header(ft->fd, &fhdr); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
585 if (read_rv <= -1) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
586 sprintf(debug_buff, "Couldn't read header\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
587 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
588 close(ft->fd); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
589 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
590 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
591 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
592 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
593 /* 3. send listing file */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
594 /* mm/dd/yyyy hh:mm sizesize name.ext\r\n */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
595 /* creation date ^ */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
596 sprintf(debug_buff, "Sending file\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
597 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
598 fortime = localtime(&st.st_ctime); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
599 snprintf(buf, ntohl(fhdr.size) + 1, "%2d/%2d/%4d %2d:%2d %8ld %s\r\n", |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
600 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
601 fortime->tm_hour + 1, fortime->tm_min + 1, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
602 st.st_size, c); |
|
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
603 sprintf(debug_buff, "Sending listing.txt (%d bytes) to %s\n", |
|
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
604 ntohl(fhdr.size) + 1, ft->user); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
605 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
606 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
607 read_rv = write(ft->fd, buf, ntohl(fhdr.size)); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
608 if (read_rv <= -1) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
609 sprintf(debug_buff, "Could not send file, wrote %d\n", rcv); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
610 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
611 close(ft->fd); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
612 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
613 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
614 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
615 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
616 /* 4. receive header */ |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
617 sprintf(debug_buff, "Receiving closing header\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
618 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
619 read_rv = read_file_header(ft->fd, &fhdr); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
620 if (read_rv <= -1) { |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
621 sprintf(debug_buff, "Couldn't read closing header\n"); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
622 debug_print(debug_buff); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
623 close(ft->fd); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
624 free_ft(ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
625 return; |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
626 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
627 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
628 snpa = gdk_input_add(ft->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
629 send_file_callback, ft); |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
630 |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
631 } |
|
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
632 |
| 198 | 633 void accept_file_dialog(struct file_transfer *ft) |
| 634 { | |
| 635 GtkWidget *accept, *info, *warn, *cancel; | |
| 636 GtkWidget *label; | |
| 637 GtkWidget *vbox, *bbox; | |
| 638 char buf[1024]; | |
| 639 | |
| 640 | |
| 641 ft->window = gtk_window_new(GTK_WINDOW_DIALOG); | |
| 905 | 642 gtk_window_set_wmclass(GTK_WINDOW(ft->window), "accept_file", "Gaim"); |
| 198 | 643 |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
644 accept = gtk_button_new_with_label(_("Accept")); |
|
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
645 info = gtk_button_new_with_label(_("Info")); |
|
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
646 warn = gtk_button_new_with_label(_("Warn")); |
|
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
647 cancel = gtk_button_new_with_label(_("Cancel")); |
| 198 | 648 |
| 649 bbox = gtk_hbox_new(TRUE, 10); | |
| 650 vbox = gtk_vbox_new(FALSE, 5); | |
| 651 | |
| 652 gtk_widget_show(accept); | |
| 653 gtk_widget_show(info); | |
| 654 gtk_widget_show(warn); | |
| 655 gtk_widget_show(cancel); | |
| 656 | |
| 617 | 657 if (display_options & OPT_DISP_COOL_LOOK) |
| 658 { | |
| 659 gtk_button_set_relief(GTK_BUTTON(accept), GTK_RELIEF_NONE); | |
| 660 gtk_button_set_relief(GTK_BUTTON(info), GTK_RELIEF_NONE); | |
| 661 gtk_button_set_relief(GTK_BUTTON(warn), GTK_RELIEF_NONE); | |
| 662 gtk_button_set_relief(GTK_BUTTON(cancel), GTK_RELIEF_NONE); | |
| 663 } | |
|
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
664 |
| 198 | 665 gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10); |
| 666 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10); | |
| 667 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10); | |
| 668 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10); | |
| 669 | |
| 670 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
671 g_snprintf(buf, sizeof(buf), _("%s requests you to accept the file: %s (%d bytes)"), |
| 198 | 672 ft->user, ft->filename, ft->size); |
| 673 } else { | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
674 g_snprintf(buf, sizeof(buf), _("%s requests you to send them a file"), |
| 198 | 675 ft->user); |
| 676 } | |
|
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
677 if (ft->message) |
|
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
678 strncat(buf, ft->message, sizeof(buf) - strlen(buf)); |
| 198 | 679 label = gtk_label_new(buf); |
| 680 gtk_widget_show(label); | |
| 681 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); | |
| 682 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); | |
| 683 | |
|
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
684 gtk_window_set_title(GTK_WINDOW(ft->window), _("Gaim - File Transfer?")); |
| 198 | 685 gtk_window_set_focus(GTK_WINDOW(ft->window), accept); |
| 686 gtk_container_add(GTK_CONTAINER(ft->window), vbox); | |
| 687 gtk_container_border_width(GTK_CONTAINER(ft->window), 10); | |
| 688 gtk_widget_show(vbox); | |
| 689 gtk_widget_show(bbox); | |
| 690 gtk_widget_realize(ft->window); | |
| 691 aol_icon(ft->window->window); | |
| 692 | |
| 693 gtk_widget_show(ft->window); | |
| 694 | |
| 695 | |
| 696 gtk_signal_connect(GTK_OBJECT(accept), "clicked", | |
| 697 GTK_SIGNAL_FUNC(accept_callback), ft); | |
| 698 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", | |
| 699 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
| 700 gtk_signal_connect(GTK_OBJECT(warn), "clicked", | |
| 701 GTK_SIGNAL_FUNC(warn_callback), ft); | |
| 702 gtk_signal_connect(GTK_OBJECT(info), "clicked", | |
| 703 GTK_SIGNAL_FUNC(info_callback), ft); | |
| 704 | |
| 705 | |
| 706 if (ft->message) { | |
| 707 /* we'll do this later | |
| 708 while(gtk_events_pending()) | |
| 709 gtk_main_iteration(); | |
| 710 html_print(text, ft->message); | |
| 711 */ | |
| 712 } | |
| 713 } |
