Mercurial > pidgin
annotate src/rvous.c @ 1106:5bc8fdacd2cb
[gaim-migrate @ 1116]
lots of changes.
buddy.c: just in general tried to get things to work better. moving things in the edit list window and signing off should be handled better in the main buddy list window (watch out for flashes).
gaim.h: removed toc-specific things and moved them to toc.c and rvous.c as needed.
gtkhtml.c: possible fix for AOL 6.0 problems (I wasn't able to reproduce the problem before or after the fix, but i fixed what i think might have been causing the problem).
multi.c: moved LOGIN_STEPS from gaim.h here and actually use it now
oscar.c: moved an oscar-specific struct definition from gaim.h here and also handle problems better
perl.c: fix for stupid problem
rvous.c: first pass at attempt to be able to remove toc.c and rvous.c (though this will never happen; gaim will support toc as long as aol does) without cruft. gaim is now only dependent on toc.c and rvous.c for toc_build_config and parse_toc_buddy_list, which gaim needs to save and read its buddy list.
toc.c: rewrote the signin process so that the read()'s won't block. it's not actually a non-blocking read; it's just that it won't ever get to the read until there's data to be read (thanks to the gdk_input watcher). this means the cancel button should work after it's connected, but it's still not a non-blocking connect.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 20 Nov 2000 07:24:18 +0000 |
parents | d7944415b1cc |
children | c61f9c384413 |
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> |
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
40 #include "proxy.h" |
198 | 41 #include "gaim.h" |
42 | |
1106
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
43 #define TYPE_DATA 2 /* from toc.c */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
44 |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
45 struct file_header { |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
46 char magic[4]; /* 0 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
47 short hdrlen; /* 4 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
48 short hdrtype; /* 6 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
49 char bcookie[8]; /* 8 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
50 short encrypt; /* 16 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
51 short compress; /* 18 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
52 short totfiles; /* 20 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
53 short filesleft; /* 22 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
54 short totparts; /* 24 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
55 short partsleft; /* 26 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
56 long totsize; /* 28 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
57 long size; /* 32 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
58 long modtime; /* 36 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
59 long checksum; /* 40 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
60 long rfrcsum; /* 44 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
61 long rfsize; /* 48 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
62 long cretime; /* 52 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
63 long rfcsum; /* 56 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
64 long nrecvd; /* 60 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
65 long recvcsum; /* 64 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
66 char idstring[32]; /* 68 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
67 char flags; /* 100 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
68 char lnameoffset; /* 101 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
69 char lsizeoffset; /* 102 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
70 char dummy[69]; /* 103 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
71 char macfileinfo[16]; /* 172 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
72 short nencode; /* 188 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
73 short nlanguage; /* 190 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
74 char name[64]; /* 192 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
75 /* 256 */ |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
76 }; |
5bc8fdacd2cb
[gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1102
diff
changeset
|
77 |
198 | 78 static void do_send_file(GtkWidget *, struct file_transfer *); |
79 static void do_get_file (GtkWidget *, struct file_transfer *); | |
80 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
81 static int snpa = -1; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
82 |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
83 static void toggle(GtkWidget *w, int *m) |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
84 { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
85 *m = !(*m); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
86 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
87 |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
88 static void free_ft(struct file_transfer *ft) |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
89 { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
90 if (ft->window) { gtk_widget_destroy(ft->window); ft->window = NULL; } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
91 if (ft->filename) g_free(ft->filename); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
92 if (ft->user) g_free(ft->user); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
93 if (ft->message) g_free(ft->message); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
94 if (ft->ip) g_free(ft->ip); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
95 if (ft->cookie) g_free(ft->cookie); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
96 g_free(ft); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
97 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
98 |
198 | 99 static void warn_callback(GtkWidget *widget, struct file_transfer *ft) |
100 { | |
978
563c409e26a1
[gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
976
diff
changeset
|
101 show_warn_dialog(ft->gc, ft->user); |
198 | 102 } |
103 | |
104 static void info_callback(GtkWidget *widget, struct file_transfer *ft) | |
105 { | |
1032
643a4d81c18a
[gaim-migrate @ 1042]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
978
diff
changeset
|
106 serv_get_info(ft->gc, ft->user); |
198 | 107 } |
108 | |
109 static void cancel_callback(GtkWidget *widget, struct file_transfer *ft) | |
110 { | |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
111 char buf[MSG_LEN]; |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
112 |
198 | 113 if (ft->accepted) { |
114 return; | |
115 } | |
116 | |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
117 g_snprintf(buf, MSG_LEN, "toc_rvous_cancel %s %s %s", ft->user, ft->cookie, ft->UID); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
118 sflap_send(ft->gc, buf, -1, TYPE_DATA); |
260
325d9804df10
[gaim-migrate @ 270]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
253
diff
changeset
|
119 |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
120 free_ft(ft); |
198 | 121 } |
122 | |
123 static void accept_callback(GtkWidget *widget, struct file_transfer *ft) | |
124 { | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
125 char buf[BUF_LEN]; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
126 char fname[BUF_LEN]; |
198 | 127 char *c; |
128 | |
129 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
130 c = ft->filename + strlen(ft->filename); | |
131 | |
132 while (c != ft->filename) { | |
133 if (*c == '/' || *c == '\\') { | |
134 strcpy(fname, c+1); | |
135 break; | |
136 } | |
137 c--; | |
138 } | |
139 | |
140 if (c == ft->filename) | |
141 strcpy(fname, ft->filename); | |
142 } | |
143 | |
144 gtk_widget_destroy(ft->window); | |
145 ft->window = NULL; | |
146 | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
147 ft->window = gtk_file_selection_new(_("Gaim - Save As...")); |
198 | 148 |
149 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(ft->window)); | |
150 | |
151 if (!strcmp(ft->UID, FILE_SEND_UID)) | |
152 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), fname); | |
153 else | |
154 g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME")); | |
155 gtk_file_selection_set_filename(GTK_FILE_SELECTION(ft->window), buf); | |
156 | |
157 gtk_signal_connect(GTK_OBJECT(ft->window), "destroy", | |
158 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
159 | |
160 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
161 gtk_signal_connect(GTK_OBJECT( | |
162 GTK_FILE_SELECTION(ft->window)->ok_button), | |
163 "clicked", GTK_SIGNAL_FUNC(do_get_file), ft); | |
164 } else { | |
165 gtk_signal_connect(GTK_OBJECT( | |
166 GTK_FILE_SELECTION(ft->window)->ok_button), | |
167 "clicked", GTK_SIGNAL_FUNC(do_send_file), ft); | |
168 } | |
169 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), | |
170 "clicked", GTK_SIGNAL_FUNC(cancel_callback), ft); | |
171 | |
172 gtk_widget_show(ft->window); | |
173 } | |
174 | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
175 static int read_file_header(int fd, struct file_header *header) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
176 char buf[257]; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
177 int read_rv = read(fd, buf, 256); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
178 if (read_rv < 0) |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
179 return read_rv; |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
180 memcpy(&header->magic, buf + 0, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
181 memcpy(&header->hdrlen, buf + 4, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
182 memcpy(&header->hdrtype, buf + 6, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
183 memcpy(&header->bcookie, buf + 8, 8); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
184 memcpy(&header->encrypt, buf + 16, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
185 memcpy(&header->compress, buf + 18, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
186 memcpy(&header->totfiles, buf + 20, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
187 memcpy(&header->filesleft, buf + 22, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
188 memcpy(&header->totparts, buf + 24, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
189 memcpy(&header->partsleft, buf + 26, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
190 memcpy(&header->totsize, buf + 28, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
191 memcpy(&header->size, buf + 32, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
192 memcpy(&header->modtime, buf + 36, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
193 memcpy(&header->checksum, buf + 40, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
194 memcpy(&header->rfrcsum, buf + 44, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
195 memcpy(&header->rfsize, buf + 48, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
196 memcpy(&header->cretime, buf + 52, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
197 memcpy(&header->rfcsum, buf + 56, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
198 memcpy(&header->nrecvd, buf + 60, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
199 memcpy(&header->recvcsum, buf + 64, 4); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
200 memcpy(&header->idstring, buf + 68, 32); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
201 memcpy(&header->flags, buf + 100, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
202 memcpy(&header->lnameoffset, buf + 101, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
203 memcpy(&header->lsizeoffset, buf + 102, 1); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
204 memcpy(&header->dummy, buf + 103, 69); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
205 memcpy(&header->macfileinfo, buf + 172, 16); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
206 memcpy(&header->nencode, buf + 188, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
207 memcpy(&header->nlanguage, buf + 190, 2); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
208 memcpy(&header->name, buf + 192, 64); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
209 return read_rv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
210 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
211 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
212 static int write_file_header(int fd, struct file_header *header) { |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
213 char buf[257]; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
214 memcpy(buf + 0, &header->magic, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
215 memcpy(buf + 4, &header->hdrlen, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
216 memcpy(buf + 6, &header->hdrtype, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
217 memcpy(buf + 8, &header->bcookie, 8); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
218 memcpy(buf + 16, &header->encrypt, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
219 memcpy(buf + 18, &header->compress, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
220 memcpy(buf + 20, &header->totfiles, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
221 memcpy(buf + 22, &header->filesleft, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
222 memcpy(buf + 24, &header->totparts, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
223 memcpy(buf + 26, &header->partsleft, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
224 memcpy(buf + 28, &header->totsize, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
225 memcpy(buf + 32, &header->size, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
226 memcpy(buf + 36, &header->modtime, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
227 memcpy(buf + 40, &header->checksum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
228 memcpy(buf + 44, &header->rfrcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
229 memcpy(buf + 48, &header->rfsize, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
230 memcpy(buf + 52, &header->cretime, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
231 memcpy(buf + 56, &header->rfcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
232 memcpy(buf + 60, &header->nrecvd, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
233 memcpy(buf + 64, &header->recvcsum, 4); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
234 memcpy(buf + 68, &header->idstring, 32); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
235 memcpy(buf + 100, &header->flags, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
236 memcpy(buf + 101, &header->lnameoffset, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
237 memcpy(buf + 102, &header->lsizeoffset, 1); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
238 memcpy(buf + 103, &header->dummy, 69); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
239 memcpy(buf + 172, &header->macfileinfo, 16); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
240 memcpy(buf + 188, &header->nencode, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
241 memcpy(buf + 190, &header->nlanguage, 2); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
242 memcpy(buf + 192, &header->name, 64); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
243 return write(fd, buf, 256); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
244 } |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
245 |
198 | 246 static void do_get_file(GtkWidget *w, struct file_transfer *ft) |
247 { | |
248 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
|
249 char buf[BUF_LONG]; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
250 char *buf2; |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
251 char tmp_buf[MSG_LEN]; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
252 struct file_header header; |
198 | 253 int read_rv; |
254 guint32 rcv; | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
255 int cont = 1; |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
256 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
257 GtkWidget *button = NULL, *pct = NULL; |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
258 |
1035
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
259 if (file_is_dir(file, ft->window)) { |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
260 return; |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
261 } |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
262 |
198 | 263 if (!(ft->f = fopen(file,"w"))) { |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
264 g_snprintf(buf, BUF_LONG / 2, _("Error writing file %s"), file); |
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
265 do_error_dialog(buf, _("Error")); |
198 | 266 ft->accepted = 0; |
267 accept_callback(NULL, ft); | |
268 return; | |
269 } | |
270 | |
271 ft->accepted = 1; | |
272 | |
273 gtk_widget_destroy(ft->window); | |
274 ft->window = NULL; | |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
275 g_snprintf(tmp_buf, MSG_LEN, "toc_rvous_accept %s %s %s", ft->user, ft->cookie, ft->UID); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
276 sflap_send(ft->gc, tmp_buf, -1, TYPE_DATA); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
277 |
198 | 278 |
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1035
diff
changeset
|
279 |
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1035
diff
changeset
|
280 /* XXX is ft->port in host order or network order? */ |
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
281 ft->fd = proxy_connect(ft->ip, ft->port, NULL, 0, -1); |
198 | 282 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
283 if (ft->fd <= -1) { |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
284 fclose(ft->f); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
285 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
286 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
287 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
288 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
289 read_rv = read_file_header(ft->fd, &header); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
290 if(read_rv < 0) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
291 close(ft->fd); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
292 fclose(ft->f); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
293 free_ft(ft); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
294 return; |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
295 } |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
296 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
297 sprintf(debug_buff, "header length %d\n", header.hdrlen); |
198 | 298 debug_print(debug_buff); |
299 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
300 header.hdrtype = 0x202; |
198 | 301 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
302 buf2 = frombase64(ft->cookie); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
303 memcpy(header.bcookie, buf2, 8); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
304 snprintf(header.idstring, 32, "Gaim"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
305 g_free(buf2); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
306 header.encrypt = 0; header.compress = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
307 header.totparts = 1; header.partsleft = 1; |
198 | 308 |
309 sprintf(debug_buff, "sending confirmation\n"); | |
310 debug_print(debug_buff); | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
311 write_file_header(ft->fd, &header); |
198 | 312 |
313 rcv = 0; | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
314 |
198 | 315 fw = gtk_dialog_new(); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
316 snprintf(buf, 2048, _("Receiving %s from %s"), ft->filename, ft->user); |
198 | 317 label = gtk_label_new(buf); |
318 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5); | |
319 gtk_widget_show(label); | |
320 fbar = gtk_progress_bar_new(); | |
321 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5); | |
322 gtk_widget_show(fbar); | |
212
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
323 pct = gtk_label_new("0 %"); |
89c9334d3484
[gaim-migrate @ 222]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
211
diff
changeset
|
324 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
|
325 gtk_widget_show(pct); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
326 button = gtk_button_new_with_label(_("Cancel")); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
327 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
|
328 gtk_widget_show(button); |
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
329 if (display_options & OPT_DISP_COOL_LOOK) |
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
330 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
331 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
332 gtk_window_set_title(GTK_WINDOW(fw), _("Gaim - File Transfer")); |
198 | 333 gtk_widget_realize(fw); |
334 aol_icon(fw->window); | |
335 gtk_widget_show(fw); | |
336 | |
337 sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename, | |
338 ft->user, ft->size); | |
339 debug_print(debug_buff); | |
340 | |
218 | 341 fcntl(ft->fd, F_SETFL, O_NONBLOCK); |
342 | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
343 while (rcv != ft->size && cont) { |
198 | 344 int i; |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
345 float pcnt = ((float)rcv)/((float)ft->size); |
198 | 346 int remain = ft->size - rcv > 1024 ? 1024 : ft->size - rcv; |
218 | 347 read_rv = read(ft->fd, buf, remain); |
198 | 348 if(read_rv < 0) { |
218 | 349 if (errno == EWOULDBLOCK) { |
350 while(gtk_events_pending()) | |
351 gtk_main_iteration(); | |
352 continue; | |
353 } | |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
354 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
355 fw = NULL; |
198 | 356 fclose(ft->f); |
357 close(ft->fd); | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
358 free_ft(ft); |
198 | 359 return; |
360 } | |
361 rcv += read_rv; | |
362 for (i = 0; i < read_rv; i++) | |
363 fprintf(ft->f, "%c", buf[i]); | |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
364 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
365 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
|
366 gtk_label_set_text(GTK_LABEL(pct), buf); |
198 | 367 while(gtk_events_pending()) |
368 gtk_main_iteration(); | |
369 } | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
370 fclose(ft->f); |
201
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
371 gtk_widget_destroy(fw); |
d9a5f7b1d500
[gaim-migrate @ 211]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
200
diff
changeset
|
372 fw = NULL; |
198 | 373 |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
374 if (!cont) { |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
375 char *tmp = frombase64(ft->cookie); |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
376 g_snprintf(tmp_buf, MSG_LEN, "toc_rvous_cancel %s %s %s", ft->user, ft->cookie, ft->UID); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
377 sflap_send(ft->gc, tmp_buf, -1, TYPE_DATA); |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
378 close(ft->fd); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
379 free_ft(ft); |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
380 return; |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
381 } |
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
382 |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
383 sprintf(debug_buff, "Download complete.\n"); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
384 debug_print(debug_buff); |
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
385 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
386 header.hdrtype = 0x402; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
387 header.totparts = 0; header.partsleft = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
388 header.flags = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
389 header.recvcsum = header.checksum; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
390 header.nrecvd = header.totsize; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
391 write_file_header(ft->fd, &header); |
198 | 392 close(ft->fd); |
393 | |
200
bc117fbcf527
[gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
198
diff
changeset
|
394 free_ft(ft); |
198 | 395 } |
396 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
397 static void send_file_callback(gpointer data, gint source, |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
398 GdkInputCondition condition) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
399 struct file_transfer *ft = (struct file_transfer *)data; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
400 struct file_header fhdr; |
198 | 401 int read_rv; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
402 char buf[2048]; |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
403 GtkWidget *fw = NULL, *fbar = NULL, *label = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
404 GtkWidget *button = NULL, *pct = NULL; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
405 int rcv, cont; |
198 | 406 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
407 gdk_input_remove(snpa); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
408 snpa = -1; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
409 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
410 if (condition & GDK_INPUT_EXCEPTION) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
411 fclose(ft->f); |
198 | 412 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
413 free_ft(ft); |
198 | 414 return; |
415 } | |
416 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
417 /* 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
|
418 * 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
|
419 * 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
|
420 * and we're done. */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
421 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
422 /* 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
|
423 * all the information we need in the file_header */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
424 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
425 read_rv = read_file_header(ft->fd, &fhdr); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
426 if (read_rv < 0) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
427 fclose(ft->f); |
198 | 428 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
429 free_ft(ft); |
198 | 430 return; |
431 } | |
432 | |
264
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
433 if (fhdr.hdrtype != 0xc12) { |
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
434 sprintf(debug_buff, "%s decided to cancel. (%x)\n", ft->user, |
ced25773243c
[gaim-migrate @ 274]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
261
diff
changeset
|
435 fhdr.hdrtype); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
436 debug_print(debug_buff); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
437 fclose(ft->f); |
198 | 438 close(ft->fd); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
439 free_ft(ft); |
198 | 440 return; |
441 } | |
442 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
443 /* 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
|
444 * 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
|
445 * my sniffing from :-P */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
446 fhdr.hdrtype = ntohs(0x101); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
447 fhdr.totfiles = 1; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
448 fhdr.filesleft = 1; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
449 fhdr.flags = 0x20; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
450 write_file_header(ft->fd, &fhdr); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
451 read_file_header(ft->fd, &fhdr); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
452 |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
453 fw = gtk_dialog_new(); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
454 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
|
455 label = gtk_label_new(buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
456 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
|
457 gtk_widget_show(label); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
458 fbar = gtk_progress_bar_new(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
459 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
|
460 gtk_widget_show(fbar); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
461 pct = gtk_label_new("0 %"); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
462 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
|
463 gtk_widget_show(pct); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
464 button = gtk_button_new_with_label(_("Cancel")); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
465 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
|
466 gtk_widget_show(button); |
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
467 if (display_options & OPT_DISP_COOL_LOOK) |
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
468 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
469 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)toggle, &cont); |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
470 gtk_window_set_title(GTK_WINDOW(fw), _("Gaim - File Transfer")); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
471 gtk_widget_realize(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
472 aol_icon(fw->window); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
473 gtk_widget_show(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
474 |
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
475 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
|
476 ft->user, fhdr.totsize); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
477 debug_print(debug_buff); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
478 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
479 rcv = 0; cont = 1; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
480 while (rcv != ntohl(fhdr.totsize) && cont) { |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
481 int i; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
482 float pcnt = ((float)rcv)/((float)ntohl(fhdr.totsize)); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
483 int remain = ntohl(fhdr.totsize) - rcv > 1024 ? 1024 : |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
484 ntohl(fhdr.totsize) - rcv; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
485 for (i = 0; i < remain; i++) |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
486 fscanf(ft->f, "%c", &buf[i]); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
487 read_rv = write(ft->fd, buf, remain); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
488 if (read_rv < 0) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
489 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
490 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
491 fw = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
492 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
493 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
494 free_ft(ft); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
495 return; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
496 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
497 rcv += read_rv; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
498 gtk_progress_bar_update(GTK_PROGRESS_BAR(fbar), pcnt); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
499 sprintf(buf, "%d / %d K (%2.0f %%)", rcv/1024, |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
500 ntohl(fhdr.totsize)/1024, 100*pcnt); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
501 gtk_label_set_text(GTK_LABEL(pct), buf); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
502 while(gtk_events_pending()) |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
503 gtk_main_iteration(); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
504 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
505 fclose(ft->f); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
506 gtk_widget_destroy(fw); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
507 fw = NULL; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
508 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
509 if (!cont) { |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
510 char *tmp = frombase64(ft->cookie); |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
511 char tmp_buf[MSG_LEN]; |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
512 g_snprintf(tmp_buf, MSG_LEN, "toc_rvous_cancel %s %s %s", ft->user, ft->cookie, ft->UID); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
513 sflap_send(ft->gc, tmp_buf, -1, TYPE_DATA); |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
514 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
515 free_ft(ft); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
516 return; |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
517 } |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
518 |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
519 sprintf(debug_buff, "Upload complete.\n"); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
520 debug_print(debug_buff); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
521 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
522 read_file_header(ft->fd, &fhdr); |
217
fba779cc01f5
[gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
216
diff
changeset
|
523 |
221
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
524 close(ft->fd); |
b2f9f629525e
[gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
218
diff
changeset
|
525 free_ft(ft); |
198 | 526 } |
527 | |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
528 static void do_send_file(GtkWidget *w, struct file_transfer *ft) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
529 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
|
530 char buf[BUF_LONG]; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
531 char *buf2; |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
532 char tmp_buf[MSG_LEN]; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
533 int read_rv; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
534 struct file_header fhdr; |
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
535 guint32 rcv = 0; |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
536 char *c; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
537 struct stat st; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
538 struct tm *fortime; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
539 |
1035
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
540 if (file_is_dir (file, ft->window)) { |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
541 g_free(file); |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
542 return; |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
543 } |
80a47e3b1bca
[gaim-migrate @ 1045]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1032
diff
changeset
|
544 |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
545 stat(file, &st); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
546 if (!(ft->f = fopen(file, "r"))) { |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
547 g_snprintf(buf, BUF_LONG / 2, _("Error reading file %s"), file); |
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
548 do_error_dialog(buf, _("Error")); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
549 ft->accepted = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
550 accept_callback(NULL, ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
551 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
552 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
553 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
554 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
555 ft->accepted = 1; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
556 ft->filename = file; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
557 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
558 gtk_widget_destroy(ft->window); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
559 ft->window = NULL; |
1102
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
560 g_snprintf(tmp_buf, MSG_LEN, "toc_rvous_accept %s %s %s", ft->user, ft->cookie, ft->UID); |
d7944415b1cc
[gaim-migrate @ 1112]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1092
diff
changeset
|
561 sflap_send(ft->gc, tmp_buf, -1, TYPE_DATA); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
562 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
563 |
1087
56c7ceb986a8
[gaim-migrate @ 1097]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1035
diff
changeset
|
564 /* XXX is ft->port in host order or network order? */ |
1092
a930439f29b1
[gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
1087
diff
changeset
|
565 ft->fd = proxy_connect(ft->ip, ft->port, NULL, 0, -1); |
261
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
566 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
567 if (ft->fd <= -1) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
568 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
569 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
570 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
571 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
572 /* here's where we differ from do_get_file */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
573 /* 1. build/send header |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
574 * 2. receive header |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
575 * 3. send listing file |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
576 * 4. receive header |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
577 * |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
578 * 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
|
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 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
582 /* 1. build/send header */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
583 c = file + strlen(file); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
584 while (*(c - 1) != '/') c--; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
585 buf2 = frombase64(ft->cookie); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
586 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
|
587 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
588 fhdr.magic[0] = 'O'; fhdr.magic[1] = 'F'; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
589 fhdr.magic[2] = 'T'; fhdr.magic[3] = '2'; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
590 fhdr.hdrlen = htons(256); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
591 fhdr.hdrtype = htons(0x1108); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
592 snprintf(fhdr.bcookie, 8, "%s", buf2); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
593 g_free(buf2); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
594 fhdr.encrypt = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
595 fhdr.compress = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
596 fhdr.totfiles = htons(1); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
597 fhdr.filesleft = htons(1); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
598 fhdr.totparts = htons(1); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
599 fhdr.partsleft = htons(1); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
600 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
|
601 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
602 fhdr.size = htonl(28 + strlen(c)); /* size of listing.txt */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
603 fhdr.modtime = htonl(time(NULL)); /* time since UNIX epoch */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
604 fhdr.checksum = htonl(0x89f70000); /* ? i don't think this matters */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
605 fhdr.rfrcsum = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
606 fhdr.rfsize = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
607 fhdr.cretime = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
608 fhdr.rfcsum = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
609 fhdr.nrecvd = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
610 fhdr.recvcsum = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
611 snprintf(fhdr.idstring, 32, "OFT_Windows ICBMFT V1.1 32"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
612 fhdr.flags = 0x02; /* don't ask me why */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
613 fhdr.lnameoffset = 0x1A; /* ? still no clue */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
614 fhdr.lsizeoffset = 0x10; /* whatever */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
615 memset(fhdr.dummy, 0, 69); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
616 memset(fhdr.macfileinfo, 0, 16); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
617 fhdr.nencode = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
618 fhdr.nlanguage = 0; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
619 snprintf(fhdr.name, 64, "listing.txt"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
620 read_rv = write_file_header(ft->fd, &fhdr); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
621 if (read_rv <= -1) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
622 sprintf(debug_buff, "Couldn't write opening header\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
623 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
624 close(ft->fd); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
625 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
626 return; |
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 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
629 /* 2. receive header */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
630 sprintf(debug_buff, "Receiving header\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
631 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
632 read_rv = read_file_header(ft->fd, &fhdr); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
633 if (read_rv <= -1) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
634 sprintf(debug_buff, "Couldn't read header\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
635 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
636 close(ft->fd); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
637 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
638 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
639 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
640 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
641 /* 3. send listing file */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
642 /* mm/dd/yyyy hh:mm sizesize name.ext\r\n */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
643 /* creation date ^ */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
644 sprintf(debug_buff, "Sending file\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
645 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
646 fortime = localtime(&st.st_ctime); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
647 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
|
648 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
649 fortime->tm_hour + 1, fortime->tm_min + 1, |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
650 st.st_size, c); |
411
a330017b3aa4
[gaim-migrate @ 421]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
350
diff
changeset
|
651 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
|
652 ntohl(fhdr.size) + 1, ft->user); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
653 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
654 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
655 read_rv = write(ft->fd, buf, ntohl(fhdr.size)); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
656 if (read_rv <= -1) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
657 sprintf(debug_buff, "Could not send file, wrote %d\n", rcv); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
658 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
659 close(ft->fd); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
660 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
661 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
662 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
663 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
664 /* 4. receive header */ |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
665 sprintf(debug_buff, "Receiving closing header\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
666 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
667 read_rv = read_file_header(ft->fd, &fhdr); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
668 if (read_rv <= -1) { |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
669 sprintf(debug_buff, "Couldn't read closing header\n"); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
670 debug_print(debug_buff); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
671 close(ft->fd); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
672 free_ft(ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
673 return; |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
674 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
675 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
676 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
|
677 send_file_callback, ft); |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
678 |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
679 } |
aebbe6ca6919
[gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
260
diff
changeset
|
680 |
198 | 681 void accept_file_dialog(struct file_transfer *ft) |
682 { | |
683 GtkWidget *accept, *info, *warn, *cancel; | |
684 GtkWidget *label; | |
685 GtkWidget *vbox, *bbox; | |
686 char buf[1024]; | |
687 | |
688 | |
689 ft->window = gtk_window_new(GTK_WINDOW_DIALOG); | |
905 | 690 gtk_window_set_wmclass(GTK_WINDOW(ft->window), "accept_file", "Gaim"); |
198 | 691 |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
692 accept = gtk_button_new_with_label(_("Accept")); |
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
693 info = gtk_button_new_with_label(_("Info")); |
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
694 warn = gtk_button_new_with_label(_("Warn")); |
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
695 cancel = gtk_button_new_with_label(_("Cancel")); |
198 | 696 |
697 bbox = gtk_hbox_new(TRUE, 10); | |
698 vbox = gtk_vbox_new(FALSE, 5); | |
699 | |
700 gtk_widget_show(accept); | |
701 gtk_widget_show(info); | |
702 gtk_widget_show(warn); | |
703 gtk_widget_show(cancel); | |
704 | |
617 | 705 if (display_options & OPT_DISP_COOL_LOOK) |
706 { | |
707 gtk_button_set_relief(GTK_BUTTON(accept), GTK_RELIEF_NONE); | |
708 gtk_button_set_relief(GTK_BUTTON(info), GTK_RELIEF_NONE); | |
709 gtk_button_set_relief(GTK_BUTTON(warn), GTK_RELIEF_NONE); | |
710 gtk_button_set_relief(GTK_BUTTON(cancel), GTK_RELIEF_NONE); | |
711 } | |
535
f03f041c1aa9
[gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
411
diff
changeset
|
712 |
198 | 713 gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10); |
714 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10); | |
715 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10); | |
716 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10); | |
717 | |
718 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
719 g_snprintf(buf, sizeof(buf), _("%s requests you to accept the file: %s (%d bytes)"), |
198 | 720 ft->user, ft->filename, ft->size); |
721 } else { | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
722 g_snprintf(buf, sizeof(buf), _("%s requests you to send them a file"), |
198 | 723 ft->user); |
724 } | |
211
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
725 if (ft->message) |
2042a38da38b
[gaim-migrate @ 221]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
210
diff
changeset
|
726 strncat(buf, ft->message, sizeof(buf) - strlen(buf)); |
198 | 727 label = gtk_label_new(buf); |
728 gtk_widget_show(label); | |
729 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); | |
730 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); | |
731 | |
350
fd3cc0a28d5d
[gaim-migrate @ 360]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
349
diff
changeset
|
732 gtk_window_set_title(GTK_WINDOW(ft->window), _("Gaim - File Transfer?")); |
198 | 733 gtk_window_set_focus(GTK_WINDOW(ft->window), accept); |
734 gtk_container_add(GTK_CONTAINER(ft->window), vbox); | |
735 gtk_container_border_width(GTK_CONTAINER(ft->window), 10); | |
736 gtk_widget_show(vbox); | |
737 gtk_widget_show(bbox); | |
738 gtk_widget_realize(ft->window); | |
739 aol_icon(ft->window->window); | |
740 | |
741 gtk_widget_show(ft->window); | |
742 | |
743 | |
744 gtk_signal_connect(GTK_OBJECT(accept), "clicked", | |
745 GTK_SIGNAL_FUNC(accept_callback), ft); | |
746 gtk_signal_connect(GTK_OBJECT(cancel), "clicked", | |
747 GTK_SIGNAL_FUNC(cancel_callback), ft); | |
748 gtk_signal_connect(GTK_OBJECT(warn), "clicked", | |
749 GTK_SIGNAL_FUNC(warn_callback), ft); | |
750 gtk_signal_connect(GTK_OBJECT(info), "clicked", | |
751 GTK_SIGNAL_FUNC(info_callback), ft); | |
752 | |
753 | |
754 if (ft->message) { | |
755 /* we'll do this later | |
756 while(gtk_events_pending()) | |
757 gtk_main_iteration(); | |
758 html_print(text, ft->message); | |
759 */ | |
760 } | |
761 } |