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