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