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