Mercurial > pidgin.yaz
annotate src/protocols/oscar/oscar.c @ 5497:3c7748b24410
[gaim-migrate @ 5893]
I changed some small things.
1) 3 comments in 3 different files which makes "make docs" not give 3
warnings.
2) Made frombase16 return-via-parameter an unsigned char* instead of a
char*. Nothing actually uses frombase16, so this doesn't affect anything,
but it mirrors Nathan's change to tobase16, and should make the conversion
work correctly.
3) Fixed the bug Luke mailed to gaim-devel on Monday:
"sign on, change an aim account's email address, sign off, segfault.
it's happened 2x now" --Luke "The Yellow Dart" Schierer
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Fri, 23 May 2003 01:45:17 +0000 |
parents | 3e8487580024 |
children | cce2d7868c78 |
rev | line source |
---|---|
2086 | 1 /* |
2 * gaim | |
3 * | |
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx> | |
6 * | |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or | |
10 * (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 * GNU General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
20 * | |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
24 #include <config.h> |
2086 | 25 #endif |
26 | |
3664 | 27 #include <sys/types.h> |
4617 | 28 /* this must happen before sys/socket.h or freebsd won't compile */ |
3664 | 29 |
3630 | 30 #ifndef _WIN32 |
2086 | 31 #include <netdb.h> |
32 #include <netinet/in.h> | |
33 #include <arpa/inet.h> | |
3630 | 34 #include <sys/socket.h> |
35 #include <unistd.h> | |
36 #endif | |
37 | |
38 #include <errno.h> | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
39 #include <ctype.h> |
2086 | 40 #include <string.h> |
41 #include <stdlib.h> | |
42 #include <stdio.h> | |
43 #include <time.h> | |
44 #include <sys/stat.h> | |
3630 | 45 #include <signal.h> |
46 | |
4608 | 47 #include "gaim.h" |
2086 | 48 #include "multi.h" |
49 #include "prpl.h" | |
4373
dcc6c130c6d9
[gaim-migrate @ 4639]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4366
diff
changeset
|
50 #include "core.h" |
4889 | 51 #include "proxy.h" |
2086 | 52 #include "aim.h" |
53 | |
3630 | 54 #ifdef _WIN32 |
55 #include "win32dep.h" | |
56 #endif | |
57 | |
2086 | 58 /* constants to identify proto_opts */ |
59 #define USEROPT_AUTH 0 | |
60 #define USEROPT_AUTHPORT 1 | |
61 | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
62 #define UC_AOL 0x02 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
63 #define UC_ADMIN 0x04 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
64 #define UC_UNCONFIRMED 0x08 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
65 #define UC_NORMAL 0x10 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
66 #define UC_AB 0x20 |
3079 | 67 #define UC_WIRELESS 0x40 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
68 |
2086 | 69 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" |
70 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
71 static GaimPlugin *my_protocol = NULL; |
4249 | 72 |
3630 | 73 /* For win32 compatability */ |
74 G_MODULE_IMPORT GSList *connections; | |
75 G_MODULE_IMPORT int report_idle; | |
76 | |
4811 | 77 static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_IMIMAGE | AIM_CAPS_SENDFILE | AIM_CAPS_INTEROPERATE; |
78 static int caps_icq = AIM_CAPS_BUDDYICON | AIM_CAPS_IMIMAGE | AIM_CAPS_SENDFILE | AIM_CAPS_ICQUTF8 | AIM_CAPS_INTEROPERATE; | |
3458 | 79 |
4665 | 80 static fu8_t features_aim[] = {0x01, 0x01, 0x01, 0x02}; |
81 static fu8_t features_icq[] = {0x01, 0x06}; | |
2086 | 82 |
83 struct oscar_data { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
84 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
85 aim_conn_t *conn; |
2086 | 86 |
87 guint cnpa; | |
88 guint paspa; | |
3694 | 89 guint emlpa; |
4804 | 90 guint icopa; |
2086 | 91 |
4823 | 92 gboolean iconconnecting; |
93 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
94 GSList *create_rooms; |
2086 | 95 |
96 gboolean conf; | |
97 gboolean reqemail; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
98 gboolean setemail; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
99 char *email; |
2979 | 100 gboolean setnick; |
101 char *newsn; | |
2086 | 102 gboolean chpass; |
103 char *oldp; | |
104 char *newp; | |
105 | |
106 GSList *oscar_chats; | |
107 GSList *direct_ims; | |
3630 | 108 GSList *file_transfers; |
4738 | 109 GHashTable *buddyinfo; |
4804 | 110 GSList *requesticon; |
2086 | 111 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
112 gboolean killme; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
113 gboolean icq; |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
114 GSList *evilhack; |
4804 | 115 guint icontimer; |
2993 | 116 |
117 struct { | |
4230 | 118 guint maxwatchers; /* max users who can watch you */ |
2993 | 119 guint maxbuddies; /* max users you can watch */ |
4230 | 120 guint maxgroups; /* max groups in server list */ |
2993 | 121 guint maxpermits; /* max users on permit list */ |
122 guint maxdenies; /* max users on deny list */ | |
123 guint maxsiglen; /* max size (bytes) of profile */ | |
124 guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
125 } rights; | |
2086 | 126 }; |
127 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
128 struct create_room { |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
129 char *name; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
130 int exchange; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
131 }; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
132 |
2086 | 133 struct chat_connection { |
134 char *name; | |
135 char *show; /* AOL did something funny to us */ | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
136 fu16_t exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
137 fu16_t instance; |
2086 | 138 int fd; /* this is redundant since we have the conn below */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
139 aim_conn_t *conn; |
2086 | 140 int inpa; |
141 int id; | |
142 struct gaim_connection *gc; /* i hate this. */ | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
143 struct gaim_conversation *cnv; /* bah. */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
144 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
145 int maxvis; |
2086 | 146 }; |
147 | |
148 struct direct_im { | |
149 struct gaim_connection *gc; | |
150 char name[80]; | |
151 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
152 aim_conn_t *conn; |
3008 | 153 gboolean connected; |
2086 | 154 }; |
155 | |
156 struct ask_direct { | |
157 struct gaim_connection *gc; | |
158 char *sn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
159 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
160 fu8_t cookie[8]; |
2086 | 161 }; |
162 | |
4738 | 163 /* Various PRPL-specific buddy info that we want to keep track of */ |
164 struct buddyinfo { | |
165 time_t signon; | |
166 int caps; | |
167 gboolean typingnot; | |
168 | |
169 unsigned long ico_len; | |
170 unsigned long ico_csum; | |
171 time_t ico_time; | |
172 gboolean ico_need; | |
173 | |
174 unsigned long ico_me_len; | |
175 unsigned long ico_me_csum; | |
176 time_t ico_me_time; | |
177 gboolean ico_informed; | |
4804 | 178 |
4853 | 179 fu16_t iconcsumlen; |
180 fu8_t iconcsum[30]; | |
2086 | 181 }; |
182 | |
4230 | 183 struct name_data { |
3141 | 184 struct gaim_connection *gc; |
4230 | 185 gchar *name; |
3453 | 186 gchar *nick; |
3141 | 187 }; |
188 | |
5129 | 189 static char *msgerrreason[] = { |
190 N_("Invalid error"), | |
191 N_("Invalid SNAC"), | |
192 N_("Rate to host"), | |
193 N_("Rate to client"), | |
194 N_("Not logged in"), | |
195 N_("Service unavailable"), | |
196 N_("Service not defined"), | |
197 N_("Obsolete SNAC"), | |
198 N_("Not supported by host"), | |
199 N_("Not supported by client"), | |
200 N_("Refused by client"), | |
201 N_("Reply too big"), | |
202 N_("Responses lost"), | |
203 N_("Request denied"), | |
204 N_("Busted SNAC payload"), | |
205 N_("Insufficient rights"), | |
206 N_("In local permit/deny"), | |
207 N_("Too evil (sender)"), | |
208 N_("Too evil (receiver)"), | |
209 N_("User temporarily unavailable"), | |
210 N_("No match"), | |
211 N_("List overflow"), | |
212 N_("Request ambiguous"), | |
213 N_("Queue full"), | |
214 N_("Not while on AOL") | |
215 }; | |
216 static int msgerrreasonlen = 25; | |
217 | |
218 /* All the libfaim->gaim callback functions */ | |
219 static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); | |
220 static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); | |
221 static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); | |
222 static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); | |
223 static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); | |
224 static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); | |
225 static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); | |
226 static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); | |
227 static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); | |
228 static int gaim_parse_clientauto (aim_session_t *, aim_frame_t *, ...); | |
229 static int gaim_parse_user_info (aim_session_t *, aim_frame_t *, ...); | |
230 static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); | |
231 static int gaim_chatnav_info (aim_session_t *, aim_frame_t *, ...); | |
232 static int gaim_chat_join (aim_session_t *, aim_frame_t *, ...); | |
233 static int gaim_chat_leave (aim_session_t *, aim_frame_t *, ...); | |
234 static int gaim_chat_info_update (aim_session_t *, aim_frame_t *, ...); | |
235 static int gaim_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); | |
236 static int gaim_email_parseupdate(aim_session_t *, aim_frame_t *, ...); | |
237 static int gaim_icon_error (aim_session_t *, aim_frame_t *, ...); | |
238 static int gaim_icon_parseicon (aim_session_t *, aim_frame_t *, ...); | |
239 static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); | |
240 static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); | |
241 static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); | |
242 static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); | |
243 static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); | |
244 static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); | |
245 static int gaim_connerr (aim_session_t *, aim_frame_t *, ...); | |
246 static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); | |
247 static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); | |
248 static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); | |
249 static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); | |
250 static int conninitdone_email (aim_session_t *, aim_frame_t *, ...); | |
251 static int conninitdone_icon (aim_session_t *, aim_frame_t *, ...); | |
252 static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); | |
253 static int gaim_parse_mtn (aim_session_t *, aim_frame_t *, ...); | |
254 static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); | |
255 static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); | |
256 static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); | |
257 static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); | |
258 static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); | |
259 static int gaim_memrequest (aim_session_t *, aim_frame_t *, ...); | |
260 static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); | |
261 static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); | |
262 static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); | |
263 static int gaim_icqalias (aim_session_t *, aim_frame_t *, ...); | |
264 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); | |
265 static int gaim_popup (aim_session_t *, aim_frame_t *, ...); | |
266 #ifndef NOSSI | |
267 static int gaim_ssi_parseerr (aim_session_t *, aim_frame_t *, ...); | |
268 static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); | |
269 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); | |
270 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); | |
271 static int gaim_ssi_authgiven (aim_session_t *, aim_frame_t *, ...); | |
272 static int gaim_ssi_authrequest (aim_session_t *, aim_frame_t *, ...); | |
273 static int gaim_ssi_authreply (aim_session_t *, aim_frame_t *, ...); | |
274 static int gaim_ssi_gotadded (aim_session_t *, aim_frame_t *, ...); | |
275 #endif | |
276 | |
277 /* for DirectIM/image transfer */ | |
278 static int gaim_odc_initiate (aim_session_t *, aim_frame_t *, ...); | |
279 static int gaim_odc_incoming (aim_session_t *, aim_frame_t *, ...); | |
280 static int gaim_odc_typing (aim_session_t *, aim_frame_t *, ...); | |
281 static int gaim_update_ui (aim_session_t *, aim_frame_t *, ...); | |
282 | |
283 /* for file transfer */ | |
284 static int oscar_sendfile_estblsh(aim_session_t *, aim_frame_t *, ...); | |
285 static int oscar_sendfile_prompt (aim_session_t *, aim_frame_t *, ...); | |
286 static int oscar_sendfile_ack (aim_session_t *, aim_frame_t *, ...); | |
287 static int oscar_sendfile_done (aim_session_t *, aim_frame_t *, ...); | |
288 | |
289 /* for icons */ | |
290 static gboolean gaim_icon_timerfunc(gpointer data); | |
291 | |
5306 | 292 /* prpl actions - remove this at some point */ |
293 static void oscar_set_info(struct gaim_connection *gc, char *text); | |
294 | |
5149 | 295 int ill_just_write_my_own_damn_round_function(double val) { |
296 if ((val - (int)val) > 0.5) | |
297 return val+1; | |
298 else | |
299 return val; | |
300 } | |
301 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
302 static void gaim_free_name_data(const char *text, struct name_data *data) { |
4230 | 303 g_free(data->name); |
304 g_free(data->nick); | |
305 g_free(data); | |
306 } | |
307 | |
5129 | 308 static fu32_t oscar_encoding_check(const char *utf8) |
309 { | |
310 int i = 0; | |
311 fu32_t encodingflag = 0; | |
312 | |
313 /* Determine how we can send this message. Per the warnings elsewhere | |
314 * in this file, these little checks determine the simplest encoding | |
315 * we can use for a given message send using it. */ | |
316 while (utf8[i]) { | |
317 if ((unsigned char)utf8[i] > 0x7f) { | |
318 /* not ASCII! */ | |
319 encodingflag = AIM_IMFLAGS_ISO_8859_1; | |
320 break; | |
321 } | |
322 i++; | |
323 } | |
324 while (utf8[i]) { | |
325 /* ISO-8859-1 is 0x00-0xbf in the first byte | |
326 * followed by 0xc0-0xc3 in the second */ | |
327 if ((unsigned char)utf8[i] < 0x80) { | |
328 i++; | |
329 continue; | |
330 } else if (((unsigned char)utf8[i] & 0xfc) == 0xc0 && | |
331 ((unsigned char)utf8[i + 1] & 0xc0) == 0x80) { | |
332 i += 2; | |
333 continue; | |
334 } | |
335 encodingflag = AIM_IMFLAGS_UNICODE; | |
336 break; | |
337 } | |
338 | |
339 return encodingflag; | |
340 } | |
341 | |
342 static fu32_t oscar_encoding_parse(const char *enc) | |
343 { | |
344 char *charset; | |
345 | |
346 /* If anything goes wrong, fall back on ASCII and print a message */ | |
347 if (enc == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
348 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
349 "Encoding was null, that's odd\n"); |
5129 | 350 return 0; |
351 } | |
352 charset = strstr(enc, "charset="); | |
353 if (charset == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
354 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
355 "No charset specified for info, assuming ASCII\n"); |
5129 | 356 return 0; |
357 } | |
358 charset += 8; | |
359 if (!strcmp(charset, "\"us-ascii\"") || !strcmp(charset, "\"utf-8\"")) { | |
360 /* UTF-8 is our native charset, ASCII is a proper subset */ | |
361 return 0; | |
362 } else if (!strcmp(charset, "\"iso-8859-1\"")) { | |
363 return AIM_IMFLAGS_ISO_8859_1; | |
364 } else if (!strcmp(charset, "\"unicode-2-0\"")) { | |
365 return AIM_IMFLAGS_UNICODE; | |
366 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
367 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
368 "Unrecognized character set '%s', using ASCII\n", charset); |
5129 | 369 return 0; |
370 } | |
371 } | |
372 | |
373 gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen) | |
374 { | |
375 gchar *utf8 = NULL; | |
376 int flags = oscar_encoding_parse(encoding); | |
377 | |
378 switch (flags) { | |
379 case 0: | |
380 utf8 = g_strndup(text, textlen); | |
381 break; | |
382 case AIM_IMFLAGS_ISO_8859_1: | |
383 utf8 = g_convert(text, textlen, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); | |
384 break; | |
385 case AIM_IMFLAGS_UNICODE: | |
386 utf8 = g_convert(text, textlen, "UTF-8", "UCS-2BE", NULL, NULL, NULL); | |
387 break; | |
388 } | |
389 | |
390 return utf8; | |
391 } | |
392 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
393 static struct direct_im *find_direct_im(struct oscar_data *od, const char *who) { |
2086 | 394 GSList *d = od->direct_ims; |
395 struct direct_im *m = NULL; | |
396 | |
397 while (d) { | |
398 m = (struct direct_im *)d->data; | |
4355 | 399 if (!aim_sncmp(who, m->name)) |
4269 | 400 return m; |
2086 | 401 d = d->next; |
402 } | |
403 | |
4269 | 404 return NULL; |
2086 | 405 } |
406 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
407 static char *extract_name(const char *name) { |
4121 | 408 char *tmp, *x; |
2086 | 409 int i, j; |
4120 | 410 |
411 if (!name) | |
4121 | 412 return NULL; |
413 | |
4120 | 414 x = strchr(name, '-'); |
4121 | 415 |
2086 | 416 if (!x) return NULL; |
417 x = strchr(++x, '-'); | |
418 if (!x) return NULL; | |
419 tmp = g_strdup(++x); | |
420 | |
421 for (i = 0, j = 0; x[i]; i++) { | |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
422 char hex[3]; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
423 if (x[i] != '%') { |
2086 | 424 tmp[j++] = x[i]; |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
425 continue; |
2086 | 426 } |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
427 strncpy(hex, x + ++i, 2); hex[2] = 0; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
428 i++; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
429 tmp[j++] = strtol(hex, NULL, 16); |
2086 | 430 } |
431 | |
432 tmp[j] = 0; | |
433 return tmp; | |
434 } | |
435 | |
436 static struct chat_connection *find_oscar_chat(struct gaim_connection *gc, int id) { | |
437 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; | |
438 struct chat_connection *c = NULL; | |
439 | |
440 while (g) { | |
441 c = (struct chat_connection *)g->data; | |
442 if (c->id == id) | |
443 break; | |
444 g = g->next; | |
445 c = NULL; | |
446 } | |
447 | |
448 return c; | |
449 } | |
450 | |
451 static struct chat_connection *find_oscar_chat_by_conn(struct gaim_connection *gc, | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
452 aim_conn_t *conn) { |
2086 | 453 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; |
454 struct chat_connection *c = NULL; | |
455 | |
456 while (g) { | |
457 c = (struct chat_connection *)g->data; | |
458 if (c->conn == conn) | |
459 break; | |
460 g = g->next; | |
461 c = NULL; | |
462 } | |
463 | |
464 return c; | |
465 } | |
466 | |
4617 | 467 static void gaim_odc_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
468 struct gaim_connection *gc = sess->aux_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
469 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
470 struct gaim_conversation *cnv; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
471 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
472 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
473 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
474 |
4617 | 475 sn = g_strdup(aim_odc_getsn(conn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
476 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
477 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
478 "%s disconnected Direct IM.\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
479 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
480 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
481 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
482 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
483 |
3008 | 484 if (dim->connected) |
485 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
486 else | |
487 g_snprintf(buf, sizeof buf, _("Direct IM with %s failed"), sn); | |
488 | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
489 if ((cnv = gaim_find_conversation(sn))) |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
490 gaim_conversation_write(cnv, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
491 |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
492 gaim_conversation_update_progress(cnv, 100); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
493 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
494 g_free(dim); /* I guess? I don't see it anywhere else... -- mid */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
495 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
496 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
497 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
498 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
499 |
4617 | 500 static void oscar_callback(gpointer data, gint source, GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
501 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
502 aim_session_t *sess = aim_conn_getsess(conn); |
2086 | 503 struct gaim_connection *gc = sess ? sess->aux_data : NULL; |
4617 | 504 struct oscar_data *od; |
2086 | 505 |
506 if (!gc) { | |
507 /* gc is null. we return, else we seg SIGSEG on next line. */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
508 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
509 "oscar callback for closed connection (1).\n"); |
2086 | 510 return; |
511 } | |
512 | |
4617 | 513 od = (struct oscar_data *)gc->proto_data; |
2086 | 514 |
515 if (!g_slist_find(connections, gc)) { | |
516 /* oh boy. this is probably bad. i guess the only thing we | |
517 * can really do is return? */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
518 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
519 "oscar callback for closed connection (2).\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
520 gaim_debug(GAIM_DEBUG_MISC, "oscar", "gc = %p\n", gc); |
2086 | 521 return; |
522 } | |
523 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
524 if (condition & GAIM_INPUT_READ) { |
4617 | 525 if (conn->type == AIM_CONN_TYPE_LISTENER) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
526 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
527 "got information on rendezvous listener\n"); |
4617 | 528 if (aim_handlerendconnect(od->sess, conn) < 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
529 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
530 "connection error (rendezvous listener)\n"); |
4617 | 531 aim_conn_kill(od->sess, &conn); |
2086 | 532 } |
533 } else { | |
4617 | 534 if (aim_get_command(od->sess, conn) >= 0) { |
535 aim_rxdispatch(od->sess); | |
536 if (od->killme) | |
2086 | 537 signoff(gc); |
538 } else { | |
539 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
4617 | 540 !(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
541 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
542 "major connection error\n"); |
3074 | 543 hide_login_progress_error(gc, _("Disconnected.")); |
2086 | 544 signoff(gc); |
545 } else if (conn->type == AIM_CONN_TYPE_CHAT) { | |
546 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
5420 | 547 char *buf; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
548 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
549 "disconnected from chat room %s\n", c->name); |
2086 | 550 c->conn = NULL; |
551 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
552 gaim_input_remove(c->inpa); |
2086 | 553 c->inpa = 0; |
554 c->fd = -1; | |
4617 | 555 aim_conn_kill(od->sess, &conn); |
5420 | 556 buf = g_strdup_printf(_("You have been disconnected from chat room %s."), c->name); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
557 gaim_notify_error(gc, NULL, buf, NULL); |
5420 | 558 g_free(buf); |
2086 | 559 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
4617 | 560 if (od->cnpa > 0) |
561 gaim_input_remove(od->cnpa); | |
562 od->cnpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
563 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
564 "removing chatnav input watcher\n"); |
4617 | 565 while (od->create_rooms) { |
566 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
567 g_free(cr->name); |
4617 | 568 od->create_rooms = |
569 g_slist_remove(od->create_rooms, cr); | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
570 g_free(cr); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
571 gaim_notify_error(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
572 _("Chat is currently unavailable"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
573 NULL); |
2086 | 574 } |
4617 | 575 aim_conn_kill(od->sess, &conn); |
2086 | 576 } else if (conn->type == AIM_CONN_TYPE_AUTH) { |
4617 | 577 if (od->paspa > 0) |
578 gaim_input_remove(od->paspa); | |
579 od->paspa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
580 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
581 "removing authconn input watcher\n"); |
4617 | 582 aim_conn_kill(od->sess, &conn); |
3694 | 583 } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
4617 | 584 if (od->emlpa > 0) |
585 gaim_input_remove(od->emlpa); | |
586 od->emlpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
587 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
588 "removing email input watcher\n"); |
4617 | 589 aim_conn_kill(od->sess, &conn); |
4804 | 590 } else if (conn->type == AIM_CONN_TYPE_ICON) { |
591 if (od->icopa > 0) | |
592 gaim_input_remove(od->icopa); | |
593 od->icopa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
594 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
595 "removing icon input watcher\n"); |
4804 | 596 aim_conn_kill(od->sess, &conn); |
2086 | 597 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
598 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
4617 | 599 gaim_odc_disconnect(od->sess, conn); |
600 aim_conn_kill(od->sess, &conn); | |
2086 | 601 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
602 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
603 "holy crap! generic connection error! %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
604 conn->type); |
4617 | 605 aim_conn_kill(od->sess, &conn); |
2086 | 606 } |
607 } | |
608 } | |
609 } | |
610 } | |
611 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
612 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
2086 | 613 char *s = g_strdup_vprintf(format, va); |
614 char buf[256]; | |
615 char *t; | |
616 struct gaim_connection *gc = sess->aux_data; | |
617 | |
618 g_snprintf(buf, sizeof(buf), "%s %d: ", gc->username, level); | |
619 t = g_strconcat(buf, s, NULL); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
620 gaim_debug(GAIM_DEBUG_INFO, "oscar", t); |
2086 | 621 if (t[strlen(t)-1] != '\n') |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
622 gaim_debug(GAIM_DEBUG_INFO, NULL, "\n"); |
2086 | 623 g_free(t); |
624 g_free(s); | |
625 } | |
626 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
627 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 628 { |
629 struct gaim_connection *gc = data; | |
4617 | 630 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
631 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
632 aim_conn_t *conn; |
2086 | 633 |
634 if (!g_slist_find(connections, gc)) { | |
635 close(source); | |
636 return; | |
637 } | |
638 | |
4617 | 639 od = gc->proto_data; |
640 sess = od->sess; | |
2086 | 641 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 642 |
643 conn->fd = source; | |
2086 | 644 |
645 if (source < 0) { | |
646 hide_login_progress(gc, _("Couldn't connect to host")); | |
647 signoff(gc); | |
648 return; | |
649 } | |
650 | |
651 aim_conn_completeconnect(sess, conn); | |
4617 | 652 gc->inpa = gaim_input_add(conn->fd, GAIM_INPUT_READ, oscar_callback, conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
653 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
654 "Password sent, waiting for response\n"); |
2086 | 655 } |
656 | |
4491 | 657 static void oscar_login(struct gaim_account *account) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
658 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
659 aim_conn_t *conn; |
2086 | 660 char buf[256]; |
4491 | 661 struct gaim_connection *gc = new_gaim_conn(account); |
4617 | 662 struct oscar_data *od = gc->proto_data = g_new0(struct oscar_data, 1); |
2086 | 663 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
664 gaim_debug(GAIM_DEBUG_MISC, "oscar", "oscar_login: gc = %p\n", gc); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
665 |
4491 | 666 if (isdigit(*account->username)) { |
4617 | 667 od->icq = TRUE; |
3064 | 668 gc->password[8] = 0; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
669 } else { |
2918
4df759d607f3
[gaim-migrate @ 2931]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2916
diff
changeset
|
670 gc->flags |= OPT_CONN_HTML; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
671 gc->flags |= OPT_CONN_AUTO_RESP; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
672 } |
4738 | 673 od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
2086 | 674 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
675 sess = g_new0(aim_session_t, 1); |
2086 | 676 |
677 aim_session_init(sess, AIM_SESS_FLAGS_NONBLOCKCONNECT, 0); | |
678 aim_setdebuggingcb(sess, oscar_debug); | |
679 | |
680 /* we need an immediate queue because we don't use a while-loop to | |
681 * see if things need to be sent. */ | |
682 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); | |
4617 | 683 od->sess = sess; |
2086 | 684 sess->aux_data = gc; |
685 | |
686 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
687 if (conn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
688 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
689 "internal connection error\n"); |
2086 | 690 hide_login_progress(gc, _("Unable to login to AIM")); |
691 signoff(gc); | |
692 return; | |
693 } | |
694 | |
695 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); | |
696 set_login_progress(gc, 2, buf); | |
697 | |
4649 | 698 aim_conn_addhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2086 | 699 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); |
700 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
701 | |
702 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
4634 | 703 if (proxy_connect(account, account->proto_opt[USEROPT_AUTH][0] ? |
4491 | 704 account->proto_opt[USEROPT_AUTH] : FAIM_LOGIN_SERVER, |
705 account->proto_opt[USEROPT_AUTHPORT][0] ? | |
706 atoi(account->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
707 oscar_login_connect, gc) < 0) { | |
2086 | 708 hide_login_progress(gc, _("Couldn't connect to host")); |
709 signoff(gc); | |
710 return; | |
711 } | |
712 aim_request_login(sess, conn, gc->username); | |
713 } | |
714 | |
715 static void oscar_close(struct gaim_connection *gc) { | |
4617 | 716 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
717 | |
718 while (od->oscar_chats) { | |
719 struct chat_connection *n = od->oscar_chats->data; | |
2086 | 720 if (n->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
721 gaim_input_remove(n->inpa); |
2086 | 722 g_free(n->name); |
723 g_free(n->show); | |
4617 | 724 od->oscar_chats = g_slist_remove(od->oscar_chats, n); |
2086 | 725 g_free(n); |
726 } | |
4617 | 727 while (od->direct_ims) { |
728 struct direct_im *n = od->direct_ims->data; | |
2086 | 729 if (n->watcher > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
730 gaim_input_remove(n->watcher); |
4617 | 731 od->direct_ims = g_slist_remove(od->direct_ims, n); |
2086 | 732 g_free(n); |
733 } | |
4617 | 734 /* BBB */ |
735 while (od->file_transfers) { | |
736 struct gaim_xfer *xfer; | |
737 xfer = (struct gaim_xfer *)od->file_transfers->data; | |
738 gaim_xfer_destroy(xfer); | |
3630 | 739 } |
4804 | 740 while (od->requesticon) { |
741 char *sn = od->requesticon->data; | |
742 od->requesticon = g_slist_remove(od->requesticon, sn); | |
743 free(sn); | |
744 } | |
4738 | 745 g_hash_table_destroy(od->buddyinfo); |
4617 | 746 while (od->evilhack) { |
747 g_free(od->evilhack->data); | |
748 od->evilhack = g_slist_remove(od->evilhack, od->evilhack->data); | |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
749 } |
4617 | 750 while (od->create_rooms) { |
751 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
752 g_free(cr->name); |
4617 | 753 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
754 g_free(cr); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
755 } |
4617 | 756 if (od->email) |
757 g_free(od->email); | |
758 if (od->newp) | |
759 g_free(od->newp); | |
760 if (od->oldp) | |
761 g_free(od->oldp); | |
2086 | 762 if (gc->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
763 gaim_input_remove(gc->inpa); |
4617 | 764 if (od->cnpa > 0) |
765 gaim_input_remove(od->cnpa); | |
766 if (od->paspa > 0) | |
767 gaim_input_remove(od->paspa); | |
768 if (od->emlpa > 0) | |
769 gaim_input_remove(od->emlpa); | |
4804 | 770 if (od->icopa > 0) |
771 gaim_input_remove(od->icopa); | |
4832 | 772 if (od->icopa > 0) |
773 gaim_input_remove(od->icopa); | |
774 if (od->icontimer) | |
775 g_source_remove(od->icontimer); | |
4617 | 776 aim_session_kill(od->sess); |
777 g_free(od->sess); | |
778 od->sess = NULL; | |
2086 | 779 g_free(gc->proto_data); |
780 gc->proto_data = NULL; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
781 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Signed off.\n"); |
2086 | 782 } |
783 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
784 static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 785 struct gaim_connection *gc = data; |
4617 | 786 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
787 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
788 aim_conn_t *bosconn; |
2086 | 789 |
790 if (!g_slist_find(connections, gc)) { | |
791 close(source); | |
792 return; | |
793 } | |
794 | |
4617 | 795 od = gc->proto_data; |
796 sess = od->sess; | |
797 bosconn = od->conn; | |
4366 | 798 bosconn->fd = source; |
2086 | 799 |
800 if (source < 0) { | |
801 hide_login_progress(gc, _("Could Not Connect")); | |
802 signoff(gc); | |
803 return; | |
804 } | |
805 | |
806 aim_conn_completeconnect(sess, bosconn); | |
4617 | 807 gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, oscar_callback, bosconn); |
2086 | 808 set_login_progress(gc, 4, _("Connection established, cookie sent")); |
809 } | |
810 | |
4617 | 811 /* BBB */ |
4656 | 812 /* |
813 * This little area in oscar.c is the nexus of file transfer code, | |
814 * so I wrote a little explanation of what happens. I am such a | |
815 * ninja. | |
816 * | |
817 * The series of events for a file send is: | |
818 * -Create xfer and call gaim_xfer_request (this happens in oscar_ask_sendfile) | |
819 * -User chooses a file and oscar_xfer_init is called. It establishs a | |
820 * listening socket, then asks the remote user to connect to us (and | |
821 * gives them the file name, port, IP, etc.) | |
822 * -They connect to us and we send them an AIM_CB_OFT_PROMPT (this happens | |
823 * in oscar_sendfile_estblsh) | |
824 * -They send us an AIM_CB_OFT_ACK and then we start sending data | |
825 * -When we finish, they send us an AIM_CB_OFT_DONE and they close the | |
826 * connection. | |
827 * -We get drunk because file transfer kicks ass. | |
828 * | |
829 * The series of events for a file receive is: | |
830 * -Create xfer and call gaim_xfer request (this happens in incomingim_chan2) | |
831 * -Gaim user selects file to name and location to save file to and | |
832 * oscar_xfer_init is called | |
833 * -It connects to the remote user using the IP they gave us earlier | |
834 * -After connecting, they send us an AIM_CB_OFT_PROMPT. In reply, we send | |
835 * them an AIM_CB_OFT_ACK. | |
836 * -They begin to send us lots of raw data. | |
837 * -When they finish sending data we send an AIM_CB_OFT_DONE and then close | |
838 * the connectionn. | |
839 */ | |
840 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition); | |
841 | |
842 /* XXX - This function is pretty ugly */ | |
5146 | 843 static void oscar_xfer_init(struct gaim_xfer *xfer) |
4656 | 844 { |
5146 | 845 struct aim_oft_info *oft_info = xfer->data; |
846 struct gaim_connection *gc = oft_info->sess->aux_data; | |
847 struct oscar_data *od = gc->proto_data; | |
4656 | 848 |
849 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
850 int i; | |
851 | |
852 xfer->filename = g_path_get_basename(xfer->local_filename); | |
5146 | 853 strncpy(oft_info->fh.name, xfer->filename, 64); |
854 oft_info->fh.totsize = gaim_xfer_get_size(xfer); | |
855 oft_info->fh.size = gaim_xfer_get_size(xfer); | |
856 oft_info->fh.checksum = aim_oft_checksum_file(xfer->local_filename); | |
4656 | 857 |
858 /* | |
5146 | 859 * First try the port specified earlier (5190). If that fails, |
860 * increment by 1 and try again. | |
4656 | 861 */ |
5146 | 862 aim_sendfile_listen(od->sess, oft_info); |
863 for (i=0; (i<5 && !oft_info->conn); i++) { | |
864 xfer->local_port = oft_info->port = oft_info->port + 1; | |
865 aim_sendfile_listen(od->sess, oft_info); | |
4656 | 866 } |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
867 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
868 "port is %d, ip is %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
869 xfer->local_port, oft_info->clientip); |
5146 | 870 if (oft_info->conn) { |
871 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
872 aim_im_sendch2_sendfile_ask(od->sess, oft_info); | |
873 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ESTABLISHED, oscar_sendfile_estblsh, 0); | |
4656 | 874 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
875 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
876 _("Unable to establish listener socket.")); |
4656 | 877 /* XXX - The below line causes a crash because the transfer is canceled before the "Ok" callback on the file selection thing exists, I think */ |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
878 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 879 } |
880 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 881 oft_info->conn = aim_newconn(od->sess, AIM_CONN_TYPE_RENDEZVOUS, NULL); |
882 if (oft_info->conn) { | |
883 oft_info->conn->subtype = AIM_CONN_SUBTYPE_OFT_SENDFILE; | |
884 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_PROMPT, oscar_sendfile_prompt, 0); | |
885 oft_info->conn->fd = xfer->fd = proxy_connect(gc->account, xfer->remote_ip, xfer->remote_port, oscar_sendfile_connected, xfer); | |
4656 | 886 if (xfer->fd == -1) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
887 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
888 _("Unable to establish file descriptor.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
889 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 890 } |
891 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
892 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
893 _("Unable to create new connection.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
894 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 895 /* Try a different port? Ask them to connect to us? */ |
896 } | |
897 | |
898 } | |
899 } | |
900 | |
5146 | 901 static void oscar_xfer_start(struct gaim_xfer *xfer) |
4656 | 902 { |
5146 | 903 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
904 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_start\n"); |
4656 | 905 /* I'm pretty sure we don't need to do jack here. Nor Jill. */ |
906 } | |
907 | |
5146 | 908 static void oscar_xfer_end(struct gaim_xfer *xfer) |
4656 | 909 { |
5146 | 910 struct aim_oft_info *oft_info = xfer->data; |
911 struct gaim_connection *gc = oft_info->sess->aux_data; | |
912 struct oscar_data *od = gc->proto_data; | |
4656 | 913 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
914 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_end\n"); |
5146 | 915 |
916 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
917 oft_info->fh.nrecvd = gaim_xfer_get_bytes_sent(xfer); | |
918 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_DONE, oft_info); | |
919 } | |
920 | |
921 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
922 aim_oft_destroyinfo(oft_info); | |
4656 | 923 xfer->data = NULL; |
5146 | 924 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 925 } |
926 | |
5146 | 927 static void oscar_xfer_cancel_send(struct gaim_xfer *xfer) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
928 { |
5146 | 929 struct aim_oft_info *oft_info = xfer->data; |
930 struct gaim_connection *gc = oft_info->sess->aux_data; | |
931 struct oscar_data *od = gc->proto_data; | |
4763 | 932 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
933 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
934 "AAA - in oscar_xfer_cancel_send\n"); |
5146 | 935 |
936 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
937 | |
938 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
939 aim_oft_destroyinfo(oft_info); | |
4763 | 940 xfer->data = NULL; |
5146 | 941 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
942 } |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
943 |
5146 | 944 static void oscar_xfer_cancel_recv(struct gaim_xfer *xfer) |
4656 | 945 { |
5146 | 946 struct aim_oft_info *oft_info = xfer->data; |
947 struct gaim_connection *gc = oft_info->sess->aux_data; | |
948 struct oscar_data *od = gc->proto_data; | |
4656 | 949 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
950 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
951 "AAA - in oscar_xfer_cancel_recv\n"); |
5146 | 952 |
953 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
954 | |
955 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
956 aim_oft_destroyinfo(oft_info); | |
4656 | 957 xfer->data = NULL; |
5146 | 958 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 959 } |
960 | |
5146 | 961 static void oscar_xfer_ack(struct gaim_xfer *xfer, const char *buffer, size_t size) |
4656 | 962 { |
5146 | 963 struct aim_oft_info *oft_info = xfer->data; |
4656 | 964 |
965 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
966 /* | |
967 * If we're done sending, intercept the socket from the core ft code | |
968 * and wait for the other guy to send the "done" OFT packet. | |
969 */ | |
970 if (gaim_xfer_get_bytes_remaining(xfer) <= 0) { | |
971 gaim_input_remove(xfer->watcher); | |
5146 | 972 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); |
4656 | 973 xfer->fd = 0; |
974 gaim_xfer_set_completed(xfer, TRUE); | |
975 } | |
976 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 977 /* Update our rolling checksum. Like Walmart, yo. */ |
978 oft_info->fh.recvcsum = aim_oft_checksum_chunk(buffer, size, oft_info->fh.recvcsum); | |
4656 | 979 } |
980 } | |
981 | |
5146 | 982 static struct gaim_xfer *oscar_find_xfer_by_cookie(GSList *fts, const char *ck) |
4656 | 983 { |
984 struct gaim_xfer *xfer; | |
5146 | 985 struct aim_oft_info *oft_info; |
4656 | 986 |
987 while (fts) { | |
988 xfer = fts->data; | |
5146 | 989 oft_info = xfer->data; |
990 | |
991 if (oft_info && !strcmp(ck, oft_info->cookie)) | |
4656 | 992 return xfer; |
993 | |
994 fts = g_slist_next(fts); | |
995 } | |
996 | |
997 return NULL; | |
998 } | |
999 | |
5146 | 1000 static struct gaim_xfer *oscar_find_xfer_by_conn(GSList *fts, aim_conn_t *conn) |
4656 | 1001 { |
1002 struct gaim_xfer *xfer; | |
5146 | 1003 struct aim_oft_info *oft_info; |
4656 | 1004 |
1005 while (fts) { | |
1006 xfer = fts->data; | |
5146 | 1007 oft_info = xfer->data; |
1008 | |
1009 if (oft_info && (conn == oft_info->conn)) | |
4656 | 1010 return xfer; |
1011 | |
1012 fts = g_slist_next(fts); | |
1013 } | |
1014 | |
1015 return NULL; | |
1016 } | |
1017 | |
5136 | 1018 static void oscar_ask_sendfile(struct gaim_connection *gc, const char *destsn) { |
3630 | 1019 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5146 | 1020 struct gaim_xfer *xfer; |
1021 struct aim_oft_info *oft_info; | |
1022 aim_conn_t *conn; | |
3752 | 1023 |
4617 | 1024 /* You want to send a file to someone else, you're so generous */ |
1025 | |
1026 /* Build the file transfer handle */ | |
1027 xfer = gaim_xfer_new(gc->account, GAIM_XFER_SEND, destsn); | |
5146 | 1028 if ((conn = aim_conn_findbygroup(od->sess, 0x0004))) |
1029 xfer->local_ip = gaim_getip_from_fd(conn->fd); | |
4617 | 1030 xfer->local_port = 5190; |
1031 | |
5146 | 1032 /* Create the oscar-specific data */ |
1033 oft_info = aim_oft_createinfo(od->sess, NULL, destsn, xfer->local_ip, xfer->local_port, 0, 0, NULL); | |
1034 xfer->data = oft_info; | |
1035 | |
4617 | 1036 /* Setup our I/O op functions */ |
1037 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
1038 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
1039 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1040 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1041 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4656 | 1042 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
4617 | 1043 |
1044 /* Keep track of this transfer for later */ | |
1045 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
1046 | |
1047 /* Now perform the request */ | |
1048 gaim_xfer_request(xfer); | |
3630 | 1049 } |
1050 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1051 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1052 va_list ap; |
2704 | 1053 struct aim_authresp_info *info; |
4452 | 1054 int i, rc; |
1055 char *host; int port; | |
4491 | 1056 struct gaim_account *account; |
2704 | 1057 aim_conn_t *bosconn; |
2086 | 1058 |
1059 struct gaim_connection *gc = sess->aux_data; | |
1060 struct oscar_data *od = gc->proto_data; | |
4491 | 1061 account = gc->account; |
1062 port = account->proto_opt[USEROPT_AUTHPORT][0] ? | |
1063 atoi(account->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
2086 | 1064 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1065 va_start(ap, fr); |
2704 | 1066 info = va_arg(ap, struct aim_authresp_info *); |
2086 | 1067 va_end(ap); |
1068 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1069 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1070 "inside auth_resp (Screen name: %s)\n", info->sn); |
2704 | 1071 |
4293 | 1072 if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { |
4056 | 1073 char buf[256]; |
2704 | 1074 switch (info->errorcode) { |
2086 | 1075 case 0x05: |
1076 /* Incorrect nick/password */ | |
1077 hide_login_progress(gc, _("Incorrect nickname or password.")); | |
1078 break; | |
1079 case 0x11: | |
1080 /* Suspended account */ | |
1081 hide_login_progress(gc, _("Your account is currently suspended.")); | |
1082 break; | |
3498 | 1083 case 0x14: |
1084 /* service temporarily unavailable */ | |
1085 hide_login_progress(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); | |
1086 break; | |
2086 | 1087 case 0x18: |
1088 /* connecting too frequently */ | |
1089 hide_login_progress(gc, _("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.")); | |
1090 break; | |
1091 case 0x1c: | |
1092 /* client too old */ | |
4056 | 1093 g_snprintf(buf, sizeof(buf), _("The client version you are using is too old. Please upgrade at %s"), WEBSITE); |
1094 hide_login_progress(gc, buf); | |
2086 | 1095 break; |
1096 default: | |
1097 hide_login_progress(gc, _("Authentication Failed")); | |
1098 break; | |
1099 } | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1100 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1101 "Login Error Code 0x%04hx\n", info->errorcode); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1102 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1103 "Error URL: %s\n", info->errorurl); |
2086 | 1104 od->killme = TRUE; |
1105 return 1; | |
1106 } | |
1107 | |
1108 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1109 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1110 "Reg status: %hu\n", info->regstatus); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1111 |
2704 | 1112 if (info->email) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1113 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email: %s\n", info->email); |
2086 | 1114 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1115 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email is NULL\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1116 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1117 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1118 gaim_debug(GAIM_DEBUG_MISC, "oscar", "BOSIP: %s\n", info->bosip); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1119 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1120 "Closing auth connection...\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1121 aim_conn_kill(sess, &fr->conn); |
2086 | 1122 |
1123 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
1124 if (bosconn == NULL) { | |
1125 hide_login_progress(gc, _("Internal Error")); | |
1126 od->killme = TRUE; | |
1127 return 0; | |
1128 } | |
1129 | |
4649 | 1130 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1131 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
2086 | 1132 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
1133 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
1134 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
2993 | 1135 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
2086 | 1136 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
1137 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
1138 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
1139 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
1140 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
1141 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
3212 | 1142 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
2086 | 1143 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
1144 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
1145 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
1146 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
1147 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
3595 | 1148 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
2086 | 1149 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_user_info, 0); |
1150 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); | |
1151 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_MOTD, gaim_parse_motd, 0); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1152 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 1153 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
1154 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
1155 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
1156 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1157 aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
1158 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSG, gaim_offlinemsg, 0); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
1159 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSGCOMPLETE, gaim_offlinemsgdone, 0); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
1160 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
4759 | 1161 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS, gaim_icqalias, 0); |
4624 | 1162 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO, gaim_icqinfo, 0); |
4230 | 1163 #ifndef NOSSI |
4642 | 1164 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ERROR, gaim_ssi_parseerr, 0); |
2991 | 1165 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
1166 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
1167 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
4230 | 1168 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); |
1169 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTH, gaim_ssi_authgiven, 0); | |
1170 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREQ, gaim_ssi_authrequest, 0); | |
1171 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREP, gaim_ssi_authreply, 0); | |
1172 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADDED, gaim_ssi_gotadded, 0); | |
1173 #endif | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1174 |
2086 | 1175 ((struct oscar_data *)gc->proto_data)->conn = bosconn; |
2704 | 1176 for (i = 0; i < (int)strlen(info->bosip); i++) { |
1177 if (info->bosip[i] == ':') { | |
1178 port = atoi(&(info->bosip[i+1])); | |
2086 | 1179 break; |
1180 } | |
1181 } | |
2704 | 1182 host = g_strndup(info->bosip, i); |
2086 | 1183 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
4634 | 1184 rc = proxy_connect(gc->account, host, port, oscar_bos_connect, gc); |
2086 | 1185 g_free(host); |
4366 | 1186 if (rc < 0) { |
2086 | 1187 hide_login_progress(gc, _("Could Not Connect")); |
1188 od->killme = TRUE; | |
1189 return 0; | |
1190 } | |
4293 | 1191 aim_sendcookie(sess, bosconn, info->cookielen, info->cookie); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1192 gaim_input_remove(gc->inpa); |
2704 | 1193 |
2086 | 1194 return 1; |
1195 } | |
1196 | |
1197 struct pieceofcrap { | |
1198 struct gaim_connection *gc; | |
1199 unsigned long offset; | |
1200 unsigned long len; | |
1201 char *modname; | |
1202 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1203 aim_conn_t *conn; |
2086 | 1204 unsigned int inpa; |
1205 }; | |
1206 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1207 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 1208 { |
1209 struct pieceofcrap *pos = data; | |
1210 struct oscar_data *od = pos->gc->proto_data; | |
1211 char in = '\0'; | |
1212 int x = 0; | |
1213 unsigned char m[17]; | |
1214 | |
1215 while (read(pos->fd, &in, 1) == 1) { | |
1216 if (in == '\n') | |
1217 x++; | |
1218 else if (in != '\r') | |
1219 x = 0; | |
1220 if (x == 2) | |
1221 break; | |
1222 in = '\0'; | |
1223 } | |
1224 if (in != '\n') { | |
4056 | 1225 char buf[256]; |
1226 g_snprintf(buf, sizeof(buf), _("You may be disconnected shortly. You may want to use TOC until " | |
1227 "this is fixed. Check %s for updates."), WEBSITE); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1228 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1229 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1230 buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1231 gaim_input_remove(pos->inpa); |
2086 | 1232 close(pos->fd); |
1233 g_free(pos); | |
1234 return; | |
1235 } | |
1236 read(pos->fd, m, 16); | |
1237 m[16] = '\0'; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1238 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Sending hash: "); |
2086 | 1239 for (x = 0; x < 16; x++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1240 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx ", (unsigned char)m[x]); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1241 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1242 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1243 gaim_input_remove(pos->inpa); |
2086 | 1244 close(pos->fd); |
1245 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
1246 g_free(pos); | |
1247 } | |
1248 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1249 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1250 struct pieceofcrap *pos = data; |
5420 | 1251 gchar *buf; |
2086 | 1252 |
4366 | 1253 pos->fd = source; |
1254 | |
2086 | 1255 if (source < 0) { |
5420 | 1256 buf = g_strdup_printf(_("You may be disconnected shortly. You may want to use TOC until " |
4056 | 1257 "this is fixed. Check %s for updates."), WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1258 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1259 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1260 buf); |
5420 | 1261 g_free(buf); |
2086 | 1262 if (pos->modname) |
1263 g_free(pos->modname); | |
1264 g_free(pos); | |
1265 return; | |
1266 } | |
1267 | |
5420 | 1268 buf = g_strdup_printf("GET " AIMHASHDATA "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", |
2086 | 1269 pos->offset, pos->len, pos->modname ? pos->modname : ""); |
1270 write(pos->fd, buf, strlen(buf)); | |
5420 | 1271 g_free(buf); |
2086 | 1272 if (pos->modname) |
1273 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1274 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 1275 return; |
1276 } | |
1277 | |
1278 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
1279 #define AIM_MAX_FILE_SIZE 98304 | |
1280 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1281 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1282 va_list ap; |
1283 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1284 fu32_t offset, len; |
2086 | 1285 char *modname; |
1286 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1287 va_start(ap, fr); |
4200 | 1288 offset = va_arg(ap, fu32_t); |
1289 len = va_arg(ap, fu32_t); | |
2086 | 1290 modname = va_arg(ap, char *); |
1291 va_end(ap); | |
1292 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1293 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1294 "offset: %lu, len: %lu, file: %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1295 offset, len, (modname ? modname : "aim.exe")); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1296 |
2086 | 1297 if (len == 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1298 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len is 0, hashing NULL\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1299 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 1300 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1301 return 1; | |
1302 } | |
1303 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
1304 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
1305 char *buf; | |
1306 int i = 8; | |
1307 if (modname) | |
1308 i += strlen(modname); | |
1309 buf = g_malloc(i); | |
1310 i = 0; | |
1311 if (modname) { | |
1312 memcpy(buf, modname, strlen(modname)); | |
1313 i += strlen(modname); | |
1314 } | |
1315 buf[i++] = offset & 0xff; | |
1316 buf[i++] = (offset >> 8) & 0xff; | |
1317 buf[i++] = (offset >> 16) & 0xff; | |
1318 buf[i++] = (offset >> 24) & 0xff; | |
1319 buf[i++] = len & 0xff; | |
1320 buf[i++] = (len >> 8) & 0xff; | |
1321 buf[i++] = (len >> 16) & 0xff; | |
1322 buf[i++] = (len >> 24) & 0xff; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1323 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len + offset is invalid, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1324 "hashing request\n"); |
2086 | 1325 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1326 g_free(buf); | |
1327 return 1; | |
1328 } | |
1329 */ | |
1330 | |
1331 pos = g_new0(struct pieceofcrap, 1); | |
1332 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1333 pos->conn = fr->conn; |
2086 | 1334 |
1335 pos->offset = offset; | |
1336 pos->len = len; | |
1337 pos->modname = modname ? g_strdup(modname) : NULL; | |
1338 | |
4634 | 1339 if (proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) != 0) { |
4056 | 1340 char buf[256]; |
2086 | 1341 if (pos->modname) |
1342 g_free(pos->modname); | |
1343 g_free(pos); | |
4056 | 1344 g_snprintf(buf, sizeof(buf), _("You may be disconnected shortly. You may want to use TOC until " |
1345 "this is fixed. Check %s for updates."), WEBSITE); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1346 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1347 _("Gaim was Unable to get a valid login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1348 buf); |
2086 | 1349 } |
1350 | |
1351 return 1; | |
1352 } | |
1353 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1354 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1355 char *key; |
1356 va_list ap; | |
1357 struct gaim_connection *gc = sess->aux_data; | |
4617 | 1358 struct oscar_data *od = gc->proto_data; |
2086 | 1359 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1360 va_start(ap, fr); |
2086 | 1361 key = va_arg(ap, char *); |
1362 va_end(ap); | |
1363 | |
4617 | 1364 if (od->icq) { |
3458 | 1365 struct client_info_s info = CLIENTINFO_ICQ_KNOWNGOOD; |
1366 aim_send_login(sess, fr->conn, gc->username, gc->password, &info, key); | |
1367 } else { | |
1368 #if 0 | |
1369 struct client_info_s info = {"gaim", 4, 1, 2010, "us", "en", 0x0004, 0x0000, 0x04b}; | |
1370 #endif | |
1371 struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; | |
1372 aim_send_login(sess, fr->conn, gc->username, gc->password, &info, key); | |
1373 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1374 |
2086 | 1375 return 1; |
1376 } | |
1377 | |
2675 | 1378 static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
2647 | 1379 struct gaim_connection *gc = sess->aux_data; |
1380 struct chat_connection *chatcon; | |
1381 static int id = 1; | |
1382 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1383 aim_conn_addhandler(sess, fr->conn, 0x000e, 0x0001, gaim_parse_genericerr, 0); |
2675 | 1384 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERJOIN, gaim_chat_join, 0); |
1385 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERLEAVE, gaim_chat_leave, 0); | |
1386 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_ROOMINFOUPDATE, gaim_chat_info_update, 0); | |
1387 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_chat_incoming_msg, 0); | |
1388 | |
2672 | 1389 aim_clientready(sess, fr->conn); |
2675 | 1390 |
2647 | 1391 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
1392 chatcon->id = id; | |
1393 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
1394 | |
1395 return 1; | |
1396 } | |
1397 | |
2675 | 1398 static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
1399 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1400 aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
2647 | 1401 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
2675 | 1402 |
1403 aim_clientready(sess, fr->conn); | |
1404 | |
1405 aim_chatnav_reqrights(sess, fr->conn); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1406 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1407 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1408 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1409 |
3694 | 1410 static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
1411 | |
1412 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1413 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); | |
1414 | |
1415 aim_email_sendcookies(sess, fr->conn); | |
1416 aim_email_activate(sess, fr->conn); | |
1417 aim_clientready(sess, fr->conn); | |
1418 | |
1419 return 1; | |
1420 } | |
1421 | |
4804 | 1422 static int conninitdone_icon(aim_session_t *sess, aim_frame_t *fr, ...) { |
1423 struct gaim_connection *gc = sess->aux_data; | |
1424 struct oscar_data *od = gc->proto_data; | |
1425 | |
1426 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1427 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_ERROR, gaim_icon_error, 0); | |
1428 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_RESPONSE, gaim_icon_parseicon, 0); | |
1429 | |
1430 aim_clientready(sess, fr->conn); | |
1431 | |
4823 | 1432 od->iconconnecting = FALSE; |
1433 | |
4804 | 1434 if (od->icontimer) |
1435 g_source_remove(od->icontimer); | |
1436 od->icontimer = g_timeout_add(100, gaim_icon_timerfunc, gc); | |
1437 | |
1438 return 1; | |
1439 } | |
1440 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1441 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1442 struct gaim_connection *gc = data; |
4617 | 1443 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1444 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1445 aim_conn_t *tstconn; |
2086 | 1446 |
1447 if (!g_slist_find(connections, gc)) { | |
1448 close(source); | |
1449 return; | |
1450 } | |
1451 | |
4617 | 1452 od = gc->proto_data; |
1453 sess = od->sess; | |
2086 | 1454 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); |
4366 | 1455 tstconn->fd = source; |
2086 | 1456 |
1457 if (source < 0) { | |
1458 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1459 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1460 "unable to connect to chatnav server\n"); |
2086 | 1461 return; |
1462 } | |
1463 | |
1464 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1465 od->cnpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1466 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1467 } |
1468 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1469 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1470 { |
1471 struct gaim_connection *gc = data; | |
4617 | 1472 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1473 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1474 aim_conn_t *tstconn; |
2086 | 1475 |
1476 if (!g_slist_find(connections, gc)) { | |
1477 close(source); | |
1478 return; | |
1479 } | |
1480 | |
4617 | 1481 od = gc->proto_data; |
1482 sess = od->sess; | |
2086 | 1483 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 1484 tstconn->fd = source; |
2086 | 1485 |
1486 if (source < 0) { | |
1487 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1488 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1489 "unable to connect to authorizer\n"); |
2086 | 1490 return; |
1491 } | |
1492 | |
1493 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1494 od->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1495 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1496 } |
1497 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1498 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1499 { |
1500 struct chat_connection *ccon = data; | |
1501 struct gaim_connection *gc = ccon->gc; | |
4617 | 1502 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1503 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1504 aim_conn_t *tstconn; |
2086 | 1505 |
1506 if (!g_slist_find(connections, gc)) { | |
1507 close(source); | |
1508 g_free(ccon->show); | |
1509 g_free(ccon->name); | |
1510 g_free(ccon); | |
1511 return; | |
1512 } | |
1513 | |
4617 | 1514 od = gc->proto_data; |
1515 sess = od->sess; | |
2086 | 1516 tstconn = ccon->conn; |
4366 | 1517 tstconn->fd = source; |
2086 | 1518 |
1519 if (source < 0) { | |
1520 aim_conn_kill(sess, &tstconn); | |
1521 g_free(ccon->show); | |
1522 g_free(ccon->name); | |
1523 g_free(ccon); | |
1524 return; | |
1525 } | |
1526 | |
1527 aim_conn_completeconnect(sess, ccon->conn); | |
4617 | 1528 ccon->inpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
1529 od->oscar_chats = g_slist_append(od->oscar_chats, ccon); | |
2086 | 1530 } |
1531 | |
3694 | 1532 static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
1533 struct gaim_connection *gc = data; | |
4617 | 1534 struct oscar_data *od; |
3694 | 1535 aim_session_t *sess; |
1536 aim_conn_t *tstconn; | |
1537 | |
1538 if (!g_slist_find(connections, gc)) { | |
1539 close(source); | |
1540 return; | |
1541 } | |
1542 | |
4617 | 1543 od = gc->proto_data; |
1544 sess = od->sess; | |
3694 | 1545 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
4366 | 1546 tstconn->fd = source; |
3694 | 1547 |
1548 if (source < 0) { | |
1549 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1550 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1551 "unable to connect to email server\n"); |
3694 | 1552 return; |
1553 } | |
1554 | |
1555 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1556 od->emlpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1557 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1558 "email: connected\n"); |
3694 | 1559 } |
1560 | |
4804 | 1561 static void oscar_icon_connect(gpointer data, gint source, GaimInputCondition cond) { |
1562 struct gaim_connection *gc = data; | |
1563 struct oscar_data *od; | |
1564 aim_session_t *sess; | |
1565 aim_conn_t *tstconn; | |
1566 | |
1567 if (!g_slist_find(connections, gc)) { | |
1568 close(source); | |
1569 return; | |
1570 } | |
1571 | |
1572 od = gc->proto_data; | |
1573 sess = od->sess; | |
1574 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_ICON); | |
1575 tstconn->fd = source; | |
1576 | |
1577 if (source < 0) { | |
1578 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1579 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1580 "unable to connect to icon server\n"); |
4804 | 1581 return; |
1582 } | |
1583 | |
1584 aim_conn_completeconnect(sess, tstconn); | |
1585 od->icopa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1586 gaim_debug(GAIM_DEBUG_INFO, "oscar", "icon: connected\n"); |
4804 | 1587 } |
1588 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1589 /* Hrmph. I don't know how to make this look better. --mid */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1590 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1591 struct gaim_connection *gc = sess->aux_data; |
4491 | 1592 struct gaim_account *account = gc->account; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1593 aim_conn_t *tstconn; |
4452 | 1594 int i; |
2086 | 1595 char *host; |
1596 int port; | |
4821 | 1597 va_list ap; |
1598 struct aim_redirect_data *redir; | |
2086 | 1599 |
4491 | 1600 port = account->proto_opt[USEROPT_AUTHPORT][0] ? |
1601 atoi(account->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
2086 | 1602 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1603 va_start(ap, fr); |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1604 redir = va_arg(ap, struct aim_redirect_data *); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1605 va_end(ap); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1606 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1607 for (i = 0; i < (int)strlen(redir->ip); i++) { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1608 if (redir->ip[i] == ':') { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1609 port = atoi(&(redir->ip[i+1])); |
2086 | 1610 break; |
1611 } | |
1612 } | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1613 host = g_strndup(redir->ip, i); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1614 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1615 switch(redir->group) { |
2086 | 1616 case 0x7: /* Authorizer */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1617 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1618 "Reconnecting with authorizor...\n"); |
2086 | 1619 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); |
1620 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1621 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1622 "unable to reconnect with authorizer\n"); |
2086 | 1623 g_free(host); |
1624 return 1; | |
1625 } | |
4649 | 1626 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1627 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
2086 | 1628 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0003, gaim_info_change, 0); |
1629 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0005, gaim_info_change, 0); | |
1630 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0007, gaim_account_confirm, 0); | |
1631 | |
1632 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
4634 | 1633 if (proxy_connect(account, host, port, oscar_auth_connect, gc) != 0) { |
2086 | 1634 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1635 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1636 "unable to reconnect with authorizer\n"); |
2086 | 1637 g_free(host); |
1638 return 1; | |
1639 } | |
4293 | 1640 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1641 break; |
1642 | |
2086 | 1643 case 0xd: /* ChatNav */ |
1644 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1645 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1646 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1647 "unable to connect to chatnav server\n"); |
2086 | 1648 g_free(host); |
1649 return 1; | |
1650 } | |
4649 | 1651 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1652 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
2086 | 1653 |
1654 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
4634 | 1655 if (proxy_connect(account, host, port, oscar_chatnav_connect, gc) != 0) { |
2086 | 1656 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1657 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1658 "unable to connect to chatnav server\n"); |
2086 | 1659 g_free(host); |
1660 return 1; | |
1661 } | |
4293 | 1662 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1663 break; |
1664 | |
1665 case 0xe: { /* Chat */ | |
2086 | 1666 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1667 |
2086 | 1668 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1669 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1670 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1671 "unable to connect to chat server\n"); |
2086 | 1672 g_free(host); |
1673 return 1; | |
1674 } | |
1675 | |
4649 | 1676 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1677 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
1678 | |
2086 | 1679 ccon = g_new0(struct chat_connection, 1); |
1680 ccon->conn = tstconn; | |
1681 ccon->gc = gc; | |
1682 ccon->fd = -1; | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1683 ccon->name = g_strdup(redir->chat.room); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1684 ccon->exchange = redir->chat.exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1685 ccon->instance = redir->chat.instance; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1686 ccon->show = extract_name(redir->chat.room); |
4634 | 1687 |
2086 | 1688 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
4634 | 1689 if (proxy_connect(account, host, port, oscar_chat_connect, ccon) != 0) { |
2086 | 1690 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1691 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1692 "unable to connect to chat server\n"); |
2086 | 1693 g_free(host); |
1694 g_free(ccon->show); | |
1695 g_free(ccon->name); | |
1696 g_free(ccon); | |
1697 return 1; | |
1698 } | |
4293 | 1699 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1700 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1701 "Connected to chat room %s exchange %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1702 ccon->name, ccon->exchange); |
4194 | 1703 } break; |
3694 | 1704 |
4804 | 1705 case 0x0010: { /* icon */ |
1706 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_ICON, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1707 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1708 "unable to connect to icon server\n"); |
4804 | 1709 g_free(host); |
1710 return 1; | |
1711 } | |
1712 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); | |
1713 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_icon, 0); | |
1714 | |
1715 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
1716 if (proxy_connect(account, host, port, oscar_icon_connect, gc) != 0) { | |
1717 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1718 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1719 "unable to connect to icon server\n"); |
4804 | 1720 g_free(host); |
1721 return 1; | |
1722 } | |
1723 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); | |
1724 } break; | |
1725 | |
3694 | 1726 case 0x0018: { /* email */ |
1727 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1728 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1729 "unable to connect to email server\n"); |
3694 | 1730 g_free(host); |
1731 return 1; | |
1732 } | |
4649 | 1733 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
3694 | 1734 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
1735 | |
1736 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
4634 | 1737 if (proxy_connect(account, host, port, oscar_email_connect, gc) != 0) { |
3694 | 1738 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1739 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1740 "unable to connect to email server\n"); |
3694 | 1741 g_free(host); |
1742 return 1; | |
1743 } | |
4293 | 1744 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
3694 | 1745 } break; |
1746 | |
2086 | 1747 default: /* huh? */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1748 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1749 "got redirect for unknown service 0x%04hx\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1750 redir->group); |
2086 | 1751 break; |
1752 } | |
1753 | |
1754 g_free(host); | |
1755 return 1; | |
1756 } | |
1757 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1758 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1759 struct gaim_connection *gc = sess->aux_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1760 struct oscar_data *od = gc->proto_data; |
4738 | 1761 struct buddyinfo *bi; |
2993 | 1762 time_t time_idle = 0, signon = 0; |
1763 int type = 0; | |
1764 int caps = 0; | |
2086 | 1765 va_list ap; |
4738 | 1766 aim_userinfo_t *info; |
4194 | 1767 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1768 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1769 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1770 va_end(ap); |
1771 | |
2993 | 1772 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
1773 caps = info->capabilities; | |
3267 | 1774 if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
1775 type |= UC_AB; | |
1776 | |
4766 | 1777 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1778 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1779 type |= UC_UNCONFIRMED; | |
1780 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1781 type |= UC_ADMIN; | |
1782 if (info->flags & AIM_FLAG_AOL) | |
1783 type |= UC_AOL; | |
1784 if (info->flags & AIM_FLAG_FREE) | |
1785 type |= UC_NORMAL; | |
1786 if (info->flags & AIM_FLAG_AWAY) | |
1787 type |= UC_UNAVAILABLE; | |
1788 if (info->flags & AIM_FLAG_WIRELESS) | |
1789 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1790 } |
2993 | 1791 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1792 type = (info->icqinfo.status << 16); |
3013 | 1793 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1794 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1795 type |= UC_UNAVAILABLE; |
3013 | 1796 } |
2993 | 1797 } |
1798 | |
1799 if (caps & AIM_CAPS_ICQ) | |
1800 caps ^= AIM_CAPS_ICQ; | |
1801 | |
1802 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1803 time(&time_idle); |
1804 time_idle -= info->idletime*60; | |
2993 | 1805 } |
1806 | |
1807 if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
1808 signon = time(NULL) - info->sessionlen; | |
2086 | 1809 |
4269 | 1810 if (!aim_sncmp(gc->username, info->sn)) |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1811 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", info->sn); |
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1812 |
4738 | 1813 bi = g_hash_table_lookup(od->buddyinfo, normalize(info->sn)); |
1814 if (!bi) { | |
1815 bi = g_new0(struct buddyinfo, 1); | |
1816 g_hash_table_insert(od->buddyinfo, g_strdup(normalize(info->sn)), bi); | |
1817 } | |
1818 bi->signon = info->onlinesince ? info->onlinesince : (info->sessionlen + time(NULL)); | |
4829 | 1819 if (caps) |
1820 bi->caps = caps; | |
4739 | 1821 bi->typingnot = FALSE; |
1822 bi->ico_informed = FALSE; | |
4732 | 1823 |
4804 | 1824 /* Server stored icon stuff */ |
4853 | 1825 if (info->iconcsumlen) { |
1826 char *b16, *saved_b16; | |
1827 struct buddy *b; | |
1828 | |
1829 memcpy(bi->iconcsum, info->iconcsum, info->iconcsumlen); | |
1830 bi->iconcsumlen = info->iconcsumlen; | |
1831 b16 = tobase16(bi->iconcsum, bi->iconcsumlen); | |
1832 b = gaim_find_buddy(gc->account, info->sn); | |
1833 saved_b16 = gaim_buddy_get_setting(b, "icon_checksum"); | |
1834 if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { | |
1835 GSList *cur = od->requesticon; | |
1836 while (cur && aim_sncmp((char *)cur->data, info->sn)) | |
1837 cur = cur->next; | |
1838 if (!cur) { | |
1839 od->requesticon = g_slist_append(od->requesticon, strdup(normalize(info->sn))); | |
1840 if (od->icontimer) | |
1841 g_source_remove(od->icontimer); | |
1842 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
1843 } | |
1844 } | |
1845 free(saved_b16); | |
1846 free(b16); | |
1847 } | |
1848 | |
5149 | 1849 serv_got_update(gc, info->sn, 1, ill_just_write_my_own_damn_round_function(info->warnlevel/10.0), signon, time_idle, type); |
2086 | 1850 |
1851 return 1; | |
1852 } | |
1853 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1854 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
4739 | 1855 struct gaim_connection *gc = sess->aux_data; |
2086 | 1856 va_list ap; |
4739 | 1857 aim_userinfo_t *info; |
2086 | 1858 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1859 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1860 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1861 va_end(ap); |
1862 | |
4732 | 1863 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0); |
2086 | 1864 |
1865 return 1; | |
1866 } | |
1867 | |
3730 | 1868 static void cancel_direct_im(struct ask_direct *d) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1869 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Freeing DirectIM prompts.\n"); |
2086 | 1870 |
1871 g_free(d->sn); | |
1872 g_free(d); | |
1873 } | |
1874 | |
4617 | 1875 static void oscar_odc_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1876 struct direct_im *dim = data; |
1877 struct gaim_connection *gc = dim->gc; | |
1878 struct oscar_data *od = gc->proto_data; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
1879 struct gaim_conversation *cnv; |
2086 | 1880 char buf[256]; |
3008 | 1881 struct sockaddr name; |
1882 socklen_t name_len = 1; | |
1883 | |
2086 | 1884 if (!g_slist_find(connections, gc)) { |
1885 g_free(dim); | |
1886 return; | |
1887 } | |
1888 | |
1889 if (source < 0) { | |
1890 g_free(dim); | |
1891 return; | |
1892 } | |
1893 | |
4366 | 1894 dim->conn->fd = source; |
2086 | 1895 aim_conn_completeconnect(od->sess, dim->conn); |
4491 | 1896 if (!(cnv = gaim_find_conversation(dim->name))) |
1897 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, dim->name); | |
3008 | 1898 |
1899 /* This is the best way to see if we're connected or not */ | |
1900 if (getpeername(source, &name, &name_len) == 0) { | |
1901 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
1902 dim->connected = TRUE; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
1903 gaim_conversation_write(cnv, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
3008 | 1904 } |
2086 | 1905 od->direct_ims = g_slist_append(od->direct_ims, dim); |
3008 | 1906 |
4617 | 1907 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
2086 | 1908 } |
1909 | |
4617 | 1910 /* BBB */ |
3952 | 1911 /* |
4617 | 1912 * This is called after a remote AIM user has connected to us. We |
1913 * want to do some voodoo with the socket file descriptors, add a | |
1914 * callback or two, and then send the AIM_CB_OFT_PROMPT. | |
3952 | 1915 */ |
4656 | 1916 static int oscar_sendfile_estblsh(aim_session_t *sess, aim_frame_t *fr, ...) { |
3630 | 1917 struct gaim_connection *gc = sess->aux_data; |
1918 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4617 | 1919 struct gaim_xfer *xfer; |
5146 | 1920 struct aim_oft_info *oft_info; |
3630 | 1921 va_list ap; |
1922 aim_conn_t *conn, *listenerconn; | |
4656 | 1923 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1924 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1925 "AAA - in oscar_sendfile_estblsh\n"); |
3630 | 1926 va_start(ap, fr); |
1927 conn = va_arg(ap, aim_conn_t *); | |
1928 listenerconn = va_arg(ap, aim_conn_t *); | |
1929 va_end(ap); | |
1930 | |
4617 | 1931 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, listenerconn))) |
1932 return 1; | |
1933 | |
5146 | 1934 if (!(oft_info = xfer->data)) |
4617 | 1935 return 1; |
1936 | |
3630 | 1937 /* Stop watching listener conn; watch transfer conn instead */ |
4617 | 1938 gaim_input_remove(xfer->watcher); |
3630 | 1939 aim_conn_kill(sess, &listenerconn); |
1940 | |
5146 | 1941 oft_info->conn = conn; |
1942 xfer->fd = oft_info->conn->fd; | |
1943 | |
1944 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ACK, oscar_sendfile_ack, 0); | |
1945 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DONE, oscar_sendfile_done, 0); | |
1946 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1947 |
1948 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1949 aim_oft_sendheader(sess, AIM_CB_OFT_PROMPT, oft_info); |
3630 | 1950 |
1951 return 0; | |
1952 } | |
1953 | |
3952 | 1954 /* |
4617 | 1955 * This is the gaim callback passed to proxy_connect when connecting to another AIM |
1956 * user in order to transfer a file. | |
3952 | 1957 */ |
4617 | 1958 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition) { |
1959 struct gaim_xfer *xfer; | |
5146 | 1960 struct aim_oft_info *oft_info; |
4656 | 1961 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1962 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1963 "AAA - in oscar_sendfile_connected\n"); |
4617 | 1964 if (!(xfer = data)) |
1965 return; | |
5146 | 1966 if (!(oft_info = xfer->data)) |
3630 | 1967 return; |
4617 | 1968 if (source < 0) |
1969 return; | |
1970 | |
1971 xfer->fd = source; | |
5146 | 1972 oft_info->conn->fd = source; |
1973 | |
1974 aim_conn_completeconnect(oft_info->sess, oft_info->conn); | |
1975 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1976 |
1977 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1978 aim_im_sendch2_sendfile_accept(oft_info->sess, oft_info); |
4617 | 1979 |
1980 return; | |
3630 | 1981 } |
1982 | |
3952 | 1983 /* |
4617 | 1984 * This is called when a buddy sends us some file info. This happens when they |
1985 * are sending a file to you, and you have just established a connection to them. | |
4650 | 1986 * You should send them the exact same info except use the real cookie. We also |
4617 | 1987 * get like totally ready to like, receive the file, kay? |
3952 | 1988 */ |
4617 | 1989 static int oscar_sendfile_prompt(aim_session_t *sess, aim_frame_t *fr, ...) { |
1990 struct gaim_connection *gc = sess->aux_data; | |
1991 struct oscar_data *od = gc->proto_data; | |
1992 struct gaim_xfer *xfer; | |
5146 | 1993 struct aim_oft_info *oft_info; |
4617 | 1994 va_list ap; |
1995 aim_conn_t *conn; | |
1996 fu8_t *cookie; | |
1997 struct aim_fileheader_t *fh; | |
4656 | 1998 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1999 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2000 "AAA - in oscar_sendfile_prompt\n"); |
4617 | 2001 va_start(ap, fr); |
2002 conn = va_arg(ap, aim_conn_t *); | |
2003 cookie = va_arg(ap, fu8_t *); | |
2004 fh = va_arg(ap, struct aim_fileheader_t *); | |
2005 va_end(ap); | |
2006 | |
2007 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2008 return 1; | |
2009 | |
5146 | 2010 if (!(oft_info = xfer->data)) |
4617 | 2011 return 1; |
2012 | |
2013 /* We want to stop listening with a normal thingy */ | |
2014 gaim_input_remove(xfer->watcher); | |
2015 xfer->watcher = 0; | |
2016 | |
5146 | 2017 /* They sent us some information about the file they're sending */ |
2018 memcpy(&oft_info->fh, fh, sizeof(*fh)); | |
2019 | |
2020 /* Fill in the cookie */ | |
2021 memcpy(&oft_info->fh.bcookie, oft_info->cookie, 8); | |
2022 | |
4617 | 2023 /* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */ |
5146 | 2024 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info); |
4617 | 2025 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2026 | |
2027 return 0; | |
3630 | 2028 } |
2029 | |
3952 | 2030 /* |
4657 | 2031 * We are sending a file to someone else. They have just acknowledged our |
4617 | 2032 * prompt, so we want to start sending data like there's no tomorrow. |
3952 | 2033 */ |
4617 | 2034 static int oscar_sendfile_ack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2035 struct gaim_connection *gc = sess->aux_data; | |
2036 struct oscar_data *od = gc->proto_data; | |
2037 struct gaim_xfer *xfer; | |
2038 va_list ap; | |
2039 aim_conn_t *conn; | |
2040 fu8_t *cookie; | |
2041 struct aim_fileheader_t *fh; | |
4656 | 2042 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2043 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_ack\n"); |
4617 | 2044 va_start(ap, fr); |
2045 conn = va_arg(ap, aim_conn_t *); | |
2046 cookie = va_arg(ap, fu8_t *); | |
2047 fh = va_arg(ap, struct aim_fileheader_t *); | |
2048 va_end(ap); | |
2049 | |
2050 if (!(xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) | |
2051 return 1; | |
2052 | |
4656 | 2053 /* We want to stop listening with a normal thingy */ |
2054 gaim_input_remove(xfer->watcher); | |
2055 xfer->watcher = 0; | |
2056 | |
4617 | 2057 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2058 | |
2059 return 0; | |
3630 | 2060 } |
4617 | 2061 |
2062 /* | |
2063 * We just sent a file to someone. They said they got it and everything, | |
2064 * so we can close our direct connection and what not. | |
2065 */ | |
2066 static int oscar_sendfile_done(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2067 struct gaim_connection *gc = sess->aux_data; | |
2068 struct oscar_data *od = gc->proto_data; | |
2069 struct gaim_xfer *xfer; | |
2070 va_list ap; | |
2071 aim_conn_t *conn; | |
2072 fu8_t *cookie; | |
2073 struct aim_fileheader_t *fh; | |
4656 | 2074 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2075 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_done\n"); |
4617 | 2076 va_start(ap, fr); |
2077 conn = va_arg(ap, aim_conn_t *); | |
2078 cookie = va_arg(ap, fu8_t *); | |
2079 fh = va_arg(ap, struct aim_fileheader_t *); | |
2080 va_end(ap); | |
2081 | |
2082 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2083 return 1; | |
2084 | |
4656 | 2085 xfer->fd = conn->fd; |
4617 | 2086 gaim_xfer_end(xfer); |
2087 | |
2088 return 0; | |
2089 } | |
3630 | 2090 |
4244 | 2091 static void accept_direct_im(struct ask_direct *d) { |
2086 | 2092 struct gaim_connection *gc = d->gc; |
4244 | 2093 struct oscar_data *od; |
2086 | 2094 struct direct_im *dim; |
2945 | 2095 char *host; int port = 4443; |
4366 | 2096 int i, rc; |
2086 | 2097 |
4244 | 2098 if (!g_slist_find(connections, gc)) { |
2099 cancel_direct_im(d); | |
2100 return; | |
2101 } | |
2102 | |
2103 od = (struct oscar_data *)gc->proto_data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2104 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Accepted DirectIM.\n"); |
2086 | 2105 |
2106 dim = find_direct_im(od, d->sn); | |
2107 if (dim) { | |
3730 | 2108 cancel_direct_im(d); /* 40 */ |
4244 | 2109 return; |
2086 | 2110 } |
2111 dim = g_new0(struct direct_im, 1); | |
2112 dim->gc = d->gc; | |
2113 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
2114 | |
4617 | 2115 dim->conn = aim_odc_connect(od->sess, d->sn, NULL, d->cookie); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2116 if (!dim->conn) { |
2086 | 2117 g_free(dim); |
3730 | 2118 cancel_direct_im(d); |
4244 | 2119 return; |
2086 | 2120 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2121 |
2086 | 2122 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
4617 | 2123 gaim_odc_incoming, 0); |
2086 | 2124 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, |
4617 | 2125 gaim_odc_typing, 0); |
3033 | 2126 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
2993 | 2127 gaim_update_ui, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2128 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2129 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2130 port = atoi(&(d->ip[i+1])); |
2086 | 2131 break; |
2132 } | |
2133 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2134 host = g_strndup(d->ip, i); |
2086 | 2135 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
4634 | 2136 rc = proxy_connect(gc->account, host, port, oscar_odc_callback, dim); |
2086 | 2137 g_free(host); |
4366 | 2138 if (rc < 0) { |
2086 | 2139 aim_conn_kill(od->sess, &dim->conn); |
2140 g_free(dim); | |
3730 | 2141 cancel_direct_im(d); |
4244 | 2142 return; |
2086 | 2143 } |
2144 | |
3730 | 2145 cancel_direct_im(d); |
2086 | 2146 |
4244 | 2147 return; |
2086 | 2148 } |
2149 | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2150 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2151 struct gaim_connection *gc = sess->aux_data; |
3600 | 2152 struct oscar_data *od = gc->proto_data; |
4738 | 2153 char *tmp; |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2154 int flags = 0; |
3659 | 2155 int convlen; |
2156 GError *err = NULL; | |
4738 | 2157 struct buddyinfo *bi; |
2158 | |
2159 bi = g_hash_table_lookup(od->buddyinfo, normalize(userinfo->sn)); | |
2160 if (!bi) { | |
2161 bi = g_new0(struct buddyinfo, 1); | |
2162 g_hash_table_insert(od->buddyinfo, g_strdup(normalize(userinfo->sn)), bi); | |
2163 } | |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2164 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2165 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2166 flags |= IM_FLAG_AWAY; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2167 |
4738 | 2168 if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) |
2169 bi->typingnot = TRUE; | |
2170 else | |
2171 bi->typingnot = FALSE; | |
2172 | |
4380 | 2173 if ((args->icbmflags & AIM_IMFLAGS_HASICON) && (args->iconlen) && (args->iconsum) && (args->iconstamp)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2174 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2175 "%s has an icon\n", userinfo->sn); |
4738 | 2176 if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { |
2177 bi->ico_need = TRUE; | |
2178 bi->ico_len = args->iconlen; | |
2179 bi->ico_csum = args->iconsum; | |
2180 bi->ico_time = args->iconstamp; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2181 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2182 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2183 |
4491 | 2184 if (gc->account->iconfile[0] && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2185 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2186 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2187 |
4491 | 2188 if (!stat(gc->account->iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2189 char *buf = g_malloc(st.st_size); |
4491 | 2190 file = fopen(gc->account->iconfile, "rb"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2191 if (file) { |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
2192 int len = fread(buf, 1, st.st_size, file); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2193 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2194 "Sending buddy icon to %s (%d bytes, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2195 "%lu reported)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2196 userinfo->sn, len, st.st_size); |
4617 | 2197 aim_im_sendch2_icon(sess, userinfo->sn, buf, st.st_size, |
2198 st.st_mtime, aimutil_iconsum(buf, st.st_size)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2199 fclose(file); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2200 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2201 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2202 "Can't open buddy icon file!\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2203 g_free(buf); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2204 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2205 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2206 "Can't stat buddy icon file!\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2207 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2208 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2209 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2210 "Character set is %hu %hu\n", args->charset, args->charsubset); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2211 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
3722 | 2212 /* This message is marked as UNICODE, so we have to |
2213 * convert it to utf-8 before handing it to the gaim core. | |
2214 * This conversion should *never* fail, if it does it | |
2215 * means that either the incoming ICBM is corrupted or | |
4662 | 2216 * there is something we don't understand about it. |
2217 * For the record, AIM Unicode is big-endian UCS-2 */ | |
2218 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2219 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Received UNICODE IM\n"); |
4121 | 2220 |
2221 if (!args->msg || !args->msglen) | |
2222 return 1; | |
4641 | 2223 |
3659 | 2224 tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
2225 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2226 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2227 "Unicode IM conversion: %s\n", err->message); |
3659 | 2228 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2229 g_error_free(err); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2230 } |
3722 | 2231 } else { |
3850 | 2232 /* This will get executed for both AIM_IMFLAGS_ISO_8859_1 and |
3722 | 2233 * unflagged messages, which are ASCII. That's OK because |
2234 * ASCII is a strict subset of ISO-8859-1; this should | |
2235 * help with compatibility with old, broken versions of | |
2236 * gaim (everything before 0.60) and other broken clients | |
2237 * that will happily send ISO-8859-1 without marking it as | |
2238 * such */ | |
4662 | 2239 if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2240 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2241 "Received ISO-8859-1 IM\n"); |
4121 | 2242 |
2243 if (!args->msg || !args->msglen) | |
2244 return 1; | |
2245 | |
3659 | 2246 tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
2247 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2248 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2249 "ISO-8859-1 IM conversion: %s\n", err->message); |
3659 | 2250 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2251 g_error_free(err); |
3659 | 2252 } |
3642 | 2253 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2254 |
4333 | 2255 /* strip_linefeed(tmp); */ |
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2833
diff
changeset
|
2256 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL), -1); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2257 g_free(tmp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2258 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2259 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2260 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2261 |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2262 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2263 struct gaim_connection *gc = sess->aux_data; |
4617 | 2264 struct oscar_data *od = gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2265 |
4121 | 2266 if (!args) |
2267 return 0; | |
4194 | 2268 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2269 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2270 "rendezvous with %s, status is %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2271 userinfo->sn, args->status); |
2869 | 2272 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2273 if (args->reqclass & AIM_CAPS_CHAT) { |
4121 | 2274 char *name; |
5234 | 2275 GHashTable *components; |
2276 | |
4121 | 2277 if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange || !args->msg) |
2278 return 1; | |
5234 | 2279 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
2280 g_free); | |
4121 | 2281 name = extract_name(args->info.chat.roominfo.name); |
5234 | 2282 g_hash_table_replace(components, g_strdup("room"), g_strdup(name ? name : args->info.chat.roominfo.name)); |
2283 g_hash_table_replace(components, g_strdup("exchange"), g_strdup_printf("%d", args->info.chat.roominfo.exchange)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2284 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2285 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2286 userinfo->sn, |
2869 | 2287 (char *)args->msg, |
5234 | 2288 components); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2289 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2290 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2291 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
4617 | 2292 /* BBB */ |
2293 if (args->status == AIM_RENDEZVOUS_PROPOSE) { | |
2294 /* Someone wants to send a file (or files) to us */ | |
2295 struct gaim_xfer *xfer; | |
5146 | 2296 struct aim_oft_info *oft_info; |
2297 | |
2298 if (!args->cookie || !args->port || !args->verifiedip || | |
2299 !args->info.sendfile.filename || !args->info.sendfile.totsize || | |
4656 | 2300 !args->info.sendfile.totfiles || !args->reqclass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2301 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2302 "%s tried to send you a file with incomplete " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2303 "information.\n", userinfo->sn); |
5146 | 2304 if (args->proxyip) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2305 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2306 "IP for a proxy server was given. Gaim " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2307 "does not support this yet.\n"); |
4617 | 2308 return 1; |
4656 | 2309 } |
4617 | 2310 |
2311 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) { | |
2312 /* last char of the ft req is a star, they are sending us a | |
2313 * directory -- remove the star and trailing slash so we dont save | |
2314 * directories that look like 'dirname\*' -- arl */ | |
2315 char *tmp = strrchr(args->info.sendfile.filename, '\\'); | |
2316 if (tmp && (tmp[1] == '*')) { | |
2317 tmp[0] = '\0'; | |
2318 } | |
2319 } | |
2320 | |
2321 /* Build the file transfer handle */ | |
2322 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, userinfo->sn); | |
5163 | 2323 xfer->remote_ip = g_strdup(args->verifiedip); |
5146 | 2324 xfer->remote_port = args->port; |
4617 | 2325 gaim_xfer_set_filename(xfer, args->info.sendfile.filename); |
2326 gaim_xfer_set_size(xfer, args->info.sendfile.totsize); | |
5146 | 2327 |
2328 /* Create the oscar-specific data */ | |
5163 | 2329 oft_info = aim_oft_createinfo(od->sess, args->cookie, userinfo->sn, args->clientip, xfer->remote_port, 0, 0, NULL); |
4898 | 2330 if (args->proxyip) |
5146 | 2331 oft_info->proxyip = g_strdup(args->proxyip); |
4898 | 2332 if (args->verifiedip) |
5146 | 2333 oft_info->verifiedip = g_strdup(args->verifiedip); |
2334 xfer->data = oft_info; | |
4617 | 2335 |
2336 /* Setup our I/O op functions */ | |
2337 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
2338 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
2339 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2340 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2341 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4617 | 2342 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
2343 | |
2344 /* | |
2345 * XXX - Should do something with args->msg, args->encoding, and args->language | |
2346 * probably make it apply to all ch2 messages. | |
3752 | 2347 */ |
4617 | 2348 |
2349 /* Keep track of this transfer for later */ | |
2350 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
2351 | |
2352 /* Now perform the request */ | |
2353 gaim_xfer_request(xfer); | |
2354 } else if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
2355 /* The other user wants to cancel a file transfer */ | |
2356 struct gaim_xfer *xfer; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2357 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2358 "AAA - File transfer canceled by remote user\n"); |
4617 | 2359 if ((xfer = oscar_find_xfer_by_cookie(od->file_transfers, args->cookie))) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2360 gaim_xfer_cancel_remote(xfer); |
4617 | 2361 } else if (args->status == AIM_RENDEZVOUS_ACCEPT) { |
2362 /* | |
2363 * This gets sent by the receiver of a file | |
2364 * as they connect directly to us. If we don't | |
2365 * get this, then maybe a third party connected | |
2366 * to us, and we shouldn't send them anything. | |
2367 */ | |
2368 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2369 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2370 "unknown rendezvous status!\n"); |
3630 | 2371 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2372 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2373 } else if (args->reqclass & AIM_CAPS_VOICE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2374 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
4799 | 2375 set_icon_data(gc, userinfo->sn, args->info.icon.icon, |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2376 args->info.icon.length); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2377 } else if (args->reqclass & AIM_CAPS_IMIMAGE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2378 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2379 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2380 |
4212 | 2381 if (!args->verifiedip) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2382 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2383 "directim kill blocked (%s)\n", userinfo->sn); |
4650 | 2384 return 1; |
4212 | 2385 } |
2386 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2387 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2388 "%s received direct im request from %s (%s)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2389 gc->username, userinfo->sn, args->verifiedip); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2390 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2391 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2392 d->sn = g_strdup(userinfo->sn); |
2869 | 2393 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2394 memcpy(d->cookie, args->cookie, 8); |
4650 | 2395 g_snprintf(buf, sizeof buf, _("%s has just asked to directly connect to %s"), userinfo->sn, gc->username); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
2396 do_ask_dialog(buf, _("This requires a direct connection between the two computers and is necessary for IM Images. Because your IP address will be revealed, this may be considered a privacy risk."), d, _("Connect"), accept_direct_im, _("Cancel"), cancel_direct_im, my_protocol->handle, FALSE); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2397 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2398 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2399 "Unknown reqclass %hu\n", args->reqclass); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2400 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2401 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2402 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2403 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2404 |
3453 | 2405 /* |
4230 | 2406 * Authorization Functions |
2407 * Most of these are callbacks from dialogs. They're used by both | |
2408 * methods of authorization (SSI and old-school channel 4 ICBM) | |
3453 | 2409 */ |
4269 | 2410 /* When you ask other people for authorization */ |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2411 static void gaim_auth_request(char *msg, struct name_data *data) { |
4230 | 2412 struct gaim_connection *gc = data->gc; |
4244 | 2413 |
2414 if (g_slist_find(connections, gc)) { | |
2415 struct oscar_data *od = gc->proto_data; | |
4687 | 2416 struct buddy *buddy = gaim_find_buddy(gc->account, data->name); |
2417 struct group *group = gaim_find_buddys_group(buddy); | |
4244 | 2418 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2419 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2420 "ssi: adding buddy %s to group %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2421 buddy->name, group->name); |
4889 | 2422 aim_ssi_sendauthrequest(od->sess, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); |
4269 | 2423 if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) |
4889 | 2424 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); |
4244 | 2425 } |
4230 | 2426 } |
4337 | 2427 } |
2428 | |
2429 static void gaim_auth_request_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2430 gaim_request_input(data->gc, NULL, _("Authorization Request Message:"), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2431 NULL, _("Please authorize me!"), TRUE, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2432 _("OK"), G_CALLBACK(gaim_auth_request), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2433 _("Cancel"), G_CALLBACK(gaim_free_name_data), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2434 data); |
4230 | 2435 } |
2436 | |
2437 static void gaim_auth_dontrequest(struct name_data *data) { | |
4244 | 2438 struct gaim_connection *gc = data->gc; |
2439 | |
2440 if (g_slist_find(connections, gc)) { | |
2441 /* struct oscar_data *od = gc->proto_data; */ | |
2442 /* XXX - Take the buddy out of our buddy list */ | |
2443 } | |
2444 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2445 gaim_free_name_data(NULL, data); |
4230 | 2446 } |
2447 | |
5136 | 2448 static void gaim_auth_sendrequest(struct gaim_connection *gc, const char *name) { |
4269 | 2449 struct name_data *data = g_new(struct name_data, 1); |
2450 struct buddy *buddy; | |
2451 gchar *dialog_msg, *nombre; | |
2452 | |
4687 | 2453 buddy = gaim_find_buddy(gc->account, name); |
2454 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
2455 nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); | |
4269 | 2456 else |
4830 | 2457 nombre = NULL; |
2458 | |
2459 dialog_msg = g_strdup_printf(_("The user %s requires authorization before being added to a buddy list. Do you want to send an authorization request?"), (nombre ? nombre : name)); | |
4269 | 2460 data->gc = gc; |
2461 data->name = g_strdup(name); | |
2462 data->nick = NULL; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
2463 do_ask_dialog(_("Request Authorization"), dialog_msg, data, _("Request Authorization"), gaim_auth_request_msgprompt, _("Cancel"), gaim_auth_dontrequest, my_protocol->handle, FALSE); |
4269 | 2464 |
2465 g_free(dialog_msg); | |
2466 g_free(nombre); | |
2467 } | |
2468 | |
4230 | 2469 /* When other people ask you for authorization */ |
2470 static void gaim_auth_grant(struct name_data *data) { | |
2471 struct gaim_connection *gc = data->gc; | |
4244 | 2472 |
2473 if (g_slist_find(connections, gc)) { | |
2474 struct oscar_data *od = gc->proto_data; | |
4236 | 2475 #ifdef NOSSI |
4244 | 2476 struct buddy *buddy; |
2477 gchar message; | |
2478 message = 0; | |
4687 | 2479 buddy = gaim_find_buddy(gc->account, data->name); |
4617 | 2480 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHGRANTED, &message); |
4687 | 2481 show_got_added(gc, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 2482 #else |
4889 | 2483 aim_ssi_sendauthreply(od->sess, data->name, 0x01, NULL); |
4230 | 2484 #endif |
4244 | 2485 } |
2486 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2487 gaim_free_name_data(NULL, data); |
3141 | 2488 } |
2489 | |
4230 | 2490 /* When other people ask you for authorization */ |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2491 static void gaim_auth_dontgrant(char *msg, struct name_data *data) { |
4230 | 2492 struct gaim_connection *gc = data->gc; |
4244 | 2493 |
2494 if (g_slist_find(connections, gc)) { | |
2495 struct oscar_data *od = gc->proto_data; | |
4230 | 2496 #ifdef NOSSI |
4617 | 2497 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHDENIED, msg ? msg : _("No reason given.")); |
4230 | 2498 #else |
4889 | 2499 aim_ssi_sendauthreply(od->sess, data->name, 0x00, msg ? msg : _("No reason given.")); |
4230 | 2500 #endif |
4244 | 2501 } |
4337 | 2502 } |
2503 | |
2504 static void gaim_auth_dontgrant_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2505 gaim_request_input(data->gc, NULL, _("Authorization Denied Message:"), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2506 NULL, _("No reason given."), TRUE, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2507 _("OK"), G_CALLBACK(gaim_auth_dontgrant), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2508 _("Cancel"), G_CALLBACK(gaim_free_name_data), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2509 data); |
3141 | 2510 } |
2511 | |
4230 | 2512 /* When someone sends you contacts */ |
2513 static void gaim_icq_contactadd(struct name_data *data) { | |
2514 struct gaim_connection *gc = data->gc; | |
4244 | 2515 |
2516 if (g_slist_find(connections, gc)) { | |
2517 show_add_buddy(gc, data->name, NULL, data->nick); | |
2518 } | |
2519 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2520 gaim_free_name_data(NULL, data); |
3453 | 2521 } |
2522 | |
4075 | 2523 static int incomingim_chan4(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch4_args *args, time_t t) { |
3141 | 2524 struct gaim_connection *gc = sess->aux_data; |
4076 | 2525 gchar **msg1, **msg2; |
2526 GError *err = NULL; | |
2527 int i; | |
2528 | |
4121 | 2529 if (!args->type || !args->msg || !args->uin) |
2530 return 1; | |
4194 | 2531 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2532 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2533 "Received a channel 4 message of type 0x%02hhx.\n", args->type); |
4076 | 2534 |
2535 /* Split up the message at the delimeter character, then convert each string to UTF-8 */ | |
4173 | 2536 msg1 = g_strsplit(args->msg, "\376", 0); |
4194 | 2537 msg2 = (gchar **)g_malloc(10*sizeof(gchar *)); /* XXX - 10 is a guess */ |
4076 | 2538 for (i=0; msg1[i]; i++) { |
2539 strip_linefeed(msg1[i]); | |
2540 msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err); | |
4800 | 2541 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2542 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2543 "Error converting a string from ISO-8859-1 to " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2544 "UTF-8 in oscar ICBM channel 4 parsing\n"); |
4800 | 2545 g_error_free(err); |
2546 } | |
4076 | 2547 } |
2548 msg2[i] = NULL; | |
2549 | |
3952 | 2550 switch (args->type) { |
4173 | 2551 case 0x01: { /* MacICQ message or basic offline message */ |
4076 | 2552 if (i >= 1) { |
2553 gchar *uin = g_strdup_printf("%lu", args->uin); | |
2554 if (t) { /* This is an offline message */ | |
2555 /* I think this timestamp is in UTC, or something */ | |
2556 serv_got_im(gc, uin, msg2[0], 0, t, -1); | |
2557 } else { /* This is a message from MacICQ/Miranda */ | |
2558 serv_got_im(gc, uin, msg2[0], 0, time(NULL), -1); | |
2559 } | |
2560 g_free(uin); | |
4075 | 2561 } |
3316 | 2562 } break; |
2563 | |
4173 | 2564 case 0x04: { /* Someone sent you a URL */ |
4076 | 2565 if (i >= 2) { |
2566 gchar *uin = g_strdup_printf("%lu", args->uin); | |
2567 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", msg2[1], msg2[0]); | |
3453 | 2568 serv_got_im(gc, uin, message, 0, time(NULL), -1); |
2569 g_free(uin); | |
2570 g_free(message); | |
2571 } | |
2572 } break; | |
2573 | |
4173 | 2574 case 0x06: { /* Someone requested authorization */ |
4076 | 2575 if (i >= 6) { |
4230 | 2576 struct name_data *data = g_new(struct name_data, 1); |
4337 | 2577 gchar *dialog_msg = g_strdup_printf(_("The user %lu wants to add you to their buddy list for the following reason:\n%s"), args->uin, msg2[5] ? msg2[5] : _("No reason given.")); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2578 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2579 "Received an authorization request from UIN %lu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2580 args->uin); |
4076 | 2581 data->gc = gc; |
4230 | 2582 data->name = g_strdup_printf("%lu", args->uin); |
2583 data->nick = NULL; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
2584 do_ask_dialog(_("Authorization Request"), dialog_msg, data, _("Authorize"), gaim_auth_grant, _("Deny"), gaim_auth_dontgrant_msgprompt, my_protocol->handle, FALSE); |
4076 | 2585 g_free(dialog_msg); |
2586 } | |
3141 | 2587 } break; |
2588 | |
4173 | 2589 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2590 if (i >= 1) { |
4194 | 2591 gchar *dialog_msg = g_strdup_printf(_("The user %lu has denied your request to add them to your contact list for the following reason:\n%s"), args->uin, msg2[0] ? msg2[0] : _("No reason given.")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2592 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2593 dialog_msg); |
4076 | 2594 g_free(dialog_msg); |
2595 } | |
3141 | 2596 } break; |
2597 | |
4173 | 2598 case 0x08: { /* Someone has granted you authorization */ |
4194 | 2599 gchar *dialog_msg = g_strdup_printf(_("The user %lu has granted your request to add them to your contact list."), args->uin); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2600 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2601 dialog_msg); |
3141 | 2602 g_free(dialog_msg); |
2603 } break; | |
2604 | |
4333 | 2605 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2606 if (i >= 5) { | |
2607 gchar *dialog_msg = g_strdup_printf(_("You have received a special message\n\nFrom: %s [%s]\n%s"), msg2[0], msg2[3], msg2[5]); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2608 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2609 g_free(dialog_msg); |
2610 } | |
2611 } break; | |
2612 | |
4173 | 2613 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2614 if (i >= 6) { |
4194 | 2615 gchar *dialog_msg = g_strdup_printf(_("You have received an ICQ page\n\nFrom: %s [%s]\n%s"), msg2[0], msg2[3], msg2[5]); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2616 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2617 g_free(dialog_msg); |
2618 } | |
4075 | 2619 } break; |
2620 | |
4173 | 2621 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2622 if (i >= 6) { |
4308 | 2623 gchar *dialog_msg = g_strdup_printf(_("You have received an ICQ email from %s [%s]\n\nMessage is:\n%s"), msg2[0], msg2[3], msg2[5]); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2624 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2625 g_free(dialog_msg); |
2626 } | |
4075 | 2627 } break; |
2628 | |
4173 | 2629 case 0x12: { |
3141 | 2630 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
4173 | 2631 /* Someone added you to their contact list? */ |
3141 | 2632 } break; |
2633 | |
4173 | 2634 case 0x13: { /* Someone has sent you some ICQ contacts */ |
3453 | 2635 int i, num; |
2636 gchar **text; | |
4173 | 2637 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2638 if (text) { |
2639 num = 0; | |
2640 for (i=0; i<strlen(text[0]); i++) | |
2641 num = num*10 + text[0][i]-48; | |
2642 for (i=0; i<num; i++) { | |
4230 | 2643 struct name_data *data = g_new(struct name_data, 1); |
3730 | 2644 gchar *message = g_strdup_printf(_("ICQ user %lu has sent you a contact: %s (%s)"), args->uin, text[i*2+2], text[i*2+1]); |
3453 | 2645 data->gc = gc; |
4790 | 2646 data->name = g_strdup(text[i*2+1]); |
2647 data->nick = g_strdup(text[i*2+2]); | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
2648 do_ask_dialog(message, _("Do you want to add this contact to your Buddy List?"), data, _("Add"), gaim_icq_contactadd, _("Decline"), gaim_free_name_data, my_protocol->handle, FALSE); |
3453 | 2649 g_free(message); |
2650 } | |
2651 g_strfreev(text); | |
2652 } | |
2653 } break; | |
2654 | |
4173 | 2655 case 0x1a: { /* Someone has sent you a greeting card or requested contacts? */ |
3453 | 2656 /* This is boring and silly. */ |
2657 } break; | |
2658 | |
3141 | 2659 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2660 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2661 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2662 "(type 0x%02hhx).\n", args->type); |
3141 | 2663 } break; |
2664 } | |
2665 | |
4076 | 2666 g_strfreev(msg1); |
2667 g_strfreev(msg2); | |
2668 | |
3141 | 2669 return 1; |
2670 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2671 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2672 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2673 fu16_t channel; |
2674 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2675 aim_userinfo_t *userinfo; |
2086 | 2676 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2677 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2678 va_start(ap, fr); |
4200 | 2679 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2680 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2681 |
3141 | 2682 switch (channel) { |
2683 case 1: { /* standard message */ | |
2684 struct aim_incomingim_ch1_args *args; | |
2685 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2686 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2687 } break; | |
2688 | |
2689 case 2: { /* rendevous */ | |
2690 struct aim_incomingim_ch2_args *args; | |
2691 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2692 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2693 } break; | |
2694 | |
2695 case 4: { /* ICQ */ | |
2696 struct aim_incomingim_ch4_args *args; | |
2697 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2698 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2699 } break; |
2700 | |
2701 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2702 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2703 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2704 "0x%04hx).", channel); |
3141 | 2705 } break; |
2086 | 2706 } |
2707 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2708 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2709 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2710 return ret; |
2086 | 2711 } |
2712 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2713 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2714 char *buf; |
2086 | 2715 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2716 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2717 aim_userinfo_t *userinfo; |
2086 | 2718 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2719 va_start(ap, fr); |
4200 | 2720 chan = (fu16_t)va_arg(ap, unsigned int); |
2721 userinfo = va_arg(ap, aim_userinfo_t *); | |
2722 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2723 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2724 va_end(ap); |
2725 | |
2726 switch(reason) { | |
5420 | 2727 case 0: /* Invalid (0) */ |
2728 buf = g_strdup_printf( | |
2729 ngettext( | |
4276 | 2730 "You missed %hu message from %s because it was invalid.", |
2731 "You missed %hu messages from %s because they were invalid.", | |
2732 nummissed), | |
4282 | 2733 nummissed, |
2734 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2735 break; |
5420 | 2736 case 1: /* Message too large */ |
2737 buf = g_strdup_printf( | |
2738 ngettext( | |
4276 | 2739 "You missed %hu message from %s because it was too large.", |
2740 "You missed %hu messages from %s because they were too large.", | |
2741 nummissed), | |
4282 | 2742 nummissed, |
2743 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2744 break; |
5420 | 2745 case 2: /* Rate exceeded */ |
2746 buf = g_strdup_printf( | |
2747 ngettext( | |
4276 | 2748 "You missed %hu message from %s because the rate limit has been exceeded.", |
2749 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2750 nummissed), | |
4282 | 2751 nummissed, |
2752 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2753 break; |
5420 | 2754 case 3: /* Evil Sender */ |
2755 buf = g_strdup_printf( | |
2756 ngettext( | |
4276 | 2757 "You missed %hu message from %s because he/she was too evil.", |
2758 "You missed %hu messages from %s because he/she was too evil.", | |
2759 nummissed), | |
4282 | 2760 nummissed, |
2761 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2762 break; |
5420 | 2763 case 4: /* Evil Receiver */ |
2764 buf = g_strdup_printf( | |
2765 ngettext( | |
4276 | 2766 "You missed %hu message from %s because you are too evil.", |
2767 "You missed %hu messages from %s because you are too evil.", | |
2768 nummissed), | |
4282 | 2769 nummissed, |
2770 userinfo->sn); | |
2086 | 2771 break; |
2772 default: | |
5420 | 2773 buf = g_strdup_printf( |
2774 ngettext( | |
4276 | 2775 "You missed %hu message from %s for an unknown reason.", |
2776 "You missed %hu messages from %s for an unknown reason.", | |
2777 nummissed), | |
4282 | 2778 nummissed, |
2779 userinfo->sn); | |
2086 | 2780 break; |
2781 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2782 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2783 g_free(buf); |
2086 | 2784 |
2785 return 1; | |
2786 } | |
2787 | |
3212 | 2788 static char *gaim_icq_status(int state) { |
2789 /* Make a cute little string that shows the status of the dude or dudet */ | |
2790 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2791 return g_strdup_printf(_("Free For Chat")); |
3212 | 2792 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2793 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2794 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2795 return g_strdup_printf(_("Not Available")); |
3212 | 2796 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2797 return g_strdup_printf(_("Occupied")); |
3212 | 2798 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2799 return g_strdup_printf(_("Away")); |
3212 | 2800 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2801 return g_strdup_printf(_("Web Aware")); |
3212 | 2802 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2803 return g_strdup_printf(_("Invisible")); |
3212 | 2804 else |
4342 | 2805 return g_strdup_printf(_("Online")); |
3212 | 2806 } |
2807 | |
4194 | 2808 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
3630 | 2809 struct gaim_connection *gc = sess->aux_data; |
4617 | 2810 struct oscar_data *od = gc->proto_data; |
2811 | |
2812 /* BBB */ | |
3630 | 2813 switch (reason) { |
4151 | 2814 case 3: { /* Decline sendfile. */ |
4617 | 2815 struct gaim_xfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2816 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2817 "AAA - Other user declined file transfer\n"); |
4617 | 2818 if ((xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2819 gaim_xfer_cancel_remote(xfer); |
4151 | 2820 } break; |
2821 | |
2822 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2823 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2824 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2825 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2826 } |
3630 | 2827 |
2828 } | |
2829 | |
2830 return 0; | |
2831 } | |
2832 | |
4194 | 2833 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
4151 | 2834 struct gaim_connection *gc = sess->aux_data; |
2835 | |
2836 switch(reason) { | |
2837 case 0x0003: { /* Reply from an ICQ status message request */ | |
2838 char *status_msg = gaim_icq_status(state); | |
2839 char *dialog_msg, **splitmsg; | |
2840 struct oscar_data *od = gc->proto_data; | |
2841 GSList *l = od->evilhack; | |
2842 gboolean evilhack = FALSE; | |
2843 | |
2844 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2845 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2846 | |
2847 /* If who is in od->evilhack, then we're just getting the away message, otherwise this | |
2848 * will just get appended to the info box (which is already showing). */ | |
2849 while (l) { | |
2850 char *x = l->data; | |
2851 if (!strcmp(x, normalize(who))) { | |
2852 evilhack = TRUE; | |
2853 g_free(x); | |
2854 od->evilhack = g_slist_remove(od->evilhack, x); | |
2855 break; | |
2856 } | |
2857 l = l->next; | |
2858 } | |
2859 | |
2860 if (evilhack) | |
4344 | 2861 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
4151 | 2862 else |
4344 | 2863 dialog_msg = g_strdup_printf(_("<B>Status:</B> %s<HR>%s"), status_msg, g_strjoinv("<BR>", splitmsg)); |
4151 | 2864 g_show_info_text(gc, who, 2, dialog_msg, NULL); |
2865 | |
2866 g_free(status_msg); | |
2867 g_free(dialog_msg); | |
2868 g_strfreev(splitmsg); | |
2869 } break; | |
2870 | |
2871 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2872 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2873 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2874 "Type 0x%04hx\n", who, reason); |
4151 | 2875 } break; |
2876 } /* end of switch */ | |
2877 | |
2878 return 0; | |
2879 } | |
2880 | |
3212 | 2881 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2882 va_list ap; | |
2883 fu16_t chan, reason; | |
2884 char *who; | |
2885 | |
2886 va_start(ap, fr); | |
4200 | 2887 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2888 who = va_arg(ap, char *); |
4200 | 2889 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2890 |
3952 | 2891 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2892 char *cookie = va_arg(ap, char *); |
4151 | 2893 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2894 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2895 fu32_t state = 0; |
4151 | 2896 char *msg = NULL; |
2897 if (reason == 0x0003) { | |
4200 | 2898 state = va_arg(ap, fu32_t); |
4151 | 2899 msg = va_arg(ap, char *); |
2900 } | |
2901 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2902 } | |
3952 | 2903 |
3212 | 2904 va_end(ap); |
2905 | |
2906 return 1; | |
2907 } | |
2908 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2909 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2910 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2911 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2912 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2913 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2914 va_start(ap, fr); |
4199 | 2915 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2916 va_end(ap); |
2917 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2918 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2919 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2920 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2921 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2922 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2923 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2924 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2925 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2926 |
2086 | 2927 return 1; |
2928 } | |
2929 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2930 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2931 #if 0 |
3752 | 2932 struct gaim_connection *gc = sess->aux_data; |
4617 | 2933 struct oscar_data *od = gc->proto_data; |
2934 struct gaim_xfer *xfer; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2935 #endif |
4617 | 2936 va_list ap; |
2937 fu16_t reason; | |
2938 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2939 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2940 va_start(ap, fr); |
4617 | 2941 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 2942 data = va_arg(ap, char *); |
2086 | 2943 va_end(ap); |
2944 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2945 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2946 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 2947 |
2948 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2949 #if 0 |
4617 | 2950 /* If this was a file transfer request, data is a cookie */ |
2951 if ((xfer = oscar_find_xfer_by_cookie(od->file_transfers, data))) { | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2952 gaim_xfer_cancel_remote(xfer); |
3630 | 2953 return 1; |
2954 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2955 #endif |
3630 | 2956 |
4617 | 2957 /* Data is assumed to be the destination sn */ |
2958 buf = g_strdup_printf(_("Your message to %s did not get sent:"), data); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2959 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2960 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 2961 g_free(buf); |
2086 | 2962 |
2963 return 1; | |
2964 } | |
2965 | |
3595 | 2966 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
2967 struct gaim_connection *gc = sess->aux_data; | |
2968 va_list ap; | |
2969 fu16_t type1, type2; | |
2970 char *sn; | |
2971 | |
2972 va_start(ap, fr); | |
4199 | 2973 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2974 sn = va_arg(ap, char *); |
4199 | 2975 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2976 va_end(ap); |
2977 | |
2978 switch (type2) { | |
2979 case 0x0000: { /* Text has been cleared */ | |
2980 serv_got_typing_stopped(gc, sn); | |
2981 } break; | |
2982 | |
2983 case 0x0001: { /* Paused typing */ | |
3768 | 2984 serv_got_typing(gc, sn, 0, TYPED); |
3595 | 2985 } break; |
2986 | |
2987 case 0x0002: { /* Typing */ | |
3768 | 2988 serv_got_typing(gc, sn, 0, TYPING); |
3595 | 2989 } break; |
2990 | |
2991 default: { | |
5435 | 2992 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "Received unknown typing notification message from %s. Type1 is 0x%04x and type2 is 0x%04hx.\n", sn, type1, type2); |
3595 | 2993 } break; |
2994 } | |
2995 | |
2996 return 1; | |
2997 } | |
2998 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2999 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 3000 char *buf; |
2086 | 3001 va_list ap; |
5420 | 3002 fu16_t reason; |
2086 | 3003 char *destn; |
3004 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3005 va_start(ap, fr); |
4199 | 3006 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3007 destn = va_arg(ap, char *); |
3008 va_end(ap); | |
3009 | |
5420 | 3010 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3011 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3012 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
5420 | 3013 g_free(buf); |
2086 | 3014 |
3015 return 1; | |
3016 } | |
3017 | |
3018 static char *images(int flags) { | |
3019 static char buf[1024]; | |
3101 | 3020 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3021 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3022 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3023 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3024 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3025 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3026 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3027 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3028 return buf; |
3029 } | |
3030 | |
3101 | 3031 |
2920 | 3032 static char *caps_string(guint caps) |
3033 { | |
3034 static char buf[512], *tmp; | |
3035 int count = 0, i = 0; | |
3036 guint bit = 1; | |
4742 | 3037 |
3038 if (!caps) { | |
4744 | 3039 return NULL; |
4743 | 3040 } else while (bit <= 0x20000) { |
2920 | 3041 if (bit & caps) { |
3042 switch (bit) { | |
3043 case 0x1: | |
3044 tmp = _("Buddy Icon"); | |
3045 break; | |
3046 case 0x2: | |
3047 tmp = _("Voice"); | |
3048 break; | |
3049 case 0x4: | |
4898 | 3050 tmp = _("Direct IM"); |
2920 | 3051 break; |
3052 case 0x8: | |
3053 tmp = _("Chat"); | |
3054 break; | |
3055 case 0x10: | |
3056 tmp = _("Get File"); | |
3057 break; | |
3058 case 0x20: | |
3059 tmp = _("Send File"); | |
3060 break; | |
3061 case 0x40: | |
3062 case 0x200: | |
3063 tmp = _("Games"); | |
3064 break; | |
3065 case 0x80: | |
4898 | 3066 tmp = _("Add-Ins"); |
2920 | 3067 break; |
3068 case 0x100: | |
3069 tmp = _("Send Buddy List"); | |
3070 break; | |
3071 case 0x400: | |
3072 tmp = _("EveryBuddy Bug"); | |
3073 break; | |
3074 case 0x800: | |
3075 tmp = _("AP User"); | |
3076 break; | |
3077 case 0x1000: | |
3078 tmp = _("ICQ RTF"); | |
3079 break; | |
3080 case 0x2000: | |
3081 tmp = _("Nihilist"); | |
3082 break; | |
3083 case 0x4000: | |
3084 tmp = _("ICQ Server Relay"); | |
3085 break; | |
3086 case 0x8000: | |
3087 tmp = _("ICQ Unknown"); | |
3088 break; | |
3089 case 0x10000: | |
3090 tmp = _("Trillian Encryption"); | |
3091 break; | |
4742 | 3092 case 0x20000: |
3093 tmp = _("ICQ UTF8"); | |
3094 break; | |
2920 | 3095 default: |
3096 tmp = NULL; | |
3097 break; | |
3098 } | |
3099 if (tmp) | |
3100 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3101 tmp); | |
3102 count++; | |
3103 } | |
3104 bit <<= 1; | |
3105 } | |
4744 | 3106 return buf; |
2920 | 3107 } |
3108 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3109 static int gaim_parse_user_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
4791 | 3110 struct gaim_connection *gc = sess->aux_data; |
3111 struct oscar_data *od = gc->proto_data; | |
5420 | 3112 gchar *header; |
4791 | 3113 GSList *l = od->evilhack; |
3114 gboolean evilhack = FALSE; | |
3115 gchar *membersince = NULL, *onlinesince = NULL, *idle = NULL; | |
3116 va_list ap; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3117 aim_userinfo_t *info; |
4791 | 3118 fu16_t infotype; |
4151 | 3119 char *text_enc = NULL, *text = NULL, *utf8 = NULL; |
3120 int text_len; | |
2086 | 3121 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3122 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3123 info = va_arg(ap, aim_userinfo_t *); |
4199 | 3124 infotype = (fu16_t) va_arg(ap, unsigned int); |
4151 | 3125 text_enc = va_arg(ap, char *); |
3126 text = va_arg(ap, char *); | |
3127 text_len = va_arg(ap, int); | |
2086 | 3128 va_end(ap); |
3129 | |
4151 | 3130 if (text_len > 0) { |
5129 | 3131 if (!(utf8 = oscar_encoding_to_utf8(text_enc, text, text_len))) { |
4791 | 3132 utf8 = g_strdup(_("<i>Unable to display information because it was sent in an unknown encoding.</i>")); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3133 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3134 "Encountered an unknown encoding while parsing userinfo\n"); |
4151 | 3135 } |
3136 } | |
3137 | |
2993 | 3138 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) { |
4834 | 3139 onlinesince = g_strdup_printf(_("Online Since : <b>%s</b><br>\n"), |
2993 | 3140 asctime(localtime(&info->onlinesince))); |
3141 } | |
3142 | |
3143 if (info->present & AIM_USERINFO_PRESENT_MEMBERSINCE) { | |
4834 | 3144 membersince = g_strdup_printf(_("Member Since : <b>%s</b><br>\n"), |
2993 | 3145 asctime(localtime(&info->membersince))); |
3146 } | |
3147 | |
3148 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
4426 | 3149 gchar *itime = sec_to_text(info->idletime*60); |
4834 | 3150 idle = g_strdup_printf(_("Idle : <b>%s</b>"), itime); |
4426 | 3151 g_free(itime); |
2993 | 3152 } else |
4834 | 3153 idle = g_strdup(_("Idle: <b>Active</b>")); |
2993 | 3154 |
5420 | 3155 header = g_strdup_printf(_("Username : <b>%s</b> %s <br>\n" |
4791 | 3156 "Warning Level : <b>%d %%</b><br>\n" |
2086 | 3157 "%s" |
2993 | 3158 "%s" |
4344 | 3159 "%s\n" |
4791 | 3160 "<hr>\n"), |
2086 | 3161 info->sn, images(info->flags), |
5149 | 3162 ill_just_write_my_own_damn_round_function(info->warnlevel/10.0), |
2993 | 3163 onlinesince ? onlinesince : "", |
3164 membersince ? membersince : "", | |
3165 idle ? idle : ""); | |
3166 | |
3167 g_free(onlinesince); | |
3168 g_free(membersince); | |
3169 g_free(idle); | |
2773
a0fd8f91e294
[gaim-migrate @ 2786]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2768
diff
changeset
|
3170 |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3171 while (l) { |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3172 char *x = l->data; |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3173 if (!strcmp(x, normalize(info->sn))) { |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3174 evilhack = TRUE; |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3175 g_free(x); |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3176 od->evilhack = g_slist_remove(od->evilhack, x); |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3177 break; |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3178 } |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3179 l = l->next; |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3180 } |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3181 |
2920 | 3182 if (infotype == AIM_GETINFO_AWAYMESSAGE) { |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3183 if (evilhack) { |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3184 g_show_info_text(gc, info->sn, 2, |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3185 header, |
4151 | 3186 (utf8 && *utf8) ? away_subs(utf8, gc->username) : |
4207 | 3187 _("<i>User has no away message</i>"), NULL); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3188 } else { |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3189 g_show_info_text(gc, info->sn, 0, |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3190 header, |
4151 | 3191 (utf8 && *utf8) ? away_subs(utf8, gc->username) : NULL, |
4791 | 3192 (utf8 && *utf8) ? "<hr>" : NULL, |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3193 NULL); |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3194 } |
2920 | 3195 } else if (infotype == AIM_GETINFO_CAPABILITIES) { |
3196 g_show_info_text(gc, info->sn, 2, | |
3197 header, | |
3198 "<i>", _("Client Capabilities: "), | |
3199 caps_string(info->capabilities), | |
3200 "</i>", | |
3201 NULL); | |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3202 } else { |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3203 g_show_info_text(gc, info->sn, 1, |
5197 | 3204 (utf8 && *utf8) ? away_subs(utf8, gc->username) : _("<i>No Information Provided</i>"), |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3205 NULL); |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3206 } |
2086 | 3207 |
5420 | 3208 g_free(header); |
4151 | 3209 g_free(utf8); |
3210 | |
2086 | 3211 return 1; |
3212 } | |
3213 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3214 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3215 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3216 fu16_t id; |
2086 | 3217 va_list ap; |
3218 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3219 va_start(ap, fr); |
4199 | 3220 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3221 msg = va_arg(ap, char *); |
3222 va_end(ap); | |
3223 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3224 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3225 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3226 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3227 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3228 _("Your AIM connection may be lost."), NULL); |
2086 | 3229 |
3230 return 1; | |
3231 } | |
3232 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3233 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3234 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3235 fu16_t type; |
2086 | 3236 struct gaim_connection *gc = sess->aux_data; |
4617 | 3237 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 3238 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3239 va_start(ap, fr); |
4199 | 3240 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3241 |
3242 switch(type) { | |
3243 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3244 fu8_t maxrooms; |
2086 | 3245 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3246 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3247 |
4199 | 3248 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3249 exchangecount = va_arg(ap, int); |
3250 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3251 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3252 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3253 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3254 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3255 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3256 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3257 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3258 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3259 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3260 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3261 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3262 while (od->create_rooms) { |
3263 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3264 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3265 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3266 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3267 g_free(cr->name); |
4617 | 3268 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3269 g_free(cr); |
2086 | 3270 } |
3271 } | |
3272 break; | |
3273 case 0x0008: { | |
3274 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3275 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3276 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3277 fu32_t createtime; |
2086 | 3278 |
3279 fqcn = va_arg(ap, char *); | |
4200 | 3280 instance = (fu16_t)va_arg(ap, unsigned int); |
3281 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3282 flags = (fu16_t)va_arg(ap, unsigned int); | |
3283 createtime = va_arg(ap, fu32_t); | |
3284 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3285 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3286 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3287 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3288 name = va_arg(ap, char *); | |
3289 ck = va_arg(ap, char *); | |
4194 | 3290 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3291 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3292 "created room: %s %hu %hu %hu %lu %hu %hu %hhu %hu %s %s\n", |
2086 | 3293 fqcn, |
3294 exchange, instance, flags, | |
3295 createtime, | |
3296 maxmsglen, maxoccupancy, createperms, unknown, | |
3297 name, ck); | |
4617 | 3298 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3299 } |
3300 break; | |
3301 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3302 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3303 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3304 break; |
3305 } | |
4194 | 3306 |
3307 va_end(ap); | |
3308 | |
2086 | 3309 return 1; |
3310 } | |
3311 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3312 static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3313 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3314 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3315 aim_userinfo_t *info; |
2086 | 3316 struct gaim_connection *g = sess->aux_data; |
3317 | |
3318 struct chat_connection *c = NULL; | |
3319 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3320 va_start(ap, fr); |
2086 | 3321 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3322 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3323 va_end(ap); |
3324 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3325 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3326 if (!c) |
3327 return 1; | |
3328 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3329 for (i = 0; i < count; i++) |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
3330 gaim_chat_add_user(GAIM_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3331 |
3332 return 1; | |
3333 } | |
3334 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3335 static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3336 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3337 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3338 aim_userinfo_t *info; |
2086 | 3339 struct gaim_connection *g = sess->aux_data; |
3340 | |
3341 struct chat_connection *c = NULL; | |
3342 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3343 va_start(ap, fr); |
2086 | 3344 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3345 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3346 va_end(ap); |
3347 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3348 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3349 if (!c) |
3350 return 1; | |
3351 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3352 for (i = 0; i < count; i++) |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
3353 gaim_chat_remove_user(GAIM_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3354 |
3355 return 1; | |
3356 } | |
3357 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3358 static int gaim_chat_info_update(aim_session_t *sess, aim_frame_t *fr, ...) { |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3359 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3360 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3361 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3362 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3363 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3364 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3365 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3366 fu32_t creationtime; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3367 struct gaim_connection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3368 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3369 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3370 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3371 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3372 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3373 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3374 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3375 roomdesc = va_arg(ap, char *); |
4200 | 3376 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3377 creationtime = va_arg(ap, fu32_t); | |
3378 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3379 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3380 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3381 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3382 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3383 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3384 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3385 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3386 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3387 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3388 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3389 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3390 |
2086 | 3391 return 1; |
3392 } | |
3393 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3394 static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
4269 | 3395 struct gaim_connection *gc = sess->aux_data; |
2086 | 3396 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3397 aim_userinfo_t *info; |
2086 | 3398 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3399 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 3400 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3401 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3402 info = va_arg(ap, aim_userinfo_t *); |
4194 | 3403 msg = va_arg(ap, char *); |
3404 va_end(ap); | |
2086 | 3405 |
4269 | 3406 serv_got_chat_in(gc, ccon->id, info->sn, 0, msg, time((time_t)NULL)); |
2086 | 3407 |
3408 return 1; | |
3409 } | |
3410 | |
3694 | 3411 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3412 va_list ap; | |
3413 struct gaim_connection *gc = sess->aux_data; | |
3414 struct aim_emailinfo *emailinfo; | |
3725 | 3415 int havenewmail; |
3694 | 3416 |
3417 va_start(ap, fr); | |
3418 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3419 havenewmail = va_arg(ap, int); |
3694 | 3420 va_end(ap); |
3421 | |
3725 | 3422 if (emailinfo) { |
3423 if (emailinfo->unread) { | |
3424 if (havenewmail) | |
3425 connection_has_mail(gc, emailinfo->nummsgs ? emailinfo->nummsgs : -1, NULL, NULL, emailinfo->url); | |
3426 } else | |
3694 | 3427 connection_has_mail(gc, 0, NULL, NULL, emailinfo->url); |
3428 } | |
3429 | |
3430 return 1; | |
3431 } | |
3432 | |
4804 | 3433 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
3434 struct gaim_connection *gc = sess->aux_data; | |
3435 struct oscar_data *od = gc->proto_data; | |
3436 char *sn; | |
3437 | |
3438 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3439 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3440 "removing %s from hash table\n", sn); |
4804 | 3441 od->requesticon = g_slist_remove(od->requesticon, sn); |
3442 free(sn); | |
3443 | |
3444 if (od->icontimer) | |
3445 g_source_remove(od->icontimer); | |
3446 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3447 | |
3448 return 1; | |
3449 } | |
3450 | |
3451 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
3452 struct gaim_connection *gc = sess->aux_data; | |
3453 struct oscar_data *od = gc->proto_data; | |
3454 GSList *cur; | |
3455 va_list ap; | |
3456 char *sn; | |
4853 | 3457 fu8_t *iconcsum, *icon; |
3458 fu16_t iconcsumlen, iconlen; | |
4804 | 3459 |
3460 va_start(ap, fr); | |
3461 sn = va_arg(ap, char *); | |
4853 | 3462 iconcsum = va_arg(ap, fu8_t *); |
3463 iconcsumlen = va_arg(ap, int); | |
4804 | 3464 icon = va_arg(ap, fu8_t *); |
3465 iconlen = va_arg(ap, int); | |
3466 va_end(ap); | |
3467 | |
4853 | 3468 if (iconlen > 0) { |
3469 char *b16; | |
5129 | 3470 struct buddy *b = gaim_find_buddy(gc->account, sn); |
4804 | 3471 set_icon_data(gc, sn, icon, iconlen); |
4853 | 3472 b16 = tobase16(iconcsum, iconcsumlen); |
5129 | 3473 if (b16) { |
3474 gaim_buddy_set_setting(b, "icon_checksum", b16); | |
3475 gaim_blist_save(); | |
5125 | 3476 free(b16); |
5129 | 3477 } |
4853 | 3478 } |
4804 | 3479 |
3480 cur = od->requesticon; | |
3481 while (cur) { | |
3482 char *cursn = cur->data; | |
3483 if (!aim_sncmp(cursn, sn)) { | |
3484 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3485 free(cursn); | |
3486 cur = od->requesticon; | |
3487 } else | |
3488 cur = cur->next; | |
3489 } | |
3490 | |
3491 if (od->icontimer) | |
3492 g_source_remove(od->icontimer); | |
3493 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3494 | |
3495 return 1; | |
3496 } | |
3497 | |
3498 static gboolean gaim_icon_timerfunc(gpointer data) { | |
3499 struct gaim_connection *gc = data; | |
3500 struct oscar_data *od = gc->proto_data; | |
3501 struct buddyinfo *bi; | |
3502 aim_conn_t *conn; | |
3503 | |
3504 if (!od->requesticon) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3505 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3506 "no more icons to request\n"); |
4804 | 3507 return FALSE; |
3508 } | |
3509 | |
3510 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
4823 | 3511 if (!conn && !od->iconconnecting) { |
4804 | 3512 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); |
4823 | 3513 od->iconconnecting = TRUE; |
4804 | 3514 return FALSE; |
3515 } | |
3516 | |
3517 bi = g_hash_table_lookup(od->buddyinfo, (char *)od->requesticon->data); | |
4853 | 3518 if (bi && (bi->iconcsumlen > 0)) { |
4889 | 3519 aim_icon_request(od->sess, od->requesticon->data, bi->iconcsum, bi->iconcsumlen); |
4804 | 3520 return FALSE; |
3521 } else { | |
3522 char *sn = od->requesticon->data; | |
3523 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3524 free(sn); | |
3525 } | |
3526 | |
3527 return TRUE; | |
3528 } | |
3529 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3530 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3531 * Recieved in response to an IM sent with the AIM_IMFLAGS_ACK option. |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3532 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3533 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3534 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3535 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3536 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3537 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3538 va_start(ap, fr); |
4199 | 3539 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3540 sn = va_arg(ap, char *); |
3541 va_end(ap); | |
3542 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3543 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 3544 |
3545 return 1; | |
3546 } | |
3547 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3548 static int gaim_parse_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3549 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3550 "invalid", |
4194 | 3551 "change", |
3552 "warning", | |
3553 "limit", | |
3554 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3555 }; |
2086 | 3556 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3557 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3558 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3559 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3560 va_start(ap, fr); |
4200 | 3561 code = (fu16_t)va_arg(ap, unsigned int); |
3562 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3563 windowsize = va_arg(ap, fu32_t); | |
3564 clear = va_arg(ap, fu32_t); | |
3565 alert = va_arg(ap, fu32_t); | |
3566 limit = va_arg(ap, fu32_t); | |
3567 disconnect = va_arg(ap, fu32_t); | |
3568 currentavg = va_arg(ap, fu32_t); | |
3569 maxavg = va_arg(ap, fu32_t); | |
2086 | 3570 va_end(ap); |
3571 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3572 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3573 "rate %s (param ID 0x%04hx): curavg = %lu, maxavg = %lu, alert at %lu, " |
4194 | 3574 "clear warning at %lu, limit at %lu, disconnect at %lu (window size = %lu)\n", |
2086 | 3575 (code < 5) ? codes[code] : codes[0], |
3576 rateclass, | |
3577 currentavg, maxavg, | |
3578 alert, clear, | |
3579 limit, disconnect, | |
3580 windowsize); | |
3581 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3582 /* XXX fix these values */ |
2086 | 3583 if (code == AIM_RATE_CODE_CHANGE) { |
3584 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3585 aim_conn_setlatency(fr->conn, 0); |
2086 | 3586 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3587 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3588 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3589 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3590 _("The last message was not sent because you " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3591 "are over the rate limit. Please wait 10 " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3592 "seconds and try again.")); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3593 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3594 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3595 aim_conn_setlatency(fr->conn, 0); |
2086 | 3596 } |
3597 | |
3598 return 1; | |
3599 } | |
3600 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3601 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3602 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3603 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3604 aim_userinfo_t *userinfo; |
2086 | 3605 struct gaim_connection *gc = sess->aux_data; |
3606 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3607 va_start(ap, fr); |
4199 | 3608 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3609 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3610 va_end(ap); |
3611 | |
5149 | 3612 serv_got_eviled(gc, (userinfo && userinfo->sn[0]) ? userinfo->sn : NULL, ill_just_write_my_own_damn_round_function(newevil/10.0)); |
2086 | 3613 |
3614 return 1; | |
3615 } | |
3616 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3617 static int gaim_selfinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3618 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3619 aim_userinfo_t *info; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3620 struct gaim_connection *gc = sess->aux_data; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3621 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3622 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3623 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3624 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3625 |
5149 | 3626 gc->evil = ill_just_write_my_own_damn_round_function(info->warnlevel/10.0); |
4841 | 3627 |
3628 if (info->onlinesince) | |
3629 gc->login_time_official = info->onlinesince; | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3630 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3631 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3632 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3633 |
4649 | 3634 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
3635 struct gaim_connection *gc = sess->aux_data; | |
4666 | 3636 struct oscar_data *od = gc->proto_data; |
4649 | 3637 va_list ap; |
3638 fu16_t code; | |
3639 char *msg; | |
3640 | |
3641 va_start(ap, fr); | |
3642 code = (fu16_t)va_arg(ap, int); | |
3643 msg = va_arg(ap, char *); | |
3644 va_end(ap); | |
3645 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3646 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3647 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3648 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3649 if (code == 0x0001) { |
4652 | 3650 hide_login_progress_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3651 } else { |
4652 | 3652 hide_login_progress_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3653 } |
4666 | 3654 od->killme = TRUE; |
4649 | 3655 } |
3656 | |
3657 return 1; | |
3658 } | |
3659 | |
2675 | 3660 static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3661 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3662 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3663 |
3664 #ifndef NOSSI | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3665 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting ssi list\n"); |
4889 | 3666 aim_ssi_reqrights(sess); |
3667 aim_ssi_reqdata(sess, sess->ssi.timestamp, sess->ssi.numitems); | |
4230 | 3668 #endif |
3669 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3670 aim_bos_reqlocaterights(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3671 aim_bos_reqbuddyrights(sess, fr->conn); |
4617 | 3672 aim_im_reqparams(sess); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3673 aim_bos_reqrights(sess, fr->conn); |
4230 | 3674 |
3675 #ifdef NOSSI | |
3676 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); | |
3677 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3678 #endif | |
2086 | 3679 |
3680 return 1; | |
3681 } | |
3682 | |
2675 | 3683 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
2647 | 3684 struct gaim_connection *gc = sess->aux_data; |
3685 struct oscar_data *od = gc->proto_data; | |
3686 | |
2672 | 3687 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3688 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3689 |
2647 | 3690 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3691 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3692 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3693 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3694 od->oldp = NULL; |
2647 | 3695 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3696 od->newp = NULL; |
2647 | 3697 od->chpass = FALSE; |
3698 } | |
2979 | 3699 if (od->setnick) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3700 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screenname\n"); |
2979 | 3701 aim_admin_setnick(sess, fr->conn, od->newsn); |
3702 g_free(od->newsn); | |
3703 od->newsn = NULL; | |
3704 od->setnick = FALSE; | |
3705 } | |
2647 | 3706 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3707 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3708 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3709 od->conf = FALSE; |
3710 } | |
3711 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3712 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3713 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3714 od->reqemail = FALSE; |
3715 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3716 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3717 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3718 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3719 g_free(od->email); |
5497 | 3720 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3721 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3722 } |
2647 | 3723 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3724 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3725 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3726 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3727 static int gaim_icbm_param_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3728 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3729 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3730 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3731 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3732 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3733 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3734 |
4194 | 3735 /* XXX - evidently this crashes on solaris. i have no clue why |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3736 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
4194 | 3737 "max sender evil = %f, max receiver evil = %f, min msg interval = %lu\n", |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3738 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3739 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3740 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3741 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3742 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3743 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3744 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3745 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3746 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3747 |
4617 | 3748 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3749 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3750 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3751 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3752 |
2993 | 3753 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3754 { | |
3755 struct gaim_connection *gc = sess->aux_data; | |
4617 | 3756 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5306 | 3757 va_list ap; |
3758 fu16_t maxsiglen; | |
2993 | 3759 |
3760 va_start(ap, fr); | |
4199 | 3761 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3762 va_end(ap); |
3763 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3764 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3765 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3766 |
4617 | 3767 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3768 | |
3769 if (od->icq) | |
4151 | 3770 aim_bos_setprofile(sess, fr->conn, NULL, NULL, 0, NULL, NULL, 0, caps_icq); |
5301 | 3771 else |
3772 oscar_set_info(gc, gc->account->user_info); | |
2993 | 3773 |
3774 return 1; | |
3775 } | |
3776 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3777 static int gaim_parse_buddyrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3778 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3779 fu16_t maxbuddies, maxwatchers; |
2993 | 3780 struct gaim_connection *gc = sess->aux_data; |
4617 | 3781 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3782 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3783 va_start(ap, fr); |
4199 | 3784 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3785 maxwatchers = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3786 va_end(ap); |
3787 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3788 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3789 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3790 |
4617 | 3791 od->rights.maxbuddies = (guint)maxbuddies; |
3792 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3793 |
2086 | 3794 return 1; |
3795 } | |
3796 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3797 static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3798 fu16_t maxpermits, maxdenies; |
2086 | 3799 va_list ap; |
2993 | 3800 struct gaim_connection *gc = sess->aux_data; |
4617 | 3801 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 3802 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3803 va_start(ap, fr); |
4199 | 3804 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3805 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3806 va_end(ap); |
3807 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3808 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3809 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3810 |
4617 | 3811 od->rights.maxpermits = (guint)maxpermits; |
3812 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3813 |
3814 account_online(gc); | |
3815 serv_finish_login(gc); | |
3816 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3817 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3818 |
2672 | 3819 aim_clientready(sess, fr->conn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3820 |
4617 | 3821 /* XXX - Should call aim_bos_setidle with 0x0000 */ |
3822 | |
4664 | 3823 if (od->icq) { |
3824 aim_icq_reqofflinemsgs(sess); | |
3825 aim_icq_hideip(sess); | |
3826 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3827 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3828 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3829 if (sess->authinfo->email) |
3830 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3831 |
3832 return 1; | |
3833 } | |
3834 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3835 static int gaim_offlinemsg(aim_session_t *sess, aim_frame_t *fr, ...) { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3836 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3837 struct aim_icq_offlinemsg *msg; |
4075 | 3838 struct aim_incomingim_ch4_args args; |
3839 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3840 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3841 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3842 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3843 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3844 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3845 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3846 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3847 args.uin = msg->sender; |
3848 args.type = msg->type; | |
4173 | 3849 args.flags = msg->flags; |
4076 | 3850 args.msglen = msg->msglen; |
4075 | 3851 args.msg = msg->msg; |
3852 t = get_time(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); | |
3853 incomingim_chan4(sess, fr->conn, NULL, &args, t); | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3854 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3855 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3856 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3857 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3858 static int gaim_offlinemsgdone(aim_session_t *sess, aim_frame_t *fr, ...) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3859 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3860 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3861 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3862 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3863 |
4624 | 3864 static int gaim_icqinfo(aim_session_t *sess, aim_frame_t *fr, ...) |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3865 { |
2773
a0fd8f91e294
[gaim-migrate @ 2786]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2768
diff
changeset
|
3866 struct gaim_connection *gc = sess->aux_data; |
4819 | 3867 gchar *buf, *tmp, *utf8; |
4624 | 3868 gchar who[16]; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3869 va_list ap; |
4151 | 3870 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3871 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3872 va_start(ap, fr); |
4151 | 3873 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3874 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3875 |
4664 | 3876 if (!info->uin) |
3877 return 0; | |
3878 | |
4151 | 3879 g_snprintf(who, sizeof(who), "%lu", info->uin); |
4820 | 3880 buf = g_strdup_printf("<b>%s</b> %s", _("UIN:"), who); |
4819 | 3881 if (info->nick && info->nick[0] && (utf8 = gaim_try_conv_to_utf8(info->nick))) { |
3882 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
3883 } | |
3884 if (info->first && info->first[0] && (utf8 = gaim_try_conv_to_utf8(info->first))) { | |
3885 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
3886 } | |
3887 if (info->last && info->last[0] && (utf8 = gaim_try_conv_to_utf8(info->last))) { | |
3888 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
3889 } | |
3890 if (info->email && info->email[0] && (utf8 = gaim_try_conv_to_utf8(info->email))) { | |
3891 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Email Address:"), "</b> <a href=\"mailto:", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8); | |
4625 | 3892 } |
3893 if (info->numaddresses && info->email2) { | |
3894 int i; | |
3895 for (i = 0; i < info->numaddresses; i++) { | |
4819 | 3896 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_try_conv_to_utf8(info->email2[i]))) { |
3897 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Email Address:"), "</b> <a href=\"mailto:", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8); | |
4643 | 3898 } |
4625 | 3899 } |
4624 | 3900 } |
4819 | 3901 if (info->mobile && info->mobile[0] && (utf8 = gaim_try_conv_to_utf8(info->mobile))) { |
3902 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4625 | 3903 } |
3904 if (info->gender) { | |
4819 | 3905 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender:"), "</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 3906 } |
4624 | 3907 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 3908 char date[30]; |
3909 struct tm tm; | |
3910 tm.tm_mday = (int)info->birthday; | |
3911 tm.tm_mon = (int)info->birthmonth-1; | |
3912 tm.tm_year = (int)info->birthyear-1900; | |
4628 | 3913 strftime(date, sizeof(date), "%x", &tm); |
4819 | 3914 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday:"), "</b> ", date, NULL); g_free(tmp); |
4151 | 3915 } |
4624 | 3916 if (info->age) { |
3917 char age[5]; | |
3918 snprintf(age, sizeof(age), "%hhd", info->age); | |
4819 | 3919 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age:"), "</b> ", age, NULL); g_free(tmp); |
3920 } | |
3921 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_try_conv_to_utf8(info->personalwebpage))) { | |
3922 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Personal Web Page:"), "</b> <a href=\"", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8); | |
3923 } | |
3924 if (info->info && info->info[0] && (utf8 = gaim_try_conv_to_utf8(info->info))) { | |
3925 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information:"), "</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3926 } |
3927 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 3928 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
4819 | 3929 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Home Address:"), "</b>", NULL); g_free(tmp); |
3930 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_try_conv_to_utf8(info->homeaddr))) { | |
3931 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3932 } |
4819 | 3933 if (info->homecity && info->homecity[0] && (utf8 = gaim_try_conv_to_utf8(info->homecity))) { |
3934 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3935 } |
4819 | 3936 if (info->homestate && info->homestate[0] && (utf8 = gaim_try_conv_to_utf8(info->homestate))) { |
3937 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3938 } |
4819 | 3939 if (info->homezip && info->homezip[0] && (utf8 = gaim_try_conv_to_utf8(info->homezip))) { |
3940 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3941 } |
3942 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 3943 } |
4641 | 3944 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
4819 | 3945 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Address:"), "</b>", NULL); g_free(tmp); |
3946 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_try_conv_to_utf8(info->workaddr))) { | |
3947 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3948 } |
4819 | 3949 if (info->workcity && info->workcity[0] && (utf8 = gaim_try_conv_to_utf8(info->workcity))) { |
3950 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3951 } |
4819 | 3952 if (info->workstate && info->workstate[0] && (utf8 = gaim_try_conv_to_utf8(info->workstate))) { |
3953 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3954 } |
4819 | 3955 if (info->workzip && info->workzip[0] && (utf8 = gaim_try_conv_to_utf8(info->workzip))) { |
3956 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3957 } |
3958 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
3959 } | |
4641 | 3960 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
4819 | 3961 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Information:"), "</b>", NULL); g_free(tmp); |
3962 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_try_conv_to_utf8(info->workcompany))) { | |
3963 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3964 } |
4819 | 3965 if (info->workdivision && info->workdivision[0] && (utf8 = gaim_try_conv_to_utf8(info->workdivision))) { |
3966 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3967 } |
4819 | 3968 if (info->workposition && info->workposition[0] && (utf8 = gaim_try_conv_to_utf8(info->workposition))) { |
3969 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position:"), "</b> ", utf8, NULL); g_free(tmp); g_free(utf8); | |
4624 | 3970 } |
4819 | 3971 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_try_conv_to_utf8(info->workwebpage))) { |
3972 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Web Page:"), "</b> <a href=\"", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8); | |
4624 | 3973 } |
3974 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 3975 } |
3976 | |
3977 g_show_info_text(gc, who, 2, buf, NULL); | |
3978 g_free(buf); | |
3979 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3980 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3981 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3982 |
4759 | 3983 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
3984 { | |
3985 struct gaim_connection *gc = sess->aux_data; | |
4820 | 3986 gchar who[16], *utf8; |
4759 | 3987 struct buddy *b; |
3988 va_list ap; | |
3989 struct aim_icq_info *info; | |
3990 | |
3991 va_start(ap, fr); | |
3992 info = va_arg(ap, struct aim_icq_info *); | |
3993 va_end(ap); | |
3994 | |
4822 | 3995 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_try_conv_to_utf8(info->nick))) { |
4759 | 3996 g_snprintf(who, sizeof(who), "%lu", info->uin); |
4820 | 3997 serv_got_alias(gc, who, utf8); |
4759 | 3998 if ((b = gaim_find_buddy(gc->account, who))) { |
4820 | 3999 gaim_buddy_set_setting(b, "servernick", utf8); |
4759 | 4000 gaim_blist_save(); |
4001 } | |
4820 | 4002 g_free(utf8); |
4759 | 4003 } |
4004 | |
4005 return 1; | |
4006 } | |
4007 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4008 static int gaim_popup(aim_session_t *sess, aim_frame_t *fr, ...) |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4009 { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4010 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4011 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4012 va_list ap; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4013 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4014 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4015 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4016 url = va_arg(ap, char *); |
4199 | 4017 wid = (fu16_t) va_arg(ap, int); |
4018 hei = (fu16_t) va_arg(ap, int); | |
4019 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4020 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4021 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4022 serv_got_popup(msg, url, wid, hei); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4023 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4024 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4025 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4026 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4027 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 4028 GString *buf; |
2086 | 4029 va_list ap; |
4030 char *address, *SNs; | |
4031 int i, num; | |
4032 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4033 va_start(ap, fr); |
2086 | 4034 address = va_arg(ap, char *); |
4035 num = va_arg(ap, int); | |
4036 SNs = va_arg(ap, char *); | |
4037 va_end(ap); | |
4038 | |
5420 | 4039 buf = g_string_new(""); |
4040 g_string_printf(buf, _("<B>%s has the following screen names:</B><BR>"), address); | |
2086 | 4041 for (i = 0; i < num; i++) |
5420 | 4042 g_string_append_printf(buf, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4043 g_show_info_text(NULL, NULL, 2, buf->str, NULL); | |
4044 g_string_free(buf, TRUE); | |
2086 | 4045 |
4046 return 1; | |
4047 } | |
4048 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4049 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4050 va_list ap; |
4051 char *address; | |
5420 | 4052 char *buf; |
2086 | 4053 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4054 va_start(ap, fr); |
2086 | 4055 address = va_arg(ap, char *); |
4056 va_end(ap); | |
4057 | |
5420 | 4058 buf = g_strdup_printf(_("No results found for email address %s"), address); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4059 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4060 g_free(buf); |
2086 | 4061 |
4062 return 1; | |
4063 } | |
4064 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4065 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4066 fu16_t status; |
2086 | 4067 va_list ap; |
4068 char msg[256]; | |
4069 struct gaim_connection *gc = sess->aux_data; | |
4070 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4071 va_start(ap, fr); |
4199 | 4072 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4073 va_end(ap); |
4074 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4075 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4076 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4077 status ? "unknown" : "email sent"); |
4078 if (!status) { | |
5302 | 4079 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
2086 | 4080 gc->username); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4081 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4082 } |
4083 | |
4084 return 1; | |
4085 } | |
4086 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4087 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
3912 | 4088 struct gaim_connection *gc = sess->aux_data; |
2086 | 4089 va_list ap; |
3912 | 4090 fu16_t perms, err; |
4091 char *url, *sn, *email; | |
4092 int change; | |
2086 | 4093 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4094 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4095 change = va_arg(ap, int); |
4199 | 4096 perms = (fu16_t) va_arg(ap, unsigned int); |
4097 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4098 url = va_arg(ap, char *); |
4099 sn = va_arg(ap, char *); | |
4100 email = va_arg(ap, char *); | |
2086 | 4101 va_end(ap); |
4102 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4103 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4104 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4105 change ? "change" : "request", perms, err, url, sn, email); |
4106 | |
4107 if (err && url) { | |
4108 char *dialog_msg; | |
4109 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4110 switch (err) { | |
4111 case 0x0001: { | |
4112 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4113 } break; | |
4114 case 0x0006: { | |
4115 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4116 } break; | |
4117 case 0x000b: { | |
4118 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4119 } break; | |
4120 case 0x001d: { | |
4121 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because there is already a request pending for this screen name."), err); | |
4122 } break; | |
4123 case 0x0021: { | |
4124 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address has too many screen names associated with it."), err); | |
4125 } break; | |
4126 case 0x0023: { | |
4127 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4128 } break; | |
4129 default: { | |
4130 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4131 } break; | |
4132 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4133 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4134 g_free(dialog_top); |
4135 g_free(dialog_msg); | |
4136 return 1; | |
4137 } | |
4138 | |
4139 if (sn) { | |
4585 | 4140 char *dialog_msg = g_strdup_printf(_("Your screen name is currently formatted as follows:\n%s"), sn); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4141 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4142 g_free(dialog_msg); |
4143 } | |
4144 | |
4145 if (email) { | |
4146 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), gc->username, email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4147 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4148 g_free(dialog_msg); |
2086 | 4149 } |
4150 | |
4151 return 1; | |
4152 } | |
4153 | |
4154 static void oscar_keepalive(struct gaim_connection *gc) { | |
4617 | 4155 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4156 aim_flap_nop(od->sess, od->conn); | |
2086 | 4157 } |
4158 | |
3001 | 4159 static int oscar_send_typing(struct gaim_connection *gc, char *name, int typing) { |
4617 | 4160 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4161 struct direct_im *dim = find_direct_im(od, name); | |
3595 | 4162 if (dim) |
4870 | 4163 if (typing == TYPING) |
4164 aim_odc_send_typing(od->sess, dim->conn, 0x0002); | |
4165 else if (typing == TYPED) | |
4166 aim_odc_send_typing(od->sess, dim->conn, 0x0001); | |
4167 else | |
4168 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4169 else { |
5300 | 4170 /* Don't send if this turkey is in our deny list */ |
4171 GSList *list; | |
4172 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4173 if (!list) { | |
4174 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, normalize(name)); | |
4175 if (bi && bi->typingnot) { | |
4176 if (typing == TYPING) | |
4177 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); | |
4178 else if (typing == TYPED) | |
4179 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); | |
4180 else | |
4181 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4182 } | |
3595 | 4183 } |
4184 } | |
2993 | 4185 return 0; |
4186 } | |
5136 | 4187 static void oscar_ask_direct_im(struct gaim_connection *gc, const char *name); |
4188 | |
4189 static int oscar_send_im(struct gaim_connection *gc, const char *name, const char *message, int len, int imflags) { | |
4617 | 4190 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4191 struct direct_im *dim = find_direct_im(od, name); | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4192 int ret = 0; |
3659 | 4193 GError *err = NULL; |
3458 | 4194 |
4838 | 4195 if (dim && dim->connected) { |
4196 /* If we're directly connected, send a direct IM */ | |
4197 /* XXX - The last parameter below is the encoding. Let Paco-Paco do something with it. */ | |
4870 | 4198 if (imflags & IM_FLAG_AWAY) |
4199 ret = aim_odc_send_im(od->sess, dim->conn, message, len == -1 ? strlen(message) : len, 0, 1); | |
4200 else | |
4201 ret = aim_odc_send_im(od->sess, dim->conn, message, len == -1 ? strlen(message) : len, 0, 0); | |
3044 | 4202 } else if (len != -1) { |
4203 /* Trying to send an IM image outside of a direct connection. */ | |
4204 oscar_ask_direct_im(gc, name); | |
4838 | 4205 ret = -ENOTCONN; |
2086 | 4206 } else { |
4738 | 4207 struct buddyinfo *bi; |
3008 | 4208 struct aim_sendimext_args args; |
4209 struct stat st; | |
4151 | 4210 int len; |
4269 | 4211 |
4738 | 4212 bi = g_hash_table_lookup(od->buddyinfo, normalize(name)); |
4213 if (!bi) { | |
4214 bi = g_new0(struct buddyinfo, 1); | |
4215 g_hash_table_insert(od->buddyinfo, g_strdup(normalize(name)), bi); | |
4216 } | |
4217 | |
3008 | 4218 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4219 if (od->icq) { |
4220 args.features = features_icq; | |
4221 args.featureslen = sizeof(features_icq); | |
3008 | 4222 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4223 } else { |
4224 args.features = features_aim; | |
4225 args.featureslen = sizeof(features_aim); | |
4972 | 4226 |
4227 if (imflags & IM_FLAG_AWAY) | |
4228 args.flags |= AIM_IMFLAGS_AWAY; | |
4665 | 4229 } |
4269 | 4230 |
4738 | 4231 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4232 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4233 "Sending buddy icon request with message\n"); |
3008 | 4234 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4235 bi->ico_need = FALSE; |
3008 | 4236 } |
4269 | 4237 |
4491 | 4238 if (gc->account->iconfile[0] && !stat(gc->account->iconfile, &st)) { |
4239 FILE *file = fopen(gc->account->iconfile, "r"); | |
3008 | 4240 if (file) { |
4241 char *buf = g_malloc(st.st_size); | |
4242 fread(buf, 1, st.st_size, file); | |
4269 | 4243 |
3008 | 4244 args.iconlen = st.st_size; |
4617 | 4245 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4246 args.iconstamp = st.st_mtime; |
4247 | |
4738 | 4248 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) |
4249 bi->ico_informed = FALSE; | |
4250 | |
4251 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4252 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4253 "Claiming to have a buddy icon\n"); |
4738 | 4254 args.flags |= AIM_IMFLAGS_HASICON; |
4255 bi->ico_me_len = args.iconlen; | |
4256 bi->ico_me_csum = args.iconsum; | |
4257 bi->ico_me_time = args.iconstamp; | |
4258 bi->ico_informed = TRUE; | |
4259 } | |
4260 | |
3008 | 4261 fclose(file); |
4262 g_free(buf); | |
2086 | 4263 } |
4264 } | |
4269 | 4265 |
3008 | 4266 args.destsn = name; |
4269 | 4267 |
3642 | 4268 len = strlen(message); |
5129 | 4269 args.flags |= oscar_encoding_check(message); |
3642 | 4270 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4271 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4272 args.charset = 0x0002; |
4665 | 4273 args.charsubset = 0x0000; |
3659 | 4274 args.msg = g_convert(message, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
4275 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4276 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4277 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4278 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4279 "This really shouldn't happen!\n"); |
3659 | 4280 /* We really shouldn't try to send the |
4281 * IM now, but I'm not sure what to do */ | |
4800 | 4282 g_error_free(err); |
3659 | 4283 } |
3850 | 4284 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4285 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4286 "Sending ISO-8859-1 IM\n"); |
4662 | 4287 args.charset = 0x0003; |
4665 | 4288 args.charsubset = 0x0000; |
3659 | 4289 args.msg = g_convert(message, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
4290 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4291 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4292 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4293 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4294 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4295 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
4296 len = strlen(message); | |
4800 | 4297 g_error_free(err); |
3659 | 4298 args.msg = g_convert(message, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
4299 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4300 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4301 "Error in unicode fallback: %s\n", err->message); |
4800 | 4302 g_error_free(err); |
3659 | 4303 } |
3642 | 4304 } |
4305 } else { | |
4662 | 4306 args.charset = 0x0000; |
4307 args.charsubset = 0x0000; | |
3642 | 4308 args.msg = message; |
4309 } | |
4310 args.msglen = len; | |
4269 | 4311 |
4617 | 4312 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4313 } |
4838 | 4314 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4315 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4316 return 1; |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4317 return ret; |
2086 | 4318 } |
4319 | |
5136 | 4320 static void oscar_get_info(struct gaim_connection *g, const char *name) { |
4617 | 4321 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
4322 if (od->icq) | |
4624 | 4323 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4324 else |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
4325 /* people want the away message on the top, so we get the away message |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
4326 * first and then get the regular info, since it's too difficult to |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
4327 * insert in the middle. i hate people. */ |
4617 | 4328 aim_getinfo(od->sess, od->conn, name, AIM_GETINFO_AWAYMESSAGE); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
4329 } |
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
4330 |
5136 | 4331 static void oscar_get_away(struct gaim_connection *g, const char *who) { |
4617 | 4332 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
4333 if (od->icq) { | |
4687 | 4334 struct buddy *budlight = gaim_find_buddy(g->account, who); |
3212 | 4335 if (budlight) |
3595 | 4336 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4337 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4338 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4339 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4340 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4341 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4342 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4343 "Error: Could not find %s in local contact list, therefore unable to request status message.\n", who); |
3212 | 4344 } else |
4617 | 4345 aim_getinfo(od->sess, od->conn, who, AIM_GETINFO_GENERALINFO); |
2086 | 4346 } |
4347 | |
3466 | 4348 static void oscar_set_dir(struct gaim_connection *g, const char *first, const char *middle, const char *last, |
4349 const char *maiden, const char *city, const char *state, const char *country, int web) { | |
4617 | 4350 /* XXX - some of these things are wrong, but i'm lazy */ |
4351 struct oscar_data *od = (struct oscar_data *)g->proto_data; | |
4352 aim_setdirectoryinfo(od->sess, od->conn, first, middle, last, | |
2086 | 4353 maiden, NULL, NULL, city, state, NULL, 0, web); |
4354 } | |
4355 | |
5129 | 4356 static void oscar_set_idle(struct gaim_connection *gc, int time) { |
4357 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4617 | 4358 aim_bos_setidle(od->sess, od->conn, time); |
2086 | 4359 } |
4360 | |
5129 | 4361 static void oscar_set_info(struct gaim_connection *gc, char *text) { |
4362 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4363 fu32_t flags = 0; | |
4364 char *msg = NULL; | |
4365 int msglen = 0; | |
2993 | 4366 |
4617 | 4367 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4368 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4369 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4370 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4371 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4372 "again when you are fully connected.")); |
4617 | 4373 |
4374 if (od->icq) | |
4375 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, NULL, NULL, 0, caps_icq); | |
4151 | 4376 else { |
5129 | 4377 if (!text) { |
4378 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, NULL, NULL, 0, caps_aim); | |
4379 return; | |
4380 } | |
4381 | |
4382 flags = oscar_encoding_check(text); | |
4383 if (flags & AIM_IMFLAGS_UNICODE) { | |
4384 msg = g_convert(text, strlen(text), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); | |
4385 aim_bos_setprofile(od->sess, od->conn, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); | |
4386 g_free(msg); | |
4387 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
4388 msg = g_convert(text, strlen(text), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); | |
4389 aim_bos_setprofile(od->sess, od->conn, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); | |
4390 g_free(msg); | |
4151 | 4391 } else { |
5129 | 4392 msglen = strlen(text); |
4393 aim_bos_setprofile(od->sess, od->conn, "us-ascii", text, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); | |
4151 | 4394 } |
5129 | 4395 |
4396 if (msglen > od->rights.maxsiglen) { | |
4397 gchar *errstr; | |
4398 errstr = g_strdup_printf(_("The maximum profile length of %d bytes has been exceeded. " | |
4399 "Gaim has truncated it for you."), od->rights.maxsiglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4400 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); |
5129 | 4401 g_free(errstr); |
4402 } | |
4403 | |
4404 } | |
2993 | 4405 |
4406 return; | |
2086 | 4407 } |
4408 | |
5129 | 4409 static void oscar_set_away_aim(struct gaim_connection *gc, struct oscar_data *od, const char *text) |
2993 | 4410 { |
5129 | 4411 fu32_t flags = 0; |
4412 char *msg = NULL; | |
4413 int msglen = 0; | |
2993 | 4414 |
4415 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4416 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4417 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4418 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4419 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4420 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4421 "fully connected.")); |
5129 | 4422 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4423 if (gc->away) { |
2993 | 4424 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4425 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4426 } |
2993 | 4427 |
5129 | 4428 if (!text) { |
4151 | 4429 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, NULL, "", 0, caps_aim); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4430 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4431 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4432 |
5129 | 4433 flags = oscar_encoding_check(text); |
4434 if (flags & AIM_IMFLAGS_UNICODE) { | |
4435 msg = g_convert(text, strlen(text), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); | |
4436 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, "unicode-2-0", msg, | |
4437 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); | |
4438 g_free(msg); | |
4439 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4440 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
4441 msg = g_convert(text, strlen(text), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); | |
4442 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, "iso-8859-1", msg, | |
4443 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); | |
4444 g_free(msg); | |
4445 gc->away = g_strndup(text, od->rights.maxawaymsglen); | |
4446 } else { | |
4447 msglen = strlen(text); | |
4448 aim_bos_setprofile(od->sess, od->conn, NULL, NULL, 0, "us-ascii", text, | |
4449 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); | |
4450 gc->away = g_strndup(text, od->rights.maxawaymsglen); | |
4451 } | |
4452 | |
4453 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4454 gchar *errstr; |
4455 | |
5129 | 4456 errstr = g_strdup_printf(_("The maximum away message length of %d bytes has been exceeded. " |
3427 | 4457 "Gaim has truncated it and set you away."), od->rights.maxawaymsglen); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4458 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4459 g_free(errstr); |
4460 } | |
4461 | |
4462 return; | |
4463 } | |
4464 | |
4465 static void oscar_set_away_icq(struct gaim_connection *gc, struct oscar_data *od, const char *state, const char *message) | |
4466 { | |
4467 | |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4468 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4469 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4470 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4471 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4472 |
4342 | 4473 if (strcmp(state, _("Invisible"))) { |
4491 | 4474 if (aim_ssi_getpermdeny(od->sess->ssi.local) != gc->account->permdeny) |
4889 | 4475 aim_ssi_setpermdeny(od->sess, gc->account->permdeny, 0xffffffff); |
4491 | 4476 gc->account->permdeny = 4; |
4342 | 4477 } else { |
4478 if (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03) | |
4889 | 4479 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
4491 | 4480 gc->account->permdeny = 3; |
4342 | 4481 } |
4482 | |
4483 if (!strcmp(state, _("Online"))) | |
4901 | 4484 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4485 else if (!strcmp(state, _("Away"))) { |
4901 | 4486 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4487 gc->away = g_strdup(""); |
4342 | 4488 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4489 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_DND | AIM_ICQ_STATE_BUSY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4490 gc->away = g_strdup(""); |
4342 | 4491 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4492 aim_setextstatus(od->sess, AIM_ICQ_STATE_OUT | AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4493 gc->away = g_strdup(""); |
4342 | 4494 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4495 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_BUSY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4496 gc->away = g_strdup(""); |
4342 | 4497 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4498 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4499 gc->away = g_strdup(""); |
4342 | 4500 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4501 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4502 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4503 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4504 if (message) { |
4901 | 4505 aim_setextstatus(od->sess, AIM_ICQ_STATE_OUT | AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4506 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4507 } else { |
4901 | 4508 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4509 } |
2086 | 4510 } |
2993 | 4511 |
4512 return; | |
4513 } | |
4514 | |
4515 static void oscar_set_away(struct gaim_connection *gc, char *state, char *message) | |
4516 { | |
4517 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4518 | |
4519 if (od->icq) | |
4520 oscar_set_away_icq(gc, od, state, message); | |
4521 else | |
4522 oscar_set_away_aim(gc, od, message); | |
4523 | |
4524 return; | |
2086 | 4525 } |
4526 | |
4230 | 4527 static void oscar_warn(struct gaim_connection *gc, char *name, int anon) { |
4617 | 4528 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4529 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); | |
2086 | 4530 } |
4531 | |
4230 | 4532 static void oscar_dir_search(struct gaim_connection *gc, const char *first, const char *middle, const char *last, |
3466 | 4533 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
4617 | 4534 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 4535 if (strlen(email)) |
4617 | 4536 aim_usersearch_address(od->sess, od->conn, email); |
2086 | 4537 } |
4538 | |
4230 | 4539 static void oscar_add_buddy(struct gaim_connection *gc, const char *name) { |
4540 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4541 #ifdef NOSSI | |
4542 aim_add_buddy(od->sess, od->conn, name); | |
4543 #else | |
4544 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
4687 | 4545 struct buddy *buddy = gaim_find_buddy(gc->account, name); |
4546 struct group *group = gaim_find_buddys_group(buddy); | |
4230 | 4547 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4548 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4549 "ssi: adding buddy %s to group %s\n", name, group->name); |
4889 | 4550 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4551 } |
4552 } | |
4553 #endif | |
4759 | 4554 if (od->icq) |
4555 aim_icq_getalias(od->sess, name); | |
4230 | 4556 } |
4557 | |
4558 static void oscar_add_buddies(struct gaim_connection *gc, GList *buddies) { | |
4559 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4560 #ifdef NOSSI | |
4561 char buf[MSG_LEN]; | |
4562 int n=0; | |
4563 while (buddies) { | |
4564 if (n > MSG_LEN - 18) { | |
4565 aim_bos_setbuddylist(od->sess, od->conn, buf); | |
4566 n = 0; | |
3092 | 4567 } |
4230 | 4568 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); |
4569 buddies = buddies->next; | |
4570 } | |
4571 aim_bos_setbuddylist(od->sess, od->conn, buf); | |
4572 #else | |
4573 if (od->sess->ssi.received_data) { | |
4574 while (buddies) { | |
4687 | 4575 struct buddy *buddy = gaim_find_buddy(gc->account, (const char *)buddies->data); |
4576 struct group *group = gaim_find_buddys_group(buddy); | |
4230 | 4577 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4578 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4579 "ssi: adding buddy %s to group %s\n", (const char *)buddies->data, group->name); |
4889 | 4580 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4581 } |
4582 buddies = buddies->next; | |
4583 } | |
4584 } | |
4585 #endif | |
4586 } | |
4587 | |
4588 static void oscar_remove_buddy(struct gaim_connection *gc, char *name, char *group) { | |
4589 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4590 #ifdef NOSSI | |
4591 aim_remove_buddy(od->sess, od->conn, name); | |
4592 #else | |
4593 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4594 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4595 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4596 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4597 } |
4598 #endif | |
4599 } | |
4600 | |
4601 static void oscar_remove_buddies(struct gaim_connection *gc, GList *buddies, const char *group) { | |
4602 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4603 #ifdef NOSSI | |
4604 GList *cur; | |
4605 for (cur=buddies; cur; cur=cur->next) | |
4606 aim_remove_buddy(od->sess, od->conn, cur->data); | |
4607 #else | |
4608 if (od->sess->ssi.received_data) { | |
3092 | 4609 while (buddies) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4610 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4611 "ssi: deleting buddy %s from group %s\n", (char *)buddies->data, group); |
4889 | 4612 aim_ssi_delbuddy(od->sess, buddies->data, group); |
3092 | 4613 buddies = buddies->next; |
4614 } | |
4230 | 4615 } |
4616 #endif | |
4617 } | |
4618 | |
4619 #ifndef NOSSI | |
4269 | 4620 static void oscar_move_buddy(struct gaim_connection *gc, const char *name, const char *old_group, const char *new_group) { |
4621 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4303 | 4622 if (od->sess->ssi.received_data && strcmp(old_group, new_group)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4623 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4624 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4625 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4626 } |
4627 } | |
4628 | |
4629 static void oscar_alias_buddy(struct gaim_connection *gc, const char *name, const char *alias) { | |
4630 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4631 if (od->sess->ssi.received_data) { | |
4632 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4633 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4634 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4635 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4636 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4637 } |
4638 } | |
4639 } | |
4640 | |
4230 | 4641 static void oscar_rename_group(struct gaim_connection *g, const char *old_group, const char *new_group, GList *members) { |
4642 struct oscar_data *od = (struct oscar_data *)g->proto_data; | |
4643 | |
4644 if (od->sess->ssi.received_data) { | |
4645 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4646 oscar_remove_buddies(g, members, old_group); | |
4647 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4648 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4649 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4650 } else { |
4889 | 4651 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4652 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4653 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4654 } |
4655 } | |
4656 } | |
4657 | |
4642 | 4658 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4659 struct gaim_connection *gc = sess->aux_data; | |
4660 struct oscar_data *od = gc->proto_data; | |
4661 va_list ap; | |
4662 fu16_t reason; | |
4663 | |
4664 va_start(ap, fr); | |
4665 reason = (fu16_t)va_arg(ap, unsigned int); | |
4666 va_end(ap); | |
4667 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4668 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4669 |
4670 if (reason == 0x0005) { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4671 gaim_notify_error(gc, NULL, _("Unable To Retrive Buddy List"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4672 _("Gaim was temporarily unable to retrive your buddy list from the AIM servers. Your buddy list is not lost, and will probably become available in a few hours.")); |
4642 | 4673 } |
4674 | |
4675 /* Activate SSI */ | |
4676 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4677 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4678 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4679 "ssi: activating server-stored buddy list\n"); |
4642 | 4680 aim_ssi_enable(od->sess); |
4681 | |
4682 return 1; | |
4683 } | |
4684 | |
2991 | 4685 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
4230 | 4686 struct gaim_connection *gc = sess->aux_data; |
4687 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4688 int numtypes, i; | |
4689 fu16_t *maxitems; | |
2991 | 4690 va_list ap; |
4691 | |
4692 va_start(ap, fr); | |
4230 | 4693 numtypes = va_arg(ap, int); |
4694 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4695 va_end(ap); |
4696 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4697 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4698 |
4230 | 4699 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4700 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4701 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4702 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4703 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4704 |
4705 if (numtypes >= 0) | |
4706 od->rights.maxbuddies = maxitems[0]; | |
4707 if (numtypes >= 1) | |
4708 od->rights.maxgroups = maxitems[1]; | |
4709 if (numtypes >= 2) | |
4710 od->rights.maxpermits = maxitems[2]; | |
4711 if (numtypes >= 3) | |
4712 od->rights.maxdenies = maxitems[3]; | |
2991 | 4713 |
4714 return 1; | |
4715 } | |
4716 | |
4717 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
4718 struct gaim_connection *gc = sess->aux_data; | |
4230 | 4719 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2995 | 4720 struct aim_ssi_item *curitem; |
2991 | 4721 int tmp; |
4778 | 4722 gboolean export = FALSE; |
4617 | 4723 /* XXX - use these? |
4230 | 4724 va_list ap; |
4725 | |
4726 va_start(ap, fr); | |
4727 fmtver = (fu16_t)va_arg(ap, int); | |
4728 numitems = (fu16_t)va_arg(ap, int); | |
4729 items = va_arg(ap, struct aim_ssi_item); | |
4730 timestamp = va_arg(ap, fu32_t); | |
4731 va_end(ap); */ | |
2991 | 4732 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4733 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4734 "ssi: syncing local list and server list\n"); |
2991 | 4735 |
4736 /* Clean the buddy list */ | |
4889 | 4737 aim_ssi_cleanlist(sess); |
2991 | 4738 |
4739 /* Add from server list to local list */ | |
4230 | 4740 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
2991 | 4741 switch (curitem->type) { |
4230 | 4742 case 0x0000: { /* Buddy */ |
4251 | 4743 if (curitem->name) { |
4292 | 4744 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
4458 | 4745 char *gname_utf8 = gaim_try_conv_to_utf8(gname); |
4282 | 4746 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
4458 | 4747 char *alias_utf8 = gaim_try_conv_to_utf8(alias); |
4687 | 4748 struct buddy *buddy = gaim_find_buddy(gc->account, curitem->name); |
4458 | 4749 /* Should gname be freed here? -- elb */ |
4754 | 4750 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 4751 free(alias); |
4282 | 4752 if (buddy) { |
4292 | 4753 /* Get server stored alias */ |
4705 | 4754 if (alias_utf8) { |
4755 g_free(buddy->alias); | |
4756 buddy->alias = g_strdup(alias_utf8); | |
4757 } | |
4282 | 4758 } else { |
4687 | 4759 struct group *g; |
4760 buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); | |
5146 | 4761 |
4754 | 4762 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 4763 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 4764 gaim_blist_add_group(g, NULL); |
4765 } | |
5146 | 4766 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4767 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4768 "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
4687 | 4769 gaim_blist_add_buddy(buddy, g, NULL); |
4778 | 4770 export = TRUE; |
4251 | 4771 } |
4458 | 4772 free(gname_utf8); |
4773 free(alias_utf8); | |
2991 | 4774 } |
4230 | 4775 } break; |
4776 | |
4777 case 0x0001: { /* Group */ | |
4282 | 4778 /* Shouldn't add empty groups */ |
4230 | 4779 } break; |
4780 | |
4781 case 0x0002: { /* Permit buddy */ | |
2991 | 4782 if (curitem->name) { |
4230 | 4783 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 4784 GSList *list; |
4491 | 4785 for (list=gc->account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4786 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4787 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4788 "ssi: adding permit buddy %s to local list\n", curitem->name); |
4491 | 4789 gaim_privacy_permit_add(gc->account, curitem->name); |
2991 | 4790 build_allow_list(); |
4778 | 4791 export = TRUE; |
2991 | 4792 } |
4793 } | |
4230 | 4794 } break; |
4795 | |
4796 case 0x0003: { /* Deny buddy */ | |
2991 | 4797 if (curitem->name) { |
4798 GSList *list; | |
4491 | 4799 for (list=gc->account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4800 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4801 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4802 "ssi: adding deny buddy %s to local list\n", curitem->name); |
4491 | 4803 gaim_privacy_deny_add(gc->account, curitem->name); |
2991 | 4804 build_block_list(); |
4778 | 4805 export = TRUE; |
2991 | 4806 } |
4807 } | |
4230 | 4808 } break; |
4809 | |
4810 case 0x0004: { /* Permit/deny setting */ | |
2991 | 4811 if (curitem->data) { |
4812 fu8_t permdeny; | |
4491 | 4813 if ((permdeny = aim_ssi_getpermdeny(sess->ssi.local)) && (permdeny != gc->account->permdeny)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4814 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4815 "ssi: changing permdeny from %d to %hhu\n", gc->account->permdeny, permdeny); |
4491 | 4816 gc->account->permdeny = permdeny; |
4817 if (od->icq && gc->account->permdeny == 0x03) { | |
4342 | 4818 serv_set_away(gc, "Invisible", ""); |
4819 } | |
4778 | 4820 export = TRUE; |
2991 | 4821 } |
4822 } | |
4230 | 4823 } break; |
4824 | |
4825 case 0x0005: { /* Presence setting */ | |
3109 | 4826 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 4827 } break; |
2991 | 4828 } /* End of switch on curitem->type */ |
4829 } /* End of for loop */ | |
4230 | 4830 |
4831 /* If changes were made, then flush buddy list to file */ | |
4778 | 4832 if (export) |
4349 | 4833 gaim_blist_save(); |
2991 | 4834 |
4759 | 4835 { /* Add from local list to server list */ |
4836 GaimBlistNode *gnode, *bnode; | |
4837 struct group *group; | |
4838 struct buddy *buddy; | |
4839 struct gaim_buddy_list *blist; | |
3017 | 4840 GSList *cur; |
4841 | |
2991 | 4842 /* Buddies */ |
4759 | 4843 if ((blist = gaim_get_blist())) |
4844 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
5234 | 4845 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
4846 continue; | |
4759 | 4847 group = (struct group *)gnode; |
4848 for (bnode = gnode->child; bnode; bnode = bnode->next) { | |
5234 | 4849 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) |
4850 continue; | |
4759 | 4851 buddy = (struct buddy *)bnode; |
4852 if (buddy->account == gc->account) { | |
4853 gchar *servernick = gaim_buddy_get_setting(buddy, "servernick"); | |
4854 if (servernick) { | |
4855 serv_got_alias(gc, buddy->name, servernick); | |
4856 g_free(servernick); | |
4857 } | |
4858 if (aim_ssi_itemlist_exists(sess->ssi.local, buddy->name)) { | |
4859 /* Store local alias on server */ | |
4860 char *alias = aim_ssi_getalias(sess->ssi.local, group->name, buddy->name); | |
4783 | 4861 if (!alias && buddy->alias && strlen(buddy->alias)) |
4889 | 4862 aim_ssi_aliasbuddy(sess, group->name, buddy->name, buddy->alias); |
4759 | 4863 free(alias); |
4864 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4865 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4866 "ssi: adding buddy %s from local list to server list\n", buddy->name); |
4889 | 4867 aim_ssi_addbuddy(sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4759 | 4868 } |
4349 | 4869 } |
4230 | 4870 } |
4292 | 4871 } |
2991 | 4872 /* Permit list */ |
4491 | 4873 if (gc->account->permit) { |
4874 for (cur=gc->account->permit; cur; cur=cur->next) | |
4230 | 4875 if (!aim_ssi_itemlist_finditem(sess->ssi.local, NULL, cur->data, AIM_SSI_TYPE_PERMIT)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4876 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4877 "ssi: adding permit %s from local list to server list\n", (char *)cur->data); |
4889 | 4878 aim_ssi_addpermit(sess, cur->data); |
4230 | 4879 } |
2991 | 4880 } |
4881 | |
4882 /* Deny list */ | |
4491 | 4883 if (gc->account->deny) { |
4884 for (cur=gc->account->deny; cur; cur=cur->next) | |
4230 | 4885 if (!aim_ssi_itemlist_finditem(sess->ssi.local, NULL, cur->data, AIM_SSI_TYPE_DENY)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4886 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4887 "ssi: adding deny %s from local list to server list\n", (char *)cur->data); |
4889 | 4888 aim_ssi_adddeny(sess, cur->data); |
4230 | 4889 } |
2991 | 4890 } |
3109 | 4891 /* Presence settings (idle time visibility) */ |
4230 | 4892 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) |
3109 | 4893 if (report_idle && !(tmp & 0x400)) |
4889 | 4894 aim_ssi_setpresence(sess, tmp | 0x400); |
4778 | 4895 } /* end adding buddies from local list to server list */ |
4896 | |
4901 | 4897 /* Set our ICQ status */ |
4898 if (od->icq && !gc->away) { | |
4899 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
4900 } | |
4901 | |
4342 | 4902 /* Activate SSI */ |
4903 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4904 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4905 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4906 "ssi: activating server-stored buddy list\n"); |
4642 | 4907 aim_ssi_enable(sess); |
4342 | 4908 |
2991 | 4909 return 1; |
2086 | 4910 } |
4230 | 4911 |
4912 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
4913 struct gaim_connection *gc = sess->aux_data; | |
4914 va_list ap; | |
4915 struct aim_ssi_tmp *retval; | |
4916 | |
4917 va_start(ap, fr); | |
4918 retval = va_arg(ap, struct aim_ssi_tmp *); | |
4919 va_end(ap); | |
4920 | |
4921 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4922 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4923 "ssi: status is 0x%04hx for a 0x%04hx action with name %s\n", retval->ack, retval->action, retval->item ? (retval->item->name ? retval->item->name : "no name") : "no item"); |
4230 | 4924 |
4925 if (retval->ack != 0xffff) | |
4926 switch (retval->ack) { | |
4927 case 0x0000: { /* added successfully */ | |
4928 } break; | |
4929 | |
4829 | 4930 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
4931 gchar *buf; | |
4932 buf = g_strdup_printf(_("Could not add the buddy %s because you have too many buddies in your buddy list. Please remove one and try again."), (retval->name ? retval->name : _("(no name)"))); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4933 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 4934 g_free(buf); |
4935 } | |
4936 | |
4230 | 4937 case 0x000e: { /* contact requires authorization */ |
4828 | 4938 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 4939 gaim_auth_sendrequest(gc, retval->name); |
4230 | 4940 } break; |
4941 | |
4942 default: { /* La la la */ | |
5197 | 4943 gchar *buf; |
5402 | 4944 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
4945 buf = g_strdup_printf(_("Could not add the buddy %s for an unknown reason. The most common reason for this is that you have the maximum number of allowed buddies in your buddy list."), (retval->name ? retval->name : _("(no name)"))); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4946 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 4947 g_free(buf); |
5402 | 4948 /* XXX - Should remove buddy from local list */ |
4230 | 4949 } break; |
4950 } | |
4951 | |
4952 retval = retval->next; | |
4953 } | |
4954 | |
4955 return 1; | |
4956 } | |
4957 | |
4958 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { | |
4959 struct gaim_connection *gc = sess->aux_data; | |
4960 va_list ap; | |
4961 char *sn, *msg; | |
4236 | 4962 gchar *dialog_msg, *nombre; |
4230 | 4963 struct name_data *data; |
4236 | 4964 struct buddy *buddy; |
4230 | 4965 |
4966 va_start(ap, fr); | |
4967 sn = va_arg(ap, char *); | |
4968 msg = va_arg(ap, char *); | |
4969 va_end(ap); | |
4970 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4971 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4972 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 4973 |
4687 | 4974 buddy = gaim_find_buddy(gc->account, sn); |
4975 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
4976 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 4977 else |
4978 nombre = g_strdup(sn); | |
4979 | |
4980 dialog_msg = g_strdup_printf(_("The user %s has given you permission to add you to their buddy list. Do you want to add them?"), nombre); | |
4230 | 4981 data = g_new(struct name_data, 1); |
4982 data->gc = gc; | |
4983 data->name = g_strdup(sn); | |
4984 data->nick = NULL; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
4985 do_ask_dialog(_("Authorization Given"), dialog_msg, data, _("Yes"), gaim_icq_contactadd, _("No"), gaim_free_name_data, my_protocol->handle, FALSE); |
4236 | 4986 |
4230 | 4987 g_free(dialog_msg); |
4236 | 4988 g_free(nombre); |
4230 | 4989 |
4990 return 1; | |
4991 } | |
4992 | |
4993 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
4994 struct gaim_connection *gc = sess->aux_data; | |
4995 va_list ap; | |
4996 char *sn, *msg; | |
4236 | 4997 gchar *dialog_msg, *nombre; |
4230 | 4998 struct name_data *data; |
4236 | 4999 struct buddy *buddy; |
4230 | 5000 |
5001 va_start(ap, fr); | |
5002 sn = va_arg(ap, char *); | |
5003 msg = va_arg(ap, char *); | |
5004 va_end(ap); | |
5005 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5006 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5007 "ssi: received authorization request from %s\n", sn); |
4230 | 5008 |
4687 | 5009 buddy = gaim_find_buddy(gc->account, sn); |
5010 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5011 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5012 else |
5013 nombre = g_strdup(sn); | |
5014 | |
4337 | 5015 dialog_msg = g_strdup_printf(_("The user %s wants to add you to their buddy list for the following reason:\n%s"), nombre, msg ? msg : _("No reason given.")); |
4230 | 5016 data = g_new(struct name_data, 1); |
5017 data->gc = gc; | |
5018 data->name = g_strdup(sn); | |
5019 data->nick = NULL; | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5020 do_ask_dialog(_("Authorization Request"), dialog_msg, data, _("Authorize"), gaim_auth_grant, _("Deny"), gaim_auth_dontgrant_msgprompt, my_protocol->handle, FALSE); |
4236 | 5021 |
4230 | 5022 g_free(dialog_msg); |
4236 | 5023 g_free(nombre); |
4230 | 5024 |
5025 return 1; | |
5026 } | |
5027 | |
5028 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
4236 | 5029 struct gaim_connection *gc = sess->aux_data; |
4230 | 5030 va_list ap; |
5031 char *sn, *msg; | |
4236 | 5032 gchar *dialog_msg, *nombre; |
4230 | 5033 fu8_t reply; |
4236 | 5034 struct buddy *buddy; |
4230 | 5035 |
5036 va_start(ap, fr); | |
5037 sn = va_arg(ap, char *); | |
5038 reply = (fu8_t)va_arg(ap, int); | |
5039 msg = va_arg(ap, char *); | |
5040 va_end(ap); | |
5041 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5042 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5043 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5044 |
4687 | 5045 buddy = gaim_find_buddy(gc->account, sn); |
5046 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5047 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5048 else |
5049 nombre = g_strdup(sn); | |
5050 | |
4230 | 5051 if (reply) { |
5052 /* Granted */ | |
4236 | 5053 dialog_msg = g_strdup_printf(_("The user %s has granted your request to add them to your contact list."), nombre); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5054 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5055 } else { |
5056 /* Denied */ | |
4236 | 5057 dialog_msg = g_strdup_printf(_("The user %s has denied your request to add them to your contact list for the following reason:\n%s"), nombre, msg ? msg : _("No reason given.")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5058 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5059 } |
5060 g_free(dialog_msg); | |
4236 | 5061 g_free(nombre); |
4230 | 5062 |
5063 return 1; | |
5064 } | |
5065 | |
5066 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5067 struct gaim_connection *gc = sess->aux_data; | |
5068 va_list ap; | |
5069 char *sn; | |
4236 | 5070 struct buddy *buddy; |
4230 | 5071 |
5072 va_start(ap, fr); | |
5073 sn = va_arg(ap, char *); | |
5074 va_end(ap); | |
5075 | |
4687 | 5076 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5077 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5078 "ssi: %s added you to their buddy list\n", sn); |
4687 | 5079 show_got_added(gc, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5080 |
5081 return 1; | |
5082 } | |
4269 | 5083 #endif |
2086 | 5084 |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5085 static GList *oscar_chat_info(struct gaim_connection *gc) { |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5086 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5087 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5088 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5089 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5090 pce->label = _("Join what group:"); |
5234 | 5091 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5092 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5093 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5094 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5095 pce->label = _("Exchange:"); |
5234 | 5096 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5097 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5098 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5099 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5100 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5101 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5102 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5103 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5104 |
5234 | 5105 static void oscar_join_chat(struct gaim_connection *g, GHashTable *data) { |
4617 | 5106 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5107 aim_conn_t *cur; |
5234 | 5108 char *name, *exchange; |
5109 | |
5110 name = g_hash_table_lookup(data, "room"); | |
5111 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5112 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5113 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5114 "Attempting to join chat room %s.\n", name); |
4617 | 5115 if ((cur = aim_getconn_type(od->sess, AIM_CONN_TYPE_CHATNAV))) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5116 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5117 "chatnav exists, creating room\n"); |
5234 | 5118 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5119 } else { |
5120 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5121 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5122 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5123 "chatnav does not exist, opening chatnav\n"); |
5234 | 5124 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5125 cr->name = g_strdup(name); |
4617 | 5126 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5127 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5128 } |
5129 } | |
5130 | |
3466 | 5131 static void oscar_chat_invite(struct gaim_connection *g, int id, const char *message, const char *name) { |
4617 | 5132 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2086 | 5133 struct chat_connection *ccon = find_oscar_chat(g, id); |
5134 | |
5135 if (!ccon) | |
5136 return; | |
5137 | |
4617 | 5138 aim_chat_invite(od->sess, od->conn, name, message ? message : "", |
2086 | 5139 ccon->exchange, ccon->name, 0x0); |
5140 } | |
5141 | |
5142 static void oscar_chat_leave(struct gaim_connection *g, int id) { | |
4617 | 5143 struct oscar_data *od = g ? (struct oscar_data *)g->proto_data : NULL; |
2086 | 5144 GSList *bcs = g->buddy_chats; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5145 struct gaim_conversation *b = NULL; |
2086 | 5146 struct chat_connection *c = NULL; |
5147 int count = 0; | |
5148 | |
5149 while (bcs) { | |
5150 count++; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5151 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5152 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 5153 break; |
5154 bcs = bcs->next; | |
5155 b = NULL; | |
5156 } | |
5157 | |
5158 if (!b) | |
5159 return; | |
5160 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5161 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5162 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5163 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5164 c = find_oscar_chat(g, gaim_chat_get_id(GAIM_CHAT(b))); |
2086 | 5165 if (c != NULL) { |
4617 | 5166 if (od) |
5167 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5168 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5169 gaim_input_remove(c->inpa); |
4617 | 5170 if (g && od->sess) |
5171 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5172 g_free(c->name); |
5173 g_free(c->show); | |
5174 g_free(c); | |
5175 } | |
5176 /* we do this because with Oscar it doesn't tell us we left */ | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5177 serv_got_chat_left(g, gaim_chat_get_id(GAIM_CHAT(b))); |
2086 | 5178 } |
5179 | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5180 static int oscar_chat_send(struct gaim_connection *g, int id, char *message) { |
4617 | 5181 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2086 | 5182 GSList *bcs = g->buddy_chats; |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5183 struct gaim_conversation *b = NULL; |
2086 | 5184 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5185 char *buf, *buf2; |
2086 | 5186 int i, j; |
5187 | |
5188 while (bcs) { | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5189 b = (struct gaim_conversation *)bcs->data; |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5190 if (id == gaim_chat_get_id(GAIM_CHAT(b))) |
2086 | 5191 break; |
5192 bcs = bcs->next; | |
5193 b = NULL; | |
5194 } | |
5195 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5196 return -EINVAL; |
2086 | 5197 |
4617 | 5198 bcs = od->oscar_chats; |
2086 | 5199 while (bcs) { |
5200 c = (struct chat_connection *)bcs->data; | |
5201 if (b == c->cnv) | |
5202 break; | |
5203 bcs = bcs->next; | |
5204 c = NULL; | |
5205 } | |
5206 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5207 return -EINVAL; |
2086 | 5208 |
5209 buf = g_malloc(strlen(message) * 4 + 1); | |
5210 for (i = 0, j = 0; i < strlen(message); i++) { | |
5211 if (message[i] == '\n') { | |
5212 buf[j++] = '<'; | |
5213 buf[j++] = 'B'; | |
5214 buf[j++] = 'R'; | |
5215 buf[j++] = '>'; | |
5216 } else { | |
5217 buf[j++] = message[i]; | |
5218 } | |
5219 } | |
5220 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5221 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5222 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5223 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5224 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5225 buf2 = strip_html(buf); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5226 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5227 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5228 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5229 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5230 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5231 |
4617 | 5232 aim_chat_send_im(od->sess, c->conn, 0, buf, strlen(buf)); |
2086 | 5233 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5234 return 0; |
2086 | 5235 } |
5236 | |
4687 | 5237 static const char *oscar_list_icon(struct gaim_account *a, struct buddy *b) { |
4766 | 5238 if (!b || (b && b->name && b->name[0] == '+')) { |
4687 | 5239 if (isdigit(a->username[0])) |
5240 return "icq"; | |
5241 else | |
5242 return "aim"; | |
5243 } | |
5244 | |
5245 if (isdigit(b->name[0])) | |
5246 return "icq"; | |
5247 return "aim"; | |
5248 } | |
5249 | |
4690 | 5250 static void oscar_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5251 { |
5252 char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
5253 int i = 0; | |
5254 | |
5131 | 5255 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5256 struct gaim_account *account; | |
5257 struct gaim_connection *gc; | |
5258 struct oscar_data *od; | |
5259 char *gname; | |
5260 if ((b->name) && (account = b->account) && (gc = account->gc) && | |
5261 (od = gc->proto_data) && (od->sess->ssi.received_data) && | |
5262 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && | |
5263 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5264 emblems[i++] = "notauthorized"; | |
5265 } else { | |
5266 emblems[i++] = "offline"; | |
5267 } | |
5268 } | |
4916 | 5269 |
4766 | 5270 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5271 int uc = b->uc >> 16; |
4766 | 5272 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5273 emblems[i++] = "invisible"; |
4766 | 5274 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5275 emblems[i++] = "freeforchat"; |
4766 | 5276 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5277 emblems[i++] = "dnd"; |
4766 | 5278 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5279 emblems[i++] = "na"; |
4766 | 5280 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5281 emblems[i++] = "occupied"; |
4766 | 5282 else if (uc & AIM_ICQ_STATE_AWAY) |
5283 emblems[i++] = "away"; | |
5284 } else { | |
5285 if (b->uc & UC_UNAVAILABLE) | |
5286 emblems[i++] = "away"; | |
5287 } | |
4687 | 5288 if (b->uc & UC_WIRELESS) |
5289 emblems[i++] = "wireless"; | |
5290 if (b->uc & UC_AOL) | |
5291 emblems[i++] = "aol"; | |
5292 if (b->uc & UC_ADMIN) | |
5293 emblems[i++] = "admin"; | |
5294 if (b->uc & UC_AB && i < 4) | |
5295 emblems[i++] = "activebuddy"; | |
4766 | 5296 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5297 emblems[i++] = "unconfirmed"; */ | |
4687 | 5298 *se = emblems[0]; |
5299 *sw = emblems[1]; | |
5300 *nw = emblems[2]; | |
5301 *ne = emblems[3]; | |
5302 } | |
5303 | |
5131 | 5304 static char *oscar_tooltip_text(struct buddy *b) { |
5305 struct gaim_connection *gc = b->account->gc; | |
5306 struct oscar_data *od = gc->proto_data; | |
5307 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, normalize(b->name)); | |
5308 gchar *tmp, *yay = g_strdup(""); | |
5309 | |
5310 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5311 if (isdigit(b->name[0])) { | |
5312 char *tmp, *status; | |
5313 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
5314 tmp = yay; | |
5315 yay = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5316 g_free(tmp); | |
5317 g_free(status); | |
5318 } | |
5319 | |
5320 if (bi) { | |
5321 char *tstr = sec_to_text(time(NULL) - bi->signon + | |
5322 (gc->login_time_official ? gc->login_time_official - gc->login_time : 0)); | |
5323 tmp = yay; | |
5324 yay = g_strconcat(tmp, _("<b>Logged In:</b> "), tstr, "\n", NULL); | |
5325 free(tmp); | |
5326 free(tstr); | |
5327 | |
5328 if (bi->caps) { | |
5329 char *caps = caps_string(bi->caps); | |
5330 tmp = yay; | |
5331 yay = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
5332 free(tmp); | |
5333 } | |
5334 } | |
5335 } else { | |
5336 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5337 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
5338 tmp = yay; | |
5339 yay = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5340 g_free(tmp); | |
5341 } else { | |
5342 tmp = yay; | |
5343 yay = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5344 g_free(tmp); | |
5345 } | |
5346 } | |
5347 | |
5348 /* remove the trailing newline character */ | |
5349 if (yay) | |
5350 yay[strlen(yay)-1] = '\0'; | |
5351 return yay; | |
5352 } | |
5353 | |
5167 | 5354 static char *oscar_status_text(struct buddy *b) { |
5355 struct gaim_connection *gc = b->account->gc; | |
5356 struct oscar_data *od = gc->proto_data; | |
5357 gchar *ret = NULL; | |
5358 | |
5359 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5360 if (isdigit(b->name[0])) | |
5361 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
5362 else | |
5363 ret = g_strdup(_("Away")); | |
5364 } else if (!GAIM_BUDDY_IS_ONLINE(b)) { | |
5365 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5366 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5367 ret = g_strdup(_("Not Authorized")); | |
5368 else | |
5369 ret = g_strdup(_("Offline")); | |
5370 } | |
5371 | |
5372 return ret; | |
5373 } | |
5374 | |
3952 | 5375 /* |
4617 | 5376 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5377 */ |
4617 | 5378 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5379 struct gaim_connection *gc = sess->aux_data; |
5380 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5381 struct gaim_conversation *cnv; |
2086 | 5382 struct direct_im *dim; |
5383 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5384 char *sn; |
4617 | 5385 va_list ap; |
5386 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5387 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5388 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5389 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5390 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5391 va_end(ap); |
5392 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5393 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5394 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5395 |
4617 | 5396 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5397 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5398 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5399 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5400 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5401 |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5402 if (!(cnv = gaim_find_conversation(sn))) |
4491 | 5403 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, sn); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5404 gaim_input_remove(dim->watcher); |
2086 | 5405 dim->conn = newconn; |
4617 | 5406 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5407 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5408 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5409 g_free(sn); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5410 gaim_conversation_write(cnv, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
2086 | 5411 |
4617 | 5412 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5413 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
5414 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_update_ui, 0); | |
5415 | |
2993 | 5416 return 1; |
5417 } | |
5418 | |
5419 static int gaim_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5420 va_list ap; | |
5421 char *sn; | |
5422 double percent; | |
5423 struct gaim_connection *gc = sess->aux_data; | |
5424 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5425 struct gaim_conversation *c; |
2993 | 5426 struct direct_im *dim; |
5427 | |
5428 va_start(ap, fr); | |
5429 sn = va_arg(ap, char *); | |
5430 percent = va_arg(ap, double); | |
5431 va_end(ap); | |
5432 | |
2994 | 5433 if (!(dim = find_direct_im(od, sn))) |
5434 return 1; | |
3059 | 5435 if (dim->watcher) { |
5436 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5437 dim->watcher = 0; | |
5438 } | |
3044 | 5439 while (gtk_events_pending()) |
5440 gtk_main_iteration(); | |
5441 | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5442 if ((c = gaim_find_conversation(sn))) |
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
5443 gaim_conversation_update_progress(c, percent); |
2993 | 5444 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5445 oscar_callback, dim->conn); | |
2086 | 5446 |
5447 return 1; | |
5448 } | |
5449 | |
4617 | 5450 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
4870 | 5451 struct gaim_connection *gc = sess->aux_data; |
5452 int imflags = 0; | |
2086 | 5453 va_list ap; |
4870 | 5454 char *sn, *msg; |
5455 int len, encoding, isawaymsg; | |
2086 | 5456 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5457 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5458 sn = va_arg(ap, char *); |
2086 | 5459 msg = va_arg(ap, char *); |
2993 | 5460 len = va_arg(ap, int); |
3952 | 5461 encoding = va_arg(ap, int); |
4870 | 5462 isawaymsg = va_arg(ap, int); |
2086 | 5463 va_end(ap); |
5464 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5465 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5466 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5467 |
4870 | 5468 if (isawaymsg) |
5469 imflags |= IM_FLAG_AWAY; | |
5470 | |
4617 | 5471 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
4870 | 5472 serv_got_im(gc, sn, msg, imflags, time(NULL), len); |
2086 | 5473 |
5474 return 1; | |
5475 } | |
5476 | |
4617 | 5477 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5478 va_list ap; |
5479 char *sn; | |
2993 | 5480 int typing; |
5481 struct gaim_connection *gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5482 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5483 va_start(ap, fr); |
2086 | 5484 sn = va_arg(ap, char *); |
2993 | 5485 typing = va_arg(ap, int); |
2086 | 5486 va_end(ap); |
5487 | |
4870 | 5488 if (typing == 0x0002) { |
2993 | 5489 /* I had to leave this. It's just too funny. It reminds me of my sister. */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5490 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5491 "ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", sn); |
4342 | 5492 serv_got_typing(gc, sn, 0, TYPING); |
4870 | 5493 } else if (typing == 0x0001) |
5494 serv_got_typing(gc, sn, 0, TYPED); | |
5495 else | |
4342 | 5496 serv_got_typing_stopped(gc, sn); |
2086 | 5497 return 1; |
5498 } | |
5499 | |
5500 struct ask_do_dir_im { | |
5501 char *who; | |
5502 struct gaim_connection *gc; | |
5503 }; | |
5504 | |
3730 | 5505 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 5506 g_free(data->who); |
2086 | 5507 g_free(data); |
5508 } | |
5509 | |
3730 | 5510 static void oscar_direct_im(struct ask_do_dir_im *data) { |
2086 | 5511 struct gaim_connection *gc = data->gc; |
4244 | 5512 struct oscar_data *od; |
2086 | 5513 struct direct_im *dim; |
5514 | |
4244 | 5515 if (!g_slist_find(connections, gc)) { |
5136 | 5516 g_free(data->who); |
4244 | 5517 g_free(data); |
5518 return; | |
5519 } | |
5520 | |
5521 od = (struct oscar_data *)gc->proto_data; | |
5522 | |
2086 | 5523 dim = find_direct_im(od, data->who); |
5524 if (dim) { | |
3008 | 5525 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
5526 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
5527 gaim_input_remove(dim->watcher); | |
5528 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5529 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5530 "Gave up on old direct IM, trying again\n"); |
3008 | 5531 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5532 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 5533 g_free(data->who); |
4244 | 5534 g_free(data); |
3008 | 5535 return; |
5536 } | |
2086 | 5537 } |
5538 dim = g_new0(struct direct_im, 1); | |
5539 dim->gc = gc; | |
5540 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
5541 | |
4617 | 5542 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 5543 if (dim->conn != NULL) { |
5544 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5545 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 5546 oscar_callback, dim->conn); |
4617 | 5547 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
5548 gaim_odc_initiate, 0); | |
2086 | 5549 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5550 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 5551 g_free(dim); |
5552 } | |
4244 | 5553 |
5136 | 5554 g_free(data->who); |
4244 | 5555 g_free(data); |
2086 | 5556 } |
5557 | |
5136 | 5558 static void oscar_ask_direct_im(struct gaim_connection *gc, const char *who) { |
5420 | 5559 gchar *buf; |
2086 | 5560 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 5561 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
5562 data->gc = gc; |
5420 | 5563 buf = g_strdup_printf(_("You have selected to open a Direct IM connection with %s."), who); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5564 do_ask_dialog(buf, _("Because this reveals your IP address, it may be considered a privacy risk. Do you wish to continue?"), data, _("Connect"), oscar_direct_im, _("Cancel"), oscar_cancel_direct_im, my_protocol->handle, FALSE); |
5420 | 5565 g_free(buf); |
2086 | 5566 } |
5567 | |
5568 static void oscar_set_permit_deny(struct gaim_connection *gc) { | |
5569 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4230 | 5570 #ifdef NOSSI |
4770 | 5571 GSList *list, *g = gaim_blist_groups(), *g1; |
4230 | 5572 char buf[MAXMSGLEN]; |
5573 int at; | |
5574 | |
4491 | 5575 switch(gc->account->permdeny) { |
4687 | 5576 case 1: |
4230 | 5577 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gc->username); |
5578 break; | |
5579 case 2: | |
5580 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gc->username); | |
5581 break; | |
5582 case 3: | |
4642 | 5583 list = gc->account->permit; |
4230 | 5584 at = 0; |
5585 while (list) { | |
5586 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5587 list = list->next; | |
5588 } | |
5589 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
5590 break; | |
5591 case 4: | |
4642 | 5592 list = gc->account->deny; |
4230 | 5593 at = 0; |
5594 while (list) { | |
5595 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5596 list = list->next; | |
5597 } | |
5598 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
5599 break; | |
5600 case 5: | |
4770 | 5601 g1 = g; |
4230 | 5602 at = 0; |
4770 | 5603 while (g1) { |
5604 list = gaim_blist_members((struct group *)g->data); | |
5605 GSList list1 = list; | |
5606 while (list1) { | |
5607 struct buddy *b = list1->data; | |
4491 | 5608 if(b->account == gc->account) |
4349 | 5609 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", b->name); |
4770 | 5610 list1 = list1->next; |
2995 | 5611 } |
4770 | 5612 g_slist_free(list); |
5613 g1 = g1->next; | |
4349 | 5614 } |
4770 | 5615 g_slist_free(g); |
4230 | 5616 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
5617 break; | |
5618 default: | |
5619 break; | |
2086 | 5620 } |
4230 | 5621 signoff_blocked(gc); |
5622 #else | |
5623 if (od->sess->ssi.received_data) | |
4889 | 5624 aim_ssi_setpermdeny(od->sess, gc->account->permdeny, 0xffffffff); |
4230 | 5625 #endif |
2086 | 5626 } |
5627 | |
4349 | 5628 static void oscar_add_permit(struct gaim_connection *gc, const char *who) { |
4269 | 5629 #ifdef NOSSI |
4491 | 5630 if (gc->account->permdeny == 3) |
4269 | 5631 oscar_set_permit_deny(gc); |
5632 #else | |
2991 | 5633 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5634 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 5635 if (od->sess->ssi.received_data) |
4889 | 5636 aim_ssi_addpermit(od->sess, who); |
4230 | 5637 #endif |
2086 | 5638 } |
5639 | |
4349 | 5640 static void oscar_add_deny(struct gaim_connection *gc, const char *who) { |
4269 | 5641 #ifdef NOSSI |
4491 | 5642 if (gc->account->permdeny == 4) |
4269 | 5643 oscar_set_permit_deny(gc); |
5644 #else | |
2991 | 5645 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5646 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 5647 if (od->sess->ssi.received_data) |
4889 | 5648 aim_ssi_adddeny(od->sess, who); |
4230 | 5649 #endif |
2086 | 5650 } |
5651 | |
4349 | 5652 static void oscar_rem_permit(struct gaim_connection *gc, const char *who) { |
4269 | 5653 #ifdef NOSSI |
4491 | 5654 if (gc->account->permdeny == 3) |
4269 | 5655 oscar_set_permit_deny(gc); |
5656 #else | |
2991 | 5657 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5658 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 5659 if (od->sess->ssi.received_data) |
4889 | 5660 aim_ssi_delpermit(od->sess, who); |
4230 | 5661 #endif |
2086 | 5662 } |
5663 | |
4349 | 5664 static void oscar_rem_deny(struct gaim_connection *gc, const char *who) { |
4269 | 5665 #ifdef NOSSI |
4491 | 5666 if (gc->account->permdeny == 4) |
4269 | 5667 oscar_set_permit_deny(gc); |
5668 #else | |
2991 | 5669 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5670 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 5671 if (od->sess->ssi.received_data) |
4889 | 5672 aim_ssi_deldeny(od->sess, who); |
4230 | 5673 #endif |
2086 | 5674 } |
5675 | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5676 static GList *oscar_away_states(struct gaim_connection *gc) |
2086 | 5677 { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5678 struct oscar_data *od = gc->proto_data; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5679 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5680 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5681 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5682 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
5683 |
4333 | 5684 m = g_list_append(m, _("Online")); |
5685 m = g_list_append(m, _("Away")); | |
5686 m = g_list_append(m, _("Do Not Disturb")); | |
5687 m = g_list_append(m, _("Not Available")); | |
5688 m = g_list_append(m, _("Occupied")); | |
5689 m = g_list_append(m, _("Free For Chat")); | |
5690 m = g_list_append(m, _("Invisible")); | |
5691 | |
5692 return m; | |
5693 } | |
5694 | |
5136 | 5695 static GList *oscar_buddy_menu(struct gaim_connection *gc, const char *who) { |
4333 | 5696 struct oscar_data *od = gc->proto_data; |
5697 GList *m = NULL; | |
5698 struct proto_buddy_menu *pbm; | |
5699 | |
5700 if (od->icq) { | |
4624 | 5701 #if 0 |
4333 | 5702 pbm = g_new0(struct proto_buddy_menu, 1); |
5703 pbm->label = _("Get Status Msg"); | |
4969 | 5704 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 5705 pbm->gc = gc; |
5706 m = g_list_append(m, pbm); | |
4624 | 5707 #endif |
4333 | 5708 } else { |
4687 | 5709 struct buddy *b = gaim_find_buddy(gc->account, who); |
4356 | 5710 |
5068 | 5711 if ((aim_sncmp(gc->username, who)) && GAIM_BUDDY_IS_ONLINE(b)) { |
4333 | 5712 pbm = g_new0(struct proto_buddy_menu, 1); |
5713 pbm->label = _("Direct IM"); | |
5714 pbm->callback = oscar_ask_direct_im; | |
5715 pbm->gc = gc; | |
5716 m = g_list_append(m, pbm); | |
4650 | 5717 |
4333 | 5718 pbm = g_new0(struct proto_buddy_menu, 1); |
5719 pbm->label = _("Send File"); | |
4617 | 5720 pbm->callback = oscar_ask_sendfile; |
4333 | 5721 pbm->gc = gc; |
5722 m = g_list_append(m, pbm); | |
4826 | 5723 #if 0 |
5724 pbm = g_new0(struct proto_buddy_menu, 1); | |
5725 pbm->label = _("Get File"); | |
5726 pbm->callback = oscar_ask_getfile; | |
5727 pbm->gc = gc; | |
5728 m = g_list_append(m, pbm); | |
5729 #endif | |
4333 | 5730 } |
5131 | 5731 } |
5197 | 5732 |
5131 | 5733 if (od->sess->ssi.received_data) { |
5734 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
5735 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
5736 pbm = g_new0(struct proto_buddy_menu, 1); | |
5737 pbm->label = _("Re-request Authorization"); | |
5738 pbm->callback = gaim_auth_sendrequest; | |
5739 pbm->gc = gc; | |
5740 m = g_list_append(m, pbm); | |
4333 | 5741 } |
4916 | 5742 } |
5743 | |
4333 | 5744 return m; |
5745 } | |
5746 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5747 static void oscar_format_screenname(const char *nick, struct gaim_connection *gc) { |
4333 | 5748 struct oscar_data *od = gc->proto_data; |
5749 if (!aim_sncmp(gc->username, nick)) { | |
5750 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { | |
5751 od->setnick = TRUE; | |
5752 od->newsn = g_strdup(nick); | |
5753 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
5754 } else { | |
5755 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
5756 } | |
5757 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5758 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5759 _("Screenname formatting can change only capitalization and whitespace.")); |
4333 | 5760 } |
5761 } | |
5762 | |
5763 static void oscar_show_format_screenname(struct gaim_connection *gc) | |
5764 { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5765 gaim_request_input(gc, NULL, _("New screenname formatting:"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5766 gc->displayname, FALSE, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5767 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5768 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5769 gc); |
4333 | 5770 } |
5771 | |
5772 static void oscar_confirm_account(struct gaim_connection *gc) | |
5773 { | |
5774 struct oscar_data *od = gc->proto_data; | |
5775 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); | |
5776 | |
5777 if (conn) { | |
5778 aim_admin_reqconfirm(od->sess, conn); | |
5779 } else { | |
5780 od->conf = TRUE; | |
5781 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
5782 } | |
5783 } | |
5784 | |
5785 static void oscar_show_email(struct gaim_connection *gc) | |
5786 { | |
5787 struct oscar_data *od = gc->proto_data; | |
5788 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); | |
5789 | |
5790 if (conn) { | |
5791 aim_admin_getinfo(od->sess, conn, 0x11); | |
5792 } else { | |
5793 od->reqemail = TRUE; | |
5794 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
5795 } | |
5796 } | |
5797 | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5798 static void oscar_change_email(const char *email, struct gaim_connection *gc) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5799 { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5800 struct oscar_data *od = gc->proto_data; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5801 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5802 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5803 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5804 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5805 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5806 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5807 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5808 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5809 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5810 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
5811 |
4333 | 5812 static void oscar_show_change_email(struct gaim_connection *gc) |
5813 { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5814 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, FALSE, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5815 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5816 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
5817 gc); |
4333 | 5818 } |
5819 | |
5820 static void oscar_show_awaitingauth(struct gaim_connection *gc) | |
5821 { | |
2979 | 5822 struct oscar_data *od = gc->proto_data; |
4333 | 5823 gchar *nombre, *text, *tmp; |
4785 | 5824 GaimBlistNode *gnode,*bnode; |
4333 | 5825 int num=0; |
5826 | |
5827 text = g_strdup(_("You are awaiting authorization from the following buddies:<BR>")); | |
5828 | |
4785 | 5829 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
5830 struct group *group = (struct group *)gnode; | |
5831 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
5832 continue; | |
5833 for (bnode = gnode->child; bnode; bnode = bnode->next) { | |
5834 struct buddy *buddy = (struct buddy *)bnode; | |
5835 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
5836 continue; | |
4491 | 5837 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { |
4687 | 5838 if (gaim_get_buddy_alias_only(buddy)) |
5839 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
4333 | 5840 else |
4337 | 5841 nombre = g_strdup_printf(" %s", buddy->name); |
4333 | 5842 tmp = g_strdup_printf("%s<BR>%s", text, nombre); |
5843 g_free(text); | |
5844 text = tmp; | |
5845 g_free(nombre); | |
5846 num++; | |
5847 } | |
2979 | 5848 } |
4333 | 5849 } |
5850 | |
5851 if (!num) { | |
5852 tmp = g_strdup_printf("%s<BR>%s", text, _("<i>you are not waiting for authorization</i>")); | |
5853 g_free(text); | |
5854 text = tmp; | |
2979 | 5855 } |
4333 | 5856 |
4959 | 5857 tmp = g_strdup_printf(_("%s<BR><BR>You can re-request authorization from these buddies by right-clicking on them and clicking \"Re-request authorization.\""), text); |
4333 | 5858 g_free(text); |
5859 text = tmp; | |
5860 g_show_info_text(gc, gc->username, 2, text, NULL); | |
5861 g_free(text); | |
2979 | 5862 } |
5863 | |
4333 | 5864 static void oscar_show_chpassurl(struct gaim_connection *gc) |
5865 { | |
5866 struct oscar_data *od = gc->proto_data; | |
5867 open_url(NULL, od->sess->authinfo->chpassurl); | |
5868 } | |
5869 | |
5870 static GList *oscar_actions(struct gaim_connection *gc) | |
2086 | 5871 { |
5872 struct oscar_data *od = gc->proto_data; | |
4333 | 5873 struct proto_actions_menu *pam; |
5874 GList *m = NULL; | |
5875 | |
5876 pam = g_new0(struct proto_actions_menu, 1); | |
5877 pam->label = _("Set User Info"); | |
5878 pam->callback = show_set_info; | |
5879 pam->gc = gc; | |
5880 m = g_list_append(m, pam); | |
5881 | |
5238 | 5882 pam = g_new0(struct proto_actions_menu, 1); |
5883 pam->label = _("Change Password"); | |
5884 pam->callback = show_change_passwd; | |
5885 pam->gc = gc; | |
5886 m = g_list_append(m, pam); | |
4617 | 5887 |
5888 if (od->sess->authinfo->chpassurl) { | |
5889 pam = g_new0(struct proto_actions_menu, 1); | |
5890 pam->label = _("Change Password (URL)"); | |
5891 pam->callback = oscar_show_chpassurl; | |
5892 pam->gc = gc; | |
5893 m = g_list_append(m, pam); | |
5894 } | |
5895 | |
5238 | 5896 if (!od->icq) { |
4617 | 5897 /* AIM actions */ |
5898 m = g_list_append(m, NULL); | |
4333 | 5899 |
5900 pam = g_new0(struct proto_actions_menu, 1); | |
5901 pam->label = _("Format Screenname"); | |
5902 pam->callback = oscar_show_format_screenname; | |
5903 pam->gc = gc; | |
5904 m = g_list_append(m, pam); | |
5905 | |
5906 pam = g_new0(struct proto_actions_menu, 1); | |
5907 pam->label = _("Confirm Account"); | |
5908 pam->callback = oscar_confirm_account; | |
5909 pam->gc = gc; | |
5910 m = g_list_append(m, pam); | |
5911 | |
5912 pam = g_new0(struct proto_actions_menu, 1); | |
5913 pam->label = _("Display Current Registered Address"); | |
5914 pam->callback = oscar_show_email; | |
5915 pam->gc = gc; | |
5916 m = g_list_append(m, pam); | |
5917 | |
5918 pam = g_new0(struct proto_actions_menu, 1); | |
5919 pam->label = _("Change Current Registered Address"); | |
5920 pam->callback = oscar_show_change_email; | |
5921 pam->gc = gc; | |
5922 m = g_list_append(m, pam); | |
2086 | 5923 } |
4333 | 5924 |
5925 m = g_list_append(m, NULL); | |
5926 | |
5927 pam = g_new0(struct proto_actions_menu, 1); | |
5928 pam->label = _("Show Buddies Awaiting Authorization"); | |
5929 pam->callback = oscar_show_awaitingauth; | |
5930 pam->gc = gc; | |
5931 m = g_list_append(m, pam); | |
5932 | |
2086 | 5933 m = g_list_append(m, NULL); |
4333 | 5934 |
5935 pam = g_new0(struct proto_actions_menu, 1); | |
5936 pam->label = _("Search for Buddy by Email"); | |
5937 pam->callback = show_find_email; | |
5938 pam->gc = gc; | |
5939 m = g_list_append(m, pam); | |
5940 | |
4336 | 5941 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 5942 pam->label = _("Search for Buddy by Information"); |
5943 pam->callback = show_find_info; | |
5944 pam->gc = gc; | |
4336 | 5945 m = g_list_append(m, pam); */ |
2086 | 5946 |
5947 return m; | |
5948 } | |
5949 | |
3466 | 5950 static void oscar_change_passwd(struct gaim_connection *gc, const char *old, const char *new) |
2086 | 5951 { |
5952 struct oscar_data *od = gc->proto_data; | |
4617 | 5953 |
5954 if (od->icq) { | |
5955 aim_icq_changepasswd(od->sess, new); | |
2086 | 5956 } else { |
4617 | 5957 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
5958 if (conn) { | |
5959 aim_admin_changepasswd(od->sess, conn, new, old); | |
5960 } else { | |
5961 od->chpass = TRUE; | |
5962 od->oldp = g_strdup(old); | |
5963 od->newp = g_strdup(new); | |
5964 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
5965 } | |
2086 | 5966 } |
5967 } | |
5968 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5969 static void oscar_convo_closed(struct gaim_connection *gc, char *who) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5970 { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5971 struct oscar_data *od = gc->proto_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5972 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5973 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5974 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5975 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5976 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5977 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5978 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5979 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5980 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5981 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5982 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5983 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5984 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5985 GAIM_PROTO_OSCAR, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5986 OPT_PROTO_MAIL_CHECK | OPT_PROTO_BUDDY_ICON | OPT_PROTO_IM_IMAGE, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5987 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5988 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5989 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5990 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5991 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5992 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5993 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5994 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5995 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5996 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5997 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5998 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
5999 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6000 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6001 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6002 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6003 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6004 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6005 oscar_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6006 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6007 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6008 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6009 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6010 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6011 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6012 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6013 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6014 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6015 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6016 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6017 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6018 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6019 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6020 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6021 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6022 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6023 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6024 oscar_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6025 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6026 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6027 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6028 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6029 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6030 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6031 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6032 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6033 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6034 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6035 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6036 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6037 #endif |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6038 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6039 oscar_convo_closed, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6040 NULL |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6041 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6042 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6043 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6044 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6045 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6046 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6047 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6048 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6049 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6050 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6051 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6052 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6053 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6054 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6055 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6056 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6057 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6058 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6059 NULL, /**< author */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6060 WEBSITE, /**< homepage */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6061 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6062 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6063 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6064 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6065 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6066 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6067 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6068 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6069 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6070 static void |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6071 __init_plugin(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6072 { |
3572 | 6073 struct proto_user_opt *puo; |
2086 | 6074 |
3572 | 6075 puo = g_new0(struct proto_user_opt, 1); |
5388 | 6076 puo->label = g_strdup(_("Auth Host:")); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6077 puo->def = g_strdup("login.oscar.aol.com"); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6078 puo->pos = USEROPT_AUTH; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6079 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
3572 | 6080 |
6081 puo = g_new0(struct proto_user_opt, 1); | |
5388 | 6082 puo->label = g_strdup(_("Auth Port:")); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6083 puo->def = g_strdup("5190"); |
5208
0a6912730d56
[gaim-migrate @ 5576]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
6084 puo->pos = USEROPT_AUTHPORT; |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6085 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6086 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6087 my_protocol = plugin; |
2086 | 6088 } |
6089 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6090 GAIM_INIT_PLUGIN(oscar, __init_plugin, info); |