Mercurial > pidgin.yaz
annotate src/protocols/toc/toc.c @ 5638:0bdfa28c678e
[gaim-migrate @ 6047]
We're slowly killing off multi.h. The proto_user_split and proto_user_opt
have been replaced with GaimAccountOption and GaimAccountUserSplit
structures, which of course have an API. The account dialog is being
rewritten as well, and will soon allow you to add and modify accounts again.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sun, 01 Jun 2003 17:40:20 +0000 |
parents | 4fa8ca4f4259 |
children | 0a0116686d51 |
rev | line source |
---|---|
2086 | 1 /* |
2 * gaim | |
3 * | |
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * | |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 * | |
20 */ | |
21 | |
22 | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
25 #include <config.h> |
2086 | 26 #endif |
3630 | 27 |
28 #ifndef _WIN32 | |
2086 | 29 #include <netdb.h> |
30 #include <unistd.h> | |
31 #include <netinet/in.h> | |
32 #include <arpa/inet.h> | |
3630 | 33 #include <sys/socket.h> |
34 #else | |
35 #include <winsock.h> | |
36 #endif | |
37 | |
38 #include <gtk/gtk.h> | |
39 #include <errno.h> | |
2086 | 40 #include <string.h> |
41 #include <stdlib.h> | |
42 #include <stdio.h> | |
43 #include <time.h> | |
44 #include <sys/types.h> | |
45 #include <sys/stat.h> | |
46 #include "prpl.h" | |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
47 #include "accountopt.h" |
2086 | 48 #include "multi.h" |
49 #include "gaim.h" | |
50 #include "proxy.h" | |
51 | |
3630 | 52 #ifdef _WIN32 |
53 #include "win32dep.h" | |
54 #endif | |
55 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
56 static GaimPlugin *my_protocol = NULL; |
4249 | 57 |
2086 | 58 #define REVISION "penguin" |
59 | |
60 #define TYPE_SIGNON 1 | |
61 #define TYPE_DATA 2 | |
62 #define TYPE_ERROR 3 | |
63 #define TYPE_SIGNOFF 4 | |
64 #define TYPE_KEEPALIVE 5 | |
65 | |
66 #define FLAPON "FLAPON\r\n\r\n" | |
67 #define ROAST "Tic/Toc" | |
68 | |
69 #define TOC_HOST "toc.oscar.aol.com" | |
70 #define TOC_PORT 9898 | |
71 #define AUTH_HOST "login.oscar.aol.com" | |
72 #define AUTH_PORT 5190 | |
73 #define LANGUAGE "english" | |
74 | |
75 #define STATE_OFFLINE 0 | |
76 #define STATE_FLAPON 1 | |
77 #define STATE_SIGNON_REQUEST 2 | |
78 #define STATE_ONLINE 3 | |
79 #define STATE_PAUSE 4 | |
80 | |
81 #define VOICE_UID "09461341-4C7F-11D1-8222-444553540000" | |
82 #define FILE_SEND_UID "09461343-4C7F-11D1-8222-444553540000" | |
83 #define IMAGE_UID "09461345-4C7F-11D1-8222-444553540000" | |
84 #define B_ICON_UID "09461346-4C7F-11D1-8222-444553540000" | |
85 #define STOCKS_UID "09461347-4C7F-11D1-8222-444553540000" | |
86 #define FILE_GET_UID "09461348-4C7F-11D1-8222-444553540000" | |
87 #define GAMES_UID "0946134a-4C7F-11D1-8222-444553540000" | |
88 | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
89 #define UC_AOL 0x02 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
90 #define UC_ADMIN 0x04 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
91 #define UC_UNCONFIRMED 0x08 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
92 #define UC_NORMAL 0x10 |
3083 | 93 #define UC_WIRELESS 0x20 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
94 |
2086 | 95 struct ft_request { |
5605 | 96 GaimConnection *gc; |
2086 | 97 char *user; |
98 char UID[2048]; | |
99 char *cookie; | |
100 char *ip; | |
101 int port; | |
102 char *message; | |
103 char *filename; | |
104 int files; | |
105 int size; | |
106 }; | |
107 | |
108 struct buddy_icon { | |
109 guint32 hash; | |
110 guint32 len; | |
111 time_t time; | |
112 void *data; | |
113 }; | |
114 | |
115 struct toc_data { | |
116 int toc_fd; | |
4597 | 117 char toc_ip[20]; |
2086 | 118 int seqno; |
119 int state; | |
120 }; | |
121 | |
122 struct sflap_hdr { | |
123 unsigned char ast; | |
124 unsigned char type; | |
125 unsigned short seqno; | |
126 unsigned short len; | |
127 }; | |
128 | |
129 struct signon { | |
130 unsigned int ver; | |
131 unsigned short tag; | |
132 unsigned short namelen; | |
133 char username[80]; | |
134 }; | |
135 | |
136 /* constants to identify proto_opts */ | |
137 #define USEROPT_AUTH 0 | |
138 #define USEROPT_AUTHPORT 1 | |
139 | |
5605 | 140 #define TOC_CONNECT_STEPS 3 |
141 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
142 static void toc_login_callback(gpointer, gint, GaimInputCondition); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
143 static void toc_callback(gpointer, gint, GaimInputCondition); |
2086 | 144 static void accept_file_dialog(struct ft_request *); |
145 | |
3630 | 146 /* The following were added for win32 port - Herman */ |
147 | |
148 int toc_write(int fd, const void *buffer, int len) | |
149 { | |
150 #ifndef _WIN32 | |
151 return write(fd, buffer, len); | |
152 #else | |
153 return send(fd, buffer, len, 0); | |
154 #endif | |
155 } | |
156 | |
157 int toc_read(int fd, void *buffer, int size) | |
158 { | |
159 #ifndef _WIN32 | |
160 return read(fd, buffer, size); | |
161 #else | |
162 return recv(fd, buffer, size, 0); | |
163 #endif | |
164 } | |
165 | |
166 int toc_soc_close( int fd ) | |
167 { | |
168 #ifndef _WIN32 | |
169 return close(fd); | |
170 #else | |
171 return closesocket(fd); | |
172 #endif | |
173 } | |
174 | |
175 | |
2086 | 176 /* ok. this function used to take username/password, and return 0 on success. |
177 * now, it takes username/password, and returns NULL on error or a new gaim_connection | |
178 * on success. */ | |
5605 | 179 static void toc_login(GaimAccount *account) |
2086 | 180 { |
5605 | 181 GaimConnection *gc; |
2086 | 182 struct toc_data *tdt; |
183 char buf[80]; | |
184 | |
5605 | 185 gc = gaim_account_get_connection(account); |
2086 | 186 gc->proto_data = tdt = g_new0(struct toc_data, 1); |
2918
4df759d607f3
[gaim-migrate @ 2931]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2916
diff
changeset
|
187 gc->flags |= OPT_CONN_HTML; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
188 gc->flags |= OPT_CONN_AUTO_RESP; |
2086 | 189 |
4834 | 190 g_snprintf(buf, sizeof buf, _("Looking up %s"), |
5605 | 191 gaim_account_get_string(account, "server", TOC_HOST)); |
192 gaim_connection_update_progress(gc, buf, 1, TOC_CONNECT_STEPS); | |
2086 | 193 |
194 debug_printf("* Client connects to TOC\n"); | |
5605 | 195 if (proxy_connect(account, |
196 gaim_account_get_string(account, "server", TOC_HOST), | |
197 gaim_account_get_int(account, "port", TOC_PORT), | |
4491 | 198 toc_login_callback, gc) != 0 || !account->gc) { |
5605 | 199 g_snprintf(buf, sizeof(buf), "Connect to %s failed", |
200 gaim_account_get_string(account, "server", TOC_HOST)); | |
201 gaim_connection_error(gc, buf); | |
2086 | 202 return; |
203 } | |
204 } | |
205 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
206 static void toc_login_callback(gpointer data, gint source, GaimInputCondition cond) |
2086 | 207 { |
5605 | 208 GaimConnection *gc = data; |
2086 | 209 struct toc_data *tdt; |
210 char buf[80]; | |
4597 | 211 struct sockaddr_in name; |
212 socklen_t namelen; | |
2086 | 213 |
5605 | 214 if (!g_list_find(gaim_connections_get_all(), data)) { |
3630 | 215 toc_soc_close(source); |
2086 | 216 return; |
217 } | |
218 | |
219 tdt = gc->proto_data; | |
220 | |
221 if (source == -1) { | |
222 /* we didn't successfully connect. tdt->toc_fd is valid here */ | |
5605 | 223 gaim_connection_error(gc, "Unable to connect."); |
2086 | 224 return; |
225 } | |
4452 | 226 tdt->toc_fd = source; |
2086 | 227 |
4597 | 228 /* |
229 * Copy the IP that we're connected to. We need this because "GOTO_URL"'s | |
230 * should open on the exact server we're connected to. toc.oscar.aol.com | |
231 * doesn't work because that hostname resolves to multiple IP addresses. | |
232 */ | |
233 if (getpeername(tdt->toc_fd, (struct sockaddr *)&name, &namelen) == 0) | |
234 strncpy(tdt->toc_ip, inet_ntoa(name.sin_addr), sizeof(tdt->toc_ip)); | |
235 else | |
5605 | 236 strncpy(tdt->toc_ip, gaim_account_get_string(gc->account, "server", TOC_HOST), sizeof(tdt->toc_ip)); |
4597 | 237 |
2086 | 238 debug_printf("* Client sends \"FLAPON\\r\\n\\r\\n\"\n"); |
3630 | 239 if (toc_write(tdt->toc_fd, FLAPON, strlen(FLAPON)) < 0) { |
5605 | 240 gaim_connection_error(gc, "Disconnected."); |
2086 | 241 return; |
242 } | |
243 tdt->state = STATE_FLAPON; | |
244 | |
245 /* i know a lot of people like to look at gaim to see how TOC works. so i'll comment | |
246 * on what this does. it's really simple. when there's data ready to be read from the | |
247 * toc_fd file descriptor, toc_callback is called, with gc passed as its data arg. */ | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
248 gc->inpa = gaim_input_add(tdt->toc_fd, GAIM_INPUT_READ, toc_callback, gc); |
2086 | 249 |
5605 | 250 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gaim_account_get_username(gc->account)); |
251 gaim_connection_update_progress(gc, buf, 2, TOC_CONNECT_STEPS); | |
2086 | 252 } |
253 | |
5605 | 254 static void toc_close(GaimConnection *gc) |
2086 | 255 { |
256 if (gc->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
257 gaim_input_remove(gc->inpa); |
2086 | 258 gc->inpa = 0; |
3630 | 259 toc_soc_close(((struct toc_data *)gc->proto_data)->toc_fd); |
2086 | 260 g_free(gc->proto_data); |
261 } | |
262 | |
5605 | 263 static void toc_build_config(GaimAccount *account, char *s, int len, gboolean show) |
4687 | 264 { |
4785 | 265 GaimBlistNode *gnode,*bnode; |
4687 | 266 struct group *g; |
267 struct buddy *b; | |
268 GSList *plist = account->permit; | |
269 GSList *dlist = account->deny; | |
270 | |
271 int pos = 0; | |
272 | |
5605 | 273 if (!account->perm_deny) |
274 account->perm_deny = 1; | |
4687 | 275 |
5605 | 276 pos += g_snprintf(&s[pos], len - pos, "m %d\n", account->perm_deny); |
4785 | 277 for(gnode = gaim_get_blist()->root; gnode && len > pos; gnode = gnode->next) { |
278 g = (struct group *)gnode; | |
279 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
280 continue; | |
4687 | 281 if(gaim_group_on_account(g, account)) { |
282 pos += g_snprintf(&s[pos], len - pos, "g %s\n", g->name); | |
4785 | 283 for(bnode = gnode->child; bnode && len > pos; bnode = bnode->next) { |
284 b = (struct buddy *)bnode; | |
285 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
286 continue; | |
4687 | 287 if(b->account == account) { |
288 pos += g_snprintf(&s[pos], len - pos, "b %s%s%s\n", b->name, | |
4705 | 289 (show && b->alias) ? ":" : "", |
290 (show && b->alias) ? b->alias : ""); | |
4687 | 291 } |
292 } | |
293 } | |
294 } | |
295 | |
296 while (len > pos && plist) { | |
297 pos += g_snprintf(&s[pos], len - pos, "p %s\n", (char *)plist->data); | |
298 plist = plist->next; | |
299 } | |
300 | |
301 while (len > pos && dlist) { | |
302 pos += g_snprintf(&s[pos], len - pos, "d %s\n", (char *)dlist->data); | |
303 dlist = dlist->next; | |
304 } | |
305 } | |
306 | |
2371
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
307 static int escape_message(char *msg) |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
308 { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
309 char *c, *cpy; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
310 int cnt = 0; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
311 /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
312 if (strlen(msg) > BUF_LEN) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
313 debug_printf("Warning: truncating message to 2048 bytes\n"); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
314 msg[2047] = '\0'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
315 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
316 |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
317 cpy = g_strdup(msg); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
318 c = cpy; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
319 while (*c) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
320 switch (*c) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
321 case '$': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
322 case '[': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
323 case ']': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
324 case '(': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
325 case ')': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
326 msg[cnt++] = '\\'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
327 /* Fall through */ |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
328 default: |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
329 msg[cnt++] = *c; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
330 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
331 c++; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
332 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
333 msg[cnt] = '\0'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
334 g_free(cpy); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
335 return cnt; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
336 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
337 |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
338 static int escape_text(char *msg) |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
339 { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
340 char *c, *cpy; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
341 int cnt = 0; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
342 /* Assumes you have a buffer able to cary at least BUF_LEN * 4 bytes */ |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
343 if (strlen(msg) > BUF_LEN) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
344 fprintf(stderr, "Warning: truncating message to 2048 bytes\n"); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
345 msg[2047] = '\0'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
346 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
347 |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
348 cpy = g_strdup(msg); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
349 c = cpy; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
350 while (*c) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
351 switch (*c) { |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
352 case '\n': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
353 msg[cnt++] = '<'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
354 msg[cnt++] = 'B'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
355 msg[cnt++] = 'R'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
356 msg[cnt++] = '>'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
357 break; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
358 case '{': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
359 case '}': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
360 case '\\': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
361 case '"': |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
362 msg[cnt++] = '\\'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
363 /* Fall through */ |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
364 default: |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
365 msg[cnt++] = *c; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
366 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
367 c++; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
368 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
369 msg[cnt] = '\0'; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
370 g_free(cpy); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
371 return cnt; |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
372 } |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
373 |
5605 | 374 static int sflap_send(GaimConnection *gc, char *buf, int olen, int type) |
2086 | 375 { |
376 int len; | |
377 int slen = 0; | |
378 struct sflap_hdr hdr; | |
379 char obuf[MSG_LEN]; | |
380 struct toc_data *tdt = (struct toc_data *)gc->proto_data; | |
381 | |
382 if (tdt->state == STATE_PAUSE) | |
383 /* TOC has given us the PAUSE message; sending could cause a disconnect | |
384 * so we just return here like everything went through fine */ | |
385 return 0; | |
386 | |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
387 if (olen < 0) |
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
388 len = escape_message(buf); |
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
389 else |
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
390 len = olen; |
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
391 |
2086 | 392 /* One _last_ 2048 check here! This shouldn't ever |
393 * get hit though, hopefully. If it gets hit on an IM | |
394 * It'll lose the last " and the message won't go through, | |
395 * but this'll stop a segfault. */ | |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
396 if (len > MSG_LEN) { |
2086 | 397 debug_printf("message too long, truncating\n"); |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
398 buf[MSG_LEN - 1] = '\0'; |
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
399 len = MSG_LEN; |
2086 | 400 } |
401 | |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
402 if (olen < 0) |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
403 debug_printf("TOC C: %s\n", buf); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
404 |
2086 | 405 hdr.ast = '*'; |
406 hdr.type = type; | |
407 hdr.seqno = htons(tdt->seqno++ & 0xffff); | |
408 hdr.len = htons(len + (type == TYPE_SIGNON ? 0 : 1)); | |
409 | |
410 memcpy(obuf, &hdr, sizeof(hdr)); | |
411 slen += sizeof(hdr); | |
412 memcpy(&obuf[slen], buf, len); | |
413 slen += len; | |
414 if (type != TYPE_SIGNON) { | |
415 obuf[slen] = '\0'; | |
416 slen += 1; | |
417 } | |
418 | |
3630 | 419 return toc_write(tdt->toc_fd, obuf, slen); |
2086 | 420 } |
421 | |
5605 | 422 static int wait_reply(GaimConnection *gc, char *buffer, size_t buflen) |
2086 | 423 { |
424 struct toc_data *tdt = (struct toc_data *)gc->proto_data; | |
425 struct sflap_hdr *hdr; | |
426 int ret; | |
427 | |
3630 | 428 if (toc_read(tdt->toc_fd, buffer, sizeof(struct sflap_hdr)) < 0) { |
2086 | 429 debug_printf("error, couldn't read flap header\n"); |
430 return -1; | |
431 } | |
432 | |
433 hdr = (struct sflap_hdr *)buffer; | |
434 | |
435 if (buflen < ntohs(hdr->len)) { | |
436 /* fake like there's a read error */ | |
437 debug_printf("buffer too small (have %d, need %d)\n", buflen, ntohs(hdr->len)); | |
438 return -1; | |
439 } | |
440 | |
441 if (ntohs(hdr->len) > 0) { | |
442 int count = 0; | |
443 ret = 0; | |
444 do { | |
445 count += ret; | |
3630 | 446 ret = toc_read(tdt->toc_fd, |
2086 | 447 buffer + sizeof(struct sflap_hdr) + count, ntohs(hdr->len) - count); |
448 } while (count + ret < ntohs(hdr->len) && ret > 0); | |
449 buffer[sizeof(struct sflap_hdr) + count + ret] = '\0'; | |
450 return ret; | |
451 } else | |
452 return 0; | |
453 } | |
454 | |
5605 | 455 static unsigned char *roast_password(const char *pass) |
2086 | 456 { |
457 /* Trivial "encryption" */ | |
458 static unsigned char rp[256]; | |
459 static char *roast = ROAST; | |
460 int pos = 2; | |
461 int x; | |
462 strcpy(rp, "0x"); | |
463 for (x = 0; (x < 150) && pass[x]; x++) | |
464 pos += sprintf(&rp[pos], "%02x", pass[x] ^ roast[x % strlen(roast)]); | |
465 rp[pos] = '\0'; | |
466 return rp; | |
467 } | |
468 | |
4322 | 469 static void toc_got_info(gpointer data, char *url_text, unsigned long len) |
2086 | 470 { |
471 if (!url_text) | |
472 return; | |
473 | |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
474 g_show_info_text(NULL, NULL, 2, url_text, NULL); |
2086 | 475 } |
476 | |
2453
b72143059ad4
[gaim-migrate @ 2466]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2382
diff
changeset
|
477 static char *show_error_message() |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
478 { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
479 int no = atoi(strtok(NULL, ":")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
480 char *w = strtok(NULL, ":"); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
481 static char buf[256]; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
482 |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
483 switch(no) { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
484 case 69: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
485 g_snprintf(buf, sizeof(buf), _("Unable to write file %s."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
486 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
487 case 169: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
488 g_snprintf(buf, sizeof(buf), _("Unable to read file %s."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
489 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
490 case 269: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
491 g_snprintf(buf, sizeof(buf), _("Message too long, last %s bytes truncated."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
492 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
493 case 901: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
494 g_snprintf(buf, sizeof(buf), _("%s not currently logged in."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
495 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
496 case 902: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
497 g_snprintf(buf, sizeof(buf), _("Warning of %s not allowed."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
498 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
499 case 903: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
500 g_snprintf(buf, sizeof(buf), _("A message has been dropped, you are exceeding the server speed limit.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
501 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
502 case 950: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
503 g_snprintf(buf, sizeof(buf), _("Chat in %s is not available."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
504 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
505 case 960: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
506 g_snprintf(buf, sizeof(buf), _("You are sending messages too fast to %s."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
507 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
508 case 961: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
509 g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was too big."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
510 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
511 case 962: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
512 g_snprintf(buf, sizeof(buf), _("You missed an IM from %s because it was sent too fast."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
513 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
514 case 970: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
515 g_snprintf(buf, sizeof(buf), _("Failure.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
516 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
517 case 971: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
518 g_snprintf(buf, sizeof(buf), _("Too many matches.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
519 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
520 case 972: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
521 g_snprintf(buf, sizeof(buf), _("Need more qualifiers.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
522 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
523 case 973: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
524 g_snprintf(buf, sizeof(buf), _("Dir service temporarily unavailable.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
525 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
526 case 974: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
527 g_snprintf(buf, sizeof(buf), _("Email lookup restricted.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
528 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
529 case 975: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
530 g_snprintf(buf, sizeof(buf), _("Keyword ignored.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
531 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
532 case 976: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
533 g_snprintf(buf, sizeof(buf), _("No keywords.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
534 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
535 case 977: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
536 g_snprintf(buf, sizeof(buf), _("User has no directory information.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
537 /* g_snprintf(buf, sizeof(buf), "Language not supported."); */ |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
538 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
539 case 978: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
540 g_snprintf(buf, sizeof(buf), _("Country not supported.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
541 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
542 case 979: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
543 g_snprintf(buf, sizeof(buf), _("Failure unknown: %s."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
544 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
545 case 980: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
546 g_snprintf(buf, sizeof(buf), _("Incorrect nickname or password.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
547 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
548 case 981: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
549 g_snprintf(buf, sizeof(buf), _("The service is temporarily unavailable.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
550 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
551 case 982: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
552 g_snprintf(buf, sizeof(buf), _("Your warning level is currently too high to log in.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
553 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
554 case 983: |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
555 g_snprintf(buf, sizeof(buf), _("You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.")); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
556 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
557 g_snprintf(buf, sizeof(buf), _("An unknown signon error has occurred: %s."), w); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
558 break; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
559 default: |
3100 | 560 g_snprintf(buf, sizeof(buf), _("An unknown error, %d, has occurred. Info: %s"), no, w); |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
561 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
562 |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
563 return buf; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
564 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
565 |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
566 static void toc_callback(gpointer data, gint source, GaimInputCondition condition) |
2086 | 567 { |
5605 | 568 GaimConnection *gc = (GaimConnection *)data; |
2086 | 569 struct toc_data *tdt = (struct toc_data *)gc->proto_data; |
570 struct sflap_hdr *hdr; | |
571 struct signon so; | |
572 char buf[8 * 1024], *c; | |
573 char snd[BUF_LEN * 2]; | |
574 | |
5605 | 575 const char *username = gaim_account_get_username(gc->account); |
576 char *password; | |
577 | |
2086 | 578 /* there's data waiting to be read, so read it. */ |
579 if (wait_reply(gc, buf, 8 * 1024) <= 0) { | |
5605 | 580 gaim_connection_error(gc, _("Connection Closed")); |
2086 | 581 return; |
582 } | |
583 | |
584 if (tdt->state == STATE_FLAPON) { | |
585 hdr = (struct sflap_hdr *)buf; | |
586 if (hdr->type != TYPE_SIGNON) | |
587 debug_printf("problem, hdr->type != TYPE_SIGNON\n"); | |
588 else | |
589 debug_printf("* TOC sends Client FLAP SIGNON\n"); | |
590 tdt->seqno = ntohs(hdr->seqno); | |
591 tdt->state = STATE_SIGNON_REQUEST; | |
592 | |
593 debug_printf("* Client sends TOC FLAP SIGNON\n"); | |
5605 | 594 g_snprintf(so.username, sizeof(so.username), "%s", username); |
2086 | 595 so.ver = htonl(1); |
596 so.tag = htons(1); | |
597 so.namelen = htons(strlen(so.username)); | |
598 if (sflap_send(gc, (char *)&so, ntohs(so.namelen) + 8, TYPE_SIGNON) < 0) { | |
5605 | 599 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 600 return; |
601 } | |
602 | |
603 debug_printf("* Client sends TOC \"toc_signon\" message\n"); | |
2853
f0633f458a1c
[gaim-migrate @ 2866]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
604 /* i hate icq. */ |
5605 | 605 if (username[0] >= '0' && username[0] <= '9') |
606 password = g_strndup(gaim_account_get_password(gc->account), 8); | |
607 else | |
608 password = g_strdup(gaim_account_get_password(gc->account)); | |
2086 | 609 g_snprintf(snd, sizeof snd, "toc_signon %s %d %s %s %s \"%s\"", |
5605 | 610 AUTH_HOST, AUTH_PORT, normalize(username), |
611 roast_password(password), LANGUAGE, REVISION); | |
612 g_free(password); | |
2086 | 613 if (sflap_send(gc, snd, -1, TYPE_DATA) < 0) { |
5605 | 614 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 615 return; |
616 } | |
617 | |
5605 | 618 gaim_connection_update_progress(gc, _("Waiting for reply..."), 3, TOC_CONNECT_STEPS); |
2086 | 619 return; |
620 } | |
621 | |
622 if (tdt->state == STATE_SIGNON_REQUEST) { | |
623 debug_printf("* TOC sends client SIGN_ON reply\n"); | |
4793 | 624 if (g_ascii_strncasecmp(buf + sizeof(struct sflap_hdr), "SIGN_ON", strlen("SIGN_ON"))) { |
2086 | 625 debug_printf("Didn't get SIGN_ON! buf was: %s\n", |
626 buf + sizeof(struct sflap_hdr)); | |
4793 | 627 if (!g_ascii_strncasecmp(buf + sizeof(struct sflap_hdr), "ERROR", 5)) { |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
628 strtok(buf + sizeof(struct sflap_hdr), ":"); |
5605 | 629 gaim_connection_error(gc, show_error_message()); |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
630 } else |
5605 | 631 gaim_connection_error(gc, _("Authentication Failed")); |
2086 | 632 return; |
633 } | |
634 /* we're supposed to check that it's really TOC v1 here but we know it is ;) */ | |
2128
bc79be34eb73
[gaim-migrate @ 2138]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
635 debug_printf("TOC version: %s\n", buf + sizeof(struct sflap_hdr) + 8); |
2086 | 636 |
637 /* we used to check for the CONFIG here, but we'll wait until we've sent our | |
638 * version of the config and then the toc_init_done message. we'll come back to | |
639 * the callback in a better state if we get CONFIG anyway */ | |
640 | |
641 tdt->state = STATE_ONLINE; | |
642 | |
5605 | 643 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2086 | 644 serv_finish_login(gc); |
645 | |
646 /* Client sends TOC toc_init_done message */ | |
647 debug_printf("* Client sends TOC toc_init_done message\n"); | |
648 g_snprintf(snd, sizeof snd, "toc_init_done"); | |
649 sflap_send(gc, snd, -1, TYPE_DATA); | |
650 | |
651 /* | |
652 g_snprintf(snd, sizeof snd, "toc_set_caps %s %s %s", | |
653 FILE_SEND_UID, FILE_GET_UID, B_ICON_UID); | |
654 */ | |
655 g_snprintf(snd, sizeof snd, "toc_set_caps %s %s", FILE_SEND_UID, FILE_GET_UID); | |
656 sflap_send(gc, snd, -1, TYPE_DATA); | |
657 | |
658 return; | |
659 } | |
660 | |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
661 debug_printf("TOC S: %s\n", buf + sizeof(struct sflap_hdr)); |
2086 | 662 |
663 c = strtok(buf + sizeof(struct sflap_hdr), ":"); /* Ditch the first part */ | |
664 | |
4793 | 665 if (!g_ascii_strcasecmp(c, "SIGN_ON")) { |
2086 | 666 /* we should only get here after a PAUSE */ |
667 if (tdt->state != STATE_PAUSE) | |
668 debug_printf("got SIGN_ON but not PAUSE!\n"); | |
669 else { | |
670 tdt->state = STATE_ONLINE; | |
671 g_snprintf(snd, sizeof snd, "toc_signon %s %d %s %s %s \"%s\"", | |
5605 | 672 AUTH_HOST, AUTH_PORT, |
673 normalize(gaim_account_get_username(gc->account)), | |
674 roast_password(gaim_account_get_password(gc->account)), | |
675 LANGUAGE, REVISION); | |
2086 | 676 if (sflap_send(gc, snd, -1, TYPE_DATA) < 0) { |
5605 | 677 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 678 return; |
679 } | |
680 g_snprintf(snd, sizeof snd, "toc_init_done"); | |
681 sflap_send(gc, snd, -1, TYPE_DATA); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
682 gaim_notify_info(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
683 _("TOC has come back from its pause. You may " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
684 "now send messages again."), NULL); |
2086 | 685 } |
4793 | 686 } else if (!g_ascii_strcasecmp(c, "CONFIG")) { |
2086 | 687 c = strtok(NULL, ":"); |
4491 | 688 parse_toc_buddy_list(gc->account, c); |
4793 | 689 } else if (!g_ascii_strcasecmp(c, "NICK")) { |
2086 | 690 /* ignore NICK so that things get imported/exported properly |
691 c = strtok(NULL, ":"); | |
692 g_snprintf(gc->username, sizeof(gc->username), "%s", c); | |
693 */ | |
4793 | 694 } else if (!g_ascii_strcasecmp(c, "IM_IN")) { |
2086 | 695 char *away, *message; |
696 int a = 0; | |
697 | |
698 c = strtok(NULL, ":"); | |
699 away = strtok(NULL, ":"); | |
700 | |
701 message = away; | |
702 while (*message && (*message != ':')) | |
703 message++; | |
704 message++; | |
705 | |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
706 a = (away && (*away == 'T')) ? IM_FLAG_AWAY : 0; |
2086 | 707 |
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2853
diff
changeset
|
708 serv_got_im(gc, c, message, a, time(NULL), -1); |
4793 | 709 } else if (!g_ascii_strcasecmp(c, "UPDATE_BUDDY")) { |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
710 char *l, *uc, *tmp; |
2086 | 711 int logged, evil, idle, type = 0; |
712 time_t signon, time_idle; | |
713 | |
714 c = strtok(NULL, ":"); /* name */ | |
715 l = strtok(NULL, ":"); /* online */ | |
716 sscanf(strtok(NULL, ":"), "%d", &evil); | |
717 sscanf(strtok(NULL, ":"), "%ld", &signon); | |
718 sscanf(strtok(NULL, ":"), "%d", &idle); | |
719 uc = strtok(NULL, ":"); | |
720 | |
721 logged = (l && (*l == 'T')) ? 1 : 0; | |
722 | |
723 if (uc[0] == 'A') | |
724 type |= UC_AOL; | |
725 switch (uc[1]) { | |
726 case 'A': | |
727 type |= UC_ADMIN; | |
728 break; | |
729 case 'U': | |
730 type |= UC_UNCONFIRMED; | |
731 break; | |
732 case 'O': | |
733 type |= UC_NORMAL; | |
734 break; | |
3083 | 735 case 'C': |
736 type |= UC_WIRELESS; | |
737 break; | |
2086 | 738 default: |
739 break; | |
740 } | |
741 if (uc[2] == 'U') | |
742 type |= UC_UNAVAILABLE; | |
743 | |
744 if (idle) { | |
745 time(&time_idle); | |
746 time_idle -= idle * 60; | |
747 } else | |
748 time_idle = 0; | |
749 | |
5605 | 750 tmp = g_strdup(normalize(gaim_account_get_username(gc->account))); |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
751 if (!strcmp(tmp, normalize(c))) |
5605 | 752 gaim_connection_set_display_name(gc, c); |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
753 g_free(tmp); |
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
754 |
4732 | 755 serv_got_update(gc, c, logged, evil, signon, time_idle, type); |
4793 | 756 } else if (!g_ascii_strcasecmp(c, "ERROR")) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
757 gaim_notify_error(gc, NULL, show_error_message(), NULL); |
4793 | 758 } else if (!g_ascii_strcasecmp(c, "EVILED")) { |
2086 | 759 int lev; |
760 char *name; | |
761 | |
762 sscanf(strtok(NULL, ":"), "%d", &lev); | |
763 name = strtok(NULL, ":"); | |
764 | |
765 serv_got_eviled(gc, name, lev); | |
4793 | 766 } else if (!g_ascii_strcasecmp(c, "CHAT_JOIN")) { |
2086 | 767 char *name; |
768 int id; | |
769 | |
770 sscanf(strtok(NULL, ":"), "%d", &id); | |
771 name = strtok(NULL, ":"); | |
772 | |
773 serv_got_joined_chat(gc, id, name); | |
4793 | 774 } else if (!g_ascii_strcasecmp(c, "CHAT_IN")) { |
2086 | 775 int id, w; |
776 char *m, *who, *whisper; | |
777 | |
778 sscanf(strtok(NULL, ":"), "%d", &id); | |
779 who = strtok(NULL, ":"); | |
780 whisper = strtok(NULL, ":"); | |
781 m = whisper; | |
782 while (*m && (*m != ':')) | |
783 m++; | |
784 m++; | |
785 | |
786 w = (whisper && (*whisper == 'T')) ? 1 : 0; | |
787 | |
788 serv_got_chat_in(gc, id, who, w, m, time((time_t)NULL)); | |
4793 | 789 } else if (!g_ascii_strcasecmp(c, "CHAT_UPDATE_BUDDY")) { |
2086 | 790 int id; |
791 char *in, *buddy; | |
792 GSList *bcs = gc->buddy_chats; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
793 struct gaim_conversation *b = NULL; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
794 struct gaim_chat *chat; |
2086 | 795 |
796 sscanf(strtok(NULL, ":"), "%d", &id); | |
797 in = strtok(NULL, ":"); | |
798 | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
799 chat = GAIM_CHAT(b); |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
800 |
2086 | 801 while (bcs) { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
802 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
803 if (id == gaim_chat_get_id(chat)) |
2086 | 804 break; |
805 bcs = bcs->next; | |
806 b = NULL; | |
807 } | |
808 | |
809 if (!b) | |
810 return; | |
811 | |
812 if (in && (*in == 'T')) | |
813 while ((buddy = strtok(NULL, ":")) != NULL) | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
814 gaim_chat_add_user(chat, buddy, NULL); |
2086 | 815 else |
816 while ((buddy = strtok(NULL, ":")) != NULL) | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
817 gaim_chat_remove_user(chat, buddy, NULL); |
4793 | 818 } else if (!g_ascii_strcasecmp(c, "CHAT_INVITE")) { |
2086 | 819 char *name, *who, *message; |
5234 | 820 int id; |
821 GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, | |
822 g_free, g_free); | |
2086 | 823 |
824 name = strtok(NULL, ":"); | |
5234 | 825 sscanf(strtok(NULL, ":"), "%d", &id); |
2086 | 826 who = strtok(NULL, ":"); |
827 message = strtok(NULL, ":"); | |
828 | |
5234 | 829 g_hash_table_replace(components, g_strdup("id"), g_strdup_printf("%d", id)); |
830 | |
831 serv_got_chat_invite(gc, name, who, message, components); | |
4793 | 832 } else if (!g_ascii_strcasecmp(c, "CHAT_LEFT")) { |
2086 | 833 GSList *bcs = gc->buddy_chats; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
834 struct gaim_conversation *b = NULL; |
2086 | 835 int id; |
836 | |
837 sscanf(strtok(NULL, ":"), "%d", &id); | |
838 | |
839 while (bcs) { | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
840 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
841 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 842 break; |
843 b = NULL; | |
844 bcs = bcs->next; | |
845 } | |
846 | |
847 if (!b) | |
848 return; | |
849 | |
850 if (b->window) { | |
851 char error_buf[BUF_LONG]; | |
4491 | 852 gaim_conversation_set_account(b, NULL); |
2086 | 853 g_snprintf(error_buf, sizeof error_buf, _("You have been disconnected" |
854 " from chat room %s."), b->name); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
855 gaim_notify_error(gc, NULL, error_buf, NULL); |
2086 | 856 } else |
857 serv_got_chat_left(gc, id); | |
4793 | 858 } else if (!g_ascii_strcasecmp(c, "GOTO_URL")) { |
2086 | 859 char *name, *url, tmp[256]; |
860 | |
861 name = strtok(NULL, ":"); | |
862 url = strtok(NULL, ":"); | |
863 | |
4597 | 864 g_snprintf(tmp, sizeof(tmp), "http://%s:%d/%s", tdt->toc_ip, |
5605 | 865 gaim_account_get_int(gc->account, "port", TOC_PORT), |
2086 | 866 url); |
2584
34812d648f72
[gaim-migrate @ 2597]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2526
diff
changeset
|
867 grab_url(tmp, FALSE, toc_got_info, NULL); |
4793 | 868 } else if (!g_ascii_strcasecmp(c, "DIR_STATUS")) { |
869 } else if (!g_ascii_strcasecmp(c, "ADMIN_NICK_STATUS")) { | |
870 } else if (!g_ascii_strcasecmp(c, "ADMIN_PASSWD_STATUS")) { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
871 gaim_notify_info(gc, NULL, _("Password Change Successful"), NULL); |
4793 | 872 } else if (!g_ascii_strcasecmp(c, "PAUSE")) { |
2086 | 873 tdt->state = STATE_PAUSE; |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
874 gaim_notify_warning(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
875 _("TOC has sent a PAUSE command."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
876 _("When this happens, TOC ignores any messages " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
877 "sent to it, and may kick you off if you send a" |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
878 " message. Gaim will prevent anything from " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
879 "going through. This is only temporary, please " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
880 "be patient.")); |
4793 | 881 } else if (!g_ascii_strcasecmp(c, "RVOUS_PROPOSE")) { |
2086 | 882 char *user, *uuid, *cookie; |
883 int seq; | |
3159 | 884 char *rip, *pip, *vip, *trillian = NULL; |
2086 | 885 int port; |
3126 | 886 |
2086 | 887 user = strtok(NULL, ":"); |
888 uuid = strtok(NULL, ":"); | |
889 cookie = strtok(NULL, ":"); | |
890 sscanf(strtok(NULL, ":"), "%d", &seq); | |
891 rip = strtok(NULL, ":"); | |
892 pip = strtok(NULL, ":"); | |
893 vip = strtok(NULL, ":"); | |
894 sscanf(strtok(NULL, ":"), "%d", &port); | |
895 | |
896 if (!strcmp(uuid, FILE_SEND_UID)) { | |
897 /* they want us to get a file */ | |
898 int unk[4], i; | |
899 char *messages[4], *tmp, *name; | |
900 int subtype, files, totalsize = 0; | |
901 struct ft_request *ft; | |
902 | |
903 for (i = 0; i < 4; i++) { | |
3126 | 904 trillian = strtok(NULL, ":"); |
905 sscanf(trillian, "%d", &unk[i]); | |
2086 | 906 if (unk[i] == 10001) |
907 break; | |
3126 | 908 /* Trillian likes to send an empty token as a message, rather than |
909 no message at all. */ | |
910 if (*(trillian + strlen(trillian) +1) != ':') | |
911 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
2086 | 912 } |
3126 | 913 |
2086 | 914 frombase64(strtok(NULL, ":"), &tmp, NULL); |
915 | |
916 subtype = tmp[1]; | |
917 files = tmp[3]; | |
918 | |
919 totalsize |= (tmp[4] << 24) & 0xff000000; | |
920 totalsize |= (tmp[5] << 16) & 0x00ff0000; | |
921 totalsize |= (tmp[6] << 8) & 0x0000ff00; | |
922 totalsize |= (tmp[7] << 0) & 0x000000ff; | |
923 | |
924 if (!totalsize) { | |
925 g_free(tmp); | |
926 for (i--; i >= 0; i--) | |
927 g_free(messages[i]); | |
928 return; | |
929 } | |
930 | |
931 name = tmp + 8; | |
932 | |
933 ft = g_new0(struct ft_request, 1); | |
934 ft->cookie = g_strdup(cookie); | |
935 ft->ip = g_strdup(pip); | |
936 ft->port = port; | |
937 if (i) | |
938 ft->message = g_strdup(messages[0]); | |
939 else | |
940 ft->message = NULL; | |
941 ft->filename = g_strdup(name); | |
942 ft->user = g_strdup(user); | |
943 ft->size = totalsize; | |
944 ft->files = files; | |
945 g_snprintf(ft->UID, sizeof(ft->UID), "%s", FILE_SEND_UID); | |
946 ft->gc = gc; | |
947 | |
948 g_free(tmp); | |
949 for (i--; i >= 0; i--) | |
950 g_free(messages[i]); | |
951 | |
952 debug_printf("English translation of RVOUS_PROPOSE: %s requests Send File (i.e." | |
953 " send a file to you); %s:%d (verified_ip:port), %d files at" | |
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
954 " total size of %d bytes.\n", user, vip, port, files, totalsize); |
2086 | 955 accept_file_dialog(ft); |
956 } else if (!strcmp(uuid, FILE_GET_UID)) { | |
957 /* they want us to send a file */ | |
958 int unk[4], i; | |
959 char *messages[4], *tmp; | |
960 struct ft_request *ft; | |
961 | |
962 for (i = 0; i < 4; i++) { | |
963 sscanf(strtok(NULL, ":"), "%d", unk + i); | |
964 if (unk[i] == 10001) | |
965 break; | |
3126 | 966 /* Trillian likes to send an empty token as a message, rather than |
967 no message at all. */ | |
968 if (*(trillian + strlen(trillian) +1) != ':') | |
969 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
2086 | 970 } |
971 frombase64(strtok(NULL, ":"), &tmp, NULL); | |
972 | |
973 ft = g_new0(struct ft_request, 1); | |
974 ft->cookie = g_strdup(cookie); | |
975 ft->ip = g_strdup(pip); | |
976 ft->port = port; | |
977 if (i) | |
978 ft->message = g_strdup(messages[0]); | |
979 else | |
980 ft->message = NULL; | |
981 ft->user = g_strdup(user); | |
982 g_snprintf(ft->UID, sizeof(ft->UID), "%s", FILE_GET_UID); | |
983 ft->gc = gc; | |
984 | |
985 g_free(tmp); | |
986 for (i--; i >= 0; i--) | |
987 g_free(messages[i]); | |
988 | |
989 accept_file_dialog(ft); | |
990 } else if (!strcmp(uuid, VOICE_UID)) { | |
991 /* oh goody. voice over ip. fun stuff. */ | |
992 } else if (!strcmp(uuid, B_ICON_UID)) { | |
993 /* | |
994 int unk[4], i; | |
995 char *messages[4]; | |
996 struct buddy_icon *icon; | |
997 | |
998 for (i = 0; i < 4; i++) { | |
999 sscanf(strtok(NULL, ":"), "%d", unk + i); | |
1000 if (unk[i] == 10001) | |
1001 break; | |
1002 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
1003 } | |
1004 frombase64(strtok(NULL, ":"), (char **)&icon, NULL); | |
1005 | |
1006 debug_printf("received icon of length %d\n", icon->len); | |
1007 g_free(icon); | |
1008 for (i--; i >= 0; i--) | |
1009 g_free(messages[i]); | |
1010 */ | |
1011 } else if (!strcmp(uuid, IMAGE_UID)) { | |
1012 /* aka Direct IM */ | |
1013 } else { | |
1014 debug_printf("Don't know what to do with RVOUS UUID %s\n", uuid); | |
1015 /* do we have to do anything here? i think it just times out */ | |
1016 } | |
1017 } else { | |
1018 debug_printf("don't know what to do with %s\n", c); | |
1019 } | |
1020 } | |
1021 | |
5605 | 1022 static int toc_send_im(GaimConnection *gc, const char *name, const char *message, int len, int flags) |
2086 | 1023 { |
1024 char buf[BUF_LEN * 2]; | |
2343
29449a6b79e6
[gaim-migrate @ 2356]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2334
diff
changeset
|
1025 char *tmp = g_malloc(strlen(message) * 4 + 1); /* 4 because \n gets replaced with <BR> */ |
2086 | 1026 |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1027 strcpy(tmp, message); |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1028 escape_text(tmp); |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1029 if (strlen(tmp) + 52 > MSG_LEN) { |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1030 g_free(tmp); |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
1031 return -E2BIG; |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1032 } |
2086 | 1033 g_snprintf(buf, MSG_LEN - 8, "toc_send_im %s \"%s\"%s", normalize(name), |
2231
8c4ff1a368bd
[gaim-migrate @ 2241]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2205
diff
changeset
|
1034 tmp, ((flags & IM_FLAG_AWAY) ? " auto" : "")); |
2086 | 1035 sflap_send(gc, buf, -1, TYPE_DATA); |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
1036 |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1037 g_free(tmp); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2281
diff
changeset
|
1038 return 1; |
2086 | 1039 } |
1040 | |
5605 | 1041 static void toc_set_config(GaimConnection *gc) |
2086 | 1042 { |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1043 char *buf = g_malloc(MSG_LEN), snd[BUF_LEN * 2]; |
4491 | 1044 toc_build_config(gc->account, buf, MSG_LEN - strlen("toc_set_config \\{\\}"), FALSE); |
2086 | 1045 g_snprintf(snd, MSG_LEN, "toc_set_config {%s}", buf); |
1046 sflap_send(gc, snd, -1, TYPE_DATA); | |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1047 g_free(buf); |
2086 | 1048 } |
1049 | |
5605 | 1050 static void toc_get_info(GaimConnection *g, const char *name) |
2086 | 1051 { |
1052 char buf[BUF_LEN * 2]; | |
1053 g_snprintf(buf, MSG_LEN, "toc_get_info %s", normalize(name)); | |
1054 sflap_send(g, buf, -1, TYPE_DATA); | |
1055 } | |
1056 | |
5605 | 1057 static void toc_get_dir(GaimConnection *g, const char *name) |
2086 | 1058 { |
1059 char buf[BUF_LEN * 2]; | |
1060 g_snprintf(buf, MSG_LEN, "toc_get_dir %s", normalize(name)); | |
1061 sflap_send(g, buf, -1, TYPE_DATA); | |
1062 } | |
1063 | |
5605 | 1064 static void toc_set_dir(GaimConnection *g, const char *first, const char *middle, const char *last, |
3466 | 1065 const char *maiden, const char *city, const char *state, const char *country, int web) |
2086 | 1066 { |
1067 char buf2[BUF_LEN * 4], buf[BUF_LEN]; | |
1068 g_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%s:%s:%s:%s:%s", first, | |
1069 middle, last, maiden, city, state, country, (web == 1) ? "Y" : ""); | |
1070 escape_text(buf2); | |
1071 g_snprintf(buf, sizeof(buf), "toc_set_dir %s", buf2); | |
1072 sflap_send(g, buf, -1, TYPE_DATA); | |
1073 } | |
1074 | |
5605 | 1075 static void toc_dir_search(GaimConnection *g, const char *first, const char *middle, const char *last, |
3466 | 1076 const char *maiden, const char *city, const char *state, const char *country, const char *email) |
2086 | 1077 { |
1078 char buf[BUF_LONG]; | |
1079 g_snprintf(buf, sizeof(buf) / 2, "toc_dir_search %s:%s:%s:%s:%s:%s:%s:%s", first, middle, | |
1080 last, maiden, city, state, country, email); | |
1081 debug_printf("Searching for: %s,%s,%s,%s,%s,%s,%s\n", first, middle, last, maiden, | |
1082 city, state, country); | |
1083 sflap_send(g, buf, -1, TYPE_DATA); | |
1084 } | |
1085 | |
5605 | 1086 static void toc_set_away(GaimConnection *g, char *state, char *message) |
2086 | 1087 { |
1088 char buf[BUF_LEN * 2]; | |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1089 if (g->away) { |
2086 | 1090 g_free (g->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1091 g->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1092 } |
2086 | 1093 if (message) { |
3188 | 1094 char *tmp = g_malloc(strlen(message) * 4 + 1); |
1095 strcpy(tmp, message); | |
2086 | 1096 g->away = g_strdup (message); |
3188 | 1097 escape_text(tmp); |
1098 g_snprintf(buf, MSG_LEN, "toc_set_away \"%s\"", tmp); | |
1099 g_free(tmp); | |
2086 | 1100 } else |
1101 g_snprintf(buf, MSG_LEN, "toc_set_away \"\""); | |
1102 sflap_send(g, buf, -1, TYPE_DATA); | |
1103 } | |
1104 | |
5605 | 1105 static void toc_set_info(GaimConnection *g, char *info) |
2086 | 1106 { |
1107 char buf[BUF_LEN * 2], buf2[BUF_LEN * 2]; | |
1108 g_snprintf(buf2, sizeof buf2, "%s", info); | |
1109 escape_text(buf2); | |
1110 g_snprintf(buf, sizeof(buf), "toc_set_info \"%s\n\"", buf2); | |
1111 sflap_send(g, buf, -1, TYPE_DATA); | |
1112 } | |
1113 | |
5605 | 1114 static void toc_change_passwd(GaimConnection *g, const char *orig, const char *new) |
2086 | 1115 { |
1116 char buf[BUF_LEN * 2]; | |
1117 g_snprintf(buf, BUF_LONG, "toc_change_passwd %s %s", orig, new); | |
1118 sflap_send(g, buf, strlen(buf), TYPE_DATA); | |
1119 } | |
1120 | |
5605 | 1121 static void toc_add_buddy(GaimConnection *g, const char *name) |
2086 | 1122 { |
1123 char buf[BUF_LEN * 2]; | |
1124 g_snprintf(buf, sizeof(buf), "toc_add_buddy %s", normalize(name)); | |
1125 sflap_send(g, buf, -1, TYPE_DATA); | |
1126 toc_set_config(g); | |
1127 } | |
1128 | |
5605 | 1129 static void toc_add_buddies(GaimConnection *g, GList *buddies) |
2086 | 1130 { |
1131 char buf[BUF_LEN * 2]; | |
1132 int n; | |
1133 | |
1134 n = g_snprintf(buf, sizeof(buf), "toc_add_buddy"); | |
1135 while (buddies) { | |
2130
50c7a704ee56
[gaim-migrate @ 2140]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2128
diff
changeset
|
1136 if (strlen(normalize(buddies->data)) + n + 32 > MSG_LEN) { |
2086 | 1137 sflap_send(g, buf, -1, TYPE_DATA); |
1138 n = g_snprintf(buf, sizeof(buf), "toc_add_buddy"); | |
1139 } | |
1140 n += g_snprintf(buf + n, sizeof(buf) - n, " %s", normalize(buddies->data)); | |
1141 buddies = buddies->next; | |
1142 } | |
1143 sflap_send(g, buf, -1, TYPE_DATA); | |
1144 } | |
1145 | |
5605 | 1146 static void toc_remove_buddy(GaimConnection *g, char *name, char *group) |
2086 | 1147 { |
1148 char buf[BUF_LEN * 2]; | |
1149 g_snprintf(buf, sizeof(buf), "toc_remove_buddy %s", normalize(name)); | |
1150 sflap_send(g, buf, -1, TYPE_DATA); | |
1151 toc_set_config(g); | |
1152 } | |
1153 | |
5605 | 1154 static void toc_remove_buddies(GaimConnection *g, GList *buddies, const char *group) |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1155 { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1156 char buf[BUF_LEN * 2]; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1157 int n; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1158 |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1159 n = g_snprintf(buf, sizeof(buf), "toc_remove_buddy"); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1160 while (buddies) { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1161 if (strlen(normalize(buddies->data)) + n + 32 > MSG_LEN) { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1162 sflap_send(g, buf, -1, TYPE_DATA); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1163 n = g_snprintf(buf, sizeof(buf), "toc_remove_buddy"); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1164 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1165 n += g_snprintf(buf + n, sizeof(buf) - n, " %s", normalize(buddies->data)); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1166 buddies = buddies->next; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1167 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1168 sflap_send(g, buf, -1, TYPE_DATA); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1169 toc_set_config(g); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1170 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1171 |
5605 | 1172 static void toc_set_idle(GaimConnection *g, int time) |
2086 | 1173 { |
1174 char buf[BUF_LEN * 2]; | |
1175 g_snprintf(buf, sizeof(buf), "toc_set_idle %d", time); | |
1176 sflap_send(g, buf, -1, TYPE_DATA); | |
1177 } | |
1178 | |
5605 | 1179 static void toc_warn(GaimConnection *g, char *name, int anon) |
2086 | 1180 { |
1181 char send[BUF_LEN * 2]; | |
1182 g_snprintf(send, 255, "toc_evil %s %s", name, ((anon) ? "anon" : "norm")); | |
1183 sflap_send(g, send, -1, TYPE_DATA); | |
1184 } | |
1185 | |
5605 | 1186 static GList *toc_chat_info(GaimConnection *gc) |
2086 | 1187 { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1188 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1189 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1190 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1191 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1192 pce->label = _("Join what group:"); |
5234 | 1193 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1194 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1195 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1196 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1197 pce->label = _("Exchange:"); |
5234 | 1198 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1199 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1200 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1201 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1202 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1203 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1204 return m; |
2086 | 1205 } |
1206 | |
5605 | 1207 static void toc_join_chat(GaimConnection *g, GHashTable *data) |
2086 | 1208 { |
1209 char buf[BUF_LONG]; | |
5234 | 1210 char *name, *exchange; |
1211 char *id; | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1212 |
5234 | 1213 name = g_hash_table_lookup(data, "room"); |
1214 exchange = g_hash_table_lookup(data, "exchange"); | |
1215 id = g_hash_table_lookup(data, "id"); | |
1216 | |
1217 if (id) { | |
1218 g_snprintf(buf, 255, "toc_chat_accept %d", atoi(id)); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1219 } else { |
5234 | 1220 g_snprintf(buf, sizeof(buf) / 2, "toc_chat_join %d \"%s\"", atoi(exchange), name); |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1221 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1222 |
2086 | 1223 sflap_send(g, buf, -1, TYPE_DATA); |
1224 } | |
1225 | |
5605 | 1226 static void toc_chat_invite(GaimConnection *g, int id, const char *message, const char *name) |
2086 | 1227 { |
1228 char buf[BUF_LONG]; | |
2719
9747583279d1
[gaim-migrate @ 2732]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2706
diff
changeset
|
1229 g_snprintf(buf, sizeof(buf) / 2, "toc_chat_invite %d \"%s\" %s", id, |
9747583279d1
[gaim-migrate @ 2732]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2706
diff
changeset
|
1230 message ? message : "", normalize(name)); |
2086 | 1231 sflap_send(g, buf, -1, TYPE_DATA); |
1232 } | |
1233 | |
5605 | 1234 static void toc_chat_leave(GaimConnection *g, int id) |
2086 | 1235 { |
1236 GSList *bcs = g->buddy_chats; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1237 struct gaim_conversation *b = NULL; |
2086 | 1238 char buf[BUF_LEN * 2]; |
1239 | |
1240 while (bcs) { | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1241 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1242 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 1243 break; |
1244 b = NULL; | |
1245 bcs = bcs->next; | |
1246 } | |
1247 | |
1248 if (!b) | |
1249 return; /* can this happen? */ | |
1250 | |
4491 | 1251 if (gaim_conversation_get_account(b) == NULL) { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1252 /* TOC already kicked us out of this room */ |
2086 | 1253 serv_got_chat_left(g, id); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1254 } |
2086 | 1255 else { |
1256 g_snprintf(buf, 255, "toc_chat_leave %d", id); | |
1257 sflap_send(g, buf, -1, TYPE_DATA); | |
1258 } | |
1259 } | |
1260 | |
5605 | 1261 static void toc_chat_whisper(GaimConnection *g, int id, char *who, char *message) |
2086 | 1262 { |
1263 char buf2[BUF_LEN * 2]; | |
2371
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
1264 escape_text(message); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
1265 g_snprintf(buf2, sizeof(buf2), "toc_chat_whisper %d %s \"%s\"", id, normalize(who), message); |
2086 | 1266 sflap_send(g, buf2, -1, TYPE_DATA); |
1267 } | |
1268 | |
5605 | 1269 static int toc_chat_send(GaimConnection *g, int id, char *message) |
2086 | 1270 { |
1271 char buf[BUF_LEN * 2]; | |
1272 escape_text(message); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1273 if (strlen(message) > 2000) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1274 return -E2BIG; |
2086 | 1275 g_snprintf(buf, sizeof(buf), "toc_chat_send %d \"%s\"", id, message); |
1276 sflap_send(g, buf, -1, TYPE_DATA); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1277 return 0; |
2086 | 1278 } |
1279 | |
5605 | 1280 static void toc_keepalive(GaimConnection *gc) |
2086 | 1281 { |
1282 sflap_send(gc, "", 0, TYPE_KEEPALIVE); | |
1283 } | |
1284 | |
5605 | 1285 static const char *toc_list_icon(GaimAccount *a, struct buddy *b) |
2086 | 1286 { |
4687 | 1287 return "aim"; |
1288 } | |
4916 | 1289 |
4921 | 1290 static void toc_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) |
4916 | 1291 { |
1292 char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
1293 int i = 0; | |
1294 | |
5068 | 1295 if (b->present == GAIM_BUDDY_OFFLINE) { |
4916 | 1296 *se = "offline"; |
1297 return; | |
1298 } else { | |
1299 if (b->uc & UC_UNAVAILABLE) | |
1300 emblems[i++] = "away"; | |
1301 if (b->uc & UC_AOL) | |
1302 emblems[i++] = "aol"; | |
1303 if (b->uc & UC_ADMIN) | |
1304 emblems[i++] = "admin"; | |
1305 if (b->uc & UC_WIRELESS) | |
1306 emblems[i++] = "wireless"; | |
1307 } | |
1308 *se = emblems[0]; | |
1309 *sw = emblems[1]; | |
1310 *nw = emblems[2]; | |
1311 *ne = emblems[3]; | |
1312 } | |
2086 | 1313 |
5605 | 1314 static GList *toc_buddy_menu(GaimConnection *gc, const char *who) |
2086 | 1315 { |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1316 GList *m = NULL; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1317 struct proto_buddy_menu *pbm; |
2086 | 1318 |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1319 pbm = g_new0(struct proto_buddy_menu, 1); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1320 pbm->label = _("Get Dir Info"); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1321 pbm->callback = toc_get_dir; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1322 pbm->gc = gc; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1323 m = g_list_append(m, pbm); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1324 |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1325 return m; |
2086 | 1326 } |
1327 | |
5605 | 1328 static void toc_add_permit(GaimConnection *gc, const char *who) |
2086 | 1329 { |
1330 char buf2[BUF_LEN * 2]; | |
5605 | 1331 if (gc->account->perm_deny != 3) |
2086 | 1332 return; |
1333 g_snprintf(buf2, sizeof(buf2), "toc_add_permit %s", normalize(who)); | |
1334 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1335 toc_set_config(gc); | |
1336 } | |
1337 | |
5605 | 1338 static void toc_add_deny(GaimConnection *gc, const char *who) |
2086 | 1339 { |
1340 char buf2[BUF_LEN * 2]; | |
5605 | 1341 if (gc->account->perm_deny != 4) |
2086 | 1342 return; |
1343 g_snprintf(buf2, sizeof(buf2), "toc_add_deny %s", normalize(who)); | |
1344 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1345 toc_set_config(gc); | |
1346 } | |
1347 | |
5605 | 1348 static void toc_set_permit_deny(GaimConnection *gc) |
2086 | 1349 { |
1350 char buf2[BUF_LEN * 2]; | |
1351 GSList *list; | |
1352 int at; | |
1353 | |
5605 | 1354 switch (gc->account->perm_deny) { |
2086 | 1355 case 1: |
1356 /* permit all, deny none. to get here reliably we need to have been in permit | |
1357 * mode, and send an empty toc_add_deny message, which will switch us to deny none */ | |
1358 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1359 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1360 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1361 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1362 break; | |
1363 case 2: | |
1364 /* deny all, permit none. to get here reliably we need to have been in deny | |
1365 * mode, and send an empty toc_add_permit message, which will switch us to permit none */ | |
1366 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1367 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1368 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1369 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1370 break; | |
1371 case 3: | |
1372 /* permit some. we want to switch to deny mode first, then send the toc_add_permit | |
1373 * message, which will clear and set our permit list. toc sucks. */ | |
1374 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1375 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1376 | |
1377 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
4491 | 1378 list = gc->account->permit; |
2086 | 1379 while (list) { |
1380 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data)); | |
1381 if (at > MSG_LEN + 32) { /* from out my ass comes greatness */ | |
1382 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1383 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1384 } | |
1385 list = list->next; | |
1386 } | |
1387 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1388 break; | |
1389 case 4: | |
1390 /* deny some. we want to switch to permit mode first, then send the toc_add_deny | |
1391 * message, which will clear and set our deny list. toc sucks. */ | |
1392 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1393 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1394 | |
1395 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
4491 | 1396 list = gc->account->deny; |
2086 | 1397 while (list) { |
1398 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data)); | |
1399 if (at > MSG_LEN + 32) { /* from out my ass comes greatness */ | |
1400 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1401 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1402 } | |
1403 list = list->next; | |
1404 } | |
1405 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1406 break; | |
1407 default: | |
1408 break; | |
1409 } | |
1410 toc_set_config(gc); | |
1411 } | |
1412 | |
5605 | 1413 static void toc_rem_permit(GaimConnection *gc, const char *who) |
2086 | 1414 { |
5605 | 1415 if (gc->account->perm_deny != 3) |
2086 | 1416 return; |
1417 toc_set_permit_deny(gc); | |
1418 } | |
1419 | |
5605 | 1420 static void toc_rem_deny(GaimConnection *gc, const char *who) |
2086 | 1421 { |
5605 | 1422 if (gc->account->perm_deny != 4) |
2086 | 1423 return; |
1424 toc_set_permit_deny(gc); | |
1425 } | |
1426 | |
5605 | 1427 static GList *toc_away_states(GaimConnection *gc) |
2086 | 1428 { |
1429 return g_list_append(NULL, GAIM_AWAY_CUSTOM); | |
1430 } | |
1431 | |
5605 | 1432 static GList *toc_actions(GaimConnection *gc) |
2086 | 1433 { |
1434 GList *m = NULL; | |
4333 | 1435 struct proto_actions_menu *pam; |
2086 | 1436 |
4333 | 1437 pam = g_new0(struct proto_actions_menu, 1); |
1438 pam->label = _("Set User Info"); | |
1439 pam->callback = show_set_info; | |
1440 pam->gc = gc; | |
1441 m = g_list_append(m, pam); | |
1442 | |
1443 pam = g_new0(struct proto_actions_menu, 1); | |
1444 pam->label = _("Set Dir Info"); | |
1445 pam->callback = show_set_dir; | |
1446 pam->gc = gc; | |
1447 m = g_list_append(m, pam); | |
1448 | |
1449 pam = g_new0(struct proto_actions_menu, 1); | |
1450 pam->label = _("Change Password"); | |
1451 pam->callback = show_change_passwd; | |
1452 pam->gc = gc; | |
1453 m = g_list_append(m, pam); | |
2086 | 1454 |
1455 return m; | |
1456 } | |
1457 | |
1458 /********* | |
1459 * RVOUS ACTIONS | |
1460 ********/ | |
1461 | |
1462 struct file_header { | |
1463 char magic[4]; /* 0 */ | |
1464 short hdrlen; /* 4 */ | |
1465 short hdrtype; /* 6 */ | |
1466 char bcookie[8]; /* 8 */ | |
1467 short encrypt; /* 16 */ | |
1468 short compress; /* 18 */ | |
1469 short totfiles; /* 20 */ | |
1470 short filesleft; /* 22 */ | |
1471 short totparts; /* 24 */ | |
1472 short partsleft; /* 26 */ | |
1473 long totsize; /* 28 */ | |
1474 long size; /* 32 */ | |
1475 long modtime; /* 36 */ | |
1476 long checksum; /* 40 */ | |
1477 long rfrcsum; /* 44 */ | |
1478 long rfsize; /* 48 */ | |
1479 long cretime; /* 52 */ | |
1480 long rfcsum; /* 56 */ | |
1481 long nrecvd; /* 60 */ | |
1482 long recvcsum; /* 64 */ | |
1483 char idstring[32]; /* 68 */ | |
1484 char flags; /* 100 */ | |
1485 char lnameoffset; /* 101 */ | |
1486 char lsizeoffset; /* 102 */ | |
1487 char dummy[69]; /* 103 */ | |
1488 char macfileinfo[16]; /* 172 */ | |
1489 short nencode; /* 188 */ | |
1490 short nlanguage; /* 190 */ | |
1491 char name[64]; /* 192 */ | |
1492 /* 256 */ | |
1493 }; | |
1494 | |
1495 struct file_transfer { | |
1496 struct file_header hdr; | |
1497 | |
5605 | 1498 GaimConnection *gc; |
2086 | 1499 |
1500 char *user; | |
1501 char *cookie; | |
1502 char *ip; | |
1503 int port; | |
1504 long size; | |
1505 struct stat st; | |
1506 | |
1507 GtkWidget *window; | |
1508 int files; | |
1509 char *filename; | |
1510 FILE *file; | |
1511 int recvsize; | |
1512 | |
1513 gint inpa; | |
1514 }; | |
1515 | |
1516 static void debug_header(struct file_transfer *ft) { | |
1517 struct file_header *f = (struct file_header *)ft; | |
1518 debug_printf("TOC FT HEADER:\n" | |
1519 "\t%s %d 0x%04x\n" | |
1520 "\t%s %d %d\n" | |
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1521 "\t%d %d %d %d %d %d\n" |
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1522 "\t%d %d %d %d %d %d %d %d\n" |
2086 | 1523 "\t%s\n" |
1524 "\t0x%02x, 0x%02x, 0x%02x\n" | |
1525 "\t%s %s\n" | |
1526 "\t%d %d\n" | |
1527 "\t%s\n", | |
1528 f->magic, ntohs(f->hdrlen), f->hdrtype, | |
1529 f->bcookie, ntohs(f->encrypt), ntohs(f->compress), | |
1530 ntohs(f->totfiles), ntohs(f->filesleft), ntohs(f->totparts), | |
1531 ntohs(f->partsleft), ntohl(f->totsize), ntohl(f->size), | |
1532 ntohl(f->modtime), ntohl(f->checksum), ntohl(f->rfrcsum), ntohl(f->rfsize), | |
1533 ntohl(f->cretime), ntohl(f->rfcsum), ntohl(f->nrecvd), | |
1534 ntohl(f->recvcsum), | |
1535 f->idstring, | |
1536 f->flags, f->lnameoffset, f->lsizeoffset, | |
1537 f->dummy, f->macfileinfo, | |
1538 ntohs(f->nencode), ntohs(f->nlanguage), | |
1539 f->name); | |
1540 } | |
1541 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1542 static void toc_send_file_callback(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1543 { |
1544 char buf[BUF_LONG]; | |
1545 int rt, i; | |
1546 | |
1547 struct file_transfer *ft = data; | |
1548 | |
1549 if (ft->hdr.hdrtype != 0x202) { | |
1550 char *buf; | |
1551 frombase64(ft->cookie, &buf, NULL); | |
1552 | |
3630 | 1553 toc_read(source, ft, 8); |
1554 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1555 debug_header(ft); |
1556 | |
1557 ft->hdr.hdrtype = 0x202; | |
1558 memcpy(ft->hdr.bcookie, buf, 8); | |
1559 g_free(buf); | |
1560 ft->hdr.encrypt = 0; ft->hdr.compress = 0; | |
1561 debug_header(ft); | |
3630 | 1562 toc_write(source, ft, 256); |
2086 | 1563 |
1564 if (ft->files == 1) { | |
1565 ft->file = fopen(ft->filename, "w"); | |
1566 if (!ft->file) { | |
4115 | 1567 buf = g_strdup_printf(_("Could not open %s for writing!"), ft->filename); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1568 gaim_notify_error(ft->gc, NULL, buf, strerror(errno)); |
2086 | 1569 g_free(buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1570 gaim_input_remove(ft->inpa); |
3630 | 1571 toc_soc_close(source); |
2086 | 1572 g_free(ft->filename); |
1573 g_free(ft->user); | |
1574 g_free(ft->ip); | |
1575 g_free(ft->cookie); | |
1576 g_free(ft); | |
1577 } | |
1578 } else { | |
1579 buf = g_strdup_printf("%s/%s", ft->filename, ft->hdr.name); | |
1580 ft->file = fopen(buf, "w"); | |
1581 g_free(buf); | |
1582 if (!ft->file) { | |
1583 buf = g_strdup_printf("Could not open %s/%s for writing!", ft->filename, | |
1584 ft->hdr.name); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1585 gaim_notify_error(ft->gc, NULL, buf, strerror(errno)); |
2086 | 1586 g_free(buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1587 gaim_input_remove(ft->inpa); |
3630 | 1588 toc_soc_close(source); |
2086 | 1589 g_free(ft->filename); |
1590 g_free(ft->user); | |
1591 g_free(ft->ip); | |
1592 g_free(ft->cookie); | |
1593 g_free(ft); | |
1594 } | |
1595 } | |
1596 | |
1597 return; | |
1598 } | |
1599 | |
3630 | 1600 rt = toc_read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); |
2086 | 1601 if (rt < 0) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1602 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1603 _("File transfer failed; other side probably " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1604 "canceled."), NULL); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1605 gaim_input_remove(ft->inpa); |
3630 | 1606 toc_soc_close(source); |
2086 | 1607 g_free(ft->user); |
1608 g_free(ft->ip); | |
1609 g_free(ft->cookie); | |
1610 if (ft->file) | |
1611 fclose(ft->file); | |
1612 g_free(ft); | |
1613 return; | |
1614 } | |
1615 ft->recvsize += rt; | |
1616 for (i = 0; i < rt; i++) | |
1617 fprintf(ft->file, "%c", buf[i]); | |
1618 | |
1619 if (ft->recvsize == ntohl(ft->hdr.size)) { | |
1620 ft->hdr.hdrtype = htons(0x0204); | |
1621 ft->hdr.filesleft = htons(ntohs(ft->hdr.filesleft) - 1); | |
1622 ft->hdr.partsleft = htons(ntohs(ft->hdr.partsleft) - 1); | |
1623 ft->hdr.recvcsum = ft->hdr.checksum; /* uh... */ | |
1624 ft->hdr.nrecvd = htons(ntohs(ft->hdr.nrecvd) + 1); | |
1625 ft->hdr.flags = 0; | |
3630 | 1626 toc_write(source, ft, 256); |
2086 | 1627 debug_header(ft); |
1628 ft->recvsize = 0; | |
1629 fclose(ft->file); | |
1630 if (ft->hdr.filesleft == 0) { | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1631 gaim_input_remove(ft->inpa); |
3630 | 1632 toc_soc_close(source); |
2086 | 1633 g_free(ft->filename); |
1634 g_free(ft->user); | |
1635 g_free(ft->ip); | |
1636 g_free(ft->cookie); | |
1637 g_free(ft); | |
1638 } | |
1639 } | |
1640 } | |
1641 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1642 static void toc_send_file_connect(gpointer data, gint src, GaimInputCondition cond) |
2086 | 1643 { |
1644 struct file_transfer *ft = data; | |
1645 | |
1646 if (src == -1) { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1647 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1648 _("Could not connect for transfer."), NULL); |
2086 | 1649 g_free(ft->filename); |
1650 g_free(ft->cookie); | |
1651 g_free(ft->user); | |
1652 g_free(ft->ip); | |
1653 g_free(ft); | |
1654 return; | |
1655 } | |
1656 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1657 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_send_file_callback, ft); |
2086 | 1658 } |
1659 | |
1660 static void toc_send_file(gpointer a, struct file_transfer *old_ft) | |
1661 { | |
1662 struct file_transfer *ft; | |
1663 const char *dirname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(old_ft->window)); | |
5605 | 1664 GaimAccount *account; |
2086 | 1665 char buf[BUF_LEN * 2]; |
1666 | |
1667 if (file_is_dir(dirname, old_ft->window)) | |
1668 return; | |
1669 ft = g_new0(struct file_transfer, 1); | |
1670 if (old_ft->files == 1) | |
1671 ft->filename = g_strdup(dirname); | |
1672 else | |
4793 | 1673 ft->filename = g_path_get_dirname(dirname); |
2086 | 1674 ft->cookie = g_strdup(old_ft->cookie); |
1675 ft->user = g_strdup(old_ft->user); | |
1676 ft->ip = g_strdup(old_ft->ip); | |
1677 ft->files = old_ft->files; | |
1678 ft->port = old_ft->port; | |
1679 ft->gc = old_ft->gc; | |
4491 | 1680 account = ft->gc->account; |
2086 | 1681 gtk_widget_destroy(old_ft->window); |
1682 | |
1683 g_snprintf(buf, sizeof(buf), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_SEND_UID); | |
1684 sflap_send(ft->gc, buf, -1, TYPE_DATA); | |
1685 | |
4634 | 1686 if (proxy_connect(account, ft->ip, ft->port, toc_send_file_connect, ft) != 0) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1687 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1688 _("Could not connect for transfer."), NULL); |
2086 | 1689 g_free(ft->filename); |
1690 g_free(ft->cookie); | |
1691 g_free(ft->user); | |
1692 g_free(ft->ip); | |
1693 g_free(ft); | |
1694 return; | |
1695 } | |
1696 } | |
1697 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1698 static void toc_get_file_callback(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1699 { |
1700 char buf[BUF_LONG]; | |
1701 | |
1702 struct file_transfer *ft = data; | |
1703 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1704 if (cond & GAIM_INPUT_WRITE) { |
2086 | 1705 int remain = MIN(ntohl(ft->hdr.totsize) - ft->recvsize, 1024); |
1706 int i; | |
1707 for (i = 0; i < remain; i++) | |
1708 fscanf(ft->file, "%c", &buf[i]); | |
3630 | 1709 toc_write(source, buf, remain); |
2086 | 1710 ft->recvsize += remain; |
1711 if (ft->recvsize == ntohl(ft->hdr.totsize)) { | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1712 gaim_input_remove(ft->inpa); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1713 ft->inpa = gaim_input_add(source, GAIM_INPUT_READ, |
2086 | 1714 toc_get_file_callback, ft); |
1715 } | |
1716 return; | |
1717 } | |
1718 | |
1719 if (ft->hdr.hdrtype == htons(0x1108)) { | |
1720 struct tm *fortime; | |
1721 struct stat st; | |
4793 | 1722 char *basename; |
2086 | 1723 |
3630 | 1724 toc_read(source, ft, 8); |
1725 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1726 debug_header(ft); |
1727 | |
1728 stat(ft->filename, &st); | |
1729 fortime = localtime(&st.st_mtime); | |
4793 | 1730 basename = g_path_get_basename(ft->filename); |
2086 | 1731 g_snprintf(buf, sizeof(buf), "%2d/%2d/%4d %2d:%2d %8ld %s\r\n", |
1732 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, | |
1733 fortime->tm_hour + 1, fortime->tm_min + 1, (long)st.st_size, | |
4793 | 1734 basename); |
3630 | 1735 toc_write(source, buf, ntohl(ft->hdr.size)); |
4793 | 1736 g_free(basename); |
2086 | 1737 return; |
1738 } | |
1739 | |
1740 if (ft->hdr.hdrtype == htons(0x1209)) { | |
3630 | 1741 toc_read(source, ft, 8); |
1742 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1743 debug_header(ft); |
1744 return; | |
1745 } | |
1746 | |
1747 if (ft->hdr.hdrtype == htons(0x120b)) { | |
3630 | 1748 toc_read(source, ft, 8); |
1749 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1750 debug_header(ft); |
1751 | |
1752 if (ft->hdr.hdrtype != htons(0x120c)) { | |
1753 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1754 gaim_notify_error(ft->gc, NULL, buf, NULL); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1755 gaim_input_remove(ft->inpa); |
3630 | 1756 toc_soc_close(source); |
2086 | 1757 g_free(ft->filename); |
1758 g_free(ft->user); | |
1759 g_free(ft->ip); | |
1760 g_free(ft->cookie); | |
1761 if (ft->file) | |
1762 fclose(ft->file); | |
1763 g_free(ft); | |
1764 return; | |
1765 } | |
1766 | |
1767 ft->hdr.hdrtype = 0x0101; | |
1768 ft->hdr.totfiles = htons(1); ft->hdr.filesleft = htons(1); | |
1769 ft->hdr.flags = 0x20; | |
3630 | 1770 toc_write(source, ft, 256); |
2086 | 1771 return; |
1772 } | |
1773 | |
1774 if (ft->hdr.hdrtype == 0x0101) { | |
3630 | 1775 toc_read(source, ft, 8); |
1776 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1777 debug_header(ft); |
1778 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1779 gaim_input_remove(ft->inpa); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1780 ft->inpa = gaim_input_add(source, GAIM_INPUT_WRITE, |
2086 | 1781 toc_get_file_callback, ft); |
1782 return; | |
1783 } | |
1784 | |
1785 if (ft->hdr.hdrtype == 0x0202) { | |
3630 | 1786 toc_read(source, ft, 8); |
1787 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1788 debug_header(ft); |
1789 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1790 gaim_input_remove(ft->inpa); |
3630 | 1791 toc_soc_close(source); |
2086 | 1792 g_free(ft->filename); |
1793 g_free(ft->user); | |
1794 g_free(ft->ip); | |
1795 g_free(ft->cookie); | |
1796 if (ft->file) | |
1797 fclose(ft->file); | |
1798 g_free(ft); | |
1799 return; | |
1800 } | |
1801 } | |
1802 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1803 static void toc_get_file_connect(gpointer data, gint src, GaimInputCondition cond) |
2086 | 1804 { |
1805 struct file_transfer *ft = data; | |
1806 struct file_header *hdr; | |
1807 char *buf; | |
4793 | 1808 char *basename; |
2086 | 1809 |
1810 if (src == -1) { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1811 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1812 _("Could not connect for transfer!"), NULL); |
2086 | 1813 fclose(ft->file); |
1814 g_free(ft->filename); | |
1815 g_free(ft->cookie); | |
1816 g_free(ft->user); | |
1817 g_free(ft->ip); | |
1818 g_free(ft); | |
1819 return; | |
1820 } | |
1821 | |
1822 hdr = (struct file_header *)ft; | |
1823 hdr->magic[0] = 'O'; hdr->magic[1] = 'F'; hdr->magic[2] = 'T'; hdr->magic[3] = '2'; | |
1824 hdr->hdrlen = htons(256); | |
1825 hdr->hdrtype = htons(0x1108); | |
1826 frombase64(ft->cookie, &buf, NULL); | |
1827 g_snprintf(hdr->bcookie, 8, "%s", buf); | |
1828 g_free(buf); | |
1829 hdr->totfiles = htons(1); hdr->filesleft = htons(1); | |
1830 hdr->totparts = htons(1); hdr->partsleft = htons(1); | |
1831 hdr->totsize = htonl((long)ft->st.st_size); /* combined size of all files */ | |
1832 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ | |
4793 | 1833 basename = g_path_get_basename(ft->filename); |
1834 hdr->size = htonl(28 + strlen(basename)); /* size of listing.txt */ | |
1835 g_free(basename); | |
2086 | 1836 hdr->modtime = htonl(ft->st.st_mtime); |
1837 hdr->checksum = htonl(0x89f70000); /* uh... */ | |
1838 g_snprintf(hdr->idstring, 32, "OFT_Windows ICBMFT V1.1 32"); | |
1839 hdr->flags = 0x02; | |
1840 hdr->lnameoffset = 0x1A; | |
1841 hdr->lsizeoffset = 0x10; | |
1842 g_snprintf(hdr->name, 64, "listing.txt"); | |
3630 | 1843 if (toc_write(src, hdr, 256) < 0) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1844 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1845 _("Could not write file header. The file will " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1846 "not be transferred."), NULL); |
2086 | 1847 fclose(ft->file); |
1848 g_free(ft->filename); | |
1849 g_free(ft->cookie); | |
1850 g_free(ft->user); | |
1851 g_free(ft->ip); | |
1852 g_free(ft); | |
1853 return; | |
1854 } | |
1855 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1856 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_get_file_callback, ft); |
2086 | 1857 } |
1858 | |
1859 static void toc_get_file(gpointer a, struct file_transfer *old_ft) | |
1860 { | |
1861 struct file_transfer *ft; | |
1862 const char *dirname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(old_ft->window)); | |
5605 | 1863 GaimAccount *account; |
2086 | 1864 char *buf, buf2[BUF_LEN * 2]; |
1865 | |
1866 if (file_is_dir(dirname, old_ft->window)) | |
1867 return; | |
1868 ft = g_new0(struct file_transfer, 1); | |
1869 ft->filename = g_strdup(dirname); | |
1870 ft->file = fopen(ft->filename, "r"); | |
1871 if (!ft->file) { | |
3427 | 1872 buf = g_strdup_printf("Unable to open %s for transfer.", ft->filename); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1873 gaim_notify_error(ft->gc, NULL, buf, NULL); |
2086 | 1874 g_free(buf); |
1875 g_free(ft->filename); | |
1876 g_free(ft); | |
1877 return; | |
1878 } | |
1879 if (stat(dirname, &ft->st)) { | |
3427 | 1880 buf = g_strdup_printf("Unable to examine %s.", dirname); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1881 gaim_notify_error(ft->gc, NULL, buf, NULL); |
2086 | 1882 g_free(buf); |
1883 g_free(ft->filename); | |
1884 g_free(ft); | |
1885 return; | |
1886 } | |
1887 ft->cookie = g_strdup(old_ft->cookie); | |
1888 ft->user = g_strdup(old_ft->user); | |
1889 ft->ip = g_strdup(old_ft->ip); | |
1890 ft->port = old_ft->port; | |
1891 ft->gc = old_ft->gc; | |
4491 | 1892 account = ft->gc->account; |
2086 | 1893 gtk_widget_destroy(old_ft->window); |
1894 | |
1895 g_snprintf(buf2, sizeof(buf2), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_GET_UID); | |
1896 sflap_send(ft->gc, buf2, -1, TYPE_DATA); | |
1897 | |
4634 | 1898 if (proxy_connect(account, ft->ip, ft->port, toc_get_file_connect, ft) < 0) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1899 gaim_notify_error(ft->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5234
diff
changeset
|
1900 _("Could not connect for transfer."), NULL); |
2086 | 1901 fclose(ft->file); |
1902 g_free(ft->filename); | |
1903 g_free(ft->cookie); | |
1904 g_free(ft->user); | |
1905 g_free(ft->ip); | |
1906 g_free(ft); | |
1907 return; | |
1908 } | |
1909 } | |
1910 | |
1911 static void cancel_callback(gpointer a, struct file_transfer *ft) { | |
1912 gtk_widget_destroy(ft->window); | |
1913 if (a == ft->window) { | |
1914 g_free(ft->cookie); | |
1915 g_free(ft->user); | |
1916 g_free(ft->ip); | |
1917 g_free(ft); | |
1918 } | |
1919 } | |
1920 | |
3867 | 1921 static void toc_reject_ft(struct ft_request *ft) { |
1922 g_free(ft->user); | |
1923 g_free(ft->filename); | |
1924 g_free(ft->ip); | |
1925 g_free(ft->cookie); | |
1926 if (ft->message) | |
1927 g_free(ft->message); | |
1928 g_free(ft); | |
1929 } | |
1930 | |
1931 | |
3730 | 1932 static void toc_accept_ft(struct ft_request *fr) { |
5605 | 1933 if(g_list_find(gaim_connections_get_all(), fr->gc)) { |
4249 | 1934 GtkWidget *window; |
1935 char buf[BUF_LEN]; | |
2086 | 1936 |
4249 | 1937 struct file_transfer *ft = g_new0(struct file_transfer, 1); |
1938 ft->gc = fr->gc; | |
1939 ft->user = g_strdup(fr->user); | |
1940 ft->cookie = g_strdup(fr->cookie); | |
1941 ft->ip = g_strdup(fr->ip); | |
1942 ft->port = fr->port; | |
1943 ft->files = fr->files; | |
2086 | 1944 |
4249 | 1945 ft->window = window = gtk_file_selection_new(_("Gaim - Save As...")); |
1946 g_snprintf(buf, sizeof(buf), "%s/%s", gaim_home_dir(), fr->filename ? fr->filename : ""); | |
1947 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); | |
4635 | 1948 g_signal_connect(G_OBJECT(window), "destroy", |
1949 G_CALLBACK(cancel_callback), ft); | |
1950 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), | |
1951 "clicked", G_CALLBACK(cancel_callback), ft); | |
2086 | 1952 |
4249 | 1953 if (!strcmp(fr->UID, FILE_SEND_UID)) |
4635 | 1954 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
1955 "clicked", G_CALLBACK(toc_send_file), ft); | |
4249 | 1956 else |
4635 | 1957 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
1958 "clicked", G_CALLBACK(toc_get_file), ft); | |
2086 | 1959 |
4249 | 1960 gtk_widget_show(window); |
1961 } | |
1962 | |
3867 | 1963 toc_reject_ft(fr); |
2086 | 1964 } |
1965 | |
1966 static void accept_file_dialog(struct ft_request *ft) { | |
1967 char buf[BUF_LONG]; | |
1968 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
1969 /* holy crap. who the fuck would transfer gigabytes through AIM?! */ | |
1970 static char *sizes[4] = { "bytes", "KB", "MB", "GB" }; | |
1971 float size = ft->size; | |
1972 int index = 0; | |
1973 while ((index < 4) && (size > 1024)) { | |
1974 size /= 1024; | |
1975 index++; | |
1976 } | |
2943 | 1977 g_snprintf(buf, sizeof(buf), |
4276 | 1978 ngettext( |
1979 "%s requests %s to accept %d file: %s (%.2f %s)%s%s", | |
1980 "%s requests %s to accept %d files: %s (%.2f %s)%s%s", | |
1981 ft->files), | |
5605 | 1982 ft->user, gaim_account_get_username(ft->gc->account), ft->files, |
2086 | 1983 ft->filename, size, sizes[index], (ft->message) ? "\n" : "", |
1984 (ft->message) ? ft->message : ""); | |
1985 } else { | |
1986 g_snprintf(buf, sizeof(buf), _("%s requests you to send them a file"), ft->user); | |
1987 } | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1988 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1989 gaim_request_accept_cancel(ft->gc, NULL, buf, NULL, 0, ft, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1990 G_CALLBACK(toc_accept_ft), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
1991 G_CALLBACK(toc_reject_ft)); |
2086 | 1992 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1993 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1994 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1995 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1996 GAIM_PROTO_TOC, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1997 OPT_PROTO_CORRECT_TIME, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1998 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1999 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2000 toc_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2001 toc_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2002 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2003 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2004 toc_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2005 toc_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2006 toc_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2007 toc_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2008 toc_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2009 toc_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2010 toc_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2011 toc_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2012 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2013 toc_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2014 toc_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2015 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2016 toc_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2017 toc_get_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2018 toc_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2019 toc_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2020 toc_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2021 toc_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2022 toc_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2023 toc_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2024 toc_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2025 toc_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2026 toc_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2027 toc_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2028 toc_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2029 toc_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2030 toc_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2031 toc_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2032 toc_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2033 toc_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2034 toc_chat_whisper, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2035 toc_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2036 toc_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2037 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2038 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2039 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2040 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2041 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2042 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2043 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2044 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2045 NULL |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2046 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2047 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2048 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2049 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2050 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2051 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2052 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2053 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2054 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2055 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2056 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2057 "prpl-toc", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2058 "TOC", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2059 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2060 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2061 N_("TOC Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2062 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2063 N_("TOC Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2064 NULL, /**< author */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2065 WEBSITE, /**< homepage */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2066 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2067 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2068 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2069 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2070 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2071 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2072 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2073 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2074 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2075 static void |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2076 __init_plugin(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2077 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2078 GaimAccountOption *option; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2079 |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2080 option = gaim_account_option_string_new(_("TOC Host"), "server", TOC_HOST); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2081 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2082 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2083 |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2084 option = gaim_account_option_int_new(_("TOC Host"), "port", TOC_PORT); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2085 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5605
diff
changeset
|
2086 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2087 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2088 my_protocol = plugin; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2089 } |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2090 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2091 GAIM_INIT_PLUGIN(toc, __init_plugin, info); |