Mercurial > pidgin.yaz
annotate src/protocols/toc/toc.c @ 5205:fefad67de2c7
[gaim-migrate @ 5573]
I had a damn good commit message, but it was eaten. Let's try it again.
Announcing, Gaim Plugin API version 2.0, or GPAPIV2.0 for short.
There are lots'a cool thingies here.
Okay now, this isn't as cool as the previous message, but:
1) There's now a single entry function for all plugin types. It returns a
detailed information structure on the plugin. This removes a lot of the
ugliness from old plugins. Oh yeah, libicq wasn't converted to this, so
if you use it, well, you shouldn't have used it anyway, but now you
can't! bwahahaha. Use AIM/ICQ.
2) There are now 3 types of plugins: Standard, Loader, and Protocol
plugins.
Standard plugins are, well, standard, compiled plugins.
Loader plugins load other plugins. For example, the perl support is now
a loader plugin. It loads perl scripts. In the future, we'll have
Ruby and Python loader plugins.
Protocol plugins are, well, protocol plugins... yeah...
3) Plugins have unique IDs, so they can be referred to or automatically
updated from a plugin database in the future. Neat, huh?
4) Plugins will have dependency support in the future, and can be hidden,
so if you have, say, a logging core plugin, it won't have to show up,
but then you load the GTK+ logging plugin and it'll auto-load the core
plugin. Core/UI split plugins!
5) There will eventually be custom plugin signals and RPC of some sort, for
the core/ui split plugins.
So, okay, back up .gaimrc.
I'd like to thank my parents for their support, javabsp for helping convert
a bunch of protocol plugins, and Etan for helping convert a bunch of
standard plugins.
Have fun. If you have any problems, please let me know, but you probably
won't have anything major happen. You will have to convert your plugins,
though, and I'm not guaranteeing that all perl scripts will still work.
I'll end up changing the perl script API eventually, so I know they won't
down the road. Don't worry, though. It'll be mass cool.
faceprint wants me to just commit the damn code already. So, here we go!!!
..
..
I need a massage. From a young, cute girl. Are there any young, cute girls
in the audience? IM me plz k thx.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 25 Apr 2003 06:47:33 +0000 |
parents | 381da05cb5ed |
children | 890b29f00b68 |
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; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
821 int *id = g_new0(int, 1); |
2086 | 822 |
823 name = strtok(NULL, ":"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
824 sscanf(strtok(NULL, ":"), "%d", id); |
2086 | 825 who = strtok(NULL, ":"); |
826 message = strtok(NULL, ":"); | |
827 | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
828 serv_got_chat_invite(gc, name, who, message, g_list_append(NULL, id)); |
4793 | 829 } else if (!g_ascii_strcasecmp(c, "CHAT_LEFT")) { |
2086 | 830 GSList *bcs = gc->buddy_chats; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
831 struct gaim_conversation *b = NULL; |
2086 | 832 int id; |
833 | |
834 sscanf(strtok(NULL, ":"), "%d", &id); | |
835 | |
836 while (bcs) { | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
837 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
838 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 839 break; |
840 b = NULL; | |
841 bcs = bcs->next; | |
842 } | |
843 | |
844 if (!b) | |
845 return; | |
846 | |
847 if (b->window) { | |
848 char error_buf[BUF_LONG]; | |
4491 | 849 gaim_conversation_set_account(b, NULL); |
2086 | 850 g_snprintf(error_buf, sizeof error_buf, _("You have been disconnected" |
851 " from chat room %s."), b->name); | |
3427 | 852 do_error_dialog(error_buf, NULL, GAIM_ERROR); |
2086 | 853 } else |
854 serv_got_chat_left(gc, id); | |
4793 | 855 } else if (!g_ascii_strcasecmp(c, "GOTO_URL")) { |
2086 | 856 char *name, *url, tmp[256]; |
857 | |
858 name = strtok(NULL, ":"); | |
859 url = strtok(NULL, ":"); | |
860 | |
4597 | 861 g_snprintf(tmp, sizeof(tmp), "http://%s:%d/%s", tdt->toc_ip, |
4491 | 862 gc->account->proto_opt[USEROPT_AUTHPORT][0] ? |
863 atoi(gc->account->proto_opt[USEROPT_AUTHPORT]) : TOC_PORT, | |
2086 | 864 url); |
2584
34812d648f72
[gaim-migrate @ 2597]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2526
diff
changeset
|
865 grab_url(tmp, FALSE, toc_got_info, NULL); |
4793 | 866 } else if (!g_ascii_strcasecmp(c, "DIR_STATUS")) { |
867 } else if (!g_ascii_strcasecmp(c, "ADMIN_NICK_STATUS")) { | |
868 } else if (!g_ascii_strcasecmp(c, "ADMIN_PASSWD_STATUS")) { | |
3427 | 869 do_error_dialog(_("Password Change Successful"), NULL, GAIM_INFO); |
4793 | 870 } else if (!g_ascii_strcasecmp(c, "PAUSE")) { |
2086 | 871 tdt->state = STATE_PAUSE; |
3427 | 872 do_error_dialog(_("TOC has sent a PAUSE command."), _("When this happens, TOC ignores" |
2086 | 873 " any messages sent to it, and may kick you off if you send a" |
874 " message. Gaim will prevent anything from going through. This" | |
3427 | 875 " is only temporary, please be patient."), GAIM_WARNING); |
4793 | 876 } else if (!g_ascii_strcasecmp(c, "RVOUS_PROPOSE")) { |
2086 | 877 char *user, *uuid, *cookie; |
878 int seq; | |
3159 | 879 char *rip, *pip, *vip, *trillian = NULL; |
2086 | 880 int port; |
3126 | 881 |
2086 | 882 user = strtok(NULL, ":"); |
883 uuid = strtok(NULL, ":"); | |
884 cookie = strtok(NULL, ":"); | |
885 sscanf(strtok(NULL, ":"), "%d", &seq); | |
886 rip = strtok(NULL, ":"); | |
887 pip = strtok(NULL, ":"); | |
888 vip = strtok(NULL, ":"); | |
889 sscanf(strtok(NULL, ":"), "%d", &port); | |
890 | |
891 if (!strcmp(uuid, FILE_SEND_UID)) { | |
892 /* they want us to get a file */ | |
893 int unk[4], i; | |
894 char *messages[4], *tmp, *name; | |
895 int subtype, files, totalsize = 0; | |
896 struct ft_request *ft; | |
897 | |
898 for (i = 0; i < 4; i++) { | |
3126 | 899 trillian = strtok(NULL, ":"); |
900 sscanf(trillian, "%d", &unk[i]); | |
2086 | 901 if (unk[i] == 10001) |
902 break; | |
3126 | 903 /* Trillian likes to send an empty token as a message, rather than |
904 no message at all. */ | |
905 if (*(trillian + strlen(trillian) +1) != ':') | |
906 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
2086 | 907 } |
3126 | 908 |
2086 | 909 frombase64(strtok(NULL, ":"), &tmp, NULL); |
910 | |
911 subtype = tmp[1]; | |
912 files = tmp[3]; | |
913 | |
914 totalsize |= (tmp[4] << 24) & 0xff000000; | |
915 totalsize |= (tmp[5] << 16) & 0x00ff0000; | |
916 totalsize |= (tmp[6] << 8) & 0x0000ff00; | |
917 totalsize |= (tmp[7] << 0) & 0x000000ff; | |
918 | |
919 if (!totalsize) { | |
920 g_free(tmp); | |
921 for (i--; i >= 0; i--) | |
922 g_free(messages[i]); | |
923 return; | |
924 } | |
925 | |
926 name = tmp + 8; | |
927 | |
928 ft = g_new0(struct ft_request, 1); | |
929 ft->cookie = g_strdup(cookie); | |
930 ft->ip = g_strdup(pip); | |
931 ft->port = port; | |
932 if (i) | |
933 ft->message = g_strdup(messages[0]); | |
934 else | |
935 ft->message = NULL; | |
936 ft->filename = g_strdup(name); | |
937 ft->user = g_strdup(user); | |
938 ft->size = totalsize; | |
939 ft->files = files; | |
940 g_snprintf(ft->UID, sizeof(ft->UID), "%s", FILE_SEND_UID); | |
941 ft->gc = gc; | |
942 | |
943 g_free(tmp); | |
944 for (i--; i >= 0; i--) | |
945 g_free(messages[i]); | |
946 | |
947 debug_printf("English translation of RVOUS_PROPOSE: %s requests Send File (i.e." | |
948 " 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
|
949 " total size of %d bytes.\n", user, vip, port, files, totalsize); |
2086 | 950 accept_file_dialog(ft); |
951 } else if (!strcmp(uuid, FILE_GET_UID)) { | |
952 /* they want us to send a file */ | |
953 int unk[4], i; | |
954 char *messages[4], *tmp; | |
955 struct ft_request *ft; | |
956 | |
957 for (i = 0; i < 4; i++) { | |
958 sscanf(strtok(NULL, ":"), "%d", unk + i); | |
959 if (unk[i] == 10001) | |
960 break; | |
3126 | 961 /* Trillian likes to send an empty token as a message, rather than |
962 no message at all. */ | |
963 if (*(trillian + strlen(trillian) +1) != ':') | |
964 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
2086 | 965 } |
966 frombase64(strtok(NULL, ":"), &tmp, NULL); | |
967 | |
968 ft = g_new0(struct ft_request, 1); | |
969 ft->cookie = g_strdup(cookie); | |
970 ft->ip = g_strdup(pip); | |
971 ft->port = port; | |
972 if (i) | |
973 ft->message = g_strdup(messages[0]); | |
974 else | |
975 ft->message = NULL; | |
976 ft->user = g_strdup(user); | |
977 g_snprintf(ft->UID, sizeof(ft->UID), "%s", FILE_GET_UID); | |
978 ft->gc = gc; | |
979 | |
980 g_free(tmp); | |
981 for (i--; i >= 0; i--) | |
982 g_free(messages[i]); | |
983 | |
984 accept_file_dialog(ft); | |
985 } else if (!strcmp(uuid, VOICE_UID)) { | |
986 /* oh goody. voice over ip. fun stuff. */ | |
987 } else if (!strcmp(uuid, B_ICON_UID)) { | |
988 /* | |
989 int unk[4], i; | |
990 char *messages[4]; | |
991 struct buddy_icon *icon; | |
992 | |
993 for (i = 0; i < 4; i++) { | |
994 sscanf(strtok(NULL, ":"), "%d", unk + i); | |
995 if (unk[i] == 10001) | |
996 break; | |
997 frombase64(strtok(NULL, ":"), &messages[i], NULL); | |
998 } | |
999 frombase64(strtok(NULL, ":"), (char **)&icon, NULL); | |
1000 | |
1001 debug_printf("received icon of length %d\n", icon->len); | |
1002 g_free(icon); | |
1003 for (i--; i >= 0; i--) | |
1004 g_free(messages[i]); | |
1005 */ | |
1006 } else if (!strcmp(uuid, IMAGE_UID)) { | |
1007 /* aka Direct IM */ | |
1008 } else { | |
1009 debug_printf("Don't know what to do with RVOUS UUID %s\n", uuid); | |
1010 /* do we have to do anything here? i think it just times out */ | |
1011 } | |
1012 } else { | |
1013 debug_printf("don't know what to do with %s\n", c); | |
1014 } | |
1015 } | |
1016 | |
5136 | 1017 static int toc_send_im(struct gaim_connection *gc, const char *name, const char *message, int len, int flags) |
2086 | 1018 { |
1019 char buf[BUF_LEN * 2]; | |
2343
29449a6b79e6
[gaim-migrate @ 2356]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2334
diff
changeset
|
1020 char *tmp = g_malloc(strlen(message) * 4 + 1); /* 4 because \n gets replaced with <BR> */ |
2086 | 1021 |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1022 strcpy(tmp, message); |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1023 escape_text(tmp); |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1024 if (strlen(tmp) + 52 > MSG_LEN) { |
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1025 g_free(tmp); |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
1026 return -E2BIG; |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1027 } |
2086 | 1028 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
|
1029 tmp, ((flags & IM_FLAG_AWAY) ? " auto" : "")); |
2086 | 1030 sflap_send(gc, buf, -1, TYPE_DATA); |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
1031 |
2136
73253b36c3cb
[gaim-migrate @ 2146]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2130
diff
changeset
|
1032 g_free(tmp); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2281
diff
changeset
|
1033 return 1; |
2086 | 1034 } |
1035 | |
1036 static void toc_set_config(struct gaim_connection *gc) | |
1037 { | |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1038 char *buf = g_malloc(MSG_LEN), snd[BUF_LEN * 2]; |
4491 | 1039 toc_build_config(gc->account, buf, MSG_LEN - strlen("toc_set_config \\{\\}"), FALSE); |
2086 | 1040 g_snprintf(snd, MSG_LEN, "toc_set_config {%s}", buf); |
1041 sflap_send(gc, snd, -1, TYPE_DATA); | |
2281
cc462108c101
[gaim-migrate @ 2291]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1042 g_free(buf); |
2086 | 1043 } |
1044 | |
5136 | 1045 static void toc_get_info(struct gaim_connection *g, const char *name) |
2086 | 1046 { |
1047 char buf[BUF_LEN * 2]; | |
1048 g_snprintf(buf, MSG_LEN, "toc_get_info %s", normalize(name)); | |
1049 sflap_send(g, buf, -1, TYPE_DATA); | |
1050 } | |
1051 | |
5136 | 1052 static void toc_get_dir(struct gaim_connection *g, const char *name) |
2086 | 1053 { |
1054 char buf[BUF_LEN * 2]; | |
1055 g_snprintf(buf, MSG_LEN, "toc_get_dir %s", normalize(name)); | |
1056 sflap_send(g, buf, -1, TYPE_DATA); | |
1057 } | |
1058 | |
3466 | 1059 static void toc_set_dir(struct gaim_connection *g, const char *first, const char *middle, const char *last, |
1060 const char *maiden, const char *city, const char *state, const char *country, int web) | |
2086 | 1061 { |
1062 char buf2[BUF_LEN * 4], buf[BUF_LEN]; | |
1063 g_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%s:%s:%s:%s:%s", first, | |
1064 middle, last, maiden, city, state, country, (web == 1) ? "Y" : ""); | |
1065 escape_text(buf2); | |
1066 g_snprintf(buf, sizeof(buf), "toc_set_dir %s", buf2); | |
1067 sflap_send(g, buf, -1, TYPE_DATA); | |
1068 } | |
1069 | |
3466 | 1070 static void toc_dir_search(struct gaim_connection *g, const char *first, const char *middle, const char *last, |
1071 const char *maiden, const char *city, const char *state, const char *country, const char *email) | |
2086 | 1072 { |
1073 char buf[BUF_LONG]; | |
1074 g_snprintf(buf, sizeof(buf) / 2, "toc_dir_search %s:%s:%s:%s:%s:%s:%s:%s", first, middle, | |
1075 last, maiden, city, state, country, email); | |
1076 debug_printf("Searching for: %s,%s,%s,%s,%s,%s,%s\n", first, middle, last, maiden, | |
1077 city, state, country); | |
1078 sflap_send(g, buf, -1, TYPE_DATA); | |
1079 } | |
1080 | |
1081 static void toc_set_away(struct gaim_connection *g, char *state, char *message) | |
1082 { | |
1083 char buf[BUF_LEN * 2]; | |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1084 if (g->away) { |
2086 | 1085 g_free (g->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1086 g->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
3867
diff
changeset
|
1087 } |
2086 | 1088 if (message) { |
3188 | 1089 char *tmp = g_malloc(strlen(message) * 4 + 1); |
1090 strcpy(tmp, message); | |
2086 | 1091 g->away = g_strdup (message); |
3188 | 1092 escape_text(tmp); |
1093 g_snprintf(buf, MSG_LEN, "toc_set_away \"%s\"", tmp); | |
1094 g_free(tmp); | |
2086 | 1095 } else |
1096 g_snprintf(buf, MSG_LEN, "toc_set_away \"\""); | |
1097 sflap_send(g, buf, -1, TYPE_DATA); | |
1098 } | |
1099 | |
1100 static void toc_set_info(struct gaim_connection *g, char *info) | |
1101 { | |
1102 char buf[BUF_LEN * 2], buf2[BUF_LEN * 2]; | |
1103 g_snprintf(buf2, sizeof buf2, "%s", info); | |
1104 escape_text(buf2); | |
1105 g_snprintf(buf, sizeof(buf), "toc_set_info \"%s\n\"", buf2); | |
1106 sflap_send(g, buf, -1, TYPE_DATA); | |
1107 } | |
1108 | |
3466 | 1109 static void toc_change_passwd(struct gaim_connection *g, const char *orig, const char *new) |
2086 | 1110 { |
1111 char buf[BUF_LEN * 2]; | |
1112 g_snprintf(buf, BUF_LONG, "toc_change_passwd %s %s", orig, new); | |
1113 sflap_send(g, buf, strlen(buf), TYPE_DATA); | |
1114 } | |
1115 | |
3466 | 1116 static void toc_add_buddy(struct gaim_connection *g, const char *name) |
2086 | 1117 { |
1118 char buf[BUF_LEN * 2]; | |
1119 g_snprintf(buf, sizeof(buf), "toc_add_buddy %s", normalize(name)); | |
1120 sflap_send(g, buf, -1, TYPE_DATA); | |
1121 toc_set_config(g); | |
1122 } | |
1123 | |
2334
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1124 static void toc_add_buddies(struct gaim_connection *g, GList *buddies) |
2086 | 1125 { |
1126 char buf[BUF_LEN * 2]; | |
1127 int n; | |
1128 | |
1129 n = g_snprintf(buf, sizeof(buf), "toc_add_buddy"); | |
1130 while (buddies) { | |
2130
50c7a704ee56
[gaim-migrate @ 2140]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2128
diff
changeset
|
1131 if (strlen(normalize(buddies->data)) + n + 32 > MSG_LEN) { |
2086 | 1132 sflap_send(g, buf, -1, TYPE_DATA); |
1133 n = g_snprintf(buf, sizeof(buf), "toc_add_buddy"); | |
1134 } | |
1135 n += g_snprintf(buf + n, sizeof(buf) - n, " %s", normalize(buddies->data)); | |
1136 buddies = buddies->next; | |
1137 } | |
1138 sflap_send(g, buf, -1, TYPE_DATA); | |
1139 } | |
1140 | |
2681
37d80035e77f
[gaim-migrate @ 2694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1141 static void toc_remove_buddy(struct gaim_connection *g, char *name, char *group) |
2086 | 1142 { |
1143 char buf[BUF_LEN * 2]; | |
1144 g_snprintf(buf, sizeof(buf), "toc_remove_buddy %s", normalize(name)); | |
1145 sflap_send(g, buf, -1, TYPE_DATA); | |
1146 toc_set_config(g); | |
1147 } | |
1148 | |
3867 | 1149 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
|
1150 { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1151 char buf[BUF_LEN * 2]; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1152 int n; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1153 |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1154 n = g_snprintf(buf, sizeof(buf), "toc_remove_buddy"); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1155 while (buddies) { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1156 if (strlen(normalize(buddies->data)) + n + 32 > MSG_LEN) { |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1157 sflap_send(g, buf, -1, TYPE_DATA); |
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 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1160 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
|
1161 buddies = buddies->next; |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1162 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1163 sflap_send(g, buf, -1, TYPE_DATA); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1164 toc_set_config(g); |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1165 } |
b53cd5b63a99
[gaim-migrate @ 2347]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2309
diff
changeset
|
1166 |
2086 | 1167 static void toc_set_idle(struct gaim_connection *g, int time) |
1168 { | |
1169 char buf[BUF_LEN * 2]; | |
1170 g_snprintf(buf, sizeof(buf), "toc_set_idle %d", time); | |
1171 sflap_send(g, buf, -1, TYPE_DATA); | |
1172 } | |
1173 | |
1174 static void toc_warn(struct gaim_connection *g, char *name, int anon) | |
1175 { | |
1176 char send[BUF_LEN * 2]; | |
1177 g_snprintf(send, 255, "toc_evil %s %s", name, ((anon) ? "anon" : "norm")); | |
1178 sflap_send(g, send, -1, TYPE_DATA); | |
1179 } | |
1180 | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1181 static GList *toc_chat_info(struct gaim_connection *gc) |
2086 | 1182 { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1183 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1184 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1185 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1186 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1187 pce->label = _("Join what group:"); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1188 m = g_list_append(m, 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 = _("Exchange:"); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1192 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1193 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1194 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1195 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1196 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1197 return m; |
2086 | 1198 } |
1199 | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1200 static void toc_join_chat(struct gaim_connection *g, GList *data) |
2086 | 1201 { |
1202 char buf[BUF_LONG]; | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1203 int *exchange; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1204 char *name; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1205 int *i; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1206 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1207 if (!data) |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1208 return; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1209 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1210 if (!data->next) { |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1211 i = data->data; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1212 g_snprintf(buf, 255, "toc_chat_accept %d", *i); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1213 } else { |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1214 name = data->data; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1215 exchange = data->next->data; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1216 g_snprintf(buf, sizeof(buf) / 2, "toc_chat_join %d \"%s\"", *exchange, name); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1217 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1218 |
2086 | 1219 sflap_send(g, buf, -1, TYPE_DATA); |
1220 } | |
1221 | |
3466 | 1222 static void toc_chat_invite(struct gaim_connection *g, int id, const char *message, const char *name) |
2086 | 1223 { |
1224 char buf[BUF_LONG]; | |
2719
9747583279d1
[gaim-migrate @ 2732]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2706
diff
changeset
|
1225 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
|
1226 message ? message : "", normalize(name)); |
2086 | 1227 sflap_send(g, buf, -1, TYPE_DATA); |
1228 } | |
1229 | |
1230 static void toc_chat_leave(struct gaim_connection *g, int id) | |
1231 { | |
1232 GSList *bcs = g->buddy_chats; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1233 struct gaim_conversation *b = NULL; |
2086 | 1234 char buf[BUF_LEN * 2]; |
1235 | |
1236 while (bcs) { | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1237 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1238 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 1239 break; |
1240 b = NULL; | |
1241 bcs = bcs->next; | |
1242 } | |
1243 | |
1244 if (!b) | |
1245 return; /* can this happen? */ | |
1246 | |
4491 | 1247 if (gaim_conversation_get_account(b) == NULL) { |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1248 /* TOC already kicked us out of this room */ |
2086 | 1249 serv_got_chat_left(g, id); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1250 } |
2086 | 1251 else { |
1252 g_snprintf(buf, 255, "toc_chat_leave %d", id); | |
1253 sflap_send(g, buf, -1, TYPE_DATA); | |
1254 } | |
1255 } | |
1256 | |
1257 static void toc_chat_whisper(struct gaim_connection *g, int id, char *who, char *message) | |
1258 { | |
1259 char buf2[BUF_LEN * 2]; | |
2371
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
1260 escape_text(message); |
db02399a9ad7
[gaim-migrate @ 2384]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2343
diff
changeset
|
1261 g_snprintf(buf2, sizeof(buf2), "toc_chat_whisper %d %s \"%s\"", id, normalize(who), message); |
2086 | 1262 sflap_send(g, buf2, -1, TYPE_DATA); |
1263 } | |
1264 | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1265 static int toc_chat_send(struct gaim_connection *g, int id, char *message) |
2086 | 1266 { |
1267 char buf[BUF_LEN * 2]; | |
1268 escape_text(message); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1269 if (strlen(message) > 2000) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1270 return -E2BIG; |
2086 | 1271 g_snprintf(buf, sizeof(buf), "toc_chat_send %d \"%s\"", id, message); |
1272 sflap_send(g, buf, -1, TYPE_DATA); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1273 return 0; |
2086 | 1274 } |
1275 | |
1276 static void toc_keepalive(struct gaim_connection *gc) | |
1277 { | |
1278 sflap_send(gc, "", 0, TYPE_KEEPALIVE); | |
1279 } | |
1280 | |
4687 | 1281 static const char *toc_list_icon(struct gaim_account *a, struct buddy *b) |
2086 | 1282 { |
4687 | 1283 return "aim"; |
1284 } | |
4916 | 1285 |
4921 | 1286 static void toc_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) |
4916 | 1287 { |
1288 char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
1289 int i = 0; | |
1290 | |
5068 | 1291 if (b->present == GAIM_BUDDY_OFFLINE) { |
4916 | 1292 *se = "offline"; |
1293 return; | |
1294 } else { | |
1295 if (b->uc & UC_UNAVAILABLE) | |
1296 emblems[i++] = "away"; | |
1297 if (b->uc & UC_AOL) | |
1298 emblems[i++] = "aol"; | |
1299 if (b->uc & UC_ADMIN) | |
1300 emblems[i++] = "admin"; | |
1301 if (b->uc & UC_WIRELESS) | |
1302 emblems[i++] = "wireless"; | |
1303 } | |
1304 *se = emblems[0]; | |
1305 *sw = emblems[1]; | |
1306 *nw = emblems[2]; | |
1307 *ne = emblems[3]; | |
1308 } | |
2086 | 1309 |
5136 | 1310 static GList *toc_buddy_menu(struct gaim_connection *gc, const char *who) |
2086 | 1311 { |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1312 GList *m = NULL; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1313 struct proto_buddy_menu *pbm; |
2086 | 1314 |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1315 pbm = g_new0(struct proto_buddy_menu, 1); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1316 pbm->label = _("Get Dir Info"); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1317 pbm->callback = toc_get_dir; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1318 pbm->gc = gc; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1319 m = g_list_append(m, pbm); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1320 |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
1321 return m; |
2086 | 1322 } |
1323 | |
4349 | 1324 static void toc_add_permit(struct gaim_connection *gc, const char *who) |
2086 | 1325 { |
1326 char buf2[BUF_LEN * 2]; | |
4491 | 1327 if (gc->account->permdeny != 3) |
2086 | 1328 return; |
1329 g_snprintf(buf2, sizeof(buf2), "toc_add_permit %s", normalize(who)); | |
1330 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1331 toc_set_config(gc); | |
1332 } | |
1333 | |
4349 | 1334 static void toc_add_deny(struct gaim_connection *gc, const char *who) |
2086 | 1335 { |
1336 char buf2[BUF_LEN * 2]; | |
4491 | 1337 if (gc->account->permdeny != 4) |
2086 | 1338 return; |
1339 g_snprintf(buf2, sizeof(buf2), "toc_add_deny %s", normalize(who)); | |
1340 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1341 toc_set_config(gc); | |
1342 } | |
1343 | |
1344 static void toc_set_permit_deny(struct gaim_connection *gc) | |
1345 { | |
1346 char buf2[BUF_LEN * 2]; | |
1347 GSList *list; | |
1348 int at; | |
1349 | |
4491 | 1350 switch (gc->account->permdeny) { |
2086 | 1351 case 1: |
1352 /* permit all, deny none. to get here reliably we need to have been in permit | |
1353 * mode, and send an empty toc_add_deny message, which will switch us to deny none */ | |
1354 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1355 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1356 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1357 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1358 break; | |
1359 case 2: | |
1360 /* deny all, permit none. to get here reliably we need to have been in deny | |
1361 * mode, and send an empty toc_add_permit message, which will switch us to permit none */ | |
1362 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1363 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1364 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1365 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1366 break; | |
1367 case 3: | |
1368 /* permit some. we want to switch to deny mode first, then send the toc_add_permit | |
1369 * message, which will clear and set our permit list. toc sucks. */ | |
1370 g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1371 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1372 | |
1373 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
4491 | 1374 list = gc->account->permit; |
2086 | 1375 while (list) { |
1376 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data)); | |
1377 if (at > MSG_LEN + 32) { /* from out my ass comes greatness */ | |
1378 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1379 at = g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1380 } | |
1381 list = list->next; | |
1382 } | |
1383 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1384 break; | |
1385 case 4: | |
1386 /* deny some. we want to switch to permit mode first, then send the toc_add_deny | |
1387 * message, which will clear and set our deny list. toc sucks. */ | |
1388 g_snprintf(buf2, sizeof(buf2), "toc_add_permit "); | |
1389 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1390 | |
1391 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
4491 | 1392 list = gc->account->deny; |
2086 | 1393 while (list) { |
1394 at += g_snprintf(buf2 + at, sizeof(buf2) - at, "%s ", normalize(list->data)); | |
1395 if (at > MSG_LEN + 32) { /* from out my ass comes greatness */ | |
1396 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1397 at = g_snprintf(buf2, sizeof(buf2), "toc_add_deny "); | |
1398 } | |
1399 list = list->next; | |
1400 } | |
1401 sflap_send(gc, buf2, -1, TYPE_DATA); | |
1402 break; | |
1403 default: | |
1404 break; | |
1405 } | |
1406 toc_set_config(gc); | |
1407 } | |
1408 | |
4349 | 1409 static void toc_rem_permit(struct gaim_connection *gc, const char *who) |
2086 | 1410 { |
4491 | 1411 if (gc->account->permdeny != 3) |
2086 | 1412 return; |
1413 toc_set_permit_deny(gc); | |
1414 } | |
1415 | |
4349 | 1416 static void toc_rem_deny(struct gaim_connection *gc, const char *who) |
2086 | 1417 { |
4491 | 1418 if (gc->account->permdeny != 4) |
2086 | 1419 return; |
1420 toc_set_permit_deny(gc); | |
1421 } | |
1422 | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2453
diff
changeset
|
1423 static GList *toc_away_states(struct gaim_connection *gc) |
2086 | 1424 { |
1425 return g_list_append(NULL, GAIM_AWAY_CUSTOM); | |
1426 } | |
1427 | |
4333 | 1428 static GList *toc_actions(struct gaim_connection *gc) |
2086 | 1429 { |
1430 GList *m = NULL; | |
4333 | 1431 struct proto_actions_menu *pam; |
2086 | 1432 |
4333 | 1433 pam = g_new0(struct proto_actions_menu, 1); |
1434 pam->label = _("Set User Info"); | |
1435 pam->callback = show_set_info; | |
1436 pam->gc = gc; | |
1437 m = g_list_append(m, pam); | |
1438 | |
1439 pam = g_new0(struct proto_actions_menu, 1); | |
1440 pam->label = _("Set Dir Info"); | |
1441 pam->callback = show_set_dir; | |
1442 pam->gc = gc; | |
1443 m = g_list_append(m, pam); | |
1444 | |
1445 pam = g_new0(struct proto_actions_menu, 1); | |
1446 pam->label = _("Change Password"); | |
1447 pam->callback = show_change_passwd; | |
1448 pam->gc = gc; | |
1449 m = g_list_append(m, pam); | |
2086 | 1450 |
1451 return m; | |
1452 } | |
1453 | |
1454 /********* | |
1455 * RVOUS ACTIONS | |
1456 ********/ | |
1457 | |
1458 struct file_header { | |
1459 char magic[4]; /* 0 */ | |
1460 short hdrlen; /* 4 */ | |
1461 short hdrtype; /* 6 */ | |
1462 char bcookie[8]; /* 8 */ | |
1463 short encrypt; /* 16 */ | |
1464 short compress; /* 18 */ | |
1465 short totfiles; /* 20 */ | |
1466 short filesleft; /* 22 */ | |
1467 short totparts; /* 24 */ | |
1468 short partsleft; /* 26 */ | |
1469 long totsize; /* 28 */ | |
1470 long size; /* 32 */ | |
1471 long modtime; /* 36 */ | |
1472 long checksum; /* 40 */ | |
1473 long rfrcsum; /* 44 */ | |
1474 long rfsize; /* 48 */ | |
1475 long cretime; /* 52 */ | |
1476 long rfcsum; /* 56 */ | |
1477 long nrecvd; /* 60 */ | |
1478 long recvcsum; /* 64 */ | |
1479 char idstring[32]; /* 68 */ | |
1480 char flags; /* 100 */ | |
1481 char lnameoffset; /* 101 */ | |
1482 char lsizeoffset; /* 102 */ | |
1483 char dummy[69]; /* 103 */ | |
1484 char macfileinfo[16]; /* 172 */ | |
1485 short nencode; /* 188 */ | |
1486 short nlanguage; /* 190 */ | |
1487 char name[64]; /* 192 */ | |
1488 /* 256 */ | |
1489 }; | |
1490 | |
1491 struct file_transfer { | |
1492 struct file_header hdr; | |
1493 | |
1494 struct gaim_connection *gc; | |
1495 | |
1496 char *user; | |
1497 char *cookie; | |
1498 char *ip; | |
1499 int port; | |
1500 long size; | |
1501 struct stat st; | |
1502 | |
1503 GtkWidget *window; | |
1504 int files; | |
1505 char *filename; | |
1506 FILE *file; | |
1507 int recvsize; | |
1508 | |
1509 gint inpa; | |
1510 }; | |
1511 | |
1512 static void debug_header(struct file_transfer *ft) { | |
1513 struct file_header *f = (struct file_header *)ft; | |
1514 debug_printf("TOC FT HEADER:\n" | |
1515 "\t%s %d 0x%04x\n" | |
1516 "\t%s %d %d\n" | |
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1517 "\t%d %d %d %d %d %d\n" |
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1518 "\t%d %d %d %d %d %d %d %d\n" |
2086 | 1519 "\t%s\n" |
1520 "\t0x%02x, 0x%02x, 0x%02x\n" | |
1521 "\t%s %s\n" | |
1522 "\t%d %d\n" | |
1523 "\t%s\n", | |
1524 f->magic, ntohs(f->hdrlen), f->hdrtype, | |
1525 f->bcookie, ntohs(f->encrypt), ntohs(f->compress), | |
1526 ntohs(f->totfiles), ntohs(f->filesleft), ntohs(f->totparts), | |
1527 ntohs(f->partsleft), ntohl(f->totsize), ntohl(f->size), | |
1528 ntohl(f->modtime), ntohl(f->checksum), ntohl(f->rfrcsum), ntohl(f->rfsize), | |
1529 ntohl(f->cretime), ntohl(f->rfcsum), ntohl(f->nrecvd), | |
1530 ntohl(f->recvcsum), | |
1531 f->idstring, | |
1532 f->flags, f->lnameoffset, f->lsizeoffset, | |
1533 f->dummy, f->macfileinfo, | |
1534 ntohs(f->nencode), ntohs(f->nlanguage), | |
1535 f->name); | |
1536 } | |
1537 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1538 static void toc_send_file_callback(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1539 { |
1540 char buf[BUF_LONG]; | |
1541 int rt, i; | |
1542 | |
1543 struct file_transfer *ft = data; | |
1544 | |
1545 if (ft->hdr.hdrtype != 0x202) { | |
1546 char *buf; | |
1547 frombase64(ft->cookie, &buf, NULL); | |
1548 | |
3630 | 1549 toc_read(source, ft, 8); |
1550 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1551 debug_header(ft); |
1552 | |
1553 ft->hdr.hdrtype = 0x202; | |
1554 memcpy(ft->hdr.bcookie, buf, 8); | |
1555 g_free(buf); | |
1556 ft->hdr.encrypt = 0; ft->hdr.compress = 0; | |
1557 debug_header(ft); | |
3630 | 1558 toc_write(source, ft, 256); |
2086 | 1559 |
1560 if (ft->files == 1) { | |
1561 ft->file = fopen(ft->filename, "w"); | |
1562 if (!ft->file) { | |
4115 | 1563 buf = g_strdup_printf(_("Could not open %s for writing!"), ft->filename); |
3427 | 1564 do_error_dialog(buf, strerror(errno), GAIM_ERROR); |
2086 | 1565 g_free(buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1566 gaim_input_remove(ft->inpa); |
3630 | 1567 toc_soc_close(source); |
2086 | 1568 g_free(ft->filename); |
1569 g_free(ft->user); | |
1570 g_free(ft->ip); | |
1571 g_free(ft->cookie); | |
1572 g_free(ft); | |
1573 } | |
1574 } else { | |
1575 buf = g_strdup_printf("%s/%s", ft->filename, ft->hdr.name); | |
1576 ft->file = fopen(buf, "w"); | |
1577 g_free(buf); | |
1578 if (!ft->file) { | |
1579 buf = g_strdup_printf("Could not open %s/%s for writing!", ft->filename, | |
1580 ft->hdr.name); | |
3427 | 1581 do_error_dialog(buf, strerror(errno), GAIM_ERROR); |
2086 | 1582 g_free(buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1583 gaim_input_remove(ft->inpa); |
3630 | 1584 toc_soc_close(source); |
2086 | 1585 g_free(ft->filename); |
1586 g_free(ft->user); | |
1587 g_free(ft->ip); | |
1588 g_free(ft->cookie); | |
1589 g_free(ft); | |
1590 } | |
1591 } | |
1592 | |
1593 return; | |
1594 } | |
1595 | |
3630 | 1596 rt = toc_read(source, buf, MIN(ntohl(ft->hdr.size) - ft->recvsize, 1024)); |
2086 | 1597 if (rt < 0) { |
3427 | 1598 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
|
1599 gaim_input_remove(ft->inpa); |
3630 | 1600 toc_soc_close(source); |
2086 | 1601 g_free(ft->user); |
1602 g_free(ft->ip); | |
1603 g_free(ft->cookie); | |
1604 if (ft->file) | |
1605 fclose(ft->file); | |
1606 g_free(ft); | |
1607 return; | |
1608 } | |
1609 ft->recvsize += rt; | |
1610 for (i = 0; i < rt; i++) | |
1611 fprintf(ft->file, "%c", buf[i]); | |
1612 | |
1613 if (ft->recvsize == ntohl(ft->hdr.size)) { | |
1614 ft->hdr.hdrtype = htons(0x0204); | |
1615 ft->hdr.filesleft = htons(ntohs(ft->hdr.filesleft) - 1); | |
1616 ft->hdr.partsleft = htons(ntohs(ft->hdr.partsleft) - 1); | |
1617 ft->hdr.recvcsum = ft->hdr.checksum; /* uh... */ | |
1618 ft->hdr.nrecvd = htons(ntohs(ft->hdr.nrecvd) + 1); | |
1619 ft->hdr.flags = 0; | |
3630 | 1620 toc_write(source, ft, 256); |
2086 | 1621 debug_header(ft); |
1622 ft->recvsize = 0; | |
1623 fclose(ft->file); | |
1624 if (ft->hdr.filesleft == 0) { | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1625 gaim_input_remove(ft->inpa); |
3630 | 1626 toc_soc_close(source); |
2086 | 1627 g_free(ft->filename); |
1628 g_free(ft->user); | |
1629 g_free(ft->ip); | |
1630 g_free(ft->cookie); | |
1631 g_free(ft); | |
1632 } | |
1633 } | |
1634 } | |
1635 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1636 static void toc_send_file_connect(gpointer data, gint src, GaimInputCondition cond) |
2086 | 1637 { |
1638 struct file_transfer *ft = data; | |
1639 | |
1640 if (src == -1) { | |
3427 | 1641 do_error_dialog(_("Could not connect for transfer."), NULL, GAIM_ERROR); |
2086 | 1642 g_free(ft->filename); |
1643 g_free(ft->cookie); | |
1644 g_free(ft->user); | |
1645 g_free(ft->ip); | |
1646 g_free(ft); | |
1647 return; | |
1648 } | |
1649 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1650 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_send_file_callback, ft); |
2086 | 1651 } |
1652 | |
1653 static void toc_send_file(gpointer a, struct file_transfer *old_ft) | |
1654 { | |
1655 struct file_transfer *ft; | |
1656 const char *dirname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(old_ft->window)); | |
4491 | 1657 struct gaim_account *account; |
2086 | 1658 char buf[BUF_LEN * 2]; |
1659 | |
1660 if (file_is_dir(dirname, old_ft->window)) | |
1661 return; | |
1662 ft = g_new0(struct file_transfer, 1); | |
1663 if (old_ft->files == 1) | |
1664 ft->filename = g_strdup(dirname); | |
1665 else | |
4793 | 1666 ft->filename = g_path_get_dirname(dirname); |
2086 | 1667 ft->cookie = g_strdup(old_ft->cookie); |
1668 ft->user = g_strdup(old_ft->user); | |
1669 ft->ip = g_strdup(old_ft->ip); | |
1670 ft->files = old_ft->files; | |
1671 ft->port = old_ft->port; | |
1672 ft->gc = old_ft->gc; | |
4491 | 1673 account = ft->gc->account; |
2086 | 1674 gtk_widget_destroy(old_ft->window); |
1675 | |
1676 g_snprintf(buf, sizeof(buf), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_SEND_UID); | |
1677 sflap_send(ft->gc, buf, -1, TYPE_DATA); | |
1678 | |
4634 | 1679 if (proxy_connect(account, ft->ip, ft->port, toc_send_file_connect, ft) != 0) { |
3427 | 1680 do_error_dialog(_("Could not connect for transfer."), NULL, GAIM_ERROR); |
2086 | 1681 g_free(ft->filename); |
1682 g_free(ft->cookie); | |
1683 g_free(ft->user); | |
1684 g_free(ft->ip); | |
1685 g_free(ft); | |
1686 return; | |
1687 } | |
1688 } | |
1689 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1690 static void toc_get_file_callback(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1691 { |
1692 char buf[BUF_LONG]; | |
1693 | |
1694 struct file_transfer *ft = data; | |
1695 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1696 if (cond & GAIM_INPUT_WRITE) { |
2086 | 1697 int remain = MIN(ntohl(ft->hdr.totsize) - ft->recvsize, 1024); |
1698 int i; | |
1699 for (i = 0; i < remain; i++) | |
1700 fscanf(ft->file, "%c", &buf[i]); | |
3630 | 1701 toc_write(source, buf, remain); |
2086 | 1702 ft->recvsize += remain; |
1703 if (ft->recvsize == ntohl(ft->hdr.totsize)) { | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1704 gaim_input_remove(ft->inpa); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1705 ft->inpa = gaim_input_add(source, GAIM_INPUT_READ, |
2086 | 1706 toc_get_file_callback, ft); |
1707 } | |
1708 return; | |
1709 } | |
1710 | |
1711 if (ft->hdr.hdrtype == htons(0x1108)) { | |
1712 struct tm *fortime; | |
1713 struct stat st; | |
4793 | 1714 char *basename; |
2086 | 1715 |
3630 | 1716 toc_read(source, ft, 8); |
1717 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1718 debug_header(ft); |
1719 | |
1720 stat(ft->filename, &st); | |
1721 fortime = localtime(&st.st_mtime); | |
4793 | 1722 basename = g_path_get_basename(ft->filename); |
2086 | 1723 g_snprintf(buf, sizeof(buf), "%2d/%2d/%4d %2d:%2d %8ld %s\r\n", |
1724 fortime->tm_mon + 1, fortime->tm_mday, fortime->tm_year + 1900, | |
1725 fortime->tm_hour + 1, fortime->tm_min + 1, (long)st.st_size, | |
4793 | 1726 basename); |
3630 | 1727 toc_write(source, buf, ntohl(ft->hdr.size)); |
4793 | 1728 g_free(basename); |
2086 | 1729 return; |
1730 } | |
1731 | |
1732 if (ft->hdr.hdrtype == htons(0x1209)) { | |
3630 | 1733 toc_read(source, ft, 8); |
1734 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1735 debug_header(ft); |
1736 return; | |
1737 } | |
1738 | |
1739 if (ft->hdr.hdrtype == htons(0x120b)) { | |
3630 | 1740 toc_read(source, ft, 8); |
1741 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1742 debug_header(ft); |
1743 | |
1744 if (ft->hdr.hdrtype != htons(0x120c)) { | |
1745 g_snprintf(buf, sizeof(buf), "%s decided to cancel the transfer", ft->user); | |
3427 | 1746 do_error_dialog(buf, NULL, GAIM_ERROR); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1747 gaim_input_remove(ft->inpa); |
3630 | 1748 toc_soc_close(source); |
2086 | 1749 g_free(ft->filename); |
1750 g_free(ft->user); | |
1751 g_free(ft->ip); | |
1752 g_free(ft->cookie); | |
1753 if (ft->file) | |
1754 fclose(ft->file); | |
1755 g_free(ft); | |
1756 return; | |
1757 } | |
1758 | |
1759 ft->hdr.hdrtype = 0x0101; | |
1760 ft->hdr.totfiles = htons(1); ft->hdr.filesleft = htons(1); | |
1761 ft->hdr.flags = 0x20; | |
3630 | 1762 toc_write(source, ft, 256); |
2086 | 1763 return; |
1764 } | |
1765 | |
1766 if (ft->hdr.hdrtype == 0x0101) { | |
3630 | 1767 toc_read(source, ft, 8); |
1768 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1769 debug_header(ft); |
1770 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1771 gaim_input_remove(ft->inpa); |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1772 ft->inpa = gaim_input_add(source, GAIM_INPUT_WRITE, |
2086 | 1773 toc_get_file_callback, ft); |
1774 return; | |
1775 } | |
1776 | |
1777 if (ft->hdr.hdrtype == 0x0202) { | |
3630 | 1778 toc_read(source, ft, 8); |
1779 toc_read(source, &ft->hdr.bcookie, MIN(256 - 8, ntohs(ft->hdr.hdrlen) - 8)); | |
2086 | 1780 debug_header(ft); |
1781 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1782 gaim_input_remove(ft->inpa); |
3630 | 1783 toc_soc_close(source); |
2086 | 1784 g_free(ft->filename); |
1785 g_free(ft->user); | |
1786 g_free(ft->ip); | |
1787 g_free(ft->cookie); | |
1788 if (ft->file) | |
1789 fclose(ft->file); | |
1790 g_free(ft); | |
1791 return; | |
1792 } | |
1793 } | |
1794 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1795 static void toc_get_file_connect(gpointer data, gint src, GaimInputCondition cond) |
2086 | 1796 { |
1797 struct file_transfer *ft = data; | |
1798 struct file_header *hdr; | |
1799 char *buf; | |
4793 | 1800 char *basename; |
2086 | 1801 |
1802 if (src == -1) { | |
3427 | 1803 do_error_dialog(_("Could not connect for transfer!"), NULL, GAIM_ERROR); |
2086 | 1804 fclose(ft->file); |
1805 g_free(ft->filename); | |
1806 g_free(ft->cookie); | |
1807 g_free(ft->user); | |
1808 g_free(ft->ip); | |
1809 g_free(ft); | |
1810 return; | |
1811 } | |
1812 | |
1813 hdr = (struct file_header *)ft; | |
1814 hdr->magic[0] = 'O'; hdr->magic[1] = 'F'; hdr->magic[2] = 'T'; hdr->magic[3] = '2'; | |
1815 hdr->hdrlen = htons(256); | |
1816 hdr->hdrtype = htons(0x1108); | |
1817 frombase64(ft->cookie, &buf, NULL); | |
1818 g_snprintf(hdr->bcookie, 8, "%s", buf); | |
1819 g_free(buf); | |
1820 hdr->totfiles = htons(1); hdr->filesleft = htons(1); | |
1821 hdr->totparts = htons(1); hdr->partsleft = htons(1); | |
1822 hdr->totsize = htonl((long)ft->st.st_size); /* combined size of all files */ | |
1823 /* size = strlen("mm/dd/yyyy hh:mm sizesize 'name'\r\n") */ | |
4793 | 1824 basename = g_path_get_basename(ft->filename); |
1825 hdr->size = htonl(28 + strlen(basename)); /* size of listing.txt */ | |
1826 g_free(basename); | |
2086 | 1827 hdr->modtime = htonl(ft->st.st_mtime); |
1828 hdr->checksum = htonl(0x89f70000); /* uh... */ | |
1829 g_snprintf(hdr->idstring, 32, "OFT_Windows ICBMFT V1.1 32"); | |
1830 hdr->flags = 0x02; | |
1831 hdr->lnameoffset = 0x1A; | |
1832 hdr->lsizeoffset = 0x10; | |
1833 g_snprintf(hdr->name, 64, "listing.txt"); | |
3630 | 1834 if (toc_write(src, hdr, 256) < 0) { |
3427 | 1835 do_error_dialog(_("Could not write file header. The file will not be transferred."), NULL, GAIM_ERROR); |
2086 | 1836 fclose(ft->file); |
1837 g_free(ft->filename); | |
1838 g_free(ft->cookie); | |
1839 g_free(ft->user); | |
1840 g_free(ft->ip); | |
1841 g_free(ft); | |
1842 return; | |
1843 } | |
1844 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1845 ft->inpa = gaim_input_add(src, GAIM_INPUT_READ, toc_get_file_callback, ft); |
2086 | 1846 } |
1847 | |
1848 static void toc_get_file(gpointer a, struct file_transfer *old_ft) | |
1849 { | |
1850 struct file_transfer *ft; | |
1851 const char *dirname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(old_ft->window)); | |
4491 | 1852 struct gaim_account *account; |
2086 | 1853 char *buf, buf2[BUF_LEN * 2]; |
1854 | |
1855 if (file_is_dir(dirname, old_ft->window)) | |
1856 return; | |
1857 ft = g_new0(struct file_transfer, 1); | |
1858 ft->filename = g_strdup(dirname); | |
1859 ft->file = fopen(ft->filename, "r"); | |
1860 if (!ft->file) { | |
3427 | 1861 buf = g_strdup_printf("Unable to open %s for transfer.", ft->filename); |
1862 do_error_dialog(buf, NULL, GAIM_ERROR); | |
2086 | 1863 g_free(buf); |
1864 g_free(ft->filename); | |
1865 g_free(ft); | |
1866 return; | |
1867 } | |
1868 if (stat(dirname, &ft->st)) { | |
3427 | 1869 buf = g_strdup_printf("Unable to examine %s.", dirname); |
1870 do_error_dialog(buf, NULL, GAIM_ERROR); | |
2086 | 1871 g_free(buf); |
1872 g_free(ft->filename); | |
1873 g_free(ft); | |
1874 return; | |
1875 } | |
1876 ft->cookie = g_strdup(old_ft->cookie); | |
1877 ft->user = g_strdup(old_ft->user); | |
1878 ft->ip = g_strdup(old_ft->ip); | |
1879 ft->port = old_ft->port; | |
1880 ft->gc = old_ft->gc; | |
4491 | 1881 account = ft->gc->account; |
2086 | 1882 gtk_widget_destroy(old_ft->window); |
1883 | |
1884 g_snprintf(buf2, sizeof(buf2), "toc_rvous_accept %s %s %s", ft->user, ft->cookie, FILE_GET_UID); | |
1885 sflap_send(ft->gc, buf2, -1, TYPE_DATA); | |
1886 | |
4634 | 1887 if (proxy_connect(account, ft->ip, ft->port, toc_get_file_connect, ft) < 0) { |
3427 | 1888 do_error_dialog(_("Could not connect for transfer."), NULL, GAIM_ERROR); |
2086 | 1889 fclose(ft->file); |
1890 g_free(ft->filename); | |
1891 g_free(ft->cookie); | |
1892 g_free(ft->user); | |
1893 g_free(ft->ip); | |
1894 g_free(ft); | |
1895 return; | |
1896 } | |
1897 } | |
1898 | |
1899 static void cancel_callback(gpointer a, struct file_transfer *ft) { | |
1900 gtk_widget_destroy(ft->window); | |
1901 if (a == ft->window) { | |
1902 g_free(ft->cookie); | |
1903 g_free(ft->user); | |
1904 g_free(ft->ip); | |
1905 g_free(ft); | |
1906 } | |
1907 } | |
1908 | |
3867 | 1909 static void toc_reject_ft(struct ft_request *ft) { |
1910 g_free(ft->user); | |
1911 g_free(ft->filename); | |
1912 g_free(ft->ip); | |
1913 g_free(ft->cookie); | |
1914 if (ft->message) | |
1915 g_free(ft->message); | |
1916 g_free(ft); | |
1917 } | |
1918 | |
1919 | |
3730 | 1920 static void toc_accept_ft(struct ft_request *fr) { |
4249 | 1921 if(g_slist_find(connections, fr->gc)) { |
1922 GtkWidget *window; | |
1923 char buf[BUF_LEN]; | |
2086 | 1924 |
4249 | 1925 struct file_transfer *ft = g_new0(struct file_transfer, 1); |
1926 ft->gc = fr->gc; | |
1927 ft->user = g_strdup(fr->user); | |
1928 ft->cookie = g_strdup(fr->cookie); | |
1929 ft->ip = g_strdup(fr->ip); | |
1930 ft->port = fr->port; | |
1931 ft->files = fr->files; | |
2086 | 1932 |
4249 | 1933 ft->window = window = gtk_file_selection_new(_("Gaim - Save As...")); |
1934 g_snprintf(buf, sizeof(buf), "%s/%s", gaim_home_dir(), fr->filename ? fr->filename : ""); | |
1935 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); | |
4635 | 1936 g_signal_connect(G_OBJECT(window), "destroy", |
1937 G_CALLBACK(cancel_callback), ft); | |
1938 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(ft->window)->cancel_button), | |
1939 "clicked", G_CALLBACK(cancel_callback), ft); | |
2086 | 1940 |
4249 | 1941 if (!strcmp(fr->UID, FILE_SEND_UID)) |
4635 | 1942 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
1943 "clicked", G_CALLBACK(toc_send_file), ft); | |
4249 | 1944 else |
4635 | 1945 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), |
1946 "clicked", G_CALLBACK(toc_get_file), ft); | |
2086 | 1947 |
4249 | 1948 gtk_widget_show(window); |
1949 } | |
1950 | |
3867 | 1951 toc_reject_ft(fr); |
2086 | 1952 } |
1953 | |
1954 static void accept_file_dialog(struct ft_request *ft) { | |
1955 char buf[BUF_LONG]; | |
1956 if (!strcmp(ft->UID, FILE_SEND_UID)) { | |
1957 /* holy crap. who the fuck would transfer gigabytes through AIM?! */ | |
1958 static char *sizes[4] = { "bytes", "KB", "MB", "GB" }; | |
1959 float size = ft->size; | |
1960 int index = 0; | |
1961 while ((index < 4) && (size > 1024)) { | |
1962 size /= 1024; | |
1963 index++; | |
1964 } | |
2943 | 1965 g_snprintf(buf, sizeof(buf), |
4276 | 1966 ngettext( |
1967 "%s requests %s to accept %d file: %s (%.2f %s)%s%s", | |
1968 "%s requests %s to accept %d files: %s (%.2f %s)%s%s", | |
1969 ft->files), | |
2943 | 1970 ft->user, ft->gc->username, ft->files, |
2086 | 1971 ft->filename, size, sizes[index], (ft->message) ? "\n" : "", |
1972 (ft->message) ? ft->message : ""); | |
1973 } else { | |
1974 g_snprintf(buf, sizeof(buf), _("%s requests you to send them a file"), ft->user); | |
1975 } | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1976 do_ask_dialog(buf, NULL, ft, _("Accept"), toc_accept_ft, _("Cancel"), toc_reject_ft, my_protocol->handle, FALSE); |
2086 | 1977 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1978 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1979 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1980 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1981 GAIM_PROTO_TOC, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1982 OPT_PROTO_CORRECT_TIME, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1983 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1984 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1985 toc_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1986 toc_list_emblems, |
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 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1989 toc_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1990 toc_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1991 toc_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1992 toc_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1993 toc_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1994 toc_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1995 toc_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1996 toc_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1997 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1998 toc_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
1999 toc_set_away, |
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_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2002 toc_get_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2003 toc_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2004 toc_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2005 toc_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2006 toc_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2007 toc_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2008 toc_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2009 toc_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2010 toc_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2011 toc_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2012 toc_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2013 toc_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2014 toc_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2015 toc_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2016 toc_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2017 toc_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2018 toc_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2019 toc_chat_whisper, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2020 toc_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2021 toc_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2022 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2023 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2024 NULL, |
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 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2032 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2033 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2034 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2035 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2036 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2037 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2038 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2039 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2040 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2041 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2042 "prpl-toc", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2043 "TOC", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2044 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2045 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2046 N_("TOC Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2047 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2048 N_("TOC Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2049 NULL, /**< author */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2050 WEBSITE, /**< homepage */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2051 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2052 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2053 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2054 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2055 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2056 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2057 &prpl_info /**< extra_info */ |
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 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2060 static void |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2061 __init_plugin(GaimPlugin *plugin) |
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 struct proto_user_opt *puo; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2064 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2065 puo = g_new0(struct proto_user_opt, 1); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2066 puo->label = g_strdup(_("TOC Host:")); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2067 puo->def = g_strdup("toc.oscar.aol.com"); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2068 puo->pos = USEROPT_AUTH; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2069 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
|
2070 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2071 puo = g_new0(struct proto_user_opt, 1); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2072 puo->label = g_strdup(_("TOC Port:")); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2073 puo->def = g_strdup("9898"); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2074 puo->pos = USEROPT_AUTHPORT; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2075 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
|
2076 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2077 my_protocol = plugin; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5136
diff
changeset
|
2078 } |
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 GAIM_INIT_PLUGIN(toc, __init_plugin, info); |