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