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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * gaim
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 *
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * (at your option) any later version.
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 *
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * GNU General Public License for more details.
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 *
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 *
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 */
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 #include <string.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26 #include <stdio.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27 #include <stdlib.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
28 #include <time.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
29 #include <sys/types.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
30 #include <sys/stat.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 #include <fcntl.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #include <sys/socket.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33 #include <netdb.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 #include <netinet/in.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #include <unistd.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #include <netinet/in.h>
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37 #include <arpa/inet.h>
218
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
38 #include <errno.h>
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 #include <gtk/gtk.h>
1092
a930439f29b1 [gaim-migrate @ 1102]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1087
diff changeset
40 #include "proxy.h"
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 #include "gaim.h"
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
78 static void do_send_file(GtkWidget *, struct file_transfer *);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 static void do_get_file (GtkWidget *, struct file_transfer *);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
99 static void warn_callback(GtkWidget *widget, struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
100 {
978
563c409e26a1 [gaim-migrate @ 988]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 976
diff changeset
101 show_warn_dialog(ft->gc, ft->user);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
102 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
103
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
104 static void info_callback(GtkWidget *widget, struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
105 {
1032
643a4d81c18a [gaim-migrate @ 1042]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 978
diff changeset
106 serv_get_info(ft->gc, ft->user);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
108
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
109 static void cancel_callback(GtkWidget *widget, struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
113 if (ft->accepted) {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
114 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
115 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
121 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
122
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
123 static void accept_callback(GtkWidget *widget, struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
127 char *c;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
128
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
129 if (!strcmp(ft->UID, FILE_SEND_UID)) {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
130 c = ft->filename + strlen(ft->filename);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
131
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
132 while (c != ft->filename) {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
133 if (*c == '/' || *c == '\\') {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
134 strcpy(fname, c+1);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
135 break;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
136 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
137 c--;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
138 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
139
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
140 if (c == ft->filename)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
141 strcpy(fname, ft->filename);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
142 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
143
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
144 gtk_widget_destroy(ft->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
145 ft->window = NULL;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
148
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
149 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(ft->window));
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
150
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
151 if (!strcmp(ft->UID, FILE_SEND_UID))
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
152 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), fname);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
153 else
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
154 g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME"));
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
155 gtk_file_selection_set_filename(GTK_FILE_SELECTION(ft->window), buf);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
156
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
157 gtk_signal_connect(GTK_OBJECT(ft->window), "destroy",
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
158 GTK_SIGNAL_FUNC(cancel_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
159
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
160 if (!strcmp(ft->UID, FILE_SEND_UID)) {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
161 gtk_signal_connect(GTK_OBJECT(
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
162 GTK_FILE_SELECTION(ft->window)->ok_button),
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
163 "clicked", GTK_SIGNAL_FUNC(do_get_file), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
164 } else {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
165 gtk_signal_connect(GTK_OBJECT(
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
166 GTK_FILE_SELECTION(ft->window)->ok_button),
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
167 "clicked", GTK_SIGNAL_FUNC(do_send_file), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
168 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
169 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button),
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
170 "clicked", GTK_SIGNAL_FUNC(cancel_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
171
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
172 gtk_widget_show(ft->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
173 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
246 static void do_get_file(GtkWidget *w, struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
247 {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
253 int read_rv;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
266 ft->accepted = 0;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
267 accept_callback(NULL, ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
268 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
269 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
270
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
271 ft->accepted = 1;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
272
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
273 gtk_widget_destroy(ft->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
298 debug_print(debug_buff);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
299
261
aebbe6ca6919 [gaim-migrate @ 271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 260
diff changeset
300 header.hdrtype = 0x202;
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
308
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
309 sprintf(debug_buff, "sending confirmation\n");
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
312
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
313 rcv = 0;
217
fba779cc01f5 [gaim-migrate @ 227]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 216
diff changeset
314
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
317 label = gtk_label_new(buf);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
318 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->vbox), label, 0, 0, 5);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
319 gtk_widget_show(label);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
320 fbar = gtk_progress_bar_new();
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
321 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(fw)->action_area), fbar, 0, 0, 5);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
333 gtk_widget_realize(fw);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
334 aol_icon(fw->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
335 gtk_widget_show(fw);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
336
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
337 sprintf(debug_buff, "Receiving %s from %s (%d bytes)\n", ft->filename,
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
338 ft->user, ft->size);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
339 debug_print(debug_buff);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
340
218
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
341 fcntl(ft->fd, F_SETFL, O_NONBLOCK);
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
342
200
bc117fbcf527 [gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 198
diff changeset
343 while (rcv != ft->size && cont) {
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
346 int remain = ft->size - rcv > 1024 ? 1024 : ft->size - rcv;
218
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
347 read_rv = read(ft->fd, buf, remain);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
348 if(read_rv < 0) {
218
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
349 if (errno == EWOULDBLOCK) {
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
350 while(gtk_events_pending())
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
351 gtk_main_iteration();
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
352 continue;
1a5ee1f8b39e [gaim-migrate @ 228]
Rob Flynn <gaim@robflynn.com>
parents: 217
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
356 fclose(ft->f);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
357 close(ft->fd);
200
bc117fbcf527 [gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 198
diff changeset
358 free_ft(ft);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
359 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
360 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
361 rcv += read_rv;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
362 for (i = 0; i < read_rv; i++)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
367 while(gtk_events_pending())
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
368 gtk_main_iteration();
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
392 close(ft->fd);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
393
200
bc117fbcf527 [gaim-migrate @ 210]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 198
diff changeset
394 free_ft(ft);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
395 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
412 close(ft->fd);
221
b2f9f629525e [gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 218
diff changeset
413 free_ft(ft);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
414 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
415 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428 close(ft->fd);
221
b2f9f629525e [gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 218
diff changeset
429 free_ft(ft);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
430 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
431 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
438 close(ft->fd);
221
b2f9f629525e [gaim-migrate @ 231]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 218
diff changeset
439 free_ft(ft);
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
440 return;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
441 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
526 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
681 void accept_file_dialog(struct file_transfer *ft)
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
682 {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
683 GtkWidget *accept, *info, *warn, *cancel;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
684 GtkWidget *label;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
685 GtkWidget *vbox, *bbox;
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
686 char buf[1024];
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
687
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
688
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
689 ft->window = gtk_window_new(GTK_WINDOW_DIALOG);
905
2876c40108cd [gaim-migrate @ 915]
Rob Flynn <gaim@robflynn.com>
parents: 617
diff changeset
690 gtk_window_set_wmclass(GTK_WINDOW(ft->window), "accept_file", "Gaim");
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
696
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
697 bbox = gtk_hbox_new(TRUE, 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
698 vbox = gtk_vbox_new(FALSE, 5);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
699
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
700 gtk_widget_show(accept);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
701 gtk_widget_show(info);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
702 gtk_widget_show(warn);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
703 gtk_widget_show(cancel);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
704
617
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
705 if (display_options & OPT_DISP_COOL_LOOK)
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
706 {
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
707 gtk_button_set_relief(GTK_BUTTON(accept), GTK_RELIEF_NONE);
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
708 gtk_button_set_relief(GTK_BUTTON(info), GTK_RELIEF_NONE);
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
709 gtk_button_set_relief(GTK_BUTTON(warn), GTK_RELIEF_NONE);
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
710 gtk_button_set_relief(GTK_BUTTON(cancel), GTK_RELIEF_NONE);
50f7a0bc76fc [gaim-migrate @ 627]
Todd Kulesza <fflewddur>
parents: 535
diff changeset
711 }
535
f03f041c1aa9 [gaim-migrate @ 545]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 411
diff changeset
712
198
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
713 gtk_box_pack_start(GTK_BOX(bbox), accept, TRUE, TRUE, 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
714 gtk_box_pack_start(GTK_BOX(bbox), info, TRUE, TRUE, 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
715 gtk_box_pack_start(GTK_BOX(bbox), warn, TRUE, TRUE, 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
716 gtk_box_pack_start(GTK_BOX(bbox), cancel, TRUE, TRUE, 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
717
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
720 ft->user, ft->filename, ft->size);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
723 ft->user);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
727 label = gtk_label_new(buf);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
728 gtk_widget_show(label);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
729 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
730 gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
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
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
733 gtk_window_set_focus(GTK_WINDOW(ft->window), accept);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
734 gtk_container_add(GTK_CONTAINER(ft->window), vbox);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
735 gtk_container_border_width(GTK_CONTAINER(ft->window), 10);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
736 gtk_widget_show(vbox);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
737 gtk_widget_show(bbox);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
738 gtk_widget_realize(ft->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
739 aol_icon(ft->window->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
740
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
741 gtk_widget_show(ft->window);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
742
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
743
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
744 gtk_signal_connect(GTK_OBJECT(accept), "clicked",
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
745 GTK_SIGNAL_FUNC(accept_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
746 gtk_signal_connect(GTK_OBJECT(cancel), "clicked",
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
747 GTK_SIGNAL_FUNC(cancel_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
748 gtk_signal_connect(GTK_OBJECT(warn), "clicked",
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
749 GTK_SIGNAL_FUNC(warn_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
750 gtk_signal_connect(GTK_OBJECT(info), "clicked",
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
751 GTK_SIGNAL_FUNC(info_callback), ft);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
752
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
753
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
754 if (ft->message) {
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
755 /* we'll do this later
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
756 while(gtk_events_pending())
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
757 gtk_main_iteration();
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
758 html_print(text, ft->message);
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
759 */
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
760 }
73e9a0bfff62 [gaim-migrate @ 208]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
761 }