Mercurial > pidgin.yaz
annotate src/protocols/oscar/oscar.c @ 7259:22b5b81ca7e0
[gaim-migrate @ 7836]
Correctly handle failed get info requests.
This should fix that bug that's assigned to me, and also the
problem SimGuy (and other people) have had where you need to
Get Info twice before it works.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 14 Oct 2003 04:35:46 +0000 |
parents | 0ed4d53c46f9 |
children | 1930e3d00ecd |
rev | line source |
---|---|
2086 | 1 /* |
2 * gaim | |
3 * | |
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
6302 | 5 * Some code copyright (C) 1999-2001, Eric Warmenhoven |
6 * Some code copyright (C) 2001-2003, Sean Egan | |
7 * Some code copyright (C) 2001-2003, Mark Doliner <thekingant@users.sourceforge.net> | |
8 * | |
9 * Most libfaim code copyright (C) 1998-2001 Adam Fritzler <afritz@auk.cx> | |
10 * Some libfaim code copyright (C) 2001-2003 Mark Doliner <thekingant@users.sourceforge.net> | |
2086 | 11 * |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License as published by | |
14 * the Free Software Foundation; either version 2 of the License, or | |
15 * (at your option) any later version. | |
16 * | |
17 * This program is distributed in the hope that it will be useful, | |
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 * GNU General Public License for more details. | |
21 * | |
22 * You should have received a copy of the GNU General Public License | |
23 * along with this program; if not, write to the Free Software | |
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
25 * | |
26 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
27 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
28 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
29 #include "account.h" |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
30 #include "accountopt.h" |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
31 #include "buddyicon.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
32 #include "conversation.h" |
7083
3100a6e03644
[gaim-migrate @ 7648]
Christian Hammond <chipx86@chipx86.com>
parents:
7082
diff
changeset
|
33 #include "core.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
34 #include "debug.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
35 #include "ft.h" |
6982 | 36 #include "imgstore.h" |
2086 | 37 #include "multi.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
38 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
39 #include "privacy.h" |
2086 | 40 #include "prpl.h" |
4889 | 41 #include "proxy.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
42 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
43 #include "util.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
44 |
2086 | 45 #include "aim.h" |
5842 | 46 #include "md5.h" |
2086 | 47 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
48 #define UC_AOL 0x02 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
49 #define UC_ADMIN 0x04 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
50 #define UC_UNCONFIRMED 0x08 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
51 #define UC_NORMAL 0x10 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
52 #define UC_AB 0x20 |
3079 | 53 #define UC_WIRELESS 0x40 |
6318 | 54 #define UC_HIPTOP 0x80 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
55 |
2086 | 56 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" |
57 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
58 static GaimPlugin *my_protocol = NULL; |
4249 | 59 |
6871 | 60 static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_INTEROPERATE; |
61 static int caps_icq = AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_ICQUTF8 | AIM_CAPS_INTEROPERATE; | |
3458 | 62 |
4665 | 63 static fu8_t features_aim[] = {0x01, 0x01, 0x01, 0x02}; |
64 static fu8_t features_icq[] = {0x01, 0x06}; | |
2086 | 65 |
66 struct oscar_data { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
67 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
68 aim_conn_t *conn; |
2086 | 69 |
70 guint cnpa; | |
71 guint paspa; | |
3694 | 72 guint emlpa; |
4804 | 73 guint icopa; |
2086 | 74 |
4823 | 75 gboolean iconconnecting; |
5842 | 76 gboolean set_icon; |
4823 | 77 |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
78 GSList *create_rooms; |
2086 | 79 |
80 gboolean conf; | |
81 gboolean reqemail; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
82 gboolean setemail; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
83 char *email; |
2979 | 84 gboolean setnick; |
85 char *newsn; | |
2086 | 86 gboolean chpass; |
87 char *oldp; | |
88 char *newp; | |
5842 | 89 |
2086 | 90 GSList *oscar_chats; |
91 GSList *direct_ims; | |
3630 | 92 GSList *file_transfers; |
4738 | 93 GHashTable *buddyinfo; |
4804 | 94 GSList *requesticon; |
2086 | 95 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
96 gboolean killme; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
97 gboolean icq; |
4804 | 98 guint icontimer; |
5968 | 99 guint getblisttimer; |
2993 | 100 |
101 struct { | |
4230 | 102 guint maxwatchers; /* max users who can watch you */ |
2993 | 103 guint maxbuddies; /* max users you can watch */ |
4230 | 104 guint maxgroups; /* max groups in server list */ |
2993 | 105 guint maxpermits; /* max users on permit list */ |
106 guint maxdenies; /* max users on deny list */ | |
107 guint maxsiglen; /* max size (bytes) of profile */ | |
108 guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
109 } rights; | |
2086 | 110 }; |
111 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
112 struct create_room { |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
113 char *name; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
114 int exchange; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
115 }; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
116 |
2086 | 117 struct chat_connection { |
118 char *name; | |
119 char *show; /* AOL did something funny to us */ | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
120 fu16_t exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
121 fu16_t instance; |
2086 | 122 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
|
123 aim_conn_t *conn; |
2086 | 124 int inpa; |
125 int id; | |
5575 | 126 GaimConnection *gc; /* i hate this. */ |
5679 | 127 GaimConversation *cnv; /* bah. */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
128 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
129 int maxvis; |
2086 | 130 }; |
131 | |
132 struct direct_im { | |
5575 | 133 GaimConnection *gc; |
2086 | 134 char name[80]; |
135 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
136 aim_conn_t *conn; |
3008 | 137 gboolean connected; |
2086 | 138 }; |
139 | |
140 struct ask_direct { | |
5575 | 141 GaimConnection *gc; |
2086 | 142 char *sn; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
143 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
144 fu8_t cookie[8]; |
2086 | 145 }; |
146 | |
7011 | 147 /* |
148 * Various PRPL-specific buddy info that we want to keep track of | |
149 * Some other info is maintained by locate.c, and I'd like to move | |
150 * the rest of this to libfaim, mostly im.c | |
151 */ | |
4738 | 152 struct buddyinfo { |
153 gboolean typingnot; | |
6292 | 154 gchar *availmsg; |
6857 | 155 fu32_t ipaddr; |
5836 | 156 |
157 unsigned long ico_me_len; | |
158 unsigned long ico_me_csum; | |
159 time_t ico_me_time; | |
160 gboolean ico_informed; | |
4738 | 161 |
162 unsigned long ico_len; | |
163 unsigned long ico_csum; | |
164 time_t ico_time; | |
165 gboolean ico_need; | |
2086 | 166 }; |
167 | |
4230 | 168 struct name_data { |
5575 | 169 GaimConnection *gc; |
4230 | 170 gchar *name; |
3453 | 171 gchar *nick; |
3141 | 172 }; |
173 | |
5129 | 174 static char *msgerrreason[] = { |
175 N_("Invalid error"), | |
176 N_("Invalid SNAC"), | |
177 N_("Rate to host"), | |
178 N_("Rate to client"), | |
179 N_("Not logged in"), | |
180 N_("Service unavailable"), | |
181 N_("Service not defined"), | |
182 N_("Obsolete SNAC"), | |
183 N_("Not supported by host"), | |
184 N_("Not supported by client"), | |
185 N_("Refused by client"), | |
186 N_("Reply too big"), | |
187 N_("Responses lost"), | |
188 N_("Request denied"), | |
189 N_("Busted SNAC payload"), | |
190 N_("Insufficient rights"), | |
191 N_("In local permit/deny"), | |
192 N_("Too evil (sender)"), | |
193 N_("Too evil (receiver)"), | |
194 N_("User temporarily unavailable"), | |
195 N_("No match"), | |
196 N_("List overflow"), | |
197 N_("Request ambiguous"), | |
198 N_("Queue full"), | |
199 N_("Not while on AOL") | |
200 }; | |
201 static int msgerrreasonlen = 25; | |
202 | |
203 /* All the libfaim->gaim callback functions */ | |
204 static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); | |
205 static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); | |
206 static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); | |
207 static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); | |
208 static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); | |
209 static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); | |
210 static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); | |
211 static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); | |
212 static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); | |
213 static int gaim_parse_clientauto (aim_session_t *, aim_frame_t *, ...); | |
7011 | 214 static int gaim_parse_userinfo (aim_session_t *, aim_frame_t *, ...); |
5129 | 215 static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); |
216 static int gaim_chatnav_info (aim_session_t *, aim_frame_t *, ...); | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
217 static int gaim_conv_chat_join (aim_session_t *, aim_frame_t *, ...); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
218 static int gaim_conv_chat_leave (aim_session_t *, aim_frame_t *, ...); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
219 static int gaim_conv_chat_info_update (aim_session_t *, aim_frame_t *, ...); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
220 static int gaim_conv_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); |
5129 | 221 static int gaim_email_parseupdate(aim_session_t *, aim_frame_t *, ...); |
222 static int gaim_icon_error (aim_session_t *, aim_frame_t *, ...); | |
223 static int gaim_icon_parseicon (aim_session_t *, aim_frame_t *, ...); | |
5844 | 224 static int oscar_icon_req (aim_session_t *, aim_frame_t *, ...); |
5129 | 225 static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); |
226 static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); | |
227 static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); | |
228 static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); | |
229 static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); | |
230 static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); | |
231 static int gaim_connerr (aim_session_t *, aim_frame_t *, ...); | |
232 static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); | |
233 static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); | |
234 static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); | |
235 static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); | |
236 static int conninitdone_email (aim_session_t *, aim_frame_t *, ...); | |
237 static int conninitdone_icon (aim_session_t *, aim_frame_t *, ...); | |
238 static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); | |
239 static int gaim_parse_mtn (aim_session_t *, aim_frame_t *, ...); | |
240 static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); | |
241 static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); | |
242 static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); | |
243 static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); | |
244 static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); | |
245 static int gaim_memrequest (aim_session_t *, aim_frame_t *, ...); | |
246 static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); | |
247 static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); | |
248 static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); | |
249 static int gaim_icqalias (aim_session_t *, aim_frame_t *, ...); | |
250 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); | |
251 static int gaim_popup (aim_session_t *, aim_frame_t *, ...); | |
252 #ifndef NOSSI | |
253 static int gaim_ssi_parseerr (aim_session_t *, aim_frame_t *, ...); | |
254 static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); | |
255 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); | |
256 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); | |
257 static int gaim_ssi_authgiven (aim_session_t *, aim_frame_t *, ...); | |
258 static int gaim_ssi_authrequest (aim_session_t *, aim_frame_t *, ...); | |
259 static int gaim_ssi_authreply (aim_session_t *, aim_frame_t *, ...); | |
260 static int gaim_ssi_gotadded (aim_session_t *, aim_frame_t *, ...); | |
261 #endif | |
262 | |
263 /* for DirectIM/image transfer */ | |
264 static int gaim_odc_initiate (aim_session_t *, aim_frame_t *, ...); | |
265 static int gaim_odc_incoming (aim_session_t *, aim_frame_t *, ...); | |
266 static int gaim_odc_typing (aim_session_t *, aim_frame_t *, ...); | |
6982 | 267 static int gaim_odc_update_ui (aim_session_t *, aim_frame_t *, ...); |
5129 | 268 |
269 /* for file transfer */ | |
270 static int oscar_sendfile_estblsh(aim_session_t *, aim_frame_t *, ...); | |
271 static int oscar_sendfile_prompt (aim_session_t *, aim_frame_t *, ...); | |
272 static int oscar_sendfile_ack (aim_session_t *, aim_frame_t *, ...); | |
273 static int oscar_sendfile_done (aim_session_t *, aim_frame_t *, ...); | |
274 | |
275 /* for icons */ | |
276 static gboolean gaim_icon_timerfunc(gpointer data); | |
277 | |
5306 | 278 /* prpl actions - remove this at some point */ |
5954 | 279 static void oscar_set_info(GaimConnection *gc, const char *text); |
5306 | 280 |
5836 | 281 static void oscar_free_name_data(struct name_data *data) { |
4230 | 282 g_free(data->name); |
283 g_free(data->nick); | |
284 g_free(data); | |
285 } | |
286 | |
5836 | 287 static void oscar_free_buddyinfo(void *data) { |
288 struct buddyinfo *bi = data; | |
6292 | 289 g_free(bi->availmsg); |
5836 | 290 g_free(bi); |
291 } | |
292 | |
5129 | 293 static fu32_t oscar_encoding_check(const char *utf8) |
294 { | |
295 int i = 0; | |
296 fu32_t encodingflag = 0; | |
297 | |
298 /* Determine how we can send this message. Per the warnings elsewhere | |
299 * in this file, these little checks determine the simplest encoding | |
300 * we can use for a given message send using it. */ | |
301 while (utf8[i]) { | |
302 if ((unsigned char)utf8[i] > 0x7f) { | |
303 /* not ASCII! */ | |
304 encodingflag = AIM_IMFLAGS_ISO_8859_1; | |
305 break; | |
306 } | |
307 i++; | |
308 } | |
309 while (utf8[i]) { | |
310 /* ISO-8859-1 is 0x00-0xbf in the first byte | |
311 * followed by 0xc0-0xc3 in the second */ | |
312 if ((unsigned char)utf8[i] < 0x80) { | |
313 i++; | |
314 continue; | |
315 } else if (((unsigned char)utf8[i] & 0xfc) == 0xc0 && | |
316 ((unsigned char)utf8[i + 1] & 0xc0) == 0x80) { | |
317 i += 2; | |
318 continue; | |
319 } | |
320 encodingflag = AIM_IMFLAGS_UNICODE; | |
321 break; | |
322 } | |
323 | |
324 return encodingflag; | |
325 } | |
326 | |
327 static fu32_t oscar_encoding_parse(const char *enc) | |
328 { | |
329 char *charset; | |
330 | |
331 /* If anything goes wrong, fall back on ASCII and print a message */ | |
332 if (enc == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
333 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
334 "Encoding was null, that's odd\n"); |
5129 | 335 return 0; |
336 } | |
337 charset = strstr(enc, "charset="); | |
338 if (charset == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
339 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
340 "No charset specified for info, assuming ASCII\n"); |
5129 | 341 return 0; |
342 } | |
343 charset += 8; | |
344 if (!strcmp(charset, "\"us-ascii\"") || !strcmp(charset, "\"utf-8\"")) { | |
345 /* UTF-8 is our native charset, ASCII is a proper subset */ | |
346 return 0; | |
347 } else if (!strcmp(charset, "\"iso-8859-1\"")) { | |
348 return AIM_IMFLAGS_ISO_8859_1; | |
349 } else if (!strcmp(charset, "\"unicode-2-0\"")) { | |
350 return AIM_IMFLAGS_UNICODE; | |
351 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
352 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
353 "Unrecognized character set '%s', using ASCII\n", charset); |
5129 | 354 return 0; |
355 } | |
356 } | |
357 | |
358 gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen) | |
359 { | |
360 gchar *utf8 = NULL; | |
361 int flags = oscar_encoding_parse(encoding); | |
362 | |
363 switch (flags) { | |
364 case 0: | |
365 utf8 = g_strndup(text, textlen); | |
366 break; | |
367 case AIM_IMFLAGS_ISO_8859_1: | |
368 utf8 = g_convert(text, textlen, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); | |
369 break; | |
370 case AIM_IMFLAGS_UNICODE: | |
371 utf8 = g_convert(text, textlen, "UTF-8", "UCS-2BE", NULL, NULL, NULL); | |
372 break; | |
373 } | |
374 | |
375 return utf8; | |
376 } | |
377 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
378 static struct direct_im *find_direct_im(struct oscar_data *od, const char *who) { |
2086 | 379 GSList *d = od->direct_ims; |
380 struct direct_im *m = NULL; | |
381 | |
382 while (d) { | |
383 m = (struct direct_im *)d->data; | |
4355 | 384 if (!aim_sncmp(who, m->name)) |
4269 | 385 return m; |
2086 | 386 d = d->next; |
387 } | |
388 | |
4269 | 389 return NULL; |
2086 | 390 } |
391 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
392 static char *extract_name(const char *name) { |
4121 | 393 char *tmp, *x; |
2086 | 394 int i, j; |
4120 | 395 |
396 if (!name) | |
4121 | 397 return NULL; |
398 | |
4120 | 399 x = strchr(name, '-'); |
4121 | 400 |
2086 | 401 if (!x) return NULL; |
402 x = strchr(++x, '-'); | |
403 if (!x) return NULL; | |
404 tmp = g_strdup(++x); | |
405 | |
406 for (i = 0, j = 0; x[i]; i++) { | |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
407 char hex[3]; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
408 if (x[i] != '%') { |
2086 | 409 tmp[j++] = x[i]; |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
410 continue; |
2086 | 411 } |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
412 strncpy(hex, x + ++i, 2); hex[2] = 0; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
413 i++; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
414 tmp[j++] = strtol(hex, NULL, 16); |
2086 | 415 } |
416 | |
417 tmp[j] = 0; | |
418 return tmp; | |
419 } | |
420 | |
5575 | 421 static struct chat_connection *find_oscar_chat(GaimConnection *gc, int id) { |
2086 | 422 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; |
423 struct chat_connection *c = NULL; | |
424 | |
425 while (g) { | |
426 c = (struct chat_connection *)g->data; | |
427 if (c->id == id) | |
428 break; | |
429 g = g->next; | |
430 c = NULL; | |
431 } | |
432 | |
433 return c; | |
434 } | |
435 | |
5575 | 436 static struct chat_connection *find_oscar_chat_by_conn(GaimConnection *gc, |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
437 aim_conn_t *conn) { |
2086 | 438 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; |
439 struct chat_connection *c = NULL; | |
440 | |
441 while (g) { | |
442 c = (struct chat_connection *)g->data; | |
443 if (c->conn == conn) | |
444 break; | |
445 g = g->next; | |
446 c = NULL; | |
447 } | |
448 | |
449 return c; | |
450 } | |
451 | |
4617 | 452 static void gaim_odc_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
5575 | 453 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
454 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5679 | 455 GaimConversation *cnv; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
456 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
457 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
458 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
459 |
4617 | 460 sn = g_strdup(aim_odc_getsn(conn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
461 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
462 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
463 "%s disconnected Direct IM.\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
464 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
465 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
466 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
467 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
468 |
3008 | 469 if (dim->connected) |
470 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
471 else | |
472 g_snprintf(buf, sizeof buf, _("Direct IM with %s failed"), sn); | |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
473 |
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
474 cnv = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
475 if (cnv) |
6982 | 476 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4358
diff
changeset
|
477 |
5579 | 478 gaim_conversation_update_progress(cnv, 0); |
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 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
|
481 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
482 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
483 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
484 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
485 |
4617 | 486 static void oscar_callback(gpointer data, gint source, GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
487 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
488 aim_session_t *sess = aim_conn_getsess(conn); |
5575 | 489 GaimConnection *gc = sess ? sess->aux_data : NULL; |
4617 | 490 struct oscar_data *od; |
2086 | 491 |
492 if (!gc) { | |
493 /* 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
|
494 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
495 "oscar callback for closed connection (1).\n"); |
2086 | 496 return; |
497 } | |
498 | |
4617 | 499 od = (struct oscar_data *)gc->proto_data; |
2086 | 500 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
501 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 502 /* oh boy. this is probably bad. i guess the only thing we |
503 * can really do is return? */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
504 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
505 "oscar callback for closed connection (2).\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
506 gaim_debug(GAIM_DEBUG_MISC, "oscar", "gc = %p\n", gc); |
2086 | 507 return; |
508 } | |
509 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
510 if (condition & GAIM_INPUT_READ) { |
4617 | 511 if (conn->type == AIM_CONN_TYPE_LISTENER) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
512 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
513 "got information on rendezvous listener\n"); |
4617 | 514 if (aim_handlerendconnect(od->sess, conn) < 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
515 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
516 "connection error (rendezvous listener)\n"); |
4617 | 517 aim_conn_kill(od->sess, &conn); |
2086 | 518 } |
519 } else { | |
4617 | 520 if (aim_get_command(od->sess, conn) >= 0) { |
521 aim_rxdispatch(od->sess); | |
6029 | 522 if (od->killme) { |
523 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "Waiting to be destroyed\n"); | |
524 return; | |
525 } | |
2086 | 526 } else { |
527 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
4617 | 528 !(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) { |
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 "major connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
531 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 532 } else if (conn->type == AIM_CONN_TYPE_CHAT) { |
533 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
5420 | 534 char *buf; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
535 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
536 "disconnected from chat room %s\n", c->name); |
2086 | 537 c->conn = NULL; |
538 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
539 gaim_input_remove(c->inpa); |
2086 | 540 c->inpa = 0; |
541 c->fd = -1; | |
4617 | 542 aim_conn_kill(od->sess, &conn); |
5420 | 543 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
|
544 gaim_notify_error(gc, NULL, buf, NULL); |
5420 | 545 g_free(buf); |
2086 | 546 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
4617 | 547 if (od->cnpa > 0) |
548 gaim_input_remove(od->cnpa); | |
549 od->cnpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
550 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
551 "removing chatnav input watcher\n"); |
4617 | 552 while (od->create_rooms) { |
553 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
554 g_free(cr->name); |
4617 | 555 od->create_rooms = |
556 g_slist_remove(od->create_rooms, cr); | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
557 g_free(cr); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
558 gaim_notify_error(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
559 _("Chat is currently unavailable"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
560 NULL); |
2086 | 561 } |
4617 | 562 aim_conn_kill(od->sess, &conn); |
2086 | 563 } else if (conn->type == AIM_CONN_TYPE_AUTH) { |
4617 | 564 if (od->paspa > 0) |
565 gaim_input_remove(od->paspa); | |
566 od->paspa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
567 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
568 "removing authconn input watcher\n"); |
4617 | 569 aim_conn_kill(od->sess, &conn); |
3694 | 570 } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
4617 | 571 if (od->emlpa > 0) |
572 gaim_input_remove(od->emlpa); | |
573 od->emlpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
574 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
575 "removing email input watcher\n"); |
4617 | 576 aim_conn_kill(od->sess, &conn); |
4804 | 577 } else if (conn->type == AIM_CONN_TYPE_ICON) { |
578 if (od->icopa > 0) | |
579 gaim_input_remove(od->icopa); | |
580 od->icopa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
581 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
582 "removing icon input watcher\n"); |
4804 | 583 aim_conn_kill(od->sess, &conn); |
2086 | 584 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
585 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
4617 | 586 gaim_odc_disconnect(od->sess, conn); |
587 aim_conn_kill(od->sess, &conn); | |
2086 | 588 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
589 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
590 "holy crap! generic connection error! %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
591 conn->type); |
4617 | 592 aim_conn_kill(od->sess, &conn); |
2086 | 593 } |
594 } | |
595 } | |
596 } | |
597 } | |
598 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
599 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
2086 | 600 char *s = g_strdup_vprintf(format, va); |
601 char buf[256]; | |
602 char *t; | |
5575 | 603 GaimConnection *gc = sess->aux_data; |
604 | |
605 g_snprintf(buf, sizeof(buf), "%s %d: ", gaim_account_get_username(gaim_connection_get_account(gc)), level); | |
2086 | 606 t = g_strconcat(buf, s, NULL); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
607 gaim_debug(GAIM_DEBUG_INFO, "oscar", t); |
2086 | 608 if (t[strlen(t)-1] != '\n') |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
609 gaim_debug(GAIM_DEBUG_INFO, NULL, "\n"); |
2086 | 610 g_free(t); |
611 g_free(s); | |
612 } | |
613 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
614 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 615 { |
5575 | 616 GaimConnection *gc = data; |
4617 | 617 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
618 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
619 aim_conn_t *conn; |
2086 | 620 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
621 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 622 close(source); |
623 return; | |
624 } | |
625 | |
4617 | 626 od = gc->proto_data; |
627 sess = od->sess; | |
2086 | 628 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 629 |
630 conn->fd = source; | |
2086 | 631 |
632 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
633 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 634 return; |
635 } | |
636 | |
637 aim_conn_completeconnect(sess, conn); | |
4617 | 638 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
|
639 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
640 "Password sent, waiting for response\n"); |
2086 | 641 } |
642 | |
5575 | 643 static void oscar_login(GaimAccount *account) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
644 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
645 aim_conn_t *conn; |
2086 | 646 char buf[256]; |
5575 | 647 GaimConnection *gc = gaim_account_get_connection(account); |
4617 | 648 struct oscar_data *od = gc->proto_data = g_new0(struct oscar_data, 1); |
2086 | 649 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
650 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
|
651 |
5575 | 652 if (isdigit(*(gaim_account_get_username(account)))) { |
4617 | 653 od->icq = TRUE; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
654 } else { |
6622 | 655 gc->flags |= GAIM_CONNECTION_HTML; |
656 gc->flags |= GAIM_CONNECTION_AUTO_RESP; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
657 } |
5836 | 658 od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, oscar_free_buddyinfo); |
2086 | 659 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
660 sess = g_new0(aim_session_t, 1); |
2086 | 661 |
662 aim_session_init(sess, AIM_SESS_FLAGS_NONBLOCKCONNECT, 0); | |
663 aim_setdebuggingcb(sess, oscar_debug); | |
664 | |
665 /* we need an immediate queue because we don't use a while-loop to | |
666 * see if things need to be sent. */ | |
667 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); | |
4617 | 668 od->sess = sess; |
2086 | 669 sess->aux_data = gc; |
670 | |
671 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
672 if (conn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
673 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
674 "internal connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
675 gaim_connection_error(gc, _("Unable to login to AIM")); |
2086 | 676 return; |
677 } | |
678 | |
5575 | 679 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gaim_account_get_username(account)); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
680 gaim_connection_update_progress(gc, buf, 2, 5); |
2086 | 681 |
4649 | 682 aim_conn_addhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2086 | 683 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); |
684 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
685 | |
686 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
687 if (gaim_proxy_connect(account, gaim_account_get_string(account, "server", FAIM_LOGIN_SERVER), |
5575 | 688 gaim_account_get_int(account, "port", FAIM_LOGIN_PORT), |
689 oscar_login_connect, gc) < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
690 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 691 return; |
692 } | |
5575 | 693 aim_request_login(sess, conn, gaim_account_get_username(account)); |
694 } | |
695 | |
696 static void oscar_close(GaimConnection *gc) { | |
4617 | 697 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
698 | |
699 while (od->oscar_chats) { | |
700 struct chat_connection *n = od->oscar_chats->data; | |
2086 | 701 if (n->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
702 gaim_input_remove(n->inpa); |
2086 | 703 g_free(n->name); |
704 g_free(n->show); | |
4617 | 705 od->oscar_chats = g_slist_remove(od->oscar_chats, n); |
2086 | 706 g_free(n); |
707 } | |
4617 | 708 while (od->direct_ims) { |
709 struct direct_im *n = od->direct_ims->data; | |
2086 | 710 if (n->watcher > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
711 gaim_input_remove(n->watcher); |
4617 | 712 od->direct_ims = g_slist_remove(od->direct_ims, n); |
2086 | 713 g_free(n); |
714 } | |
4617 | 715 /* BBB */ |
716 while (od->file_transfers) { | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
717 GaimXfer *xfer; |
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
718 xfer = (GaimXfer *)od->file_transfers->data; |
4617 | 719 gaim_xfer_destroy(xfer); |
3630 | 720 } |
4804 | 721 while (od->requesticon) { |
722 char *sn = od->requesticon->data; | |
723 od->requesticon = g_slist_remove(od->requesticon, sn); | |
724 free(sn); | |
725 } | |
4738 | 726 g_hash_table_destroy(od->buddyinfo); |
4617 | 727 while (od->create_rooms) { |
728 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
729 g_free(cr->name); |
4617 | 730 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
731 g_free(cr); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
732 } |
4617 | 733 if (od->email) |
734 g_free(od->email); | |
735 if (od->newp) | |
736 g_free(od->newp); | |
737 if (od->oldp) | |
738 g_free(od->oldp); | |
2086 | 739 if (gc->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
740 gaim_input_remove(gc->inpa); |
4617 | 741 if (od->cnpa > 0) |
742 gaim_input_remove(od->cnpa); | |
743 if (od->paspa > 0) | |
744 gaim_input_remove(od->paspa); | |
745 if (od->emlpa > 0) | |
746 gaim_input_remove(od->emlpa); | |
4804 | 747 if (od->icopa > 0) |
748 gaim_input_remove(od->icopa); | |
6907 | 749 if (od->icontimer > 0) |
4832 | 750 g_source_remove(od->icontimer); |
5968 | 751 if (od->getblisttimer) |
752 g_source_remove(od->getblisttimer); | |
4617 | 753 aim_session_kill(od->sess); |
754 g_free(od->sess); | |
755 od->sess = NULL; | |
2086 | 756 g_free(gc->proto_data); |
757 gc->proto_data = NULL; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
758 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Signed off.\n"); |
2086 | 759 } |
760 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
761 static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 762 GaimConnection *gc = data; |
4617 | 763 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
764 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
765 aim_conn_t *bosconn; |
2086 | 766 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
767 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 768 close(source); |
769 return; | |
770 } | |
771 | |
4617 | 772 od = gc->proto_data; |
773 sess = od->sess; | |
774 bosconn = od->conn; | |
4366 | 775 bosconn->fd = source; |
2086 | 776 |
777 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
778 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 779 return; |
780 } | |
781 | |
782 aim_conn_completeconnect(sess, bosconn); | |
4617 | 783 gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, oscar_callback, bosconn); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
784 gaim_connection_update_progress(gc, |
5577
7ed9999926af
[gaim-migrate @ 5981]
Christian Hammond <chipx86@chipx86.com>
parents:
5576
diff
changeset
|
785 _("Connection established, cookie sent"), 4, 5); |
2086 | 786 } |
787 | |
4617 | 788 /* BBB */ |
4656 | 789 /* |
790 * This little area in oscar.c is the nexus of file transfer code, | |
791 * so I wrote a little explanation of what happens. I am such a | |
792 * ninja. | |
793 * | |
794 * The series of events for a file send is: | |
795 * -Create xfer and call gaim_xfer_request (this happens in oscar_ask_sendfile) | |
796 * -User chooses a file and oscar_xfer_init is called. It establishs a | |
797 * listening socket, then asks the remote user to connect to us (and | |
798 * gives them the file name, port, IP, etc.) | |
799 * -They connect to us and we send them an AIM_CB_OFT_PROMPT (this happens | |
800 * in oscar_sendfile_estblsh) | |
801 * -They send us an AIM_CB_OFT_ACK and then we start sending data | |
802 * -When we finish, they send us an AIM_CB_OFT_DONE and they close the | |
803 * connection. | |
804 * -We get drunk because file transfer kicks ass. | |
805 * | |
806 * The series of events for a file receive is: | |
807 * -Create xfer and call gaim_xfer request (this happens in incomingim_chan2) | |
808 * -Gaim user selects file to name and location to save file to and | |
809 * oscar_xfer_init is called | |
810 * -It connects to the remote user using the IP they gave us earlier | |
811 * -After connecting, they send us an AIM_CB_OFT_PROMPT. In reply, we send | |
812 * them an AIM_CB_OFT_ACK. | |
813 * -They begin to send us lots of raw data. | |
814 * -When they finish sending data we send an AIM_CB_OFT_DONE and then close | |
815 * the connectionn. | |
816 */ | |
817 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition); | |
818 | |
819 /* XXX - This function is pretty ugly */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
820 static void oscar_xfer_init(GaimXfer *xfer) |
4656 | 821 { |
5146 | 822 struct aim_oft_info *oft_info = xfer->data; |
5575 | 823 GaimConnection *gc = oft_info->sess->aux_data; |
5146 | 824 struct oscar_data *od = gc->proto_data; |
4656 | 825 |
826 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
827 int i; | |
828 | |
829 xfer->filename = g_path_get_basename(xfer->local_filename); | |
5146 | 830 strncpy(oft_info->fh.name, xfer->filename, 64); |
831 oft_info->fh.totsize = gaim_xfer_get_size(xfer); | |
832 oft_info->fh.size = gaim_xfer_get_size(xfer); | |
833 oft_info->fh.checksum = aim_oft_checksum_file(xfer->local_filename); | |
4656 | 834 |
835 /* | |
5146 | 836 * First try the port specified earlier (5190). If that fails, |
837 * increment by 1 and try again. | |
4656 | 838 */ |
5146 | 839 aim_sendfile_listen(od->sess, oft_info); |
840 for (i=0; (i<5 && !oft_info->conn); i++) { | |
841 xfer->local_port = oft_info->port = oft_info->port + 1; | |
842 aim_sendfile_listen(od->sess, oft_info); | |
4656 | 843 } |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
844 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
845 "port is %d, ip is %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
846 xfer->local_port, oft_info->clientip); |
5146 | 847 if (oft_info->conn) { |
848 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
849 aim_im_sendch2_sendfile_ask(od->sess, oft_info); | |
850 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ESTABLISHED, oscar_sendfile_estblsh, 0); | |
4656 | 851 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
852 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
853 _("Unable to establish listener socket.")); |
4656 | 854 /* 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
|
855 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 856 } |
857 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 858 oft_info->conn = aim_newconn(od->sess, AIM_CONN_TYPE_RENDEZVOUS, NULL); |
859 if (oft_info->conn) { | |
860 oft_info->conn->subtype = AIM_CONN_SUBTYPE_OFT_SENDFILE; | |
861 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_PROMPT, oscar_sendfile_prompt, 0); | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
862 oft_info->conn->fd = xfer->fd = gaim_proxy_connect(gaim_connection_get_account(gc), xfer->remote_ip, xfer->remote_port, |
5575 | 863 oscar_sendfile_connected, xfer); |
4656 | 864 if (xfer->fd == -1) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
865 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
866 _("Unable to establish file descriptor.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
867 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 868 } |
869 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
870 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
871 _("Unable to create new connection.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
872 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 873 /* Try a different port? Ask them to connect to us? */ |
874 } | |
875 | |
876 } | |
877 } | |
878 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
879 static void oscar_xfer_start(GaimXfer *xfer) |
4656 | 880 { |
5146 | 881 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
882 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_start\n"); |
4656 | 883 /* I'm pretty sure we don't need to do jack here. Nor Jill. */ |
884 } | |
885 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
886 static void oscar_xfer_end(GaimXfer *xfer) |
4656 | 887 { |
5146 | 888 struct aim_oft_info *oft_info = xfer->data; |
5575 | 889 GaimConnection *gc = oft_info->sess->aux_data; |
5146 | 890 struct oscar_data *od = gc->proto_data; |
4656 | 891 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
892 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_end\n"); |
5146 | 893 |
894 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
895 oft_info->fh.nrecvd = gaim_xfer_get_bytes_sent(xfer); | |
896 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_DONE, oft_info); | |
897 } | |
898 | |
899 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
900 aim_oft_destroyinfo(oft_info); | |
4656 | 901 xfer->data = NULL; |
5146 | 902 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 903 } |
904 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
905 static void oscar_xfer_cancel_send(GaimXfer *xfer) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
906 { |
5146 | 907 struct aim_oft_info *oft_info = xfer->data; |
5575 | 908 GaimConnection *gc = oft_info->sess->aux_data; |
5146 | 909 struct oscar_data *od = gc->proto_data; |
4763 | 910 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
911 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
912 "AAA - in oscar_xfer_cancel_send\n"); |
5146 | 913 |
914 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
915 | |
916 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
917 aim_oft_destroyinfo(oft_info); | |
4763 | 918 xfer->data = NULL; |
5146 | 919 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
920 } |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
921 |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
922 static void oscar_xfer_cancel_recv(GaimXfer *xfer) |
4656 | 923 { |
5146 | 924 struct aim_oft_info *oft_info = xfer->data; |
5575 | 925 GaimConnection *gc = oft_info->sess->aux_data; |
5146 | 926 struct oscar_data *od = gc->proto_data; |
4656 | 927 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
928 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
929 "AAA - in oscar_xfer_cancel_recv\n"); |
5146 | 930 |
931 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
932 | |
933 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
934 aim_oft_destroyinfo(oft_info); | |
4656 | 935 xfer->data = NULL; |
5146 | 936 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 937 } |
938 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
939 static void oscar_xfer_ack(GaimXfer *xfer, const char *buffer, size_t size) |
4656 | 940 { |
5146 | 941 struct aim_oft_info *oft_info = xfer->data; |
4656 | 942 |
943 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
944 /* | |
945 * If we're done sending, intercept the socket from the core ft code | |
946 * and wait for the other guy to send the "done" OFT packet. | |
947 */ | |
948 if (gaim_xfer_get_bytes_remaining(xfer) <= 0) { | |
949 gaim_input_remove(xfer->watcher); | |
5146 | 950 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); |
4656 | 951 xfer->fd = 0; |
952 gaim_xfer_set_completed(xfer, TRUE); | |
953 } | |
954 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 955 /* Update our rolling checksum. Like Walmart, yo. */ |
956 oft_info->fh.recvcsum = aim_oft_checksum_chunk(buffer, size, oft_info->fh.recvcsum); | |
4656 | 957 } |
958 } | |
959 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
960 static GaimXfer *oscar_find_xfer_by_cookie(GSList *fts, const char *ck) |
4656 | 961 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
962 GaimXfer *xfer; |
5146 | 963 struct aim_oft_info *oft_info; |
4656 | 964 |
965 while (fts) { | |
966 xfer = fts->data; | |
5146 | 967 oft_info = xfer->data; |
968 | |
969 if (oft_info && !strcmp(ck, oft_info->cookie)) | |
4656 | 970 return xfer; |
971 | |
972 fts = g_slist_next(fts); | |
973 } | |
974 | |
975 return NULL; | |
976 } | |
977 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
978 static GaimXfer *oscar_find_xfer_by_conn(GSList *fts, aim_conn_t *conn) |
4656 | 979 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
980 GaimXfer *xfer; |
5146 | 981 struct aim_oft_info *oft_info; |
4656 | 982 |
983 while (fts) { | |
984 xfer = fts->data; | |
5146 | 985 oft_info = xfer->data; |
986 | |
987 if (oft_info && (conn == oft_info->conn)) | |
4656 | 988 return xfer; |
989 | |
990 fts = g_slist_next(fts); | |
991 } | |
992 | |
993 return NULL; | |
994 } | |
995 | |
5575 | 996 static void oscar_ask_sendfile(GaimConnection *gc, const char *destsn) { |
3630 | 997 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
998 GaimXfer *xfer; |
5146 | 999 struct aim_oft_info *oft_info; |
3752 | 1000 |
4617 | 1001 /* You want to send a file to someone else, you're so generous */ |
1002 | |
1003 /* Build the file transfer handle */ | |
5575 | 1004 xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, destsn); |
4617 | 1005 xfer->local_port = 5190; |
1006 | |
5146 | 1007 /* Create the oscar-specific data */ |
1008 oft_info = aim_oft_createinfo(od->sess, NULL, destsn, xfer->local_ip, xfer->local_port, 0, 0, NULL); | |
1009 xfer->data = oft_info; | |
1010 | |
4617 | 1011 /* Setup our I/O op functions */ |
1012 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
1013 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
1014 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1015 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1016 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4656 | 1017 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
4617 | 1018 |
1019 /* Keep track of this transfer for later */ | |
1020 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
1021 | |
1022 /* Now perform the request */ | |
1023 gaim_xfer_request(xfer); | |
3630 | 1024 } |
1025 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1026 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
6029 | 1027 GaimConnection *gc = sess->aux_data; |
1028 struct oscar_data *od = gc->proto_data; | |
1029 GaimAccount *account = gc->account; | |
1030 aim_conn_t *bosconn; | |
1031 char *host; int port; | |
1032 int i, rc; | |
2086 | 1033 va_list ap; |
2704 | 1034 struct aim_authresp_info *info; |
6029 | 1035 |
5575 | 1036 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1037 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1038 va_start(ap, fr); |
2704 | 1039 info = va_arg(ap, struct aim_authresp_info *); |
2086 | 1040 va_end(ap); |
1041 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1042 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1043 "inside auth_resp (Screen name: %s)\n", info->sn); |
2704 | 1044 |
4293 | 1045 if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { |
4056 | 1046 char buf[256]; |
2704 | 1047 switch (info->errorcode) { |
2086 | 1048 case 0x05: |
1049 /* Incorrect nick/password */ | |
6498 | 1050 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1051 gaim_connection_error(gc, _("Incorrect nickname or password.")); |
2086 | 1052 break; |
1053 case 0x11: | |
1054 /* Suspended account */ | |
6498 | 1055 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1056 gaim_connection_error(gc, _("Your account is currently suspended.")); |
2086 | 1057 break; |
3498 | 1058 case 0x14: |
1059 /* service temporarily unavailable */ | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1060 gaim_connection_error(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); |
3498 | 1061 break; |
2086 | 1062 case 0x18: |
1063 /* connecting too frequently */ | |
6498 | 1064 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1065 gaim_connection_error(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.")); |
2086 | 1066 break; |
1067 case 0x1c: | |
1068 /* client too old */ | |
6498 | 1069 gc->wants_to_die = TRUE; |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1070 g_snprintf(buf, sizeof(buf), _("The client version you are using is too old. Please upgrade at %s"), GAIM_WEBSITE); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1071 gaim_connection_error(gc, buf); |
2086 | 1072 break; |
1073 default: | |
6623 | 1074 gaim_connection_error(gc, _("Authentication failed")); |
2086 | 1075 break; |
1076 } | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1077 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1078 "Login Error Code 0x%04hx\n", info->errorcode); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1079 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1080 "Error URL: %s\n", info->errorurl); |
2086 | 1081 od->killme = TRUE; |
1082 return 1; | |
1083 } | |
1084 | |
1085 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1086 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1087 "Reg status: %hu\n", info->regstatus); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1088 |
2704 | 1089 if (info->email) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1090 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email: %s\n", info->email); |
2086 | 1091 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1092 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email is NULL\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1093 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1094 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1095 gaim_debug(GAIM_DEBUG_MISC, "oscar", "BOSIP: %s\n", info->bosip); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1096 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1097 "Closing auth connection...\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1098 aim_conn_kill(sess, &fr->conn); |
2086 | 1099 |
1100 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
1101 if (bosconn == NULL) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1102 gaim_connection_error(gc, _("Internal Error")); |
2086 | 1103 od->killme = TRUE; |
1104 return 0; | |
1105 } | |
1106 | |
4649 | 1107 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1108 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
2086 | 1109 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
1110 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
1111 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
2993 | 1112 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
2086 | 1113 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
1114 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
1115 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
1116 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
1117 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
1118 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
3212 | 1119 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
2086 | 1120 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
1121 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
1122 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
1123 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
1124 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
3595 | 1125 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
7011 | 1126 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_userinfo, 0); |
2086 | 1127 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); |
1128 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
|
1129 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 1130 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
1131 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
1132 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
1133 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1134 aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
5844 | 1135 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0021, oscar_icon_req,0); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
1136 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
|
1137 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
|
1138 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
4759 | 1139 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS, gaim_icqalias, 0); |
4624 | 1140 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO, gaim_icqinfo, 0); |
4230 | 1141 #ifndef NOSSI |
4642 | 1142 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ERROR, gaim_ssi_parseerr, 0); |
2991 | 1143 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
1144 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
1145 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
4230 | 1146 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); |
1147 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTH, gaim_ssi_authgiven, 0); | |
1148 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREQ, gaim_ssi_authrequest, 0); | |
1149 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREP, gaim_ssi_authreply, 0); | |
1150 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADDED, gaim_ssi_gotadded, 0); | |
1151 #endif | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1152 |
2086 | 1153 ((struct oscar_data *)gc->proto_data)->conn = bosconn; |
2704 | 1154 for (i = 0; i < (int)strlen(info->bosip); i++) { |
1155 if (info->bosip[i] == ':') { | |
1156 port = atoi(&(info->bosip[i+1])); | |
2086 | 1157 break; |
1158 } | |
1159 } | |
2704 | 1160 host = g_strndup(info->bosip, i); |
2086 | 1161 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1162 rc = gaim_proxy_connect(gc->account, host, port, oscar_bos_connect, gc); |
2086 | 1163 g_free(host); |
4366 | 1164 if (rc < 0) { |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1165 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 1166 od->killme = TRUE; |
1167 return 0; | |
1168 } | |
4293 | 1169 aim_sendcookie(sess, bosconn, info->cookielen, info->cookie); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1170 gaim_input_remove(gc->inpa); |
2704 | 1171 |
2086 | 1172 return 1; |
1173 } | |
1174 | |
1175 struct pieceofcrap { | |
5575 | 1176 GaimConnection *gc; |
2086 | 1177 unsigned long offset; |
1178 unsigned long len; | |
1179 char *modname; | |
1180 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1181 aim_conn_t *conn; |
2086 | 1182 unsigned int inpa; |
1183 }; | |
1184 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1185 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 1186 { |
1187 struct pieceofcrap *pos = data; | |
1188 struct oscar_data *od = pos->gc->proto_data; | |
1189 char in = '\0'; | |
1190 int x = 0; | |
1191 unsigned char m[17]; | |
1192 | |
1193 while (read(pos->fd, &in, 1) == 1) { | |
1194 if (in == '\n') | |
1195 x++; | |
1196 else if (in != '\r') | |
1197 x = 0; | |
1198 if (x == 2) | |
1199 break; | |
1200 in = '\0'; | |
1201 } | |
1202 if (in != '\n') { | |
4056 | 1203 char buf[256]; |
1204 g_snprintf(buf, sizeof(buf), _("You may be disconnected shortly. You may want to use TOC until " | |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1205 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1206 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1207 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1208 buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1209 gaim_input_remove(pos->inpa); |
2086 | 1210 close(pos->fd); |
1211 g_free(pos); | |
1212 return; | |
1213 } | |
1214 read(pos->fd, m, 16); | |
1215 m[16] = '\0'; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1216 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Sending hash: "); |
2086 | 1217 for (x = 0; x < 16; x++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1218 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx ", (unsigned char)m[x]); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1219 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1220 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1221 gaim_input_remove(pos->inpa); |
2086 | 1222 close(pos->fd); |
1223 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
1224 g_free(pos); | |
1225 } | |
1226 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1227 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1228 struct pieceofcrap *pos = data; |
5420 | 1229 gchar *buf; |
2086 | 1230 |
4366 | 1231 pos->fd = source; |
1232 | |
2086 | 1233 if (source < 0) { |
5420 | 1234 buf = g_strdup_printf(_("You may be disconnected shortly. You may want to use TOC until " |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1235 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1236 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1237 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1238 buf); |
5420 | 1239 g_free(buf); |
2086 | 1240 if (pos->modname) |
1241 g_free(pos->modname); | |
1242 g_free(pos); | |
1243 return; | |
1244 } | |
1245 | |
5420 | 1246 buf = g_strdup_printf("GET " AIMHASHDATA "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", |
2086 | 1247 pos->offset, pos->len, pos->modname ? pos->modname : ""); |
1248 write(pos->fd, buf, strlen(buf)); | |
5420 | 1249 g_free(buf); |
2086 | 1250 if (pos->modname) |
1251 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1252 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 1253 return; |
1254 } | |
1255 | |
1256 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
1257 #define AIM_MAX_FILE_SIZE 98304 | |
1258 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1259 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1260 va_list ap; |
1261 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1262 fu32_t offset, len; |
2086 | 1263 char *modname; |
1264 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1265 va_start(ap, fr); |
4200 | 1266 offset = va_arg(ap, fu32_t); |
1267 len = va_arg(ap, fu32_t); | |
2086 | 1268 modname = va_arg(ap, char *); |
1269 va_end(ap); | |
1270 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1271 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 1272 "offset: %u, len: %u, file: %s\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1273 offset, len, (modname ? modname : "aim.exe")); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1274 |
2086 | 1275 if (len == 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1276 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
|
1277 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 1278 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1279 return 1; | |
1280 } | |
1281 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
1282 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
1283 char *buf; | |
1284 int i = 8; | |
1285 if (modname) | |
1286 i += strlen(modname); | |
1287 buf = g_malloc(i); | |
1288 i = 0; | |
1289 if (modname) { | |
1290 memcpy(buf, modname, strlen(modname)); | |
1291 i += strlen(modname); | |
1292 } | |
1293 buf[i++] = offset & 0xff; | |
1294 buf[i++] = (offset >> 8) & 0xff; | |
1295 buf[i++] = (offset >> 16) & 0xff; | |
1296 buf[i++] = (offset >> 24) & 0xff; | |
1297 buf[i++] = len & 0xff; | |
1298 buf[i++] = (len >> 8) & 0xff; | |
1299 buf[i++] = (len >> 16) & 0xff; | |
1300 buf[i++] = (len >> 24) & 0xff; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1301 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len + offset is invalid, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1302 "hashing request\n"); |
2086 | 1303 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1304 g_free(buf); | |
1305 return 1; | |
1306 } | |
1307 */ | |
1308 | |
1309 pos = g_new0(struct pieceofcrap, 1); | |
1310 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1311 pos->conn = fr->conn; |
2086 | 1312 |
1313 pos->offset = offset; | |
1314 pos->len = len; | |
1315 pos->modname = modname ? g_strdup(modname) : NULL; | |
1316 | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1317 if (gaim_proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) != 0) { |
4056 | 1318 char buf[256]; |
2086 | 1319 if (pos->modname) |
1320 g_free(pos->modname); | |
1321 g_free(pos); | |
4056 | 1322 g_snprintf(buf, sizeof(buf), _("You may be disconnected shortly. You may want to use TOC until " |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1323 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1324 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1325 _("Gaim was Unable to get a valid login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1326 buf); |
2086 | 1327 } |
1328 | |
1329 return 1; | |
1330 } | |
1331 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1332 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1333 GaimConnection *gc = sess->aux_data; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1334 GaimAccount *account = gaim_connection_get_account(gc); |
5575 | 1335 GaimAccount *ac = gaim_connection_get_account(gc); |
4617 | 1336 struct oscar_data *od = gc->proto_data; |
7011 | 1337 va_list ap; |
1338 char *key; | |
2086 | 1339 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1340 va_start(ap, fr); |
2086 | 1341 key = va_arg(ap, char *); |
1342 va_end(ap); | |
1343 | |
4617 | 1344 if (od->icq) { |
3458 | 1345 struct client_info_s info = CLIENTINFO_ICQ_KNOWNGOOD; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1346 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1347 gaim_account_get_password(account), &info, key); |
3458 | 1348 } else { |
1349 #if 0 | |
7253 | 1350 struct client_info_s info = {"gaim", 7, 3, 2003, "us", "en", 0x0004, 0x0000, 0x04b}; |
3458 | 1351 #endif |
1352 struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; | |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1353 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1354 gaim_account_get_password(account), &info, key); |
3458 | 1355 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1356 |
2086 | 1357 return 1; |
1358 } | |
1359 | |
2675 | 1360 static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1361 GaimConnection *gc = sess->aux_data; |
2647 | 1362 struct chat_connection *chatcon; |
1363 static int id = 1; | |
1364 | |
6905 | 1365 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, 0x0001, gaim_parse_genericerr, 0); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
1366 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERJOIN, gaim_conv_chat_join, 0); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
1367 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERLEAVE, gaim_conv_chat_leave, 0); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
1368 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_ROOMINFOUPDATE, gaim_conv_chat_info_update, 0); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
1369 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_conv_chat_incoming_msg, 0); |
2675 | 1370 |
2672 | 1371 aim_clientready(sess, fr->conn); |
2675 | 1372 |
2647 | 1373 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
1374 chatcon->id = id; | |
1375 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
1376 | |
1377 return 1; | |
1378 } | |
1379 | |
2675 | 1380 static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
1381 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1382 aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
2647 | 1383 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
2675 | 1384 |
1385 aim_clientready(sess, fr->conn); | |
1386 | |
1387 aim_chatnav_reqrights(sess, fr->conn); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1388 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1389 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1390 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1391 |
3694 | 1392 static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
1393 | |
1394 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1395 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); | |
1396 | |
1397 aim_email_sendcookies(sess, fr->conn); | |
1398 aim_email_activate(sess, fr->conn); | |
1399 aim_clientready(sess, fr->conn); | |
1400 | |
1401 return 1; | |
1402 } | |
1403 | |
4804 | 1404 static int conninitdone_icon(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1405 GaimConnection *gc = sess->aux_data; |
4804 | 1406 struct oscar_data *od = gc->proto_data; |
1407 | |
1408 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1409 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_ERROR, gaim_icon_error, 0); | |
1410 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_RESPONSE, gaim_icon_parseicon, 0); | |
1411 | |
1412 aim_clientready(sess, fr->conn); | |
1413 | |
4823 | 1414 od->iconconnecting = FALSE; |
1415 | |
4804 | 1416 if (od->icontimer) |
1417 g_source_remove(od->icontimer); | |
1418 od->icontimer = g_timeout_add(100, gaim_icon_timerfunc, gc); | |
1419 | |
1420 return 1; | |
1421 } | |
1422 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1423 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1424 GaimConnection *gc = data; |
4617 | 1425 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1426 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1427 aim_conn_t *tstconn; |
2086 | 1428 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1429 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1430 close(source); |
1431 return; | |
1432 } | |
1433 | |
4617 | 1434 od = gc->proto_data; |
1435 sess = od->sess; | |
2086 | 1436 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); |
4366 | 1437 tstconn->fd = source; |
2086 | 1438 |
1439 if (source < 0) { | |
1440 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1441 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1442 "unable to connect to chatnav server\n"); |
2086 | 1443 return; |
1444 } | |
1445 | |
1446 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1447 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
|
1448 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1449 } |
1450 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1451 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1452 { |
5575 | 1453 GaimConnection *gc = data; |
4617 | 1454 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1455 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1456 aim_conn_t *tstconn; |
2086 | 1457 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1458 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1459 close(source); |
1460 return; | |
1461 } | |
1462 | |
4617 | 1463 od = gc->proto_data; |
1464 sess = od->sess; | |
2086 | 1465 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 1466 tstconn->fd = source; |
2086 | 1467 |
1468 if (source < 0) { | |
1469 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1470 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1471 "unable to connect to authorizer\n"); |
2086 | 1472 return; |
1473 } | |
1474 | |
1475 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1476 od->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
6905 | 1477 gaim_debug(GAIM_DEBUG_INFO, "oscar", "admin: connected\n"); |
2086 | 1478 } |
1479 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1480 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1481 { |
1482 struct chat_connection *ccon = data; | |
5575 | 1483 GaimConnection *gc = ccon->gc; |
4617 | 1484 struct oscar_data *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1485 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1486 aim_conn_t *tstconn; |
2086 | 1487 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1488 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1489 close(source); |
1490 g_free(ccon->show); | |
1491 g_free(ccon->name); | |
1492 g_free(ccon); | |
1493 return; | |
1494 } | |
1495 | |
4617 | 1496 od = gc->proto_data; |
1497 sess = od->sess; | |
2086 | 1498 tstconn = ccon->conn; |
4366 | 1499 tstconn->fd = source; |
2086 | 1500 |
1501 if (source < 0) { | |
1502 aim_conn_kill(sess, &tstconn); | |
1503 g_free(ccon->show); | |
1504 g_free(ccon->name); | |
1505 g_free(ccon); | |
1506 return; | |
1507 } | |
1508 | |
1509 aim_conn_completeconnect(sess, ccon->conn); | |
4617 | 1510 ccon->inpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
1511 od->oscar_chats = g_slist_append(od->oscar_chats, ccon); | |
2086 | 1512 } |
1513 | |
3694 | 1514 static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1515 GaimConnection *gc = data; |
4617 | 1516 struct oscar_data *od; |
3694 | 1517 aim_session_t *sess; |
1518 aim_conn_t *tstconn; | |
1519 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1520 if (!g_list_find(gaim_connections_get_all(), gc)) { |
3694 | 1521 close(source); |
1522 return; | |
1523 } | |
1524 | |
4617 | 1525 od = gc->proto_data; |
1526 sess = od->sess; | |
3694 | 1527 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
4366 | 1528 tstconn->fd = source; |
3694 | 1529 |
1530 if (source < 0) { | |
1531 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1532 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1533 "unable to connect to email server\n"); |
3694 | 1534 return; |
1535 } | |
1536 | |
1537 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1538 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
|
1539 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1540 "email: connected\n"); |
3694 | 1541 } |
1542 | |
4804 | 1543 static void oscar_icon_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1544 GaimConnection *gc = data; |
4804 | 1545 struct oscar_data *od; |
1546 aim_session_t *sess; | |
1547 aim_conn_t *tstconn; | |
1548 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1549 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4804 | 1550 close(source); |
1551 return; | |
1552 } | |
1553 | |
1554 od = gc->proto_data; | |
1555 sess = od->sess; | |
1556 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_ICON); | |
1557 tstconn->fd = source; | |
1558 | |
1559 if (source < 0) { | |
1560 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1561 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1562 "unable to connect to icon server\n"); |
4804 | 1563 return; |
1564 } | |
1565 | |
1566 aim_conn_completeconnect(sess, tstconn); | |
1567 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
|
1568 gaim_debug(GAIM_DEBUG_INFO, "oscar", "icon: connected\n"); |
4804 | 1569 } |
1570 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1571 /* 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
|
1572 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1573 GaimConnection *gc = sess->aux_data; |
1574 GaimAccount *account = gaim_connection_get_account(gc); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1575 aim_conn_t *tstconn; |
4452 | 1576 int i; |
2086 | 1577 char *host; |
1578 int port; | |
4821 | 1579 va_list ap; |
1580 struct aim_redirect_data *redir; | |
2086 | 1581 |
5575 | 1582 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1583 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1584 va_start(ap, fr); |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1585 redir = va_arg(ap, struct aim_redirect_data *); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1586 va_end(ap); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1587 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1588 for (i = 0; i < (int)strlen(redir->ip); i++) { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1589 if (redir->ip[i] == ':') { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1590 port = atoi(&(redir->ip[i+1])); |
2086 | 1591 break; |
1592 } | |
1593 } | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1594 host = g_strndup(redir->ip, i); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1595 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1596 switch(redir->group) { |
2086 | 1597 case 0x7: /* Authorizer */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1598 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1599 "Reconnecting with authorizor...\n"); |
2086 | 1600 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); |
1601 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1602 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1603 "unable to reconnect with authorizer\n"); |
2086 | 1604 g_free(host); |
1605 return 1; | |
1606 } | |
4649 | 1607 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1608 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
2086 | 1609 |
1610 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1611 if (gaim_proxy_connect(account, host, port, oscar_auth_connect, gc) != 0) { |
2086 | 1612 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1613 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1614 "unable to reconnect with authorizer\n"); |
2086 | 1615 g_free(host); |
1616 return 1; | |
1617 } | |
4293 | 1618 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1619 break; |
1620 | |
2086 | 1621 case 0xd: /* ChatNav */ |
1622 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1623 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1624 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1625 "unable to connect to chatnav server\n"); |
2086 | 1626 g_free(host); |
1627 return 1; | |
1628 } | |
4649 | 1629 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1630 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
2086 | 1631 |
1632 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1633 if (gaim_proxy_connect(account, host, port, oscar_chatnav_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 connect to chatnav server\n"); |
2086 | 1637 g_free(host); |
1638 return 1; | |
1639 } | |
4293 | 1640 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1641 break; |
1642 | |
1643 case 0xe: { /* Chat */ | |
2086 | 1644 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1645 |
2086 | 1646 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1647 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1648 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1649 "unable to connect to chat server\n"); |
2086 | 1650 g_free(host); |
1651 return 1; | |
1652 } | |
1653 | |
4649 | 1654 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1655 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
1656 | |
2086 | 1657 ccon = g_new0(struct chat_connection, 1); |
1658 ccon->conn = tstconn; | |
1659 ccon->gc = gc; | |
1660 ccon->fd = -1; | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1661 ccon->name = g_strdup(redir->chat.room); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1662 ccon->exchange = redir->chat.exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1663 ccon->instance = redir->chat.instance; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1664 ccon->show = extract_name(redir->chat.room); |
4634 | 1665 |
2086 | 1666 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1667 if (gaim_proxy_connect(account, host, port, oscar_chat_connect, ccon) != 0) { |
2086 | 1668 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1669 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1670 "unable to connect to chat server\n"); |
2086 | 1671 g_free(host); |
1672 g_free(ccon->show); | |
1673 g_free(ccon->name); | |
1674 g_free(ccon); | |
1675 return 1; | |
1676 } | |
4293 | 1677 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1678 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1679 "Connected to chat room %s exchange %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1680 ccon->name, ccon->exchange); |
4194 | 1681 } break; |
3694 | 1682 |
4804 | 1683 case 0x0010: { /* icon */ |
1684 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_ICON, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1685 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1686 "unable to connect to icon server\n"); |
4804 | 1687 g_free(host); |
1688 return 1; | |
1689 } | |
1690 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); | |
1691 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_icon, 0); | |
1692 | |
1693 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1694 if (gaim_proxy_connect(account, host, port, oscar_icon_connect, gc) != 0) { |
4804 | 1695 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1696 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1697 "unable to connect to icon server\n"); |
4804 | 1698 g_free(host); |
1699 return 1; | |
1700 } | |
1701 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); | |
1702 } break; | |
1703 | |
3694 | 1704 case 0x0018: { /* email */ |
1705 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1706 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1707 "unable to connect to email server\n"); |
3694 | 1708 g_free(host); |
1709 return 1; | |
1710 } | |
4649 | 1711 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
3694 | 1712 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
1713 | |
1714 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1715 if (gaim_proxy_connect(account, host, port, oscar_email_connect, gc) != 0) { |
3694 | 1716 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1717 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1718 "unable to connect to email server\n"); |
3694 | 1719 g_free(host); |
1720 return 1; | |
1721 } | |
4293 | 1722 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
3694 | 1723 } break; |
1724 | |
2086 | 1725 default: /* huh? */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1726 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1727 "got redirect for unknown service 0x%04hx\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1728 redir->group); |
2086 | 1729 break; |
1730 } | |
1731 | |
1732 g_free(host); | |
1733 return 1; | |
1734 } | |
1735 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1736 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1737 GaimConnection *gc = sess->aux_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1738 struct oscar_data *od = gc->proto_data; |
4738 | 1739 struct buddyinfo *bi; |
2993 | 1740 time_t time_idle = 0, signon = 0; |
1741 int type = 0; | |
1742 int caps = 0; | |
2086 | 1743 va_list ap; |
4738 | 1744 aim_userinfo_t *info; |
4194 | 1745 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1746 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1747 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1748 va_end(ap); |
1749 | |
2993 | 1750 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
1751 caps = info->capabilities; | |
3267 | 1752 if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
1753 type |= UC_AB; | |
6318 | 1754 if (caps & AIM_CAPS_HIPTOP) |
1755 type |= UC_HIPTOP; | |
3267 | 1756 |
4766 | 1757 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1758 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1759 type |= UC_UNCONFIRMED; | |
1760 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1761 type |= UC_ADMIN; | |
1762 if (info->flags & AIM_FLAG_AOL) | |
1763 type |= UC_AOL; | |
1764 if (info->flags & AIM_FLAG_FREE) | |
1765 type |= UC_NORMAL; | |
1766 if (info->flags & AIM_FLAG_AWAY) | |
1767 type |= UC_UNAVAILABLE; | |
1768 if (info->flags & AIM_FLAG_WIRELESS) | |
1769 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1770 } |
2993 | 1771 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1772 type = (info->icqinfo.status << 16); |
3013 | 1773 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1774 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1775 type |= UC_UNAVAILABLE; |
3013 | 1776 } |
2993 | 1777 } |
1778 | |
7141 | 1779 if (caps & AIM_CAPS_ICQ_DIRECT) |
1780 caps ^= AIM_CAPS_ICQ_DIRECT; | |
2993 | 1781 |
1782 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1783 time(&time_idle); |
1784 time_idle -= info->idletime*60; | |
2993 | 1785 } |
1786 | |
5836 | 1787 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
1788 signon = info->onlinesince; | |
1789 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
2993 | 1790 signon = time(NULL) - info->sessionlen; |
2086 | 1791 |
5575 | 1792 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), info->sn)) |
1793 gaim_connection_set_display_name(gc, info->sn); | |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1794 |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
1795 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(info->sn)); |
4738 | 1796 if (!bi) { |
1797 bi = g_new0(struct buddyinfo, 1); | |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
1798 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(info->sn)), bi); |
4738 | 1799 } |
4739 | 1800 bi->typingnot = FALSE; |
1801 bi->ico_informed = FALSE; | |
6857 | 1802 bi->ipaddr = info->icqinfo.ipaddr; |
1803 | |
1804 /* Available message stuff */ | |
6292 | 1805 free(bi->availmsg); |
7011 | 1806 if (info->avail != NULL) |
1807 if (info->avail_encoding) { | |
1808 gchar *enc = g_strdup_printf("charset=\"%s\"", info->avail_encoding); | |
1809 bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len); | |
6292 | 1810 g_free(enc); |
1811 } else { | |
1812 /* No explicit encoding means utf8. Yay. */ | |
7011 | 1813 bi->availmsg = g_strdup(info->avail); |
6292 | 1814 } |
5837 | 1815 else |
6292 | 1816 bi->availmsg = NULL; |
4732 | 1817 |
4804 | 1818 /* Server stored icon stuff */ |
4853 | 1819 if (info->iconcsumlen) { |
7125 | 1820 const char *filename = NULL, *saved_b16 = NULL; |
1821 char *b16 = NULL; | |
7093 | 1822 GaimBuddy *b = NULL; |
4853 | 1823 |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
1824 b16 = gaim_base16_encode(info->iconcsum, info->iconcsumlen); |
4853 | 1825 b = gaim_find_buddy(gc->account, info->sn); |
7093 | 1826 /* |
1827 * If for some reason the checksum is valid, but cached file is not.. | |
1828 * we want to know. | |
1829 */ | |
1830 filename = gaim_buddy_get_setting(b, "buddy_icon"); | |
1831 if (filename != NULL) { | |
1832 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
1833 saved_b16 = gaim_buddy_get_setting(b, "icon_checksum"); | |
1834 } else | |
1835 saved_b16 = NULL; | |
7054
7c04a0775918
[gaim-migrate @ 7617]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7045
diff
changeset
|
1836 |
4853 | 1837 if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { |
1838 GSList *cur = od->requesticon; | |
1839 while (cur && aim_sncmp((char *)cur->data, info->sn)) | |
1840 cur = cur->next; | |
1841 if (!cur) { | |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
1842 od->requesticon = g_slist_append(od->requesticon, strdup(gaim_normalize(info->sn))); |
4853 | 1843 if (od->icontimer) |
1844 g_source_remove(od->icontimer); | |
1845 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
1846 } | |
1847 } | |
6053 | 1848 g_free(b16); |
4853 | 1849 } |
1850 | |
5628 | 1851 serv_got_update(gc, info->sn, 1, (info->warnlevel/10.0) + 0.5, signon, time_idle, type); |
2086 | 1852 |
1853 return 1; | |
1854 } | |
1855 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1856 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1857 GaimConnection *gc = sess->aux_data; |
5837 | 1858 struct oscar_data *od = gc->proto_data; |
2086 | 1859 va_list ap; |
4739 | 1860 aim_userinfo_t *info; |
2086 | 1861 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1862 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1863 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1864 va_end(ap); |
1865 | |
4732 | 1866 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0); |
2086 | 1867 |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
1868 g_hash_table_remove(od->buddyinfo, gaim_normalize(info->sn)); |
5837 | 1869 |
2086 | 1870 return 1; |
1871 } | |
1872 | |
3730 | 1873 static void cancel_direct_im(struct ask_direct *d) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1874 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Freeing DirectIM prompts.\n"); |
2086 | 1875 |
1876 g_free(d->sn); | |
1877 g_free(d); | |
1878 } | |
1879 | |
4617 | 1880 static void oscar_odc_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1881 struct direct_im *dim = data; |
5575 | 1882 GaimConnection *gc = dim->gc; |
2086 | 1883 struct oscar_data *od = gc->proto_data; |
5679 | 1884 GaimConversation *cnv; |
2086 | 1885 char buf[256]; |
3008 | 1886 struct sockaddr name; |
1887 socklen_t name_len = 1; | |
1888 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1889 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1890 g_free(dim); |
1891 return; | |
1892 } | |
1893 | |
1894 if (source < 0) { | |
1895 g_free(dim); | |
1896 return; | |
1897 } | |
1898 | |
4366 | 1899 dim->conn->fd = source; |
2086 | 1900 aim_conn_completeconnect(od->sess, dim->conn); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
1901 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, dim->name); |
3008 | 1902 |
1903 /* This is the best way to see if we're connected or not */ | |
1904 if (getpeername(source, &name, &name_len) == 0) { | |
1905 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
1906 dim->connected = TRUE; | |
6982 | 1907 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
3008 | 1908 } |
2086 | 1909 od->direct_ims = g_slist_append(od->direct_ims, dim); |
3008 | 1910 |
4617 | 1911 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
2086 | 1912 } |
1913 | |
4617 | 1914 /* BBB */ |
3952 | 1915 /* |
4617 | 1916 * This is called after a remote AIM user has connected to us. We |
1917 * want to do some voodoo with the socket file descriptors, add a | |
1918 * callback or two, and then send the AIM_CB_OFT_PROMPT. | |
3952 | 1919 */ |
4656 | 1920 static int oscar_sendfile_estblsh(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1921 GaimConnection *gc = sess->aux_data; |
3630 | 1922 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1923 GaimXfer *xfer; |
5146 | 1924 struct aim_oft_info *oft_info; |
3630 | 1925 va_list ap; |
1926 aim_conn_t *conn, *listenerconn; | |
4656 | 1927 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1928 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1929 "AAA - in oscar_sendfile_estblsh\n"); |
3630 | 1930 va_start(ap, fr); |
1931 conn = va_arg(ap, aim_conn_t *); | |
1932 listenerconn = va_arg(ap, aim_conn_t *); | |
1933 va_end(ap); | |
1934 | |
4617 | 1935 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, listenerconn))) |
1936 return 1; | |
1937 | |
5146 | 1938 if (!(oft_info = xfer->data)) |
4617 | 1939 return 1; |
1940 | |
3630 | 1941 /* Stop watching listener conn; watch transfer conn instead */ |
4617 | 1942 gaim_input_remove(xfer->watcher); |
3630 | 1943 aim_conn_kill(sess, &listenerconn); |
1944 | |
5146 | 1945 oft_info->conn = conn; |
1946 xfer->fd = oft_info->conn->fd; | |
1947 | |
1948 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ACK, oscar_sendfile_ack, 0); | |
1949 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DONE, oscar_sendfile_done, 0); | |
1950 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1951 |
1952 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1953 aim_oft_sendheader(sess, AIM_CB_OFT_PROMPT, oft_info); |
3630 | 1954 |
1955 return 0; | |
1956 } | |
1957 | |
3952 | 1958 /* |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1959 * This is the gaim callback passed to gaim_proxy_connect when connecting to another AIM |
4617 | 1960 * user in order to transfer a file. |
3952 | 1961 */ |
4617 | 1962 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition) { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1963 GaimXfer *xfer; |
5146 | 1964 struct aim_oft_info *oft_info; |
4656 | 1965 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1966 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1967 "AAA - in oscar_sendfile_connected\n"); |
4617 | 1968 if (!(xfer = data)) |
1969 return; | |
5146 | 1970 if (!(oft_info = xfer->data)) |
3630 | 1971 return; |
4617 | 1972 if (source < 0) |
1973 return; | |
1974 | |
1975 xfer->fd = source; | |
5146 | 1976 oft_info->conn->fd = source; |
1977 | |
1978 aim_conn_completeconnect(oft_info->sess, oft_info->conn); | |
1979 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1980 |
1981 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1982 aim_im_sendch2_sendfile_accept(oft_info->sess, oft_info); |
4617 | 1983 |
1984 return; | |
3630 | 1985 } |
1986 | |
3952 | 1987 /* |
4617 | 1988 * This is called when a buddy sends us some file info. This happens when they |
1989 * are sending a file to you, and you have just established a connection to them. | |
4650 | 1990 * You should send them the exact same info except use the real cookie. We also |
4617 | 1991 * get like totally ready to like, receive the file, kay? |
3952 | 1992 */ |
4617 | 1993 static int oscar_sendfile_prompt(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1994 GaimConnection *gc = sess->aux_data; |
4617 | 1995 struct oscar_data *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1996 GaimXfer *xfer; |
5146 | 1997 struct aim_oft_info *oft_info; |
4617 | 1998 va_list ap; |
1999 aim_conn_t *conn; | |
2000 fu8_t *cookie; | |
2001 struct aim_fileheader_t *fh; | |
4656 | 2002 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2003 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2004 "AAA - in oscar_sendfile_prompt\n"); |
4617 | 2005 va_start(ap, fr); |
2006 conn = va_arg(ap, aim_conn_t *); | |
2007 cookie = va_arg(ap, fu8_t *); | |
2008 fh = va_arg(ap, struct aim_fileheader_t *); | |
2009 va_end(ap); | |
2010 | |
2011 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2012 return 1; | |
2013 | |
5146 | 2014 if (!(oft_info = xfer->data)) |
4617 | 2015 return 1; |
2016 | |
2017 /* We want to stop listening with a normal thingy */ | |
2018 gaim_input_remove(xfer->watcher); | |
2019 xfer->watcher = 0; | |
2020 | |
5146 | 2021 /* They sent us some information about the file they're sending */ |
2022 memcpy(&oft_info->fh, fh, sizeof(*fh)); | |
2023 | |
2024 /* Fill in the cookie */ | |
2025 memcpy(&oft_info->fh.bcookie, oft_info->cookie, 8); | |
2026 | |
4617 | 2027 /* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */ |
5146 | 2028 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info); |
4617 | 2029 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2030 | |
2031 return 0; | |
3630 | 2032 } |
2033 | |
3952 | 2034 /* |
4657 | 2035 * We are sending a file to someone else. They have just acknowledged our |
4617 | 2036 * prompt, so we want to start sending data like there's no tomorrow. |
3952 | 2037 */ |
4617 | 2038 static int oscar_sendfile_ack(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2039 GaimConnection *gc = sess->aux_data; |
4617 | 2040 struct oscar_data *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2041 GaimXfer *xfer; |
4617 | 2042 va_list ap; |
2043 aim_conn_t *conn; | |
2044 fu8_t *cookie; | |
2045 struct aim_fileheader_t *fh; | |
4656 | 2046 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2047 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_ack\n"); |
4617 | 2048 va_start(ap, fr); |
2049 conn = va_arg(ap, aim_conn_t *); | |
2050 cookie = va_arg(ap, fu8_t *); | |
2051 fh = va_arg(ap, struct aim_fileheader_t *); | |
2052 va_end(ap); | |
2053 | |
2054 if (!(xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) | |
2055 return 1; | |
2056 | |
4656 | 2057 /* We want to stop listening with a normal thingy */ |
2058 gaim_input_remove(xfer->watcher); | |
2059 xfer->watcher = 0; | |
2060 | |
4617 | 2061 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2062 | |
2063 return 0; | |
3630 | 2064 } |
4617 | 2065 |
2066 /* | |
2067 * We just sent a file to someone. They said they got it and everything, | |
2068 * so we can close our direct connection and what not. | |
2069 */ | |
2070 static int oscar_sendfile_done(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 2071 GaimConnection *gc = sess->aux_data; |
4617 | 2072 struct oscar_data *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2073 GaimXfer *xfer; |
4617 | 2074 va_list ap; |
2075 aim_conn_t *conn; | |
2076 fu8_t *cookie; | |
2077 struct aim_fileheader_t *fh; | |
4656 | 2078 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2079 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_done\n"); |
4617 | 2080 va_start(ap, fr); |
2081 conn = va_arg(ap, aim_conn_t *); | |
2082 cookie = va_arg(ap, fu8_t *); | |
2083 fh = va_arg(ap, struct aim_fileheader_t *); | |
2084 va_end(ap); | |
2085 | |
2086 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2087 return 1; | |
2088 | |
4656 | 2089 xfer->fd = conn->fd; |
4617 | 2090 gaim_xfer_end(xfer); |
2091 | |
2092 return 0; | |
2093 } | |
3630 | 2094 |
4244 | 2095 static void accept_direct_im(struct ask_direct *d) { |
5575 | 2096 GaimConnection *gc = d->gc; |
4244 | 2097 struct oscar_data *od; |
2086 | 2098 struct direct_im *dim; |
2945 | 2099 char *host; int port = 4443; |
4366 | 2100 int i, rc; |
2086 | 2101 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2102 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2103 cancel_direct_im(d); |
2104 return; | |
2105 } | |
2106 | |
2107 od = (struct oscar_data *)gc->proto_data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2108 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Accepted DirectIM.\n"); |
2086 | 2109 |
2110 dim = find_direct_im(od, d->sn); | |
2111 if (dim) { | |
3730 | 2112 cancel_direct_im(d); /* 40 */ |
4244 | 2113 return; |
2086 | 2114 } |
2115 dim = g_new0(struct direct_im, 1); | |
2116 dim->gc = d->gc; | |
2117 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
2118 | |
4617 | 2119 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
|
2120 if (!dim->conn) { |
2086 | 2121 g_free(dim); |
3730 | 2122 cancel_direct_im(d); |
4244 | 2123 return; |
2086 | 2124 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2125 |
2086 | 2126 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
4617 | 2127 gaim_odc_incoming, 0); |
2086 | 2128 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, |
4617 | 2129 gaim_odc_typing, 0); |
3033 | 2130 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
6982 | 2131 gaim_odc_update_ui, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2132 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2133 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2134 port = atoi(&(d->ip[i+1])); |
2086 | 2135 break; |
2136 } | |
2137 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2138 host = g_strndup(d->ip, i); |
2086 | 2139 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
2140 rc = gaim_proxy_connect(gc->account, host, port, oscar_odc_callback, dim); |
2086 | 2141 g_free(host); |
4366 | 2142 if (rc < 0) { |
2086 | 2143 aim_conn_kill(od->sess, &dim->conn); |
2144 g_free(dim); | |
3730 | 2145 cancel_direct_im(d); |
4244 | 2146 return; |
2086 | 2147 } |
2148 | |
3730 | 2149 cancel_direct_im(d); |
2086 | 2150 |
4244 | 2151 return; |
2086 | 2152 } |
2153 | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2154 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
5575 | 2155 GaimConnection *gc = sess->aux_data; |
3600 | 2156 struct oscar_data *od = gc->proto_data; |
4738 | 2157 char *tmp; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2158 GaimConvImFlags flags = 0; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
2159 gsize convlen; |
3659 | 2160 GError *err = NULL; |
4738 | 2161 struct buddyinfo *bi; |
5575 | 2162 const char *iconfile; |
4738 | 2163 |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2164 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(userinfo->sn)); |
4738 | 2165 if (!bi) { |
2166 bi = g_new0(struct buddyinfo, 1); | |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2167 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(userinfo->sn)), bi); |
4738 | 2168 } |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2169 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2170 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2171 flags |= GAIM_CONV_IM_AUTO_RESP; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2172 |
4738 | 2173 if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) |
2174 bi->typingnot = TRUE; | |
2175 else | |
2176 bi->typingnot = FALSE; | |
2177 | |
4380 | 2178 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
|
2179 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2180 "%s has an icon\n", userinfo->sn); |
4738 | 2181 if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { |
2182 bi->ico_need = TRUE; | |
2183 bi->ico_len = args->iconlen; | |
2184 bi->ico_csum = args->iconsum; | |
2185 bi->ico_time = args->iconstamp; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2186 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2187 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2188 |
5575 | 2189 if ((iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc))) && |
2190 (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2191 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2192 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2193 |
5575 | 2194 if (!stat(iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2195 char *buf = g_malloc(st.st_size); |
5575 | 2196 file = fopen(iconfile, "rb"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2197 if (file) { |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
2198 int len = fread(buf, 1, st.st_size, file); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2199 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2200 "Sending buddy icon to %s (%d bytes, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2201 "%lu reported)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2202 userinfo->sn, len, st.st_size); |
4617 | 2203 aim_im_sendch2_icon(sess, userinfo->sn, buf, st.st_size, |
2204 st.st_mtime, aimutil_iconsum(buf, st.st_size)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2205 fclose(file); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2206 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2207 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2208 "Can't open buddy icon file!\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2209 g_free(buf); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2210 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2211 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2212 "Can't stat buddy icon file!\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2213 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2214 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2215 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2216 "Character set is %hu %hu\n", args->charset, args->charsubset); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2217 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
3722 | 2218 /* This message is marked as UNICODE, so we have to |
2219 * convert it to utf-8 before handing it to the gaim core. | |
2220 * This conversion should *never* fail, if it does it | |
2221 * means that either the incoming ICBM is corrupted or | |
4662 | 2222 * there is something we don't understand about it. |
2223 * For the record, AIM Unicode is big-endian UCS-2 */ | |
2224 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2225 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Received UNICODE IM\n"); |
4121 | 2226 |
2227 if (!args->msg || !args->msglen) | |
2228 return 1; | |
4641 | 2229 |
3659 | 2230 tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
2231 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2232 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2233 "Unicode IM conversion: %s\n", err->message); |
3659 | 2234 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2235 g_error_free(err); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2236 } |
3722 | 2237 } else { |
3850 | 2238 /* This will get executed for both AIM_IMFLAGS_ISO_8859_1 and |
3722 | 2239 * unflagged messages, which are ASCII. That's OK because |
2240 * ASCII is a strict subset of ISO-8859-1; this should | |
2241 * help with compatibility with old, broken versions of | |
2242 * gaim (everything before 0.60) and other broken clients | |
2243 * that will happily send ISO-8859-1 without marking it as | |
2244 * such */ | |
4662 | 2245 if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2246 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2247 "Received ISO-8859-1 IM\n"); |
4121 | 2248 |
2249 if (!args->msg || !args->msglen) | |
2250 return 1; | |
2251 | |
3659 | 2252 tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
2253 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2254 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2255 "ISO-8859-1 IM conversion: %s\n", err->message); |
3659 | 2256 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2257 g_error_free(err); |
3659 | 2258 } |
3642 | 2259 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2260 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2261 /* gaim_str_strip_linefeed(tmp); */ |
6982 | 2262 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2263 g_free(tmp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2264 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2265 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2266 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2267 |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2268 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
5575 | 2269 GaimConnection *gc = sess->aux_data; |
4617 | 2270 struct oscar_data *od = gc->proto_data; |
5575 | 2271 const char *username = gaim_account_get_username(gaim_connection_get_account(gc)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2272 |
4121 | 2273 if (!args) |
2274 return 0; | |
4194 | 2275 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2276 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2277 "rendezvous with %s, status is %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2278 userinfo->sn, args->status); |
2869 | 2279 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2280 if (args->reqclass & AIM_CAPS_CHAT) { |
4121 | 2281 char *name; |
5234 | 2282 GHashTable *components; |
2283 | |
4121 | 2284 if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange || !args->msg) |
2285 return 1; | |
5234 | 2286 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
2287 g_free); | |
4121 | 2288 name = extract_name(args->info.chat.roominfo.name); |
5234 | 2289 g_hash_table_replace(components, g_strdup("room"), g_strdup(name ? name : args->info.chat.roominfo.name)); |
2290 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
|
2291 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2292 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2293 userinfo->sn, |
6059 | 2294 args->msg, |
5234 | 2295 components); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2296 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2297 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2298 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
4617 | 2299 /* BBB */ |
2300 if (args->status == AIM_RENDEZVOUS_PROPOSE) { | |
2301 /* Someone wants to send a file (or files) to us */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2302 GaimXfer *xfer; |
5146 | 2303 struct aim_oft_info *oft_info; |
2304 | |
2305 if (!args->cookie || !args->port || !args->verifiedip || | |
2306 !args->info.sendfile.filename || !args->info.sendfile.totsize || | |
4656 | 2307 !args->info.sendfile.totfiles || !args->reqclass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2308 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2309 "%s tried to send you a file with incomplete " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2310 "information.\n", userinfo->sn); |
5146 | 2311 if (args->proxyip) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2312 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2313 "IP for a proxy server was given. Gaim " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2314 "does not support this yet.\n"); |
4617 | 2315 return 1; |
4656 | 2316 } |
4617 | 2317 |
2318 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) { | |
2319 /* last char of the ft req is a star, they are sending us a | |
2320 * directory -- remove the star and trailing slash so we dont save | |
2321 * directories that look like 'dirname\*' -- arl */ | |
2322 char *tmp = strrchr(args->info.sendfile.filename, '\\'); | |
2323 if (tmp && (tmp[1] == '*')) { | |
2324 tmp[0] = '\0'; | |
2325 } | |
2326 } | |
2327 | |
2328 /* Build the file transfer handle */ | |
2329 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, userinfo->sn); | |
5163 | 2330 xfer->remote_ip = g_strdup(args->verifiedip); |
5146 | 2331 xfer->remote_port = args->port; |
4617 | 2332 gaim_xfer_set_filename(xfer, args->info.sendfile.filename); |
2333 gaim_xfer_set_size(xfer, args->info.sendfile.totsize); | |
5146 | 2334 |
2335 /* Create the oscar-specific data */ | |
5163 | 2336 oft_info = aim_oft_createinfo(od->sess, args->cookie, userinfo->sn, args->clientip, xfer->remote_port, 0, 0, NULL); |
4898 | 2337 if (args->proxyip) |
5146 | 2338 oft_info->proxyip = g_strdup(args->proxyip); |
4898 | 2339 if (args->verifiedip) |
5146 | 2340 oft_info->verifiedip = g_strdup(args->verifiedip); |
2341 xfer->data = oft_info; | |
4617 | 2342 |
2343 /* Setup our I/O op functions */ | |
2344 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
2345 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
2346 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2347 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2348 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4617 | 2349 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
2350 | |
2351 /* | |
2352 * XXX - Should do something with args->msg, args->encoding, and args->language | |
2353 * probably make it apply to all ch2 messages. | |
3752 | 2354 */ |
4617 | 2355 |
2356 /* Keep track of this transfer for later */ | |
2357 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
2358 | |
2359 /* Now perform the request */ | |
2360 gaim_xfer_request(xfer); | |
2361 } else if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
2362 /* The other user wants to cancel a file transfer */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2363 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2364 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2365 "AAA - File transfer canceled by remote user\n"); |
4617 | 2366 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
|
2367 gaim_xfer_cancel_remote(xfer); |
4617 | 2368 } else if (args->status == AIM_RENDEZVOUS_ACCEPT) { |
2369 /* | |
2370 * This gets sent by the receiver of a file | |
2371 * as they connect directly to us. If we don't | |
2372 * get this, then maybe a third party connected | |
2373 * to us, and we shouldn't send them anything. | |
2374 */ | |
2375 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2376 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2377 "unknown rendezvous status!\n"); |
3630 | 2378 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2379 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2380 } else if (args->reqclass & AIM_CAPS_VOICE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2381 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2382 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2383 userinfo->sn, args->info.icon.icon, |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2384 args->info.icon.length); |
6871 | 2385 } else if (args->reqclass & AIM_CAPS_DIRECTIM) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2386 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2387 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2388 |
4212 | 2389 if (!args->verifiedip) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2390 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2391 "directim kill blocked (%s)\n", userinfo->sn); |
4650 | 2392 return 1; |
4212 | 2393 } |
2394 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2395 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2396 "%s received direct im request from %s (%s)\n", |
5575 | 2397 username, userinfo->sn, args->verifiedip); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2398 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2399 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2400 d->sn = g_strdup(userinfo->sn); |
2869 | 2401 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2402 memcpy(d->cookie, args->cookie, 8); |
5575 | 2403 g_snprintf(buf, sizeof buf, _("%s has just asked to directly connect to %s"), userinfo->sn, username); |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2404 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2405 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2406 _("This requires a direct connection between " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2407 "the two computers and is necessary for IM " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2408 "Images. Because your IP address will be " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2409 "revealed, this may be considered a privacy " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2410 "risk."), 0, d, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2411 _("Connect"), G_CALLBACK(accept_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2412 _("Cancel"), G_CALLBACK(cancel_direct_im)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2413 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2414 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2415 "Unknown reqclass %hu\n", args->reqclass); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2416 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2417 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2418 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2419 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2420 |
3453 | 2421 /* |
4230 | 2422 * Authorization Functions |
2423 * Most of these are callbacks from dialogs. They're used by both | |
2424 * methods of authorization (SSI and old-school channel 4 ICBM) | |
3453 | 2425 */ |
4269 | 2426 /* When you ask other people for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2427 static void gaim_auth_request(struct name_data *data, char *msg) { |
5575 | 2428 GaimConnection *gc = data->gc; |
4244 | 2429 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2430 if (g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2431 struct oscar_data *od = gc->proto_data; |
6695 | 2432 GaimBuddy *buddy = gaim_find_buddy(gc->account, data->name); |
2433 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4244 | 2434 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2435 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2436 "ssi: adding buddy %s to group %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2437 buddy->name, group->name); |
4889 | 2438 aim_ssi_sendauthrequest(od->sess, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); |
4269 | 2439 if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) |
4889 | 2440 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); |
4244 | 2441 } |
4230 | 2442 } |
4337 | 2443 } |
2444 | |
2445 static void gaim_auth_request_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2446 gaim_request_input(data->gc, NULL, _("Authorization Request Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2447 NULL, _("Please authorize me!"), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2448 _("OK"), G_CALLBACK(gaim_auth_request), |
5836 | 2449 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2450 data); |
4230 | 2451 } |
2452 | |
2453 static void gaim_auth_dontrequest(struct name_data *data) { | |
5575 | 2454 GaimConnection *gc = data->gc; |
4244 | 2455 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2456 if (g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2457 /* struct oscar_data *od = gc->proto_data; */ |
2458 /* XXX - Take the buddy out of our buddy list */ | |
2459 } | |
2460 | |
5836 | 2461 oscar_free_name_data(data); |
4230 | 2462 } |
2463 | |
5575 | 2464 static void gaim_auth_sendrequest(GaimConnection *gc, const char *name) { |
4269 | 2465 struct name_data *data = g_new(struct name_data, 1); |
6695 | 2466 GaimBuddy *buddy; |
4269 | 2467 gchar *dialog_msg, *nombre; |
2468 | |
4687 | 2469 buddy = gaim_find_buddy(gc->account, name); |
2470 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
2471 nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); | |
4269 | 2472 else |
4830 | 2473 nombre = NULL; |
2474 | |
2475 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 | 2476 data->gc = gc; |
2477 data->name = g_strdup(name); | |
2478 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2479 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2480 gaim_request_action(gc, NULL, _("Request Authorization"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2481 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2482 _("Request Authorization"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2483 G_CALLBACK(gaim_auth_request_msgprompt), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2484 _("Cancel"), G_CALLBACK(gaim_auth_dontrequest)); |
4269 | 2485 |
2486 g_free(dialog_msg); | |
2487 g_free(nombre); | |
2488 } | |
2489 | |
4230 | 2490 /* When other people ask you for authorization */ |
2491 static void gaim_auth_grant(struct name_data *data) { | |
5575 | 2492 GaimConnection *gc = data->gc; |
4244 | 2493 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2494 if (g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2495 struct oscar_data *od = gc->proto_data; |
4236 | 2496 #ifdef NOSSI |
6695 | 2497 GaimBuddy *buddy; |
4244 | 2498 gchar message; |
2499 message = 0; | |
4687 | 2500 buddy = gaim_find_buddy(gc->account, data->name); |
4617 | 2501 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHGRANTED, &message); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
2502 gaim_account_notify_added(gc->account, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 2503 #else |
4889 | 2504 aim_ssi_sendauthreply(od->sess, data->name, 0x01, NULL); |
4230 | 2505 #endif |
4244 | 2506 } |
2507 | |
5836 | 2508 oscar_free_name_data(data); |
3141 | 2509 } |
2510 | |
4230 | 2511 /* When other people ask you for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2512 static void gaim_auth_dontgrant(struct name_data *data, char *msg) { |
5575 | 2513 GaimConnection *gc = data->gc; |
4244 | 2514 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2515 if (g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2516 struct oscar_data *od = gc->proto_data; |
4230 | 2517 #ifdef NOSSI |
4617 | 2518 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHDENIED, msg ? msg : _("No reason given.")); |
4230 | 2519 #else |
4889 | 2520 aim_ssi_sendauthreply(od->sess, data->name, 0x00, msg ? msg : _("No reason given.")); |
4230 | 2521 #endif |
4244 | 2522 } |
4337 | 2523 } |
2524 | |
2525 static void gaim_auth_dontgrant_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2526 gaim_request_input(data->gc, NULL, _("Authorization Denied Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2527 NULL, _("No reason given."), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2528 _("OK"), G_CALLBACK(gaim_auth_dontgrant), |
5836 | 2529 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2530 data); |
3141 | 2531 } |
2532 | |
7023 | 2533 /* When someone sends you buddies */ |
2534 static void gaim_icq_buddyadd(struct name_data *data) { | |
5575 | 2535 GaimConnection *gc = data->gc; |
4244 | 2536 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2537 if (g_list_find(gaim_connections_get_all(), gc)) { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
2538 gaim_blist_request_add_buddy(gaim_connection_get_account(gc), data->name, NULL, data->nick); |
4244 | 2539 } |
2540 | |
5836 | 2541 oscar_free_name_data(data); |
3453 | 2542 } |
2543 | |
4075 | 2544 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) { |
5575 | 2545 GaimConnection *gc = sess->aux_data; |
4076 | 2546 gchar **msg1, **msg2; |
2547 GError *err = NULL; | |
6051 | 2548 int i, numtoks; |
4076 | 2549 |
4121 | 2550 if (!args->type || !args->msg || !args->uin) |
2551 return 1; | |
4194 | 2552 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2553 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2554 "Received a channel 4 message of type 0x%02hhx.\n", args->type); |
4076 | 2555 |
2556 /* Split up the message at the delimeter character, then convert each string to UTF-8 */ | |
4173 | 2557 msg1 = g_strsplit(args->msg, "\376", 0); |
6051 | 2558 for (numtoks=0; msg1[numtoks]; numtoks++); |
2559 msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *)); | |
4076 | 2560 for (i=0; msg1[i]; i++) { |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2561 gaim_str_strip_linefeed(msg1[i]); |
4076 | 2562 msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err); |
4800 | 2563 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2564 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2565 "Error converting a string from ISO-8859-1 to " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2566 "UTF-8 in oscar ICBM channel 4 parsing\n"); |
4800 | 2567 g_error_free(err); |
2568 } | |
4076 | 2569 } |
2570 msg2[i] = NULL; | |
2571 | |
3952 | 2572 switch (args->type) { |
4173 | 2573 case 0x01: { /* MacICQ message or basic offline message */ |
4076 | 2574 if (i >= 1) { |
5556 | 2575 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2576 if (t) { /* This is an offline message */ |
2577 /* I think this timestamp is in UTC, or something */ | |
6982 | 2578 serv_got_im(gc, uin, msg2[0], 0, t); |
4076 | 2579 } else { /* This is a message from MacICQ/Miranda */ |
6982 | 2580 serv_got_im(gc, uin, msg2[0], 0, time(NULL)); |
4076 | 2581 } |
2582 g_free(uin); | |
4075 | 2583 } |
3316 | 2584 } break; |
2585 | |
4173 | 2586 case 0x04: { /* Someone sent you a URL */ |
4076 | 2587 if (i >= 2) { |
5556 | 2588 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2589 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", msg2[1], msg2[0]); |
6982 | 2590 serv_got_im(gc, uin, message, 0, time(NULL)); |
3453 | 2591 g_free(uin); |
2592 g_free(message); | |
2593 } | |
2594 } break; | |
2595 | |
4173 | 2596 case 0x06: { /* Someone requested authorization */ |
4076 | 2597 if (i >= 6) { |
4230 | 2598 struct name_data *data = g_new(struct name_data, 1); |
5556 | 2599 gchar *dialog_msg = g_strdup_printf(_("The user %u 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
|
2600 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5556 | 2601 "Received an authorization request from UIN %u\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2602 args->uin); |
4076 | 2603 data->gc = gc; |
5556 | 2604 data->name = g_strdup_printf("%u", args->uin); |
4230 | 2605 data->nick = NULL; |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2606 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2607 gaim_request_action(gc, NULL, _("Authorization Request"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2608 dialog_msg, 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2609 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2610 G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2611 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2612 G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4076 | 2613 g_free(dialog_msg); |
2614 } | |
3141 | 2615 } break; |
2616 | |
4173 | 2617 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2618 if (i >= 1) { |
7023 | 2619 gchar *dialog_msg = g_strdup_printf(_("The user %u has denied your request to add them to your buddy 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
|
2620 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2621 dialog_msg); |
4076 | 2622 g_free(dialog_msg); |
2623 } | |
3141 | 2624 } break; |
2625 | |
4173 | 2626 case 0x08: { /* Someone has granted you authorization */ |
7023 | 2627 gchar *dialog_msg = g_strdup_printf(_("The user %u has granted your request to add them to your buddy list."), args->uin); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2628 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2629 dialog_msg); |
3141 | 2630 g_free(dialog_msg); |
2631 } break; | |
2632 | |
4333 | 2633 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2634 if (i >= 5) { | |
2635 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
|
2636 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2637 g_free(dialog_msg); |
2638 } | |
2639 } break; | |
2640 | |
4173 | 2641 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2642 if (i >= 6) { |
4194 | 2643 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
|
2644 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2645 g_free(dialog_msg); |
2646 } | |
4075 | 2647 } break; |
2648 | |
4173 | 2649 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2650 if (i >= 6) { |
4308 | 2651 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
|
2652 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2653 g_free(dialog_msg); |
2654 } | |
4075 | 2655 } break; |
2656 | |
4173 | 2657 case 0x12: { |
3141 | 2658 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
7023 | 2659 /* Someone added you to their buddy list? */ |
3141 | 2660 } break; |
2661 | |
7023 | 2662 case 0x13: { /* Someone has sent you some ICQ buddies */ |
3453 | 2663 int i, num; |
2664 gchar **text; | |
4173 | 2665 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2666 if (text) { |
2667 num = 0; | |
2668 for (i=0; i<strlen(text[0]); i++) | |
2669 num = num*10 + text[0][i]-48; | |
2670 for (i=0; i<num; i++) { | |
4230 | 2671 struct name_data *data = g_new(struct name_data, 1); |
7023 | 2672 gchar *message = g_strdup_printf(_("ICQ user %u has sent you a buddy: %s (%s)"), args->uin, text[i*2+2], text[i*2+1]); |
3453 | 2673 data->gc = gc; |
4790 | 2674 data->name = g_strdup(text[i*2+1]); |
2675 data->nick = g_strdup(text[i*2+2]); | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2676 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2677 gaim_request_action(gc, NULL, message, |
7023 | 2678 _("Do you want to add this buddy " |
2679 "to your buddy list?"), | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2680 0, data, 2, |
7023 | 2681 _("Add"), G_CALLBACK(gaim_icq_buddyadd), |
5836 | 2682 _("Decline"), G_CALLBACK(oscar_free_name_data)); |
3453 | 2683 g_free(message); |
2684 } | |
2685 g_strfreev(text); | |
2686 } | |
2687 } break; | |
2688 | |
7023 | 2689 case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ |
3453 | 2690 /* This is boring and silly. */ |
2691 } break; | |
2692 | |
3141 | 2693 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2694 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2695 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2696 "(type 0x%02hhx).\n", args->type); |
3141 | 2697 } break; |
2698 } | |
2699 | |
4076 | 2700 g_strfreev(msg1); |
2701 g_strfreev(msg2); | |
2702 | |
3141 | 2703 return 1; |
2704 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2705 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2706 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2707 fu16_t channel; |
2708 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2709 aim_userinfo_t *userinfo; |
2086 | 2710 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2711 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2712 va_start(ap, fr); |
4200 | 2713 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2714 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2715 |
3141 | 2716 switch (channel) { |
2717 case 1: { /* standard message */ | |
2718 struct aim_incomingim_ch1_args *args; | |
2719 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2720 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2721 } break; | |
2722 | |
2723 case 2: { /* rendevous */ | |
2724 struct aim_incomingim_ch2_args *args; | |
2725 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2726 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2727 } break; | |
2728 | |
2729 case 4: { /* ICQ */ | |
2730 struct aim_incomingim_ch4_args *args; | |
2731 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2732 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2733 } break; |
2734 | |
2735 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2736 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2737 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2738 "0x%04hx).", channel); |
3141 | 2739 } break; |
2086 | 2740 } |
2741 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2742 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2743 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2744 return ret; |
2086 | 2745 } |
2746 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2747 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2748 char *buf; |
2086 | 2749 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2750 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2751 aim_userinfo_t *userinfo; |
2086 | 2752 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2753 va_start(ap, fr); |
4200 | 2754 chan = (fu16_t)va_arg(ap, unsigned int); |
2755 userinfo = va_arg(ap, aim_userinfo_t *); | |
2756 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2757 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2758 va_end(ap); |
2759 | |
2760 switch(reason) { | |
5420 | 2761 case 0: /* Invalid (0) */ |
2762 buf = g_strdup_printf( | |
2763 ngettext( | |
4276 | 2764 "You missed %hu message from %s because it was invalid.", |
2765 "You missed %hu messages from %s because they were invalid.", | |
2766 nummissed), | |
4282 | 2767 nummissed, |
2768 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2769 break; |
5420 | 2770 case 1: /* Message too large */ |
2771 buf = g_strdup_printf( | |
2772 ngettext( | |
4276 | 2773 "You missed %hu message from %s because it was too large.", |
2774 "You missed %hu messages from %s because they were too large.", | |
2775 nummissed), | |
4282 | 2776 nummissed, |
2777 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2778 break; |
5420 | 2779 case 2: /* Rate exceeded */ |
2780 buf = g_strdup_printf( | |
2781 ngettext( | |
4276 | 2782 "You missed %hu message from %s because the rate limit has been exceeded.", |
2783 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2784 nummissed), | |
4282 | 2785 nummissed, |
2786 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2787 break; |
5420 | 2788 case 3: /* Evil Sender */ |
2789 buf = g_strdup_printf( | |
2790 ngettext( | |
4276 | 2791 "You missed %hu message from %s because he/she was too evil.", |
2792 "You missed %hu messages from %s because he/she was too evil.", | |
2793 nummissed), | |
4282 | 2794 nummissed, |
2795 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2796 break; |
5420 | 2797 case 4: /* Evil Receiver */ |
2798 buf = g_strdup_printf( | |
2799 ngettext( | |
4276 | 2800 "You missed %hu message from %s because you are too evil.", |
2801 "You missed %hu messages from %s because you are too evil.", | |
2802 nummissed), | |
4282 | 2803 nummissed, |
2804 userinfo->sn); | |
2086 | 2805 break; |
2806 default: | |
5420 | 2807 buf = g_strdup_printf( |
2808 ngettext( | |
4276 | 2809 "You missed %hu message from %s for an unknown reason.", |
2810 "You missed %hu messages from %s for an unknown reason.", | |
2811 nummissed), | |
4282 | 2812 nummissed, |
2813 userinfo->sn); | |
2086 | 2814 break; |
2815 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2816 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2817 g_free(buf); |
2086 | 2818 |
2819 return 1; | |
2820 } | |
2821 | |
3212 | 2822 static char *gaim_icq_status(int state) { |
2823 /* Make a cute little string that shows the status of the dude or dudet */ | |
2824 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2825 return g_strdup_printf(_("Free For Chat")); |
3212 | 2826 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2827 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2828 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2829 return g_strdup_printf(_("Not Available")); |
3212 | 2830 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2831 return g_strdup_printf(_("Occupied")); |
3212 | 2832 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2833 return g_strdup_printf(_("Away")); |
3212 | 2834 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2835 return g_strdup_printf(_("Web Aware")); |
3212 | 2836 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2837 return g_strdup_printf(_("Invisible")); |
3212 | 2838 else |
4342 | 2839 return g_strdup_printf(_("Online")); |
3212 | 2840 } |
2841 | |
4194 | 2842 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
5575 | 2843 GaimConnection *gc = sess->aux_data; |
4617 | 2844 struct oscar_data *od = gc->proto_data; |
2845 | |
2846 /* BBB */ | |
3630 | 2847 switch (reason) { |
4151 | 2848 case 3: { /* Decline sendfile. */ |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2849 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2850 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2851 "AAA - Other user declined file transfer\n"); |
4617 | 2852 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
|
2853 gaim_xfer_cancel_remote(xfer); |
4151 | 2854 } break; |
2855 | |
2856 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2857 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2858 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2859 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2860 } |
3630 | 2861 |
2862 } | |
2863 | |
2864 return 0; | |
2865 } | |
2866 | |
4194 | 2867 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
5575 | 2868 GaimConnection *gc = sess->aux_data; |
4151 | 2869 |
2870 switch(reason) { | |
2871 case 0x0003: { /* Reply from an ICQ status message request */ | |
2872 char *status_msg = gaim_icq_status(state); | |
2873 char *dialog_msg, **splitmsg; | |
2874 | |
2875 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2876 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2877 | |
7011 | 2878 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
7032 | 2879 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, dialog_msg, NULL, NULL); |
4151 | 2880 |
2881 g_free(status_msg); | |
2882 g_free(dialog_msg); | |
2883 g_strfreev(splitmsg); | |
2884 } break; | |
2885 | |
2886 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2887 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2888 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2889 "Type 0x%04hx\n", who, reason); |
4151 | 2890 } break; |
2891 } /* end of switch */ | |
2892 | |
2893 return 0; | |
2894 } | |
2895 | |
3212 | 2896 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2897 va_list ap; | |
2898 fu16_t chan, reason; | |
2899 char *who; | |
2900 | |
2901 va_start(ap, fr); | |
4200 | 2902 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2903 who = va_arg(ap, char *); |
4200 | 2904 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2905 |
3952 | 2906 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2907 char *cookie = va_arg(ap, char *); |
4151 | 2908 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2909 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2910 fu32_t state = 0; |
4151 | 2911 char *msg = NULL; |
2912 if (reason == 0x0003) { | |
4200 | 2913 state = va_arg(ap, fu32_t); |
4151 | 2914 msg = va_arg(ap, char *); |
2915 } | |
2916 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2917 } | |
3952 | 2918 |
3212 | 2919 va_end(ap); |
2920 | |
2921 return 1; | |
2922 } | |
2923 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2924 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2925 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2926 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2927 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2928 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2929 va_start(ap, fr); |
4199 | 2930 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2931 va_end(ap); |
2932 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2933 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2934 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2935 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2936 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2937 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2938 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2939 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2940 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2941 |
2086 | 2942 return 1; |
2943 } | |
2944 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2945 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2946 #if 0 |
5575 | 2947 GaimConnection *gc = sess->aux_data; |
4617 | 2948 struct oscar_data *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2949 GaimXfer *xfer; |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2950 #endif |
4617 | 2951 va_list ap; |
2952 fu16_t reason; | |
2953 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2954 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2955 va_start(ap, fr); |
4617 | 2956 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 2957 data = va_arg(ap, char *); |
2086 | 2958 va_end(ap); |
2959 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2960 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2961 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 2962 |
2963 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2964 #if 0 |
4617 | 2965 /* If this was a file transfer request, data is a cookie */ |
2966 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
|
2967 gaim_xfer_cancel_remote(xfer); |
3630 | 2968 return 1; |
2969 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2970 #endif |
3630 | 2971 |
4617 | 2972 /* Data is assumed to be the destination sn */ |
2973 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
|
2974 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2975 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 2976 g_free(buf); |
2086 | 2977 |
2978 return 1; | |
2979 } | |
2980 | |
3595 | 2981 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2982 GaimConnection *gc = sess->aux_data; |
3595 | 2983 va_list ap; |
2984 fu16_t type1, type2; | |
2985 char *sn; | |
2986 | |
2987 va_start(ap, fr); | |
4199 | 2988 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2989 sn = va_arg(ap, char *); |
4199 | 2990 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2991 va_end(ap); |
2992 | |
2993 switch (type2) { | |
2994 case 0x0000: { /* Text has been cleared */ | |
2995 serv_got_typing_stopped(gc, sn); | |
2996 } break; | |
2997 | |
2998 case 0x0001: { /* Paused typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
2999 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
3595 | 3000 } break; |
3001 | |
3002 case 0x0002: { /* Typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3003 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
3595 | 3004 } break; |
3005 | |
3006 default: { | |
5435 | 3007 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 | 3008 } break; |
3009 } | |
3010 | |
3011 return 1; | |
3012 } | |
3013 | |
7141 | 3014 /* |
3015 * We get this error when there was an error in the locate family. This | |
7259 | 3016 * happens when you request info of someone who is offline. |
7141 | 3017 */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3018 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
7259 | 3019 gchar *buf; |
2086 | 3020 va_list ap; |
5420 | 3021 fu16_t reason; |
2086 | 3022 char *destn; |
3023 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3024 va_start(ap, fr); |
4199 | 3025 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3026 destn = va_arg(ap, char *); |
3027 va_end(ap); | |
3028 | |
5420 | 3029 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3030 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3031 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
5420 | 3032 g_free(buf); |
2086 | 3033 |
3034 return 1; | |
3035 } | |
3036 | |
6982 | 3037 #if 0 |
2086 | 3038 static char *images(int flags) { |
3039 static char buf[1024]; | |
3101 | 3040 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3041 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3042 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3043 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3044 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3045 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3046 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3047 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3048 return buf; |
3049 } | |
6982 | 3050 #endif |
3101 | 3051 |
2920 | 3052 static char *caps_string(guint caps) |
3053 { | |
3054 static char buf[512], *tmp; | |
3055 int count = 0, i = 0; | |
3056 guint bit = 1; | |
4742 | 3057 |
3058 if (!caps) { | |
4744 | 3059 return NULL; |
6318 | 3060 } else while (bit <= AIM_CAPS_LAST) { |
2920 | 3061 if (bit & caps) { |
3062 switch (bit) { | |
6871 | 3063 case AIM_CAPS_BUDDYICON: |
2920 | 3064 tmp = _("Buddy Icon"); |
3065 break; | |
6871 | 3066 case AIM_CAPS_VOICE: |
2920 | 3067 tmp = _("Voice"); |
3068 break; | |
6871 | 3069 case AIM_CAPS_DIRECTIM: |
7141 | 3070 tmp = _("AIM Direct IM"); |
2920 | 3071 break; |
6871 | 3072 case AIM_CAPS_CHAT: |
2920 | 3073 tmp = _("Chat"); |
3074 break; | |
6871 | 3075 case AIM_CAPS_GETFILE: |
2920 | 3076 tmp = _("Get File"); |
3077 break; | |
6871 | 3078 case AIM_CAPS_SENDFILE: |
2920 | 3079 tmp = _("Send File"); |
3080 break; | |
6871 | 3081 case AIM_CAPS_GAMES: |
3082 case AIM_CAPS_GAMES2: | |
2920 | 3083 tmp = _("Games"); |
3084 break; | |
6871 | 3085 case AIM_CAPS_SAVESTOCKS: |
4898 | 3086 tmp = _("Add-Ins"); |
2920 | 3087 break; |
6871 | 3088 case AIM_CAPS_SENDBUDDYLIST: |
2920 | 3089 tmp = _("Send Buddy List"); |
3090 break; | |
7141 | 3091 case AIM_CAPS_ICQ_DIRECT: |
3092 tmp = _("ICQ Direct Connect"); | |
2920 | 3093 break; |
6871 | 3094 case AIM_CAPS_APINFO: |
2920 | 3095 tmp = _("AP User"); |
3096 break; | |
6871 | 3097 case AIM_CAPS_ICQRTF: |
2920 | 3098 tmp = _("ICQ RTF"); |
3099 break; | |
6871 | 3100 case AIM_CAPS_EMPTY: |
2920 | 3101 tmp = _("Nihilist"); |
3102 break; | |
6871 | 3103 case AIM_CAPS_ICQSERVERRELAY: |
2920 | 3104 tmp = _("ICQ Server Relay"); |
3105 break; | |
6871 | 3106 case AIM_CAPS_ICQUTF8OLD: |
3107 tmp = _("Old ICQ UTF8"); | |
2920 | 3108 break; |
6871 | 3109 case AIM_CAPS_TRILLIANCRYPT: |
2920 | 3110 tmp = _("Trillian Encryption"); |
3111 break; | |
6871 | 3112 case AIM_CAPS_ICQUTF8: |
4742 | 3113 tmp = _("ICQ UTF8"); |
3114 break; | |
6318 | 3115 case AIM_CAPS_HIPTOP: |
3116 tmp = _("Hiptop"); | |
3117 break; | |
6871 | 3118 case AIM_CAPS_SECUREIM: |
3119 tmp = _("Secure IM"); | |
3120 break; | |
2920 | 3121 default: |
3122 tmp = NULL; | |
3123 break; | |
3124 } | |
3125 if (tmp) | |
3126 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3127 tmp); | |
3128 count++; | |
3129 } | |
3130 bit <<= 1; | |
3131 } | |
4744 | 3132 return buf; |
2920 | 3133 } |
3134 | |
7011 | 3135 static int gaim_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3136 GaimConnection *gc = sess->aux_data; |
7011 | 3137 GString *text; |
7162 | 3138 gchar *info_utf8 = NULL, *away_utf8 = NULL; |
3139 const char *final = NULL; | |
4791 | 3140 va_list ap; |
7011 | 3141 aim_userinfo_t *userinfo; |
2086 | 3142 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3143 va_start(ap, fr); |
7011 | 3144 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3145 va_end(ap); |
3146 | |
7011 | 3147 text = g_string_new(""); |
3148 g_string_append_printf(text, _("Username: <b>%s</b><br>\n"), userinfo->sn); | |
3149 g_string_append_printf(text, _("Warning Level: <b>%d%%</b><br>\n"), (int)((userinfo->warnlevel/10.0) + 0.5)); | |
3150 | |
3151 if (userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) | |
3152 g_string_append_printf(text, _("Online Since: <b>%s</b><br>\n"), | |
3153 asctime(localtime((time_t *)&userinfo->onlinesince))); | |
3154 | |
3155 if (userinfo->present & AIM_USERINFO_PRESENT_MEMBERSINCE) | |
3156 g_string_append_printf(text, _("Member Since: <b>%s</b><br>\n"), | |
3157 asctime(localtime((time_t *)&userinfo->membersince))); | |
3158 | |
3159 if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3160 gchar *itime = gaim_str_seconds_to_string(userinfo->idletime*60); |
7011 | 3161 g_string_append_printf(text, _("Idle: <b>%s</b>"), itime); |
4426 | 3162 g_free(itime); |
2993 | 3163 } else |
7011 | 3164 g_string_append_printf(text, _("Idle: <b>Active</b>")); |
3165 | |
3166 if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
3167 away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
3168 if (away_utf8 != NULL) { | |
7129 | 3169 g_string_append_printf(text, "<hr>%s", away_utf8); |
7011 | 3170 g_free(away_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3171 } |
7011 | 3172 } |
3173 | |
3174 if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) { | |
3175 info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len); | |
3176 if (info_utf8 != NULL) { | |
7129 | 3177 g_string_append_printf(text, "<hr>%s", info_utf8); |
7011 | 3178 g_free(info_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3179 } |
7011 | 3180 } |
3181 | |
7164 | 3182 final = gaim_str_sub_away_formatters(text->str, gaim_account_get_username(gaim_connection_get_account(gc))); |
7011 | 3183 g_string_free(text, TRUE); |
7091 | 3184 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, final, NULL, NULL); |
4151 | 3185 |
2086 | 3186 return 1; |
3187 } | |
3188 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3189 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3190 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3191 fu16_t id; |
2086 | 3192 va_list ap; |
3193 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3194 va_start(ap, fr); |
4199 | 3195 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3196 msg = va_arg(ap, char *); |
3197 va_end(ap); | |
3198 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3199 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3200 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3201 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3202 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3203 _("Your AIM connection may be lost."), NULL); |
2086 | 3204 |
3205 return 1; | |
3206 } | |
3207 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3208 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3209 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3210 fu16_t type; |
5575 | 3211 GaimConnection *gc = sess->aux_data; |
4617 | 3212 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 3213 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3214 va_start(ap, fr); |
4199 | 3215 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3216 |
3217 switch(type) { | |
3218 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3219 fu8_t maxrooms; |
2086 | 3220 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3221 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3222 |
4199 | 3223 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3224 exchangecount = va_arg(ap, int); |
3225 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3226 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3227 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3228 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3229 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3230 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3231 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3232 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3233 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3234 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3235 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3236 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3237 while (od->create_rooms) { |
3238 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3239 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3240 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3241 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3242 g_free(cr->name); |
4617 | 3243 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3244 g_free(cr); |
2086 | 3245 } |
3246 } | |
3247 break; | |
3248 case 0x0008: { | |
3249 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3250 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3251 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3252 fu32_t createtime; |
2086 | 3253 |
3254 fqcn = va_arg(ap, char *); | |
4200 | 3255 instance = (fu16_t)va_arg(ap, unsigned int); |
3256 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3257 flags = (fu16_t)va_arg(ap, unsigned int); | |
3258 createtime = va_arg(ap, fu32_t); | |
3259 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3260 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3261 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3262 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3263 name = va_arg(ap, char *); | |
3264 ck = va_arg(ap, char *); | |
4194 | 3265 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3266 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3267 "created room: %s %hu %hu %hu %u %hu %hu %hhu %hu %s %s\n", |
2086 | 3268 fqcn, |
3269 exchange, instance, flags, | |
3270 createtime, | |
3271 maxmsglen, maxoccupancy, createperms, unknown, | |
3272 name, ck); | |
4617 | 3273 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3274 } |
3275 break; | |
3276 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3277 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3278 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3279 break; |
3280 } | |
4194 | 3281 |
3282 va_end(ap); | |
3283 | |
2086 | 3284 return 1; |
3285 } | |
3286 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3287 static int gaim_conv_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3288 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3289 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3290 aim_userinfo_t *info; |
5575 | 3291 GaimConnection *g = sess->aux_data; |
2086 | 3292 |
3293 struct chat_connection *c = NULL; | |
3294 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3295 va_start(ap, fr); |
2086 | 3296 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3297 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3298 va_end(ap); |
3299 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3300 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3301 if (!c) |
3302 return 1; | |
3303 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3304 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3305 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3306 |
3307 return 1; | |
3308 } | |
3309 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3310 static int gaim_conv_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3311 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3312 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3313 aim_userinfo_t *info; |
5575 | 3314 GaimConnection *g = sess->aux_data; |
2086 | 3315 |
3316 struct chat_connection *c = NULL; | |
3317 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3318 va_start(ap, fr); |
2086 | 3319 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3320 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3321 va_end(ap); |
3322 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3323 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3324 if (!c) |
3325 return 1; | |
3326 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3327 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3328 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3329 |
3330 return 1; | |
3331 } | |
3332 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3333 static int gaim_conv_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
|
3334 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3335 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3336 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3337 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3338 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3339 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3340 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3341 fu32_t creationtime; |
5575 | 3342 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3343 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
|
3344 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3345 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3346 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3347 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3348 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3349 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3350 roomdesc = va_arg(ap, char *); |
4200 | 3351 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3352 creationtime = va_arg(ap, fu32_t); | |
3353 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3354 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3355 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3356 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3357 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3358 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3359 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3360 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3361 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3362 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3363 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3364 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3365 |
2086 | 3366 return 1; |
3367 } | |
3368 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3369 static int gaim_conv_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3370 GaimConnection *gc = sess->aux_data; |
2086 | 3371 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3372 aim_userinfo_t *info; |
2086 | 3373 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3374 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 3375 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3376 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3377 info = va_arg(ap, aim_userinfo_t *); |
4194 | 3378 msg = va_arg(ap, char *); |
3379 va_end(ap); | |
2086 | 3380 |
4269 | 3381 serv_got_chat_in(gc, ccon->id, info->sn, 0, msg, time((time_t)NULL)); |
2086 | 3382 |
3383 return 1; | |
3384 } | |
3385 | |
3694 | 3386 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3387 va_list ap; | |
5575 | 3388 GaimConnection *gc = sess->aux_data; |
3694 | 3389 struct aim_emailinfo *emailinfo; |
3725 | 3390 int havenewmail; |
3694 | 3391 |
3392 va_start(ap, fr); | |
3393 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3394 havenewmail = va_arg(ap, int); |
3694 | 3395 va_end(ap); |
3396 | |
5628 | 3397 if (emailinfo && gaim_account_get_check_mail(gc->account)) { |
5575 | 3398 gchar *to = g_strdup_printf("%s@%s", gaim_account_get_username(gaim_connection_get_account(gc)), emailinfo->domain); |
5542 | 3399 if (emailinfo->unread && havenewmail) |
3400 gaim_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); | |
5537 | 3401 g_free(to); |
3694 | 3402 } |
3403 | |
3404 return 1; | |
3405 } | |
3406 | |
4804 | 3407 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3408 GaimConnection *gc = sess->aux_data; |
4804 | 3409 struct oscar_data *od = gc->proto_data; |
3410 char *sn; | |
3411 | |
3412 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3413 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3414 "removing %s from hash table\n", sn); |
4804 | 3415 od->requesticon = g_slist_remove(od->requesticon, sn); |
3416 free(sn); | |
3417 | |
3418 if (od->icontimer) | |
3419 g_source_remove(od->icontimer); | |
3420 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3421 | |
3422 return 1; | |
3423 } | |
3424 | |
3425 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 3426 GaimConnection *gc = sess->aux_data; |
4804 | 3427 struct oscar_data *od = gc->proto_data; |
3428 GSList *cur; | |
3429 va_list ap; | |
3430 char *sn; | |
4853 | 3431 fu8_t *iconcsum, *icon; |
3432 fu16_t iconcsumlen, iconlen; | |
4804 | 3433 |
3434 va_start(ap, fr); | |
3435 sn = va_arg(ap, char *); | |
4853 | 3436 iconcsum = va_arg(ap, fu8_t *); |
3437 iconcsumlen = va_arg(ap, int); | |
4804 | 3438 icon = va_arg(ap, fu8_t *); |
3439 iconlen = va_arg(ap, int); | |
3440 va_end(ap); | |
3441 | |
4853 | 3442 if (iconlen > 0) { |
3443 char *b16; | |
6695 | 3444 GaimBuddy *b = gaim_find_buddy(gc->account, sn); |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3445 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3446 sn, icon, iconlen); |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
3447 b16 = gaim_base16_encode(iconcsum, iconcsumlen); |
5129 | 3448 if (b16) { |
3449 gaim_buddy_set_setting(b, "icon_checksum", b16); | |
3450 gaim_blist_save(); | |
7162 | 3451 g_free(b16); |
5129 | 3452 } |
4853 | 3453 } |
4804 | 3454 |
3455 cur = od->requesticon; | |
3456 while (cur) { | |
3457 char *cursn = cur->data; | |
3458 if (!aim_sncmp(cursn, sn)) { | |
3459 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3460 free(cursn); | |
3461 cur = od->requesticon; | |
3462 } else | |
3463 cur = cur->next; | |
3464 } | |
3465 | |
3466 if (od->icontimer) | |
3467 g_source_remove(od->icontimer); | |
3468 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3469 | |
3470 return 1; | |
3471 } | |
3472 | |
3473 static gboolean gaim_icon_timerfunc(gpointer data) { | |
5575 | 3474 GaimConnection *gc = data; |
4804 | 3475 struct oscar_data *od = gc->proto_data; |
7011 | 3476 aim_userinfo_t *userinfo; |
4804 | 3477 aim_conn_t *conn; |
3478 | |
3479 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
5892 | 3480 if (!conn) { |
3481 if (!od->iconconnecting) { | |
3482 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
3483 od->iconconnecting = TRUE; | |
3484 } | |
4804 | 3485 return FALSE; |
3486 } | |
3487 | |
5842 | 3488 if (od->set_icon) { |
6039 | 3489 struct stat st; |
3490 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
3491 if (iconfile == NULL) { | |
3492 /* Set an empty icon, or something */ | |
3493 } else if (!stat(iconfile, &st)) { | |
3494 char *buf = g_malloc(st.st_size); | |
3495 FILE *file = fopen(iconfile, "rb"); | |
3496 if (file) { | |
3497 fread(buf, 1, st.st_size, file); | |
3498 fclose(file); | |
3499 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
3500 "Uploading icon to icon server\n"); | |
6879 | 3501 aim_bart_upload(od->sess, buf, st.st_size); |
5842 | 3502 } else |
3503 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 3504 "Can't open buddy icon file!\n"); |
3505 g_free(buf); | |
3506 } else { | |
3507 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
3508 "Can't stat buddy icon file!\n"); | |
5842 | 3509 } |
3510 od->set_icon = FALSE; | |
3511 } | |
3512 | |
3513 if (!od->requesticon) { | |
3514 gaim_debug(GAIM_DEBUG_MISC, "oscar", | |
3515 "no more icons to request\n"); | |
3516 return FALSE; | |
3517 } | |
3518 | |
7045 | 3519 userinfo = aim_locate_finduserinfo(od->sess, (char *)od->requesticon->data); |
7011 | 3520 if ((userinfo != NULL) && (userinfo->iconcsumlen > 0)) { |
3521 aim_bart_request(od->sess, od->requesticon->data, userinfo->iconcsum, userinfo->iconcsumlen); | |
4804 | 3522 return FALSE; |
3523 } else { | |
3524 char *sn = od->requesticon->data; | |
3525 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3526 free(sn); | |
3527 } | |
3528 | |
3529 return TRUE; | |
3530 } | |
3531 | |
2246
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 * 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
|
3534 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3535 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3536 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3537 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3538 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3539 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3540 va_start(ap, fr); |
4199 | 3541 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3542 sn = va_arg(ap, char *); |
3543 va_end(ap); | |
3544 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3545 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 3546 |
3547 return 1; | |
3548 } | |
3549 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3550 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
|
3551 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3552 "invalid", |
4194 | 3553 "change", |
3554 "warning", | |
3555 "limit", | |
3556 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3557 }; |
2086 | 3558 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3559 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3560 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3561 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3562 va_start(ap, fr); |
4200 | 3563 code = (fu16_t)va_arg(ap, unsigned int); |
3564 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3565 windowsize = va_arg(ap, fu32_t); | |
3566 clear = va_arg(ap, fu32_t); | |
3567 alert = va_arg(ap, fu32_t); | |
3568 limit = va_arg(ap, fu32_t); | |
3569 disconnect = va_arg(ap, fu32_t); | |
3570 currentavg = va_arg(ap, fu32_t); | |
3571 maxavg = va_arg(ap, fu32_t); | |
2086 | 3572 va_end(ap); |
3573 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3574 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3575 "rate %s (param ID 0x%04hx): curavg = %u, maxavg = %u, alert at %u, " |
3576 "clear warning at %u, limit at %u, disconnect at %u (window size = %u)\n", | |
2086 | 3577 (code < 5) ? codes[code] : codes[0], |
3578 rateclass, | |
3579 currentavg, maxavg, | |
3580 alert, clear, | |
3581 limit, disconnect, | |
3582 windowsize); | |
3583 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3584 /* XXX fix these values */ |
2086 | 3585 if (code == AIM_RATE_CODE_CHANGE) { |
3586 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3587 aim_conn_setlatency(fr->conn, 0); |
2086 | 3588 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3589 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3590 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3591 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
6040 | 3592 _("The last action you attempted could not be " |
3593 "performed because you are over the rate limit. " | |
3594 "Please wait 10 seconds and try again.")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3595 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3596 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3597 aim_conn_setlatency(fr->conn, 0); |
2086 | 3598 } |
3599 | |
3600 return 1; | |
3601 } | |
3602 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3603 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3604 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3605 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3606 aim_userinfo_t *userinfo; |
5575 | 3607 GaimConnection *gc = sess->aux_data; |
2086 | 3608 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3609 va_start(ap, fr); |
4199 | 3610 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3611 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3612 va_end(ap); |
3613 | |
7111 | 3614 serv_got_eviled(gc, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); |
2086 | 3615 |
3616 return 1; | |
3617 } | |
3618 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3619 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
|
3620 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3621 aim_userinfo_t *info; |
5575 | 3622 GaimConnection *gc = sess->aux_data; |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3623 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3624 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3625 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3626 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3627 |
5628 | 3628 gc->evil = (info->warnlevel/10.0) + 0.5; |
4841 | 3629 |
3630 if (info->onlinesince) | |
3631 gc->login_time_official = info->onlinesince; | |
2507
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 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3634 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3635 |
4649 | 3636 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3637 GaimConnection *gc = sess->aux_data; |
4666 | 3638 struct oscar_data *od = gc->proto_data; |
4649 | 3639 va_list ap; |
3640 fu16_t code; | |
3641 char *msg; | |
3642 | |
3643 va_start(ap, fr); | |
3644 code = (fu16_t)va_arg(ap, int); | |
3645 msg = va_arg(ap, char *); | |
3646 va_end(ap); | |
3647 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3648 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3649 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3650 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3651 if (code == 0x0001) { |
6113 | 3652 gc->wants_to_die = TRUE; |
5579 | 3653 gaim_connection_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3654 } else { |
5579 | 3655 gaim_connection_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3656 } |
4666 | 3657 od->killme = TRUE; |
4649 | 3658 } |
3659 | |
3660 return 1; | |
3661 } | |
3662 | |
2675 | 3663 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
|
3664 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3665 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3666 |
3667 #ifndef NOSSI | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3668 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting ssi list\n"); |
4889 | 3669 aim_ssi_reqrights(sess); |
6350 | 3670 aim_ssi_reqdata(sess); |
4230 | 3671 #endif |
3672 | |
7011 | 3673 aim_locate_reqrights(sess); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3674 aim_bos_reqbuddyrights(sess, fr->conn); |
4617 | 3675 aim_im_reqparams(sess); |
5948 | 3676 aim_bos_reqrights(sess, fr->conn); /* XXX - Don't call this with ssi? */ |
4230 | 3677 |
3678 #ifdef NOSSI | |
3679 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); | |
3680 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3681 #endif | |
2086 | 3682 |
3683 return 1; | |
3684 } | |
3685 | |
2675 | 3686 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3687 GaimConnection *gc = sess->aux_data; |
2647 | 3688 struct oscar_data *od = gc->proto_data; |
3689 | |
6905 | 3690 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0003, gaim_info_change, 0); |
3691 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0005, gaim_info_change, 0); | |
3692 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0007, gaim_account_confirm, 0); | |
3693 | |
2672 | 3694 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3695 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3696 |
2647 | 3697 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3698 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3699 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3700 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3701 od->oldp = NULL; |
2647 | 3702 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3703 od->newp = NULL; |
2647 | 3704 od->chpass = FALSE; |
3705 } | |
2979 | 3706 if (od->setnick) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3707 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screenname\n"); |
2979 | 3708 aim_admin_setnick(sess, fr->conn, od->newsn); |
3709 g_free(od->newsn); | |
3710 od->newsn = NULL; | |
3711 od->setnick = FALSE; | |
3712 } | |
2647 | 3713 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3714 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3715 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3716 od->conf = FALSE; |
3717 } | |
3718 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3719 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3720 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3721 od->reqemail = FALSE; |
3722 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3723 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3724 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3725 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3726 g_free(od->email); |
5497 | 3727 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3728 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3729 } |
2647 | 3730 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3731 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3732 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3733 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3734 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
|
3735 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3736 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3737 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3738 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3739 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3740 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3741 |
4194 | 3742 /* 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
|
3743 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
5556 | 3744 "max sender evil = %f, max receiver evil = %f, min msg interval = %u\n", |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3745 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3746 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3747 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3748 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3749 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3750 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3751 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3752 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3753 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3754 |
4617 | 3755 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3756 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3757 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3758 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3759 |
2993 | 3760 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3761 { | |
5575 | 3762 GaimConnection *gc = sess->aux_data; |
4617 | 3763 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5306 | 3764 va_list ap; |
3765 fu16_t maxsiglen; | |
2993 | 3766 |
3767 va_start(ap, fr); | |
4199 | 3768 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3769 va_end(ap); |
3770 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3771 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3772 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3773 |
4617 | 3774 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3775 | |
3776 if (od->icq) | |
7011 | 3777 aim_locate_setprofile(sess, NULL, NULL, 0, NULL, NULL, 0, caps_icq); |
5301 | 3778 else |
5954 | 3779 oscar_set_info(gc, gc->account->user_info); |
2993 | 3780 |
3781 return 1; | |
3782 } | |
3783 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3784 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
|
3785 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3786 fu16_t maxbuddies, maxwatchers; |
5575 | 3787 GaimConnection *gc = sess->aux_data; |
4617 | 3788 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3789 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3790 va_start(ap, fr); |
4199 | 3791 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3792 maxwatchers = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3793 va_end(ap); |
3794 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3795 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3796 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3797 |
4617 | 3798 od->rights.maxbuddies = (guint)maxbuddies; |
3799 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3800 |
2086 | 3801 return 1; |
3802 } | |
3803 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3804 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
|
3805 fu16_t maxpermits, maxdenies; |
2086 | 3806 va_list ap; |
5575 | 3807 GaimConnection *gc = sess->aux_data; |
4617 | 3808 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 3809 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3810 va_start(ap, fr); |
4199 | 3811 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3812 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3813 va_end(ap); |
3814 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3815 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3816 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3817 |
4617 | 3818 od->rights.maxpermits = (guint)maxpermits; |
3819 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3820 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
3821 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2993 | 3822 serv_finish_login(gc); |
3823 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3824 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3825 |
2672 | 3826 aim_clientready(sess, fr->conn); |
5948 | 3827 aim_srv_setavailmsg(sess, NULL); |
5917 | 3828 aim_bos_setidle(sess, fr->conn, 0); |
4617 | 3829 |
4664 | 3830 if (od->icq) { |
3831 aim_icq_reqofflinemsgs(sess); | |
3832 aim_icq_hideip(sess); | |
3833 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3834 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3835 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3836 if (sess->authinfo->email) |
3837 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3838 |
3839 return 1; | |
3840 } | |
3841 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3842 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
|
3843 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3844 struct aim_icq_offlinemsg *msg; |
4075 | 3845 struct aim_incomingim_ch4_args args; |
3846 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3847 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3848 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3849 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3850 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3851 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3852 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3853 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3854 args.uin = msg->sender; |
3855 args.type = msg->type; | |
4173 | 3856 args.flags = msg->flags; |
4076 | 3857 args.msglen = msg->msglen; |
4075 | 3858 args.msg = msg->msg; |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3859 t = gaim_time_build(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
4075 | 3860 incomingim_chan4(sess, fr->conn, NULL, &args, t); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3861 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3862 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3863 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3864 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3865 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
|
3866 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3867 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3868 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3869 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3870 |
4624 | 3871 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
|
3872 { |
5575 | 3873 GaimConnection *gc = sess->aux_data; |
4819 | 3874 gchar *buf, *tmp, *utf8; |
4624 | 3875 gchar who[16]; |
6873 | 3876 GaimBuddy *buddy; |
3877 gchar *primary; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3878 va_list ap; |
4151 | 3879 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3880 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3881 va_start(ap, fr); |
4151 | 3882 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3883 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3884 |
4664 | 3885 if (!info->uin) |
3886 return 0; | |
3887 | |
5556 | 3888 g_snprintf(who, sizeof(who), "%u", info->uin); |
6623 | 3889 buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3890 if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
6623 | 3891 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3892 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3893 if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) { |
6623 | 3894 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3895 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3896 if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) { |
6623 | 3897 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3898 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3899 if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) { |
6623 | 3900 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 | 3901 } |
3902 if (info->numaddresses && info->email2) { | |
3903 int i; | |
3904 for (i = 0; i < info->numaddresses; i++) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3905 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) { |
6623 | 3906 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 | 3907 } |
4625 | 3908 } |
4624 | 3909 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3910 if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) { |
6623 | 3911 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4625 | 3912 } |
3913 if (info->gender) { | |
6623 | 3914 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender"), ":</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 3915 } |
4624 | 3916 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 3917 char date[30]; |
3918 struct tm tm; | |
3919 tm.tm_mday = (int)info->birthday; | |
3920 tm.tm_mon = (int)info->birthmonth-1; | |
3921 tm.tm_year = (int)info->birthyear-1900; | |
4628 | 3922 strftime(date, sizeof(date), "%x", &tm); |
6623 | 3923 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday"), ":</b> ", date, NULL); g_free(tmp); |
4151 | 3924 } |
4624 | 3925 if (info->age) { |
3926 char age[5]; | |
3927 snprintf(age, sizeof(age), "%hhd", info->age); | |
6623 | 3928 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp); |
4819 | 3929 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3930 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) { |
6623 | 3931 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); |
4819 | 3932 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3933 if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) { |
6623 | 3934 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3935 } |
3936 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 3937 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
6623 | 3938 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Home Address"), ":</b>", NULL); g_free(tmp); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3939 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) { |
6623 | 3940 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3941 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3942 if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) { |
6623 | 3943 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3944 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3945 if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) { |
6623 | 3946 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3947 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3948 if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) { |
6623 | 3949 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3950 } |
3951 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 3952 } |
4641 | 3953 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
6623 | 3954 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Address"), ":</b>", NULL); g_free(tmp); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3955 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) { |
6623 | 3956 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3957 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3958 if (info->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) { |
6623 | 3959 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3960 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3961 if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) { |
6623 | 3962 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3963 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3964 if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) { |
6623 | 3965 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3966 } |
3967 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
3968 } | |
4641 | 3969 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
6623 | 3970 tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Information"), ":</b>", NULL); g_free(tmp); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3971 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) { |
6623 | 3972 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3973 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3974 if (info->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) { |
6623 | 3975 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3976 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3977 if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) { |
6623 | 3978 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3979 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3980 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) { |
6623 | 3981 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 | 3982 } |
3983 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 3984 } |
3985 | |
6873 | 3986 buddy = gaim_find_buddy(gaim_connection_get_account(gc), who); |
3987 primary = g_strdup_printf(_("ICQ Info for %s"), gaim_get_buddy_alias(buddy)); | |
3988 gaim_notify_formatted(gc, NULL, primary, NULL, buf, NULL, NULL); | |
3989 g_free(primary); | |
4151 | 3990 g_free(buf); |
3991 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3992 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3993 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3994 |
4759 | 3995 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
3996 { | |
5575 | 3997 GaimConnection *gc = sess->aux_data; |
4820 | 3998 gchar who[16], *utf8; |
6695 | 3999 GaimBuddy *b; |
4759 | 4000 va_list ap; |
4001 struct aim_icq_info *info; | |
4002 | |
4003 va_start(ap, fr); | |
4004 info = va_arg(ap, struct aim_icq_info *); | |
4005 va_end(ap); | |
4006 | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4007 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
5556 | 4008 g_snprintf(who, sizeof(who), "%u", info->uin); |
4820 | 4009 serv_got_alias(gc, who, utf8); |
4759 | 4010 if ((b = gaim_find_buddy(gc->account, who))) { |
4820 | 4011 gaim_buddy_set_setting(b, "servernick", utf8); |
4759 | 4012 gaim_blist_save(); |
4013 } | |
4820 | 4014 g_free(utf8); |
4759 | 4015 } |
4016 | |
4017 return 1; | |
4018 } | |
4019 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4020 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
|
4021 { |
7032 | 4022 GaimConnection *gc = sess->aux_data; |
4023 gchar *text; | |
4024 va_list ap; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4025 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4026 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4027 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4028 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4029 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4030 url = va_arg(ap, char *); |
4199 | 4031 wid = (fu16_t) va_arg(ap, int); |
4032 hei = (fu16_t) va_arg(ap, int); | |
4033 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4034 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4035 |
7032 | 4036 text = g_strdup_printf("%s<br><a href=\"%s\">%s</a>", msg, url, url); |
4037 gaim_notify_formatted(gc, NULL, _("Pop-Up Message"), NULL, text, NULL, NULL); | |
4038 g_free(text); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4039 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4040 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4041 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4042 |
7032 | 4043 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) |
4044 { | |
6873 | 4045 GaimConnection *gc = sess->aux_data; |
4046 gchar *secondary; | |
4047 GString *text; | |
4048 int i, num; | |
2086 | 4049 va_list ap; |
6873 | 4050 char *email, *SNs; |
2086 | 4051 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4052 va_start(ap, fr); |
6873 | 4053 email = va_arg(ap, char *); |
2086 | 4054 num = va_arg(ap, int); |
4055 SNs = va_arg(ap, char *); | |
4056 va_end(ap); | |
4057 | |
6873 | 4058 secondary = g_strdup_printf(_("The following screennames are associated with %s"), email); |
4059 text = g_string_new(""); | |
2086 | 4060 for (i = 0; i < num; i++) |
6873 | 4061 g_string_append_printf(text, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4062 gaim_notify_formatted(gc, NULL, _("Search Results"), secondary, text->str, NULL, NULL); | |
4063 | |
4064 g_free(secondary); | |
4065 g_string_free(text, TRUE); | |
2086 | 4066 |
4067 return 1; | |
4068 } | |
4069 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4070 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4071 va_list ap; |
6873 | 4072 char *email; |
5420 | 4073 char *buf; |
2086 | 4074 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4075 va_start(ap, fr); |
6873 | 4076 email = va_arg(ap, char *); |
2086 | 4077 va_end(ap); |
4078 | |
6873 | 4079 buf = g_strdup_printf(_("No results found for email address %s"), email); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4080 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4081 g_free(buf); |
2086 | 4082 |
4083 return 1; | |
4084 } | |
4085 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4086 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
6873 | 4087 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4088 fu16_t status; |
2086 | 4089 va_list ap; |
4090 char msg[256]; | |
4091 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4092 va_start(ap, fr); |
4199 | 4093 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4094 va_end(ap); |
4095 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4096 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4097 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4098 status ? "unknown" : "email sent"); |
4099 if (!status) { | |
5302 | 4100 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
5575 | 4101 gaim_account_get_username(gaim_connection_get_account(gc))); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4102 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4103 } |
4104 | |
4105 return 1; | |
4106 } | |
4107 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4108 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4109 GaimConnection *gc = sess->aux_data; |
2086 | 4110 va_list ap; |
3912 | 4111 fu16_t perms, err; |
4112 char *url, *sn, *email; | |
4113 int change; | |
2086 | 4114 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4115 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4116 change = va_arg(ap, int); |
4199 | 4117 perms = (fu16_t) va_arg(ap, unsigned int); |
4118 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4119 url = va_arg(ap, char *); |
4120 sn = va_arg(ap, char *); | |
4121 email = va_arg(ap, char *); | |
2086 | 4122 va_end(ap); |
4123 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4124 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4125 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4126 change ? "change" : "request", perms, err, url, sn, email); |
4127 | |
4128 if (err && url) { | |
4129 char *dialog_msg; | |
4130 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4131 switch (err) { | |
4132 case 0x0001: { | |
4133 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4134 } break; | |
4135 case 0x0006: { | |
4136 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4137 } break; | |
4138 case 0x000b: { | |
4139 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4140 } break; | |
4141 case 0x001d: { | |
4142 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); | |
4143 } break; | |
4144 case 0x0021: { | |
4145 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); | |
4146 } break; | |
4147 case 0x0023: { | |
4148 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4149 } break; | |
4150 default: { | |
4151 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4152 } break; | |
4153 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4154 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4155 g_free(dialog_top); |
4156 g_free(dialog_msg); | |
4157 return 1; | |
4158 } | |
4159 | |
4160 if (sn) { | |
4585 | 4161 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
|
4162 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4163 g_free(dialog_msg); |
4164 } | |
4165 | |
4166 if (email) { | |
5575 | 4167 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), |
4168 gaim_account_get_username(gaim_connection_get_account(gc)), email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4169 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4170 g_free(dialog_msg); |
2086 | 4171 } |
4172 | |
4173 return 1; | |
4174 } | |
4175 | |
5575 | 4176 static void oscar_keepalive(GaimConnection *gc) { |
4617 | 4177 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4178 aim_flap_nop(od->sess, od->conn); | |
2086 | 4179 } |
4180 | |
6059 | 4181 static int oscar_send_typing(GaimConnection *gc, const char *name, int typing) { |
4617 | 4182 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4183 struct direct_im *dim = find_direct_im(od, name); | |
3595 | 4184 if (dim) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4185 if (typing == GAIM_TYPING) |
4870 | 4186 aim_odc_send_typing(od->sess, dim->conn, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4187 else if (typing == GAIM_TYPED) |
4870 | 4188 aim_odc_send_typing(od->sess, dim->conn, 0x0001); |
4189 else | |
4190 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4191 else { |
5300 | 4192 /* Don't send if this turkey is in our deny list */ |
4193 GSList *list; | |
4194 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4195 if (!list) { | |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
4196 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(name)); |
5300 | 4197 if (bi && bi->typingnot) { |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4198 if (typing == GAIM_TYPING) |
5300 | 4199 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4200 else if (typing == GAIM_TYPED) |
5300 | 4201 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); |
4202 else | |
4203 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4204 } | |
3595 | 4205 } |
4206 } | |
2993 | 4207 return 0; |
4208 } | |
5575 | 4209 static void oscar_ask_direct_im(GaimConnection *gc, const char *name); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4210 static int gaim_odc_send_im(aim_session_t *, aim_conn_t *, const char *, GaimConvImFlags); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4211 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4212 static int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimConvImFlags imflags) { |
4617 | 4213 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4214 struct direct_im *dim = find_direct_im(od, name); | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4215 int ret = 0; |
3659 | 4216 GError *err = NULL; |
5575 | 4217 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
4218 char *tmpmsg = NULL; |
3458 | 4219 |
4838 | 4220 if (dim && dim->connected) { |
4221 /* If we're directly connected, send a direct IM */ | |
6982 | 4222 ret = gaim_odc_send_im(od->sess, dim->conn, message, imflags); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4223 } else if (imflags & GAIM_CONV_IM_IMAGES) { |
3044 | 4224 /* Trying to send an IM image outside of a direct connection. */ |
4225 oscar_ask_direct_im(gc, name); | |
4838 | 4226 ret = -ENOTCONN; |
2086 | 4227 } else { |
4738 | 4228 struct buddyinfo *bi; |
3008 | 4229 struct aim_sendimext_args args; |
4230 struct stat st; | |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4231 gsize len; |
4269 | 4232 |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
4233 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(name)); |
4738 | 4234 if (!bi) { |
4235 bi = g_new0(struct buddyinfo, 1); | |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
4236 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(name)), bi); |
4738 | 4237 } |
4238 | |
3008 | 4239 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4240 if (od->icq) { |
4241 args.features = features_icq; | |
4242 args.featureslen = sizeof(features_icq); | |
3008 | 4243 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4244 } else { |
4245 args.features = features_aim; | |
4246 args.featureslen = sizeof(features_aim); | |
4972 | 4247 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4248 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
4972 | 4249 args.flags |= AIM_IMFLAGS_AWAY; |
4665 | 4250 } |
4269 | 4251 |
4738 | 4252 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4253 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4254 "Sending buddy icon request with message\n"); |
3008 | 4255 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4256 bi->ico_need = FALSE; |
3008 | 4257 } |
4269 | 4258 |
5575 | 4259 if (iconfile && !stat(iconfile, &st)) { |
4260 FILE *file = fopen(iconfile, "r"); | |
3008 | 4261 if (file) { |
4262 char *buf = g_malloc(st.st_size); | |
4263 fread(buf, 1, st.st_size, file); | |
6039 | 4264 fclose(file); |
4269 | 4265 |
3008 | 4266 args.iconlen = st.st_size; |
4617 | 4267 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4268 args.iconstamp = st.st_mtime; |
4269 | |
4738 | 4270 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) |
4271 bi->ico_informed = FALSE; | |
4272 | |
4273 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4274 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4275 "Claiming to have a buddy icon\n"); |
4738 | 4276 args.flags |= AIM_IMFLAGS_HASICON; |
4277 bi->ico_me_len = args.iconlen; | |
4278 bi->ico_me_csum = args.iconsum; | |
4279 bi->ico_me_time = args.iconstamp; | |
4280 bi->ico_informed = TRUE; | |
4281 } | |
4282 | |
3008 | 4283 g_free(buf); |
2086 | 4284 } |
4285 } | |
4269 | 4286 |
3008 | 4287 args.destsn = name; |
4269 | 4288 |
6310 | 4289 /* For ICQ send newlines as CR/LF, for AIM send newlines as <BR> */ |
4290 if (isdigit(name[0])) | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4291 tmpmsg = gaim_str_add_cr(message); |
6310 | 4292 else |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4293 tmpmsg = gaim_strdup_withhtml(message); |
6310 | 4294 len = strlen(tmpmsg); |
4295 | |
4296 args.flags |= oscar_encoding_check(tmpmsg); | |
3642 | 4297 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4298 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4299 args.charset = 0x0002; |
4665 | 4300 args.charsubset = 0x0000; |
6310 | 4301 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
3659 | 4302 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4303 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4304 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4305 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4306 "This really shouldn't happen!\n"); |
3659 | 4307 /* We really shouldn't try to send the |
4308 * IM now, but I'm not sure what to do */ | |
4800 | 4309 g_error_free(err); |
3659 | 4310 } |
3850 | 4311 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4312 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4313 "Sending ISO-8859-1 IM\n"); |
4662 | 4314 args.charset = 0x0003; |
4665 | 4315 args.charsubset = 0x0000; |
6310 | 4316 args.msg = g_convert(tmpmsg, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
3659 | 4317 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4318 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4319 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4320 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4321 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4322 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
6310 | 4323 len = strlen(tmpmsg); |
4800 | 4324 g_error_free(err); |
6310 | 4325 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
3659 | 4326 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4327 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4328 "Error in unicode fallback: %s\n", err->message); |
4800 | 4329 g_error_free(err); |
3659 | 4330 } |
3642 | 4331 } |
4332 } else { | |
4662 | 4333 args.charset = 0x0000; |
4334 args.charsubset = 0x0000; | |
6310 | 4335 args.msg = tmpmsg; |
3642 | 4336 } |
4337 args.msglen = len; | |
4269 | 4338 |
4617 | 4339 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4340 } |
4838 | 4341 |
6310 | 4342 g_free(tmpmsg); |
4343 | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4344 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4345 return 1; |
6310 | 4346 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4347 return ret; |
2086 | 4348 } |
4349 | |
7011 | 4350 static void oscar_get_info(GaimConnection *gc, const char *name) { |
4351 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4352 | |
7173 | 4353 if (od->icq && isdigit(name[0])) |
4624 | 4354 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4355 else |
7235 | 4356 aim_locate_getinfoshort(od->sess, name, 0x00000003); |
7011 | 4357 } |
4358 | |
4359 static void oscar_get_away(GaimConnection *gc, const char *who) { | |
4360 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4617 | 4361 if (od->icq) { |
7011 | 4362 GaimBuddy *budlight = gaim_find_buddy(gc->account, who); |
3212 | 4363 if (budlight) |
3595 | 4364 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4365 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4366 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4367 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4368 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4369 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4370 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
7023 | 4371 "Error: Could not find %s in local buddy list, therefore unable to request status message.\n", who); |
3212 | 4372 } else |
7011 | 4373 aim_locate_getinfoshort(od->sess, who, 0x00000002); |
4374 } | |
4375 | |
4376 static void oscar_set_dir(GaimConnection *gc, const char *first, const char *middle, const char *last, | |
3466 | 4377 const char *maiden, const char *city, const char *state, const char *country, int web) { |
4617 | 4378 /* XXX - some of these things are wrong, but i'm lazy */ |
7011 | 4379 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4380 aim_locate_setdirinfo(od->sess, first, middle, last, | |
2086 | 4381 maiden, NULL, NULL, city, state, NULL, 0, web); |
4382 } | |
4383 | |
5575 | 4384 static void oscar_set_idle(GaimConnection *gc, int time) { |
5129 | 4385 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4617 | 4386 aim_bos_setidle(od->sess, od->conn, time); |
2086 | 4387 } |
4388 | |
5954 | 4389 static void oscar_set_info(GaimConnection *gc, const char *text) { |
5129 | 4390 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4391 fu32_t flags = 0; | |
6019 | 4392 char *text_html = NULL; |
5129 | 4393 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4394 gsize msglen = 0; |
2993 | 4395 |
4617 | 4396 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4397 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4398 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4399 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4400 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4401 "again when you are fully connected.")); |
4617 | 4402 |
4403 if (od->icq) | |
7011 | 4404 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, NULL, 0, caps_icq); |
4151 | 4405 else { |
5129 | 4406 if (!text) { |
7011 | 4407 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, NULL, 0, caps_aim); |
5129 | 4408 return; |
4409 } | |
6019 | 4410 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4411 text_html = gaim_strdup_withhtml(text); |
6019 | 4412 flags = oscar_encoding_check(text_html); |
5129 | 4413 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4414 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4415 aim_locate_setprofile(od->sess, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
5129 | 4416 g_free(msg); |
4417 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4418 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4419 aim_locate_setprofile(od->sess, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
5129 | 4420 g_free(msg); |
4151 | 4421 } else { |
6019 | 4422 msglen = strlen(text_html); |
7011 | 4423 aim_locate_setprofile(od->sess, "us-ascii", text_html, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
4151 | 4424 } |
5129 | 4425 |
4426 if (msglen > od->rights.maxsiglen) { | |
4427 gchar *errstr; | |
6308 | 4428 errstr = g_strdup_printf(ngettext("The maximum profile length of %d byte " |
4429 "has been exceeded. Gaim has truncated it for you.", | |
4430 "The maximum profile length of %d bytes " | |
4431 "has been exceeded. Gaim has truncated it for you.", | |
4432 od->rights.maxsiglen), od->rights.maxsiglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4433 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); |
5129 | 4434 g_free(errstr); |
4435 } | |
4436 | |
6019 | 4437 g_free(text_html); |
4438 | |
5129 | 4439 } |
2993 | 4440 |
4441 return; | |
2086 | 4442 } |
4443 | |
5575 | 4444 static void oscar_set_away_aim(GaimConnection *gc, struct oscar_data *od, const char *text) |
2993 | 4445 { |
5129 | 4446 fu32_t flags = 0; |
6019 | 4447 gchar *text_html = NULL; |
5129 | 4448 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4449 gsize msglen = 0; |
2993 | 4450 |
4451 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4452 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4453 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4454 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4455 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4456 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4457 "fully connected.")); |
5129 | 4458 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4459 if (gc->away) { |
2993 | 4460 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4461 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4462 } |
2993 | 4463 |
5129 | 4464 if (!text) { |
7011 | 4465 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0, caps_aim); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4466 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4467 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4468 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4469 text_html = gaim_strdup_withhtml(text); |
6019 | 4470 flags = oscar_encoding_check(text_html); |
5129 | 4471 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4472 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4473 aim_locate_setprofile(od->sess, NULL, NULL, 0, "unicode-2-0", msg, |
5129 | 4474 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
4475 g_free(msg); | |
4476 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4477 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4478 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4479 aim_locate_setprofile(od->sess, NULL, NULL, 0, "iso-8859-1", msg, |
5129 | 4480 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
4481 g_free(msg); | |
6019 | 4482 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4483 } else { |
6019 | 4484 msglen = strlen(text_html); |
7011 | 4485 aim_locate_setprofile(od->sess, NULL, NULL, 0, "us-ascii", text_html, |
5129 | 4486 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
6019 | 4487 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4488 } |
4489 | |
4490 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4491 gchar *errstr; |
4492 | |
6308 | 4493 errstr = g_strdup_printf(ngettext("The maximum away message length of %d byte " |
4494 "has been exceeded. Gaim has truncated it for you.", | |
4495 "The maximum away message length of %d bytes " | |
4496 "has been exceeded. Gaim has truncated it for you.", | |
4497 od->rights.maxawaymsglen), od->rights.maxawaymsglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4498 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4499 g_free(errstr); |
4500 } | |
6019 | 4501 |
4502 g_free(text_html); | |
2993 | 4503 return; |
4504 } | |
4505 | |
5575 | 4506 static void oscar_set_away_icq(GaimConnection *gc, struct oscar_data *od, const char *state, const char *message) |
2993 | 4507 { |
5575 | 4508 GaimAccount *account = gaim_connection_get_account(gc); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4509 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4510 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4511 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4512 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4513 |
4342 | 4514 if (strcmp(state, _("Invisible"))) { |
5575 | 4515 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != account->perm_deny)) |
4516 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); | |
4517 account->perm_deny = 4; | |
4342 | 4518 } else { |
5542 | 4519 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03)) |
4889 | 4520 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
5575 | 4521 account->perm_deny = 3; |
4342 | 4522 } |
4523 | |
4524 if (!strcmp(state, _("Online"))) | |
4901 | 4525 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4526 else if (!strcmp(state, _("Away"))) { |
4901 | 4527 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4528 gc->away = g_strdup(""); |
4342 | 4529 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4530 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
|
4531 gc->away = g_strdup(""); |
4342 | 4532 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4533 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
|
4534 gc->away = g_strdup(""); |
4342 | 4535 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4536 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
|
4537 gc->away = g_strdup(""); |
4342 | 4538 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4539 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4540 gc->away = g_strdup(""); |
4342 | 4541 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4542 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4543 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4544 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4545 if (message) { |
4901 | 4546 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
|
4547 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4548 } else { |
4901 | 4549 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4550 } |
2086 | 4551 } |
2993 | 4552 |
4553 return; | |
4554 } | |
4555 | |
6059 | 4556 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message) |
2993 | 4557 { |
4558 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
4559 | |
4560 if (od->icq) | |
4561 oscar_set_away_icq(gc, od, state, message); | |
4562 else | |
4563 oscar_set_away_aim(gc, od, message); | |
4564 | |
4565 return; | |
2086 | 4566 } |
4567 | |
6059 | 4568 static void oscar_warn(GaimConnection *gc, const char *name, int anon) { |
4617 | 4569 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4570 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); | |
2086 | 4571 } |
4572 | |
5575 | 4573 static void oscar_dir_search(GaimConnection *gc, const char *first, const char *middle, const char *last, |
3466 | 4574 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
4617 | 4575 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2086 | 4576 if (strlen(email)) |
6879 | 4577 aim_search_address(od->sess, od->conn, email); |
2086 | 4578 } |
4579 | |
6787
faa491042c66
[gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4580 static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { |
4230 | 4581 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4582 #ifdef NOSSI | |
4583 aim_add_buddy(od->sess, od->conn, name); | |
4584 #else | |
4585 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
6695 | 4586 GaimBuddy *buddy = gaim_find_buddy(gc->account, name); |
4587 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4588 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4589 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4590 "ssi: adding buddy %s to group %s\n", name, group->name); |
4889 | 4591 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4592 } |
4593 } | |
4594 #endif | |
4759 | 4595 if (od->icq) |
4596 aim_icq_getalias(od->sess, name); | |
4230 | 4597 } |
4598 | |
5575 | 4599 static void oscar_add_buddies(GaimConnection *gc, GList *buddies) { |
4230 | 4600 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4601 #ifdef NOSSI | |
4602 char buf[MSG_LEN]; | |
4603 int n=0; | |
4604 while (buddies) { | |
4605 if (n > MSG_LEN - 18) { | |
4606 aim_bos_setbuddylist(od->sess, od->conn, buf); | |
4607 n = 0; | |
3092 | 4608 } |
4230 | 4609 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); |
4610 buddies = buddies->next; | |
4611 } | |
4612 aim_bos_setbuddylist(od->sess, od->conn, buf); | |
4613 #else | |
4614 if (od->sess->ssi.received_data) { | |
4615 while (buddies) { | |
6695 | 4616 GaimBuddy *buddy = gaim_find_buddy(gc->account, (const char *)buddies->data); |
4617 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4618 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4619 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4620 "ssi: adding buddy %s to group %s\n", (const char *)buddies->data, group->name); |
4889 | 4621 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4622 } |
4623 buddies = buddies->next; | |
4624 } | |
4625 } | |
4626 #endif | |
4627 } | |
4628 | |
6059 | 4629 static void oscar_remove_buddy(GaimConnection *gc, const char *name, const char *group) { |
4230 | 4630 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4631 #ifdef NOSSI | |
4632 aim_remove_buddy(od->sess, od->conn, name); | |
4633 #else | |
4634 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4635 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4636 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4637 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4638 } |
4639 #endif | |
4640 } | |
4641 | |
5575 | 4642 static void oscar_remove_buddies(GaimConnection *gc, GList *buddies, const char *group) { |
4230 | 4643 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4644 #ifdef NOSSI | |
4645 GList *cur; | |
4646 for (cur=buddies; cur; cur=cur->next) | |
4647 aim_remove_buddy(od->sess, od->conn, cur->data); | |
4648 #else | |
4649 if (od->sess->ssi.received_data) { | |
3092 | 4650 while (buddies) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4651 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4652 "ssi: deleting buddy %s from group %s\n", (char *)buddies->data, group); |
4889 | 4653 aim_ssi_delbuddy(od->sess, buddies->data, group); |
3092 | 4654 buddies = buddies->next; |
4655 } | |
4230 | 4656 } |
4657 #endif | |
4658 } | |
4659 | |
4660 #ifndef NOSSI | |
5575 | 4661 static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { |
4269 | 4662 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4303 | 4663 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
|
4664 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4665 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4666 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4667 } |
4668 } | |
4669 | |
5575 | 4670 static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { |
4269 | 4671 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4672 if (od->sess->ssi.received_data) { | |
4673 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4674 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4675 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4676 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4677 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4678 } |
4679 } | |
4680 } | |
4681 | |
5575 | 4682 static void oscar_rename_group(GaimConnection *g, const char *old_group, const char *new_group, GList *members) { |
4230 | 4683 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
4684 | |
4685 if (od->sess->ssi.received_data) { | |
4686 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4687 oscar_remove_buddies(g, members, old_group); | |
4688 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4689 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4690 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4691 } else { |
4889 | 4692 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4693 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4694 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4695 } |
4696 } | |
4697 } | |
4698 | |
5968 | 4699 static gboolean gaim_ssi_rerequestdata(gpointer data) { |
4700 aim_session_t *sess = data; | |
6350 | 4701 aim_ssi_reqdata(sess); |
5968 | 4702 return FALSE; |
4703 } | |
4704 | |
4642 | 4705 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4706 GaimConnection *gc = sess->aux_data; |
4642 | 4707 struct oscar_data *od = gc->proto_data; |
4708 va_list ap; | |
4709 fu16_t reason; | |
4710 | |
4711 va_start(ap, fr); | |
4712 reason = (fu16_t)va_arg(ap, unsigned int); | |
4713 va_end(ap); | |
4714 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4715 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4716 |
4717 if (reason == 0x0005) { | |
5892 | 4718 gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), |
5828 | 4719 _("Gaim was temporarily unable to retrieve your buddy list from the AIM servers. Your buddy list is not lost, and will probably become available in a few hours.")); |
5968 | 4720 od->getblisttimer = g_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); |
4642 | 4721 } |
4722 | |
4723 /* Activate SSI */ | |
4724 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4725 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5968 | 4726 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: activating server-stored buddy list\n"); |
4642 | 4727 aim_ssi_enable(od->sess); |
4728 | |
4729 return 1; | |
4730 } | |
4731 | |
2991 | 4732 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4733 GaimConnection *gc = sess->aux_data; |
4230 | 4734 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4735 int numtypes, i; | |
4736 fu16_t *maxitems; | |
2991 | 4737 va_list ap; |
4738 | |
4739 va_start(ap, fr); | |
4230 | 4740 numtypes = va_arg(ap, int); |
4741 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4742 va_end(ap); |
4743 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4744 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4745 |
4230 | 4746 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4747 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4748 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4749 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4750 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4751 |
4752 if (numtypes >= 0) | |
4753 od->rights.maxbuddies = maxitems[0]; | |
4754 if (numtypes >= 1) | |
4755 od->rights.maxgroups = maxitems[1]; | |
4756 if (numtypes >= 2) | |
4757 od->rights.maxpermits = maxitems[2]; | |
4758 if (numtypes >= 3) | |
4759 od->rights.maxdenies = maxitems[3]; | |
2991 | 4760 |
4761 return 1; | |
4762 } | |
4763 | |
4764 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4765 GaimConnection *gc = sess->aux_data; |
4766 GaimAccount *account = gaim_connection_get_account(gc); | |
4230 | 4767 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
2995 | 4768 struct aim_ssi_item *curitem; |
2991 | 4769 int tmp; |
4778 | 4770 gboolean export = FALSE; |
4617 | 4771 /* XXX - use these? |
4230 | 4772 va_list ap; |
4773 | |
4774 va_start(ap, fr); | |
4775 fmtver = (fu16_t)va_arg(ap, int); | |
4776 numitems = (fu16_t)va_arg(ap, int); | |
4777 items = va_arg(ap, struct aim_ssi_item); | |
4778 timestamp = va_arg(ap, fu32_t); | |
4779 va_end(ap); */ | |
2991 | 4780 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4781 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4782 "ssi: syncing local list and server list\n"); |
2991 | 4783 |
4784 /* Clean the buddy list */ | |
4889 | 4785 aim_ssi_cleanlist(sess); |
2991 | 4786 |
4787 /* Add from server list to local list */ | |
4230 | 4788 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
2991 | 4789 switch (curitem->type) { |
4230 | 4790 case 0x0000: { /* Buddy */ |
4251 | 4791 if (curitem->name) { |
4292 | 4792 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
7166 | 4793 char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; |
4282 | 4794 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
7166 | 4795 char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; |
6695 | 4796 GaimBuddy *buddy = gaim_find_buddy(gc->account, curitem->name); |
4458 | 4797 /* Should gname be freed here? -- elb */ |
4754 | 4798 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 4799 free(alias); |
4282 | 4800 if (buddy) { |
4292 | 4801 /* Get server stored alias */ |
4705 | 4802 if (alias_utf8) { |
4803 g_free(buddy->alias); | |
4804 buddy->alias = g_strdup(alias_utf8); | |
4805 } | |
4282 | 4806 } else { |
6695 | 4807 GaimGroup *g; |
4687 | 4808 buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); |
5146 | 4809 |
4754 | 4810 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 4811 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 4812 gaim_blist_add_group(g, NULL); |
4813 } | |
5146 | 4814 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4815 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4816 "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
6695 | 4817 gaim_blist_add_buddy(buddy, NULL, g, NULL); |
4778 | 4818 export = TRUE; |
4251 | 4819 } |
7162 | 4820 g_free(gname_utf8); |
4821 g_free(alias_utf8); | |
2991 | 4822 } |
4230 | 4823 } break; |
4824 | |
4825 case 0x0001: { /* Group */ | |
4282 | 4826 /* Shouldn't add empty groups */ |
4230 | 4827 } break; |
4828 | |
4829 case 0x0002: { /* Permit buddy */ | |
2991 | 4830 if (curitem->name) { |
4230 | 4831 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 4832 GSList *list; |
5575 | 4833 for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4834 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4835 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4836 "ssi: adding permit buddy %s to local list\n", curitem->name); |
6400
588e88bcdac5
[gaim-migrate @ 6905]
Christian Hammond <chipx86@chipx86.com>
parents:
6378
diff
changeset
|
4837 gaim_privacy_permit_add(account, curitem->name, TRUE); |
4778 | 4838 export = TRUE; |
2991 | 4839 } |
4840 } | |
4230 | 4841 } break; |
4842 | |
4843 case 0x0003: { /* Deny buddy */ | |
2991 | 4844 if (curitem->name) { |
4845 GSList *list; | |
5575 | 4846 for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4847 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4848 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4849 "ssi: adding deny buddy %s to local list\n", curitem->name); |
6400
588e88bcdac5
[gaim-migrate @ 6905]
Christian Hammond <chipx86@chipx86.com>
parents:
6378
diff
changeset
|
4850 gaim_privacy_deny_add(account, curitem->name, TRUE); |
4778 | 4851 export = TRUE; |
2991 | 4852 } |
4853 } | |
4230 | 4854 } break; |
4855 | |
4856 case 0x0004: { /* Permit/deny setting */ | |
2991 | 4857 if (curitem->data) { |
4858 fu8_t permdeny; | |
5575 | 4859 if ((permdeny = aim_ssi_getpermdeny(sess->ssi.local)) && (permdeny != account->perm_deny)) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4860 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5575 | 4861 "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); |
4862 account->perm_deny = permdeny; | |
4863 if (od->icq && account->perm_deny == 0x03) { | |
4342 | 4864 serv_set_away(gc, "Invisible", ""); |
4865 } | |
4778 | 4866 export = TRUE; |
2991 | 4867 } |
4868 } | |
4230 | 4869 } break; |
4870 | |
4871 case 0x0005: { /* Presence setting */ | |
3109 | 4872 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 4873 } break; |
2991 | 4874 } /* End of switch on curitem->type */ |
4875 } /* End of for loop */ | |
4230 | 4876 |
4877 /* If changes were made, then flush buddy list to file */ | |
4778 | 4878 if (export) |
4349 | 4879 gaim_blist_save(); |
2991 | 4880 |
4759 | 4881 { /* Add from local list to server list */ |
6695 | 4882 GaimBlistNode *gnode, *cnode, *bnode; |
4883 GaimGroup *group; | |
4884 GaimBuddy *buddy; | |
7098
770233dad86c
[gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents:
7095
diff
changeset
|
4885 GaimBuddyList *blist; |
3017 | 4886 GSList *cur; |
4887 | |
2991 | 4888 /* Buddies */ |
4759 | 4889 if ((blist = gaim_get_blist())) |
4890 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
5234 | 4891 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
4892 continue; | |
6695 | 4893 group = (GaimGroup *)gnode; |
4894 for (cnode = gnode->child; cnode; cnode = cnode->next) { | |
4895 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
5234 | 4896 continue; |
6695 | 4897 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
4898 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
4899 continue; | |
4900 buddy = (GaimBuddy *)bnode; | |
4901 if (buddy->account == gc->account) { | |
7125 | 4902 const char *servernick = gaim_buddy_get_setting(buddy, "servernick"); |
4903 if (servernick) | |
6695 | 4904 serv_got_alias(gc, buddy->name, servernick); |
7125 | 4905 |
6695 | 4906 if (aim_ssi_itemlist_exists(sess->ssi.local, buddy->name)) { |
4907 /* Store local alias on server */ | |
4908 char *alias = aim_ssi_getalias(sess->ssi.local, group->name, buddy->name); | |
4909 if (!alias && buddy->alias && strlen(buddy->alias)) | |
4910 aim_ssi_aliasbuddy(sess, group->name, buddy->name, buddy->alias); | |
4911 free(alias); | |
4912 } else { | |
4913 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4914 "ssi: adding buddy %s from local list to server list\n", buddy->name); | |
4915 aim_ssi_addbuddy(sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); | |
4916 } | |
4759 | 4917 } |
4349 | 4918 } |
4230 | 4919 } |
4292 | 4920 } |
6695 | 4921 |
2991 | 4922 /* Permit list */ |
4491 | 4923 if (gc->account->permit) { |
4924 for (cur=gc->account->permit; cur; cur=cur->next) | |
4230 | 4925 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
|
4926 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 4927 "ssi: adding permit %s from local list to server list\n", (char *)cur->data); |
4889 | 4928 aim_ssi_addpermit(sess, cur->data); |
4230 | 4929 } |
2991 | 4930 } |
4931 | |
4932 /* Deny list */ | |
4491 | 4933 if (gc->account->deny) { |
4934 for (cur=gc->account->deny; cur; cur=cur->next) | |
4230 | 4935 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
|
4936 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 4937 "ssi: adding deny %s from local list to server list\n", (char *)cur->data); |
4889 | 4938 aim_ssi_adddeny(sess, cur->data); |
4230 | 4939 } |
2991 | 4940 } |
3109 | 4941 /* Presence settings (idle time visibility) */ |
4230 | 4942 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) |
5631 | 4943 if (!(tmp & 0x400)) |
4889 | 4944 aim_ssi_setpresence(sess, tmp | 0x400); |
4778 | 4945 } /* end adding buddies from local list to server list */ |
4946 | |
4901 | 4947 /* Set our ICQ status */ |
4948 if (od->icq && !gc->away) { | |
4949 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
4950 } | |
4951 | |
4342 | 4952 /* Activate SSI */ |
4953 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4954 /* 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
|
4955 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4956 "ssi: activating server-stored buddy list\n"); |
4642 | 4957 aim_ssi_enable(sess); |
4342 | 4958 |
2991 | 4959 return 1; |
2086 | 4960 } |
4230 | 4961 |
4962 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4963 GaimConnection *gc = sess->aux_data; |
4230 | 4964 va_list ap; |
4965 struct aim_ssi_tmp *retval; | |
4966 | |
4967 va_start(ap, fr); | |
4968 retval = va_arg(ap, struct aim_ssi_tmp *); | |
4969 va_end(ap); | |
4970 | |
4971 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4972 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4973 "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 | 4974 |
4975 if (retval->ack != 0xffff) | |
4976 switch (retval->ack) { | |
4977 case 0x0000: { /* added successfully */ | |
4978 } break; | |
4979 | |
4829 | 4980 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
4981 gchar *buf; | |
4982 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
|
4983 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 4984 g_free(buf); |
4985 } | |
4986 | |
7023 | 4987 case 0x000e: { /* buddy requires authorization */ |
4828 | 4988 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 4989 gaim_auth_sendrequest(gc, retval->name); |
4230 | 4990 } break; |
4991 | |
4992 default: { /* La la la */ | |
5197 | 4993 gchar *buf; |
5402 | 4994 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
4995 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
|
4996 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 4997 g_free(buf); |
5402 | 4998 /* XXX - Should remove buddy from local list */ |
4230 | 4999 } break; |
5000 } | |
5001 | |
5002 retval = retval->next; | |
5003 } | |
5004 | |
5005 return 1; | |
5006 } | |
5007 | |
5008 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5009 GaimConnection *gc = sess->aux_data; |
4230 | 5010 va_list ap; |
5011 char *sn, *msg; | |
4236 | 5012 gchar *dialog_msg, *nombre; |
4230 | 5013 struct name_data *data; |
6695 | 5014 GaimBuddy *buddy; |
4230 | 5015 |
5016 va_start(ap, fr); | |
5017 sn = va_arg(ap, char *); | |
5018 msg = va_arg(ap, char *); | |
5019 va_end(ap); | |
5020 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5021 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5022 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 5023 |
4687 | 5024 buddy = gaim_find_buddy(gc->account, sn); |
5025 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5026 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5027 else |
5028 nombre = g_strdup(sn); | |
5029 | |
5030 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 | 5031 data = g_new(struct name_data, 1); |
5032 data->gc = gc; | |
5033 data->name = g_strdup(sn); | |
5034 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5035 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5036 gaim_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5037 0, data, |
7023 | 5038 G_CALLBACK(gaim_icq_buddyadd), |
5836 | 5039 G_CALLBACK(oscar_free_name_data)); |
4236 | 5040 |
4230 | 5041 g_free(dialog_msg); |
4236 | 5042 g_free(nombre); |
4230 | 5043 |
5044 return 1; | |
5045 } | |
5046 | |
5047 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5048 GaimConnection *gc = sess->aux_data; |
4230 | 5049 va_list ap; |
5050 char *sn, *msg; | |
4236 | 5051 gchar *dialog_msg, *nombre; |
4230 | 5052 struct name_data *data; |
6695 | 5053 GaimBuddy *buddy; |
4230 | 5054 |
5055 va_start(ap, fr); | |
5056 sn = va_arg(ap, char *); | |
5057 msg = va_arg(ap, char *); | |
5058 va_end(ap); | |
5059 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5060 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5061 "ssi: received authorization request from %s\n", sn); |
4230 | 5062 |
4687 | 5063 buddy = gaim_find_buddy(gc->account, sn); |
5064 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5065 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5066 else |
5067 nombre = g_strdup(sn); | |
5068 | |
4337 | 5069 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 | 5070 data = g_new(struct name_data, 1); |
5071 data->gc = gc; | |
5072 data->name = g_strdup(sn); | |
5073 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5074 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5075 gaim_request_action(gc, NULL, _("Authorization Request"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5076 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5077 _("Authorize"), G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5078 _("Deny"), G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4236 | 5079 |
4230 | 5080 g_free(dialog_msg); |
4236 | 5081 g_free(nombre); |
4230 | 5082 |
5083 return 1; | |
5084 } | |
5085 | |
5086 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5087 GaimConnection *gc = sess->aux_data; |
4230 | 5088 va_list ap; |
5089 char *sn, *msg; | |
4236 | 5090 gchar *dialog_msg, *nombre; |
4230 | 5091 fu8_t reply; |
6695 | 5092 GaimBuddy *buddy; |
4230 | 5093 |
5094 va_start(ap, fr); | |
5095 sn = va_arg(ap, char *); | |
5096 reply = (fu8_t)va_arg(ap, int); | |
5097 msg = va_arg(ap, char *); | |
5098 va_end(ap); | |
5099 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5100 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5101 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5102 |
4687 | 5103 buddy = gaim_find_buddy(gc->account, sn); |
5104 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5105 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5106 else |
5107 nombre = g_strdup(sn); | |
5108 | |
4230 | 5109 if (reply) { |
5110 /* Granted */ | |
7023 | 5111 dialog_msg = g_strdup_printf(_("The user %s has granted your request to add them to your buddy list."), nombre); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5112 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5113 } else { |
5114 /* Denied */ | |
7023 | 5115 dialog_msg = g_strdup_printf(_("The user %s has denied your request to add them to your buddy 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
|
5116 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5117 } |
5118 g_free(dialog_msg); | |
4236 | 5119 g_free(nombre); |
4230 | 5120 |
5121 return 1; | |
5122 } | |
5123 | |
5124 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5125 GaimConnection *gc = sess->aux_data; |
4230 | 5126 va_list ap; |
5127 char *sn; | |
6695 | 5128 GaimBuddy *buddy; |
4230 | 5129 |
5130 va_start(ap, fr); | |
5131 sn = va_arg(ap, char *); | |
5132 va_end(ap); | |
5133 | |
4687 | 5134 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5135 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5136 "ssi: %s added you to their buddy list\n", sn); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
5137 gaim_account_notify_added(gc->account, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5138 |
5139 return 1; | |
5140 } | |
4269 | 5141 #endif |
2086 | 5142 |
5575 | 5143 static GList *oscar_chat_info(GaimConnection *gc) { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5144 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5145 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5146 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5147 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5148 pce->label = _("Join what group:"); |
5234 | 5149 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5150 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5151 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5152 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5153 pce->label = _("Exchange:"); |
5234 | 5154 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5155 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5156 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5157 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5158 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5159 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5160 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5161 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5162 |
5575 | 5163 static void oscar_join_chat(GaimConnection *g, GHashTable *data) { |
4617 | 5164 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5165 aim_conn_t *cur; |
5234 | 5166 char *name, *exchange; |
5167 | |
5168 name = g_hash_table_lookup(data, "room"); | |
5169 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5170 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5171 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5172 "Attempting to join chat room %s.\n", name); |
4617 | 5173 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
|
5174 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5175 "chatnav exists, creating room\n"); |
5234 | 5176 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5177 } else { |
5178 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5179 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5180 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5181 "chatnav does not exist, opening chatnav\n"); |
5234 | 5182 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5183 cr->name = g_strdup(name); |
4617 | 5184 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5185 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5186 } |
5187 } | |
5188 | |
5575 | 5189 static void oscar_chat_invite(GaimConnection *g, int id, const char *message, const char *name) { |
4617 | 5190 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2086 | 5191 struct chat_connection *ccon = find_oscar_chat(g, id); |
5192 | |
5193 if (!ccon) | |
5194 return; | |
5195 | |
4617 | 5196 aim_chat_invite(od->sess, od->conn, name, message ? message : "", |
2086 | 5197 ccon->exchange, ccon->name, 0x0); |
5198 } | |
5199 | |
5575 | 5200 static void oscar_chat_leave(GaimConnection *g, int id) { |
4617 | 5201 struct oscar_data *od = g ? (struct oscar_data *)g->proto_data : NULL; |
2086 | 5202 GSList *bcs = g->buddy_chats; |
5679 | 5203 GaimConversation *b = NULL; |
2086 | 5204 struct chat_connection *c = NULL; |
5205 int count = 0; | |
5206 | |
5207 while (bcs) { | |
5208 count++; | |
5679 | 5209 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5210 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5211 break; |
5212 bcs = bcs->next; | |
5213 b = NULL; | |
5214 } | |
5215 | |
5216 if (!b) | |
5217 return; | |
5218 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5219 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5220 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5221 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5222 c = find_oscar_chat(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5223 if (c != NULL) { |
4617 | 5224 if (od) |
5225 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5226 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5227 gaim_input_remove(c->inpa); |
4617 | 5228 if (g && od->sess) |
5229 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5230 g_free(c->name); |
5231 g_free(c->show); | |
5232 g_free(c); | |
5233 } | |
5234 /* we do this because with Oscar it doesn't tell us we left */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5235 serv_got_chat_left(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5236 } |
5237 | |
6059 | 5238 static int oscar_chat_send(GaimConnection *g, int id, const char *message) { |
4617 | 5239 struct oscar_data *od = (struct oscar_data *)g->proto_data; |
2086 | 5240 GSList *bcs = g->buddy_chats; |
5679 | 5241 GaimConversation *b = NULL; |
2086 | 5242 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5243 char *buf, *buf2; |
2086 | 5244 int i, j; |
5245 | |
5246 while (bcs) { | |
5679 | 5247 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5248 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5249 break; |
5250 bcs = bcs->next; | |
5251 b = NULL; | |
5252 } | |
5253 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5254 return -EINVAL; |
2086 | 5255 |
4617 | 5256 bcs = od->oscar_chats; |
2086 | 5257 while (bcs) { |
5258 c = (struct chat_connection *)bcs->data; | |
5259 if (b == c->cnv) | |
5260 break; | |
5261 bcs = bcs->next; | |
5262 c = NULL; | |
5263 } | |
5264 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5265 return -EINVAL; |
2086 | 5266 |
5267 buf = g_malloc(strlen(message) * 4 + 1); | |
5268 for (i = 0, j = 0; i < strlen(message); i++) { | |
5269 if (message[i] == '\n') { | |
5270 buf[j++] = '<'; | |
5271 buf[j++] = 'B'; | |
5272 buf[j++] = 'R'; | |
5273 buf[j++] = '>'; | |
5274 } else { | |
5275 buf[j++] = message[i]; | |
5276 } | |
5277 } | |
5278 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5279 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5280 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5281 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5282 |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5283 buf2 = gaim_markup_strip_html(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5284 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5285 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5286 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5287 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5288 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5289 |
4617 | 5290 aim_chat_send_im(od->sess, c->conn, 0, buf, strlen(buf)); |
2086 | 5291 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5292 return 0; |
2086 | 5293 } |
5294 | |
6695 | 5295 static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) { |
4766 | 5296 if (!b || (b && b->name && b->name[0] == '+')) { |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5297 if (a != NULL && isdigit(*gaim_account_get_username(a))) |
4687 | 5298 return "icq"; |
5299 else | |
5300 return "aim"; | |
5301 } | |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5302 |
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5303 if (b != NULL && isdigit(b->name[0])) |
4687 | 5304 return "icq"; |
5305 return "aim"; | |
5306 } | |
5307 | |
6695 | 5308 static void oscar_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5309 { |
5310 char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
5311 int i = 0; | |
5312 | |
5131 | 5313 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5575 | 5314 GaimAccount *account; |
5315 GaimConnection *gc; | |
5131 | 5316 struct oscar_data *od; |
5317 char *gname; | |
5318 if ((b->name) && (account = b->account) && (gc = account->gc) && | |
5319 (od = gc->proto_data) && (od->sess->ssi.received_data) && | |
5320 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && | |
5321 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5322 emblems[i++] = "notauthorized"; | |
5323 } else { | |
5324 emblems[i++] = "offline"; | |
5325 } | |
5326 } | |
4916 | 5327 |
4766 | 5328 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5329 int uc = b->uc >> 16; |
4766 | 5330 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5331 emblems[i++] = "invisible"; |
4766 | 5332 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5333 emblems[i++] = "freeforchat"; |
4766 | 5334 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5335 emblems[i++] = "dnd"; |
4766 | 5336 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5337 emblems[i++] = "na"; |
4766 | 5338 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5339 emblems[i++] = "occupied"; |
4766 | 5340 else if (uc & AIM_ICQ_STATE_AWAY) |
5341 emblems[i++] = "away"; | |
5342 } else { | |
5343 if (b->uc & UC_UNAVAILABLE) | |
5344 emblems[i++] = "away"; | |
5345 } | |
4687 | 5346 if (b->uc & UC_WIRELESS) |
5347 emblems[i++] = "wireless"; | |
5348 if (b->uc & UC_AOL) | |
5349 emblems[i++] = "aol"; | |
5350 if (b->uc & UC_ADMIN) | |
5351 emblems[i++] = "admin"; | |
5352 if (b->uc & UC_AB && i < 4) | |
5353 emblems[i++] = "activebuddy"; | |
6318 | 5354 if (b->uc & UC_HIPTOP && i < 4) |
5355 emblems[i++] = "hiptop"; | |
4766 | 5356 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5357 emblems[i++] = "unconfirmed"; */ | |
4687 | 5358 *se = emblems[0]; |
5359 *sw = emblems[1]; | |
5360 *nw = emblems[2]; | |
5361 *ne = emblems[3]; | |
5362 } | |
5363 | |
6695 | 5364 static char *oscar_tooltip_text(GaimBuddy *b) { |
5575 | 5365 GaimConnection *gc = b->account->gc; |
5131 | 5366 struct oscar_data *od = gc->proto_data; |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
5367 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->name)); |
7045 | 5368 aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 5369 gchar *tmp = NULL, *ret = g_strdup(""); |
5131 | 5370 |
5371 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5372 if (isdigit(b->name[0])) { | |
7011 | 5373 char *status; |
5131 | 5374 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); |
7011 | 5375 tmp = ret; |
5376 ret = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5131 | 5377 g_free(tmp); |
5378 g_free(status); | |
5379 } | |
5380 | |
7011 | 5381 if (userinfo != NULL) { |
7162 | 5382 char *tstr = gaim_str_seconds_to_string(time(NULL) - userinfo->onlinesince + |
5131 | 5383 (gc->login_time_official ? gc->login_time_official - gc->login_time : 0)); |
7011 | 5384 tmp = ret; |
5385 ret = g_strconcat(tmp, _("<b>Logged In:</b> "), tstr, "\n", NULL); | |
7162 | 5386 g_free(tmp); |
5387 g_free(tstr); | |
7011 | 5388 } |
5389 | |
5390 if ((bi != NULL) && (bi->ipaddr)) { | |
5391 char *tstr = g_strdup_printf("%hhd.%hhd.%hhd.%hhd", | |
5392 (bi->ipaddr & 0xff000000) >> 24, | |
5393 (bi->ipaddr & 0x00ff0000) >> 16, | |
5394 (bi->ipaddr & 0x0000ff00) >> 8, | |
5395 (bi->ipaddr & 0x000000ff)); | |
5396 tmp = ret; | |
5397 ret = g_strconcat(tmp, _("<b>IP Address:</b> "), tstr, "\n", NULL); | |
7162 | 5398 g_free(tmp); |
5399 g_free(tstr); | |
7011 | 5400 } |
5401 | |
5402 if ((userinfo != NULL) && (userinfo->capabilities)) { | |
5403 char *caps = caps_string(userinfo->capabilities); | |
5404 tmp = ret; | |
5405 ret = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
7162 | 5406 g_free(tmp); |
7011 | 5407 } |
5408 | |
5409 if ((bi != NULL) && (bi->availmsg != NULL) && !(b->uc & UC_UNAVAILABLE)) { | |
5410 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5411 tmp = ret; | |
5412 ret = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); | |
7162 | 5413 g_free(tmp); |
7011 | 5414 g_free(escaped); |
5415 } | |
5416 | |
5417 if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
5418 gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
5419 if (away_utf8 != NULL) { | |
7091 | 5420 gchar *tmp1, *tmp2; |
7162 | 5421 const char *tmp3; |
7091 | 5422 tmp1 = gaim_strreplace(away_utf8, "<BR>", "\n"); |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5423 tmp2 = gaim_markup_strip_html(tmp1); |
7091 | 5424 g_free(tmp1); |
7235 | 5425 tmp1 = g_markup_escape_text(tmp2, strlen(tmp2)); |
7091 | 5426 g_free(tmp2); |
7235 | 5427 tmp3 = gaim_str_sub_away_formatters(tmp1, gaim_account_get_username(gaim_connection_get_account(gc))); |
5428 g_free(tmp1); | |
7011 | 5429 tmp = ret; |
7162 | 5430 ret = g_strconcat(tmp, _("<b>Away Message:</b> "), tmp3, "\n", NULL); |
5431 g_free(tmp); | |
7011 | 5432 g_free(away_utf8); |
5836 | 5433 } |
5131 | 5434 } |
5435 } else { | |
5436 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5437 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
7011 | 5438 tmp = ret; |
5439 ret = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5131 | 5440 g_free(tmp); |
5441 } else { | |
7011 | 5442 tmp = ret; |
5443 ret = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5131 | 5444 g_free(tmp); |
5445 } | |
5446 } | |
5447 | |
5448 /* remove the trailing newline character */ | |
7011 | 5449 if (ret) |
5450 ret[strlen(ret)-1] = '\0'; | |
5451 return ret; | |
5131 | 5452 } |
5453 | |
6695 | 5454 static char *oscar_status_text(GaimBuddy *b) { |
5575 | 5455 GaimConnection *gc = b->account->gc; |
5167 | 5456 struct oscar_data *od = gc->proto_data; |
5457 gchar *ret = NULL; | |
5458 | |
5459 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5460 if (isdigit(b->name[0])) | |
5461 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
7038 | 5462 else |
5463 ret = g_strdup(_("Away")); | |
5836 | 5464 } else if (GAIM_BUDDY_IS_ONLINE(b)) { |
7107
9220c7490cd1
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
5465 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->name)); |
6292 | 5466 if (bi->availmsg) |
5467 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5836 | 5468 } else { |
5167 | 5469 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); |
5470 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5471 ret = g_strdup(_("Not Authorized")); | |
5472 else | |
5473 ret = g_strdup(_("Offline")); | |
5474 } | |
5475 | |
5476 return ret; | |
5477 } | |
5478 | |
5842 | 5479 |
5844 | 5480 static int oscar_icon_req(aim_session_t *sess, aim_frame_t *fr, ...) { |
5842 | 5481 GaimConnection *gc = sess->aux_data; |
5482 struct oscar_data *od = gc->proto_data; | |
5892 | 5483 va_list ap; |
5842 | 5484 fu16_t type; |
5892 | 5485 fu8_t flags = 0, length = 0; |
5486 char *md5 = NULL; | |
5487 | |
5842 | 5488 va_start(ap, fr); |
5489 type = va_arg(ap, int); | |
5892 | 5490 |
5491 switch(type) { | |
5492 case 0x0000: | |
5493 case 0x0001: { | |
5494 flags = va_arg(ap, int); | |
5495 length = va_arg(ap, int); | |
5496 md5 = va_arg(ap, char *); | |
5497 | |
5498 if (flags == 0x41) { | |
5499 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON) && !od->iconconnecting) { | |
5500 od->iconconnecting = TRUE; | |
5501 od->set_icon = TRUE; | |
5502 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
5503 } else { | |
6039 | 5504 struct stat st; |
5505 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
5506 if (iconfile == NULL) { | |
5507 /* Set an empty icon, or something */ | |
5508 } else if (!stat(iconfile, &st)) { | |
5509 char *buf = g_malloc(st.st_size); | |
5510 FILE *file = fopen(iconfile, "rb"); | |
5511 if (file) { | |
5512 fread(buf, 1, st.st_size, file); | |
5513 fclose(file); | |
5514 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5515 "Uploading icon to icon server\n"); | |
6879 | 5516 aim_bart_upload(od->sess, buf, st.st_size); |
5892 | 5517 } else |
5518 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 5519 "Can't open buddy icon file!\n"); |
5520 g_free(buf); | |
5521 } else { | |
5522 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5523 "Can't stat buddy icon file!\n"); | |
5892 | 5524 } |
5525 } | |
5893 | 5526 } else if (flags == 0x81) |
5527 aim_ssi_seticon(od->sess, md5, length); | |
5892 | 5528 } break; |
5529 | |
5530 case 0x0002: { /* We just set an "available" message? */ | |
5531 } break; | |
5532 } | |
5533 | |
5842 | 5534 va_end(ap); |
5844 | 5535 |
5536 return 0; | |
5842 | 5537 } |
5892 | 5538 |
3952 | 5539 /* |
4617 | 5540 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5541 */ |
4617 | 5542 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5543 GaimConnection *gc = sess->aux_data; |
2086 | 5544 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5679 | 5545 GaimConversation *cnv; |
2086 | 5546 struct direct_im *dim; |
5547 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5548 char *sn; |
4617 | 5549 va_list ap; |
5550 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5551 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5552 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5553 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5554 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5555 va_end(ap); |
5556 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5557 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5558 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5559 |
4617 | 5560 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5561 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5562 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5563 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5564 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5565 |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5566 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
|
5567 gaim_input_remove(dim->watcher); |
2086 | 5568 dim->conn = newconn; |
4617 | 5569 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5570 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5571 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5572 g_free(sn); |
6982 | 5573 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
2086 | 5574 |
4617 | 5575 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5576 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
6982 | 5577 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_odc_update_ui, 0); |
4617 | 5578 |
2993 | 5579 return 1; |
5580 } | |
5581 | |
6982 | 5582 /* |
5583 * This is called when each chunk of an image is received. It can be used to | |
5584 * update a progress bar, or to eat lots of dry cat food. Wet cat food is | |
5585 * nasty, you sicko. | |
5586 */ | |
5587 static int gaim_odc_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2993 | 5588 va_list ap; |
5589 char *sn; | |
5590 double percent; | |
5575 | 5591 GaimConnection *gc = sess->aux_data; |
2993 | 5592 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5679 | 5593 GaimConversation *c; |
2993 | 5594 struct direct_im *dim; |
5595 | |
5596 va_start(ap, fr); | |
5597 sn = va_arg(ap, char *); | |
5598 percent = va_arg(ap, double); | |
5599 va_end(ap); | |
6873 | 5600 |
2994 | 5601 if (!(dim = find_direct_im(od, sn))) |
5602 return 1; | |
3059 | 5603 if (dim->watcher) { |
5604 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5605 dim->watcher = 0; | |
5606 } | |
6982 | 5607 /* XXX is this really necessary? */ |
7082
25a616f16b6c
[gaim-migrate @ 7647]
Christian Hammond <chipx86@chipx86.com>
parents:
7080
diff
changeset
|
5608 gaim_core_mainloop_finish_events(); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5609 |
6982 | 5610 c = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
6873 | 5611 if (c != NULL) |
5612 gaim_conversation_update_progress(c, percent); | |
2993 | 5613 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5614 oscar_callback, dim->conn); | |
2086 | 5615 |
5616 return 1; | |
5617 } | |
5618 | |
6982 | 5619 /* |
5620 * This is called after a direct IM has been received in its entirety. This | |
5621 * function is passed a long chunk of data which contains the IM with any | |
5622 * data chunks (images) appended to it. | |
5623 * | |
5624 * This function rips out all the data chunks and creates an imgstore for | |
5625 * each one. In order to do this, it first goes through the IM and takes | |
5626 * out all the IMG tags. When doing so, it rewrites the original IMG tag | |
5627 * with one compatable with the imgstore Gaim core code. For each one, we | |
5628 * then read in chunks of data from the end of the message and actually | |
5629 * create the img store using the given data. | |
5630 * | |
5631 * For somewhat easy reference, here's a sample message | |
5632 * (without the whitespace and asterisks): | |
5633 * | |
5634 * <HTML><BODY BGCOLOR="#ffffff"> | |
5635 * <FONT LANG="0"> | |
5636 * This is a really stupid picture:<BR> | |
5637 * <IMG SRC="Sample.jpg" ID="1" WIDTH="283" HEIGHT="212" DATASIZE="9894"><BR> | |
5638 * Yeah it is<BR> | |
5639 * Here is another one:<BR> | |
5640 * <IMG SRC="Soap Bubbles.bmp" ID="2" WIDTH="256" HEIGHT="256" DATASIZE="65978"> | |
5641 * </FONT> | |
5642 * </BODY></HTML> | |
5643 * <BINARY> | |
5644 * <DATA ID="1" SIZE="9894">datadatadatadata</DATA> | |
5645 * <DATA ID="2" SIZE="65978">datadatadatadata</DATA> | |
5646 * </BINARY> | |
5647 */ | |
4617 | 5648 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5649 GaimConnection *gc = sess->aux_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5650 GaimConvImFlags imflags = 0; |
6982 | 5651 GString *newmsg = g_string_new(""); |
5652 GSList *images = NULL; | |
2086 | 5653 va_list ap; |
6982 | 5654 const char *sn, *msg, *msgend, *binary; |
5655 size_t len; | |
5656 int encoding, isawaymsg; | |
2086 | 5657 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5658 va_start(ap, fr); |
6982 | 5659 sn = va_arg(ap, const char *); |
5660 msg = va_arg(ap, const char *); | |
5661 len = va_arg(ap, size_t); | |
3952 | 5662 encoding = va_arg(ap, int); |
4870 | 5663 isawaymsg = va_arg(ap, int); |
2086 | 5664 va_end(ap); |
6982 | 5665 msgend = msg + len; |
2086 | 5666 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5667 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5668 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5669 |
4870 | 5670 if (isawaymsg) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5671 imflags |= GAIM_CONV_IM_AUTO_RESP; |
4870 | 5672 |
6982 | 5673 /* message has a binary trailer */ |
5674 if ((binary = gaim_strcasestr(msg, "<binary>"))) { | |
5675 GData *attribs; | |
5676 const char *tmp, *start, *end, *last = NULL; | |
5677 | |
5678 tmp = msg; | |
5679 | |
5680 /* for each valid image tag... */ | |
5681 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5682 const char *id, *src, *datasize; | |
5683 const char *tag = NULL, *data = NULL; | |
5684 size_t size; | |
5685 int imgid = 0; | |
5686 | |
5687 /* update the location of the last img tag */ | |
5688 last = end; | |
5689 | |
5690 /* grab attributes */ | |
5691 id = g_datalist_get_data(&attribs, "id"); | |
5692 src = g_datalist_get_data(&attribs, "src"); | |
5693 datasize = g_datalist_get_data(&attribs, "datasize"); | |
5694 | |
5695 /* if we have id & datasize, build the data tag */ | |
5696 if (id && datasize) | |
5697 tag = g_strdup_printf("<data id=\"%s\" size=\"%s\">", id, datasize); | |
5698 | |
5699 /* if we have a tag, find the start of the data */ | |
5700 if (tag && (data = gaim_strcasestr(binary, tag))) | |
5701 data += strlen(tag); | |
5702 | |
5703 /* check the data is here and store it */ | |
5704 if (data + (size = atoi(datasize)) <= msgend) | |
5705 imgid = gaim_imgstore_add(data, size, src); | |
5706 | |
5707 /* if we have a stored image... */ | |
5708 if (imgid) { | |
5709 /* append the message up to the tag */ | |
5710 newmsg = g_string_append_len(newmsg, tmp, start - tmp); | |
5711 | |
5712 /* write the new image tag */ | |
5713 g_string_append_printf(newmsg, "<IMG ID=\"%d\">", imgid); | |
5714 | |
5715 /* and record the image number */ | |
5716 images = g_slist_append(images, GINT_TO_POINTER(imgid)); | |
5717 } else { | |
5718 /* otherwise, copy up to the end of the tag */ | |
5719 newmsg = g_string_append_len(newmsg, tmp, (end + 1) - tmp); | |
5720 } | |
5721 | |
5722 /* clear the attribute list */ | |
5723 g_datalist_clear(&attribs); | |
5724 | |
5725 /* continue from the end of the tag */ | |
5726 tmp = end + 1; | |
5727 } | |
5728 | |
5729 /* append any remaining message data (without the > :-) */ | |
5730 if (last++ && (last < binary)) | |
5731 newmsg = g_string_append_len(newmsg, last, binary - last); | |
5732 | |
5733 /* set the flag if we caught any images */ | |
5734 if (images) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5735 imflags |= GAIM_CONV_IM_IMAGES; |
6982 | 5736 } else { |
5737 g_string_append_len(newmsg, msg, len); | |
5738 } | |
5739 | |
4617 | 5740 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
6982 | 5741 serv_got_im(gc, sn, newmsg->str, imflags, time(NULL)); |
5742 | |
5743 /* free up the message */ | |
5744 g_string_free(newmsg, TRUE); | |
5745 | |
5746 /* unref any images we allocated */ | |
5747 if (images) { | |
5748 GSList *tmp; | |
5749 int id; | |
5750 | |
5751 for (tmp = images; tmp != NULL; tmp = tmp->next) { | |
5752 id = GPOINTER_TO_INT(tmp->data); | |
5753 gaim_imgstore_unref(id); | |
5754 } | |
5755 | |
5756 g_slist_free(images); | |
5757 } | |
2086 | 5758 |
5759 return 1; | |
5760 } | |
5761 | |
4617 | 5762 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5763 va_list ap; |
5764 char *sn; | |
2993 | 5765 int typing; |
5575 | 5766 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5767 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5768 va_start(ap, fr); |
2086 | 5769 sn = va_arg(ap, char *); |
2993 | 5770 typing = va_arg(ap, int); |
2086 | 5771 va_end(ap); |
5772 | |
4870 | 5773 if (typing == 0x0002) { |
2993 | 5774 /* 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
|
5775 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5776 "ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", sn); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
5777 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
4870 | 5778 } else if (typing == 0x0001) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
5779 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
4870 | 5780 else |
4342 | 5781 serv_got_typing_stopped(gc, sn); |
2086 | 5782 return 1; |
5783 } | |
5784 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5785 static int gaim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *message, GaimConvImFlags imflags) { |
6982 | 5786 char *buf; |
5787 size_t len; | |
5788 int ret; | |
5789 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5790 if (imflags & GAIM_CONV_IM_IMAGES) { |
6982 | 5791 GString *msg = g_string_new(""); |
5792 GString *data = g_string_new("<BINARY>"); | |
5793 GData *attribs; | |
5794 const char *tmp, *start, *end, *last = NULL; | |
5795 int oscar_id = 0; | |
5796 | |
5797 tmp = message; | |
5798 | |
5799 /* for each valid IMG tag... */ | |
5800 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5801 GaimStoredImage *image = NULL; | |
5802 const char *id; | |
5803 | |
5804 last = end; | |
5805 id = g_datalist_get_data(&attribs, "id"); | |
5806 | |
5807 /* ... if it refers to a valid gaim image ... */ | |
5808 if (id && (image = gaim_imgstore_get(atoi(id)))) { | |
5809 /* ... append the message from start to the tag ... */ | |
5810 msg = g_string_append_len(msg, tmp, start - tmp); | |
5811 oscar_id++; | |
5812 | |
5813 /* ... insert a new img tag with the oscar id ... */ | |
5814 if (image->filename) | |
5815 g_string_append_printf(msg, | |
5816 "<IMG SRC=\"file://%s\" ID=\"%d\" DATASIZE=\"%d\">", | |
5817 image->filename, oscar_id, image->size); | |
5818 else | |
5819 g_string_append_printf(msg, | |
5820 "<IMG ID=\"%d\" DATASIZE=\"%d\">", | |
5821 oscar_id, image->size); | |
5822 | |
5823 /* ... and append the data to the binary section ... */ | |
5824 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%d\">", | |
5825 oscar_id, image->size); | |
5826 data = g_string_append_len(data, image->data, image->size); | |
5827 data = g_string_append(data, "</DATA>"); | |
5828 } else { | |
5829 /* ... otherwise, allow the possibly invalid img tag through. */ | |
5830 /* should we do something else? */ | |
5831 msg = g_string_append_len(msg, tmp, (end + 1) - tmp); | |
5832 } | |
5833 | |
5834 g_datalist_clear(&attribs); | |
5835 | |
5836 /* continue from the end of the tag */ | |
5837 tmp = end + 1; | |
5838 } | |
5839 | |
5840 /* append any remaining message data (without the > :-) */ | |
5841 if (last++ && *last) | |
5842 msg = g_string_append(msg, last); | |
5843 | |
5844 /* if we inserted any images in the binary section, append it */ | |
5845 if (oscar_id) { | |
5846 msg = g_string_append_len(msg, data->str, data->len); | |
5847 msg = g_string_append(msg, "</BINARY>"); | |
5848 } | |
5849 | |
5850 len = msg->len; | |
5851 buf = msg->str; | |
5852 g_string_free(msg, FALSE); | |
5853 g_string_free(data, TRUE); | |
5854 } else { | |
5855 len = strlen(message); | |
5856 buf = g_memdup(message, len+1); | |
5857 } | |
5858 | |
5859 /* XXX - The last parameter below is the encoding. Let Paco-Paco do something with it. */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5860 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
6982 | 5861 ret = aim_odc_send_im(sess, conn, buf, len, 0, 1); |
5862 else | |
5863 ret = aim_odc_send_im(sess, conn, buf, len, 0, 0); | |
5864 | |
5865 g_free(buf); | |
5866 | |
5867 return ret; | |
5868 } | |
5869 | |
2086 | 5870 struct ask_do_dir_im { |
5871 char *who; | |
5575 | 5872 GaimConnection *gc; |
2086 | 5873 }; |
5874 | |
3730 | 5875 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 5876 g_free(data->who); |
2086 | 5877 g_free(data); |
5878 } | |
5879 | |
3730 | 5880 static void oscar_direct_im(struct ask_do_dir_im *data) { |
5575 | 5881 GaimConnection *gc = data->gc; |
4244 | 5882 struct oscar_data *od; |
2086 | 5883 struct direct_im *dim; |
5884 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
5885 if (!g_list_find(gaim_connections_get_all(), gc)) { |
5136 | 5886 g_free(data->who); |
4244 | 5887 g_free(data); |
5888 return; | |
5889 } | |
5890 | |
5891 od = (struct oscar_data *)gc->proto_data; | |
5892 | |
2086 | 5893 dim = find_direct_im(od, data->who); |
5894 if (dim) { | |
3008 | 5895 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
5896 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
5897 gaim_input_remove(dim->watcher); | |
5898 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5899 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5900 "Gave up on old direct IM, trying again\n"); |
3008 | 5901 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5902 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 5903 g_free(data->who); |
4244 | 5904 g_free(data); |
3008 | 5905 return; |
5906 } | |
2086 | 5907 } |
5908 dim = g_new0(struct direct_im, 1); | |
5909 dim->gc = gc; | |
5910 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
5911 | |
4617 | 5912 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 5913 if (dim->conn != NULL) { |
5914 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5915 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 5916 oscar_callback, dim->conn); |
4617 | 5917 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
5918 gaim_odc_initiate, 0); | |
2086 | 5919 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5920 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 5921 g_free(dim); |
5922 } | |
4244 | 5923 |
5136 | 5924 g_free(data->who); |
4244 | 5925 g_free(data); |
2086 | 5926 } |
5927 | |
5575 | 5928 static void oscar_ask_direct_im(GaimConnection *gc, const char *who) { |
5420 | 5929 gchar *buf; |
2086 | 5930 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 5931 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
5932 data->gc = gc; |
5420 | 5933 buf = g_strdup_printf(_("You have selected to open a Direct IM connection with %s."), who); |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5934 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5935 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5936 _("Because this reveals your IP address, it " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5937 "may be considered a privacy risk. Do you " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5938 "wish to continue?"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5939 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5940 _("Connect"), G_CALLBACK(oscar_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5941 _("Cancel"), G_CALLBACK(oscar_cancel_direct_im)); |
5420 | 5942 g_free(buf); |
2086 | 5943 } |
5944 | |
5575 | 5945 static void oscar_set_permit_deny(GaimConnection *gc) { |
5946 GaimAccount *account = gaim_connection_get_account(gc); | |
2086 | 5947 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
4230 | 5948 #ifdef NOSSI |
4770 | 5949 GSList *list, *g = gaim_blist_groups(), *g1; |
4230 | 5950 char buf[MAXMSGLEN]; |
5951 int at; | |
5952 | |
5575 | 5953 switch(account->perm_deny) { |
4687 | 5954 case 1: |
5575 | 5955 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gaim_account_get_username(account)); |
4230 | 5956 break; |
5957 case 2: | |
5575 | 5958 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gaim_account_get_username(account)); |
4230 | 5959 break; |
5960 case 3: | |
5575 | 5961 list = account->permit; |
4230 | 5962 at = 0; |
5963 while (list) { | |
5964 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5965 list = list->next; | |
5966 } | |
5967 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
5968 break; | |
5969 case 4: | |
5575 | 5970 list = account->deny; |
4230 | 5971 at = 0; |
5972 while (list) { | |
5973 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5974 list = list->next; | |
5975 } | |
5976 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
5977 break; | |
5978 case 5: | |
4770 | 5979 g1 = g; |
4230 | 5980 at = 0; |
4770 | 5981 while (g1) { |
5982 list = gaim_blist_members((struct group *)g->data); | |
5983 GSList list1 = list; | |
5984 while (list1) { | |
5985 struct buddy *b = list1->data; | |
5575 | 5986 if(b->account == account) |
4349 | 5987 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", b->name); |
4770 | 5988 list1 = list1->next; |
2995 | 5989 } |
4770 | 5990 g_slist_free(list); |
5991 g1 = g1->next; | |
4349 | 5992 } |
4770 | 5993 g_slist_free(g); |
4230 | 5994 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
5995 break; | |
5996 default: | |
5997 break; | |
2086 | 5998 } |
4230 | 5999 signoff_blocked(gc); |
6000 #else | |
6001 if (od->sess->ssi.received_data) | |
5575 | 6002 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); |
4230 | 6003 #endif |
2086 | 6004 } |
6005 | |
5575 | 6006 static void oscar_add_permit(GaimConnection *gc, const char *who) { |
4269 | 6007 #ifdef NOSSI |
4491 | 6008 if (gc->account->permdeny == 3) |
4269 | 6009 oscar_set_permit_deny(gc); |
6010 #else | |
2991 | 6011 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6012 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 6013 if (od->sess->ssi.received_data) |
4889 | 6014 aim_ssi_addpermit(od->sess, who); |
4230 | 6015 #endif |
2086 | 6016 } |
6017 | |
5575 | 6018 static void oscar_add_deny(GaimConnection *gc, const char *who) { |
4269 | 6019 #ifdef NOSSI |
4491 | 6020 if (gc->account->permdeny == 4) |
4269 | 6021 oscar_set_permit_deny(gc); |
6022 #else | |
2991 | 6023 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6024 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 6025 if (od->sess->ssi.received_data) |
4889 | 6026 aim_ssi_adddeny(od->sess, who); |
4230 | 6027 #endif |
2086 | 6028 } |
6029 | |
5575 | 6030 static void oscar_rem_permit(GaimConnection *gc, const char *who) { |
4269 | 6031 #ifdef NOSSI |
4491 | 6032 if (gc->account->permdeny == 3) |
4269 | 6033 oscar_set_permit_deny(gc); |
6034 #else | |
2991 | 6035 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6036 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 6037 if (od->sess->ssi.received_data) |
4889 | 6038 aim_ssi_delpermit(od->sess, who); |
4230 | 6039 #endif |
2086 | 6040 } |
6041 | |
5575 | 6042 static void oscar_rem_deny(GaimConnection *gc, const char *who) { |
4269 | 6043 #ifdef NOSSI |
4491 | 6044 if (gc->account->permdeny == 4) |
4269 | 6045 oscar_set_permit_deny(gc); |
6046 #else | |
2991 | 6047 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6048 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 6049 if (od->sess->ssi.received_data) |
4889 | 6050 aim_ssi_deldeny(od->sess, who); |
4230 | 6051 #endif |
2086 | 6052 } |
6053 | |
5575 | 6054 static GList *oscar_away_states(GaimConnection *gc) |
2086 | 6055 { |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6056 struct oscar_data *od = gc->proto_data; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6057 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6058 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6059 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6060 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6061 |
4333 | 6062 m = g_list_append(m, _("Online")); |
6063 m = g_list_append(m, _("Away")); | |
6064 m = g_list_append(m, _("Do Not Disturb")); | |
6065 m = g_list_append(m, _("Not Available")); | |
6066 m = g_list_append(m, _("Occupied")); | |
6067 m = g_list_append(m, _("Free For Chat")); | |
6068 m = g_list_append(m, _("Invisible")); | |
6069 | |
6070 return m; | |
6071 } | |
6072 | |
7172 | 6073 static void oscar_ssi_editcomment(struct name_data *data, const char *text) { |
6074 struct oscar_data *od = data->gc->proto_data; | |
6075 GaimBuddy *b; | |
6076 GaimGroup *g; | |
6077 | |
6078 if (!(b = gaim_find_buddy(gaim_connection_get_account(data->gc), data->name))) { | |
6079 oscar_free_name_data(data); | |
6080 return; | |
6081 } | |
6082 | |
6083 if (!(g = gaim_find_buddys_group(b))) { | |
6084 oscar_free_name_data(data); | |
6085 return; | |
6086 } | |
6087 | |
6088 aim_ssi_editcomment(od->sess, g->name, data->name, text); | |
6089 oscar_free_name_data(data); | |
6090 } | |
6091 | |
6092 static void oscar_buddycb_edit_comment(GaimConnection *gc, const char *name) { | |
6093 struct oscar_data *od = gc->proto_data; | |
6094 struct name_data *data = g_new(struct name_data, 1); | |
6095 GaimBuddy *b; | |
6096 GaimGroup *g; | |
6097 char *comment; | |
6098 gchar *comment_utf8; | |
6099 | |
6100 if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name))) | |
6101 return; | |
6102 if (!(g = gaim_find_buddys_group(b))) | |
6103 return; | |
6104 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name); | |
6105 comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL; | |
6106 | |
6107 data->gc = gc; | |
6108 data->name = g_strdup(name); | |
6109 data->nick = NULL; | |
6110 | |
6111 gaim_request_input(gc, NULL, _("Buddy Comment:"), NULL, | |
6112 comment_utf8, TRUE, FALSE, | |
6113 _("OK"), G_CALLBACK(oscar_ssi_editcomment), | |
6114 _("Cancel"), G_CALLBACK(oscar_free_name_data), | |
6115 data); | |
6116 | |
6117 free(comment); | |
6118 g_free(comment_utf8); | |
6119 } | |
6120 | |
5575 | 6121 static GList *oscar_buddy_menu(GaimConnection *gc, const char *who) { |
4333 | 6122 struct oscar_data *od = gc->proto_data; |
6123 GList *m = NULL; | |
6124 struct proto_buddy_menu *pbm; | |
6125 | |
7172 | 6126 pbm = g_new0(struct proto_buddy_menu, 1); |
6127 pbm->label = _("Edit Buddy Comment"); | |
6128 pbm->callback = oscar_buddycb_edit_comment; | |
6129 pbm->gc = gc; | |
6130 m = g_list_append(m, pbm); | |
6131 | |
4333 | 6132 if (od->icq) { |
4624 | 6133 #if 0 |
4333 | 6134 pbm = g_new0(struct proto_buddy_menu, 1); |
6135 pbm->label = _("Get Status Msg"); | |
4969 | 6136 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 6137 pbm->gc = gc; |
6138 m = g_list_append(m, pbm); | |
4624 | 6139 #endif |
4333 | 6140 } else { |
6695 | 6141 GaimBuddy *b = gaim_find_buddy(gc->account, who); |
7011 | 6142 aim_userinfo_t *userinfo; |
5975 | 6143 |
6144 if (b) | |
7045 | 6145 userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 6146 |
6147 if (b && userinfo && aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), who) && GAIM_BUDDY_IS_ONLINE(b)) { | |
6148 if (userinfo->capabilities & AIM_CAPS_DIRECTIM) { | |
5917 | 6149 pbm = g_new0(struct proto_buddy_menu, 1); |
6150 pbm->label = _("Direct IM"); | |
6151 pbm->callback = oscar_ask_direct_im; | |
6152 pbm->gc = gc; | |
6153 m = g_list_append(m, pbm); | |
6154 } | |
6155 | |
7011 | 6156 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { |
5917 | 6157 pbm = g_new0(struct proto_buddy_menu, 1); |
6158 pbm->label = _("Send File"); | |
6159 pbm->callback = oscar_ask_sendfile; | |
6160 pbm->gc = gc; | |
6161 m = g_list_append(m, pbm); | |
6162 } | |
4826 | 6163 #if 0 |
7011 | 6164 if (userinfo->capabilities & AIM_CAPS_GETFILE) { |
5917 | 6165 pbm = g_new0(struct proto_buddy_menu, 1); |
6166 pbm->label = _("Get File"); | |
6167 pbm->callback = oscar_ask_getfile; | |
6168 pbm->gc = gc; | |
6169 m = g_list_append(m, pbm); | |
6170 } | |
4826 | 6171 #endif |
4333 | 6172 } |
5131 | 6173 } |
5197 | 6174 |
5131 | 6175 if (od->sess->ssi.received_data) { |
6176 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
6177 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
6178 pbm = g_new0(struct proto_buddy_menu, 1); | |
6873 | 6179 pbm->label = _("Re-request Authorization"); |
5131 | 6180 pbm->callback = gaim_auth_sendrequest; |
6181 pbm->gc = gc; | |
6182 m = g_list_append(m, pbm); | |
4333 | 6183 } |
4916 | 6184 } |
6185 | |
4333 | 6186 return m; |
6187 } | |
6188 | |
5575 | 6189 static void oscar_format_screenname(GaimConnection *gc, const char *nick) { |
4333 | 6190 struct oscar_data *od = gc->proto_data; |
5575 | 6191 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), nick)) { |
4333 | 6192 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
6193 od->setnick = TRUE; | |
6194 od->newsn = g_strdup(nick); | |
6195 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6196 } else { | |
6197 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
6198 } | |
6199 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6200 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6201 _("Screenname formatting can change only capitalization and whitespace.")); |
4333 | 6202 } |
6203 } | |
6204 | |
5575 | 6205 static void oscar_show_format_screenname(GaimConnection *gc) |
4333 | 6206 { |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6207 gaim_request_input(gc, NULL, _("New screenname formatting:"), NULL, |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6208 gaim_connection_get_display_name(gc), FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6209 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6210 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6211 gc); |
4333 | 6212 } |
6213 | |
5575 | 6214 static void oscar_confirm_account(GaimConnection *gc) |
4333 | 6215 { |
6216 struct oscar_data *od = gc->proto_data; | |
6217 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); | |
6218 | |
6219 if (conn) { | |
6220 aim_admin_reqconfirm(od->sess, conn); | |
6221 } else { | |
6222 od->conf = TRUE; | |
6223 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6224 } | |
6225 } | |
6226 | |
5575 | 6227 static void oscar_show_email(GaimConnection *gc) |
4333 | 6228 { |
6229 struct oscar_data *od = gc->proto_data; | |
6230 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); | |
6231 | |
6232 if (conn) { | |
6233 aim_admin_getinfo(od->sess, conn, 0x11); | |
6234 } else { | |
6235 od->reqemail = TRUE; | |
6236 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6237 } | |
6238 } | |
6239 | |
5575 | 6240 static void oscar_change_email(GaimConnection *gc, const char *email) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6241 { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6242 struct oscar_data *od = gc->proto_data; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6243 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
|
6244 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6245 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6246 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6247 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6248 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6249 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6250 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6251 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6252 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6253 |
5575 | 6254 static void oscar_show_change_email(GaimConnection *gc) |
4333 | 6255 { |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6256 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, |
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6257 FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6258 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6259 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6260 gc); |
4333 | 6261 } |
6262 | |
5575 | 6263 static void oscar_show_awaitingauth(GaimConnection *gc) |
4333 | 6264 { |
2979 | 6265 struct oscar_data *od = gc->proto_data; |
4333 | 6266 gchar *nombre, *text, *tmp; |
6695 | 6267 GaimBlistNode *gnode, *cnode, *bnode; |
4333 | 6268 int num=0; |
6269 | |
6873 | 6270 text = g_strdup(""); |
4333 | 6271 |
4785 | 6272 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
6695 | 6273 GaimGroup *group = (GaimGroup *)gnode; |
4785 | 6274 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
6275 continue; | |
6695 | 6276 for (cnode = gnode->child; cnode; cnode = cnode->next) { |
6277 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 6278 continue; |
6695 | 6279 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
6280 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
6281 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
6282 continue; | |
6283 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { | |
6284 if (gaim_get_buddy_alias_only(buddy)) | |
6285 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
6286 else | |
6287 nombre = g_strdup_printf(" %s", buddy->name); | |
6873 | 6288 tmp = g_strdup_printf("%s%s<br>", text, nombre); |
6695 | 6289 g_free(text); |
6290 text = tmp; | |
6291 g_free(nombre); | |
6292 num++; | |
6293 } | |
4333 | 6294 } |
2979 | 6295 } |
4333 | 6296 } |
6297 | |
6298 if (!num) { | |
6299 g_free(text); | |
6873 | 6300 text = g_strdup(_("<i>you are not waiting for authorization</i>")); |
6301 } | |
6302 | |
6303 gaim_notify_formatted(gc, NULL, _("You are awaiting authorization from " | |
6304 "the following buddies"), _("You can re-request " | |
6305 "authorization from these buddies by " | |
6306 "right-clicking on them and selecting " | |
6307 "\"Re-request Authorization.\""), text, NULL, NULL); | |
4333 | 6308 g_free(text); |
2979 | 6309 } |
6310 | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6311 static void search_by_email_cb(GaimConnection *gc, const char *email) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6312 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6313 serv_dir_search(gc, "", "", "", "", "", "", "", email); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6314 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6315 |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6316 static void oscar_show_find_email(GaimConnection *gc) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6317 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6318 gaim_request_input(gc, _("Find Buddy by E-mail"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6319 _("Search for a buddy by e-mail address"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6320 _("Type the e-mail address of the buddy you are " |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6321 "searching for."), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6322 NULL, FALSE, FALSE, |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6323 _("Search"), G_CALLBACK(search_by_email_cb), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6324 _("Cancel"), NULL, gc); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6325 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6326 |
5975 | 6327 #if 0 |
5917 | 6328 static void oscar_setavailmsg(GaimConnection *gc, char *text) { |
6329 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
6330 | |
6331 aim_srv_setavailmsg(od->sess, text); | |
6332 } | |
6333 | |
6334 static void oscar_show_setavailmsg(GaimConnection *gc) | |
6335 { | |
6336 gaim_request_input(gc, NULL, _("Available Message:"), | |
7032 | 6337 NULL, "Please talk to me, I'm lonely! (and single)", TRUE, FALSE, |
5917 | 6338 _("OK"), G_CALLBACK(oscar_setavailmsg), |
6339 _("Cancel"), NULL, | |
6340 gc); | |
6341 } | |
5975 | 6342 #endif |
5917 | 6343 |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6344 static void oscar_show_set_info(GaimConnection *gc) |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6345 { |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6346 gaim_account_request_change_user_info(gaim_connection_get_account(gc)); |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6347 } |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6348 |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6349 static void oscar_change_pass(GaimConnection *gc) |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6350 { |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6351 gaim_account_request_change_password(gaim_connection_get_account(gc)); |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6352 } |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6353 |
5575 | 6354 static void oscar_show_chpassurl(GaimConnection *gc) |
4333 | 6355 { |
6356 struct oscar_data *od = gc->proto_data; | |
5575 | 6357 gchar *substituted = gaim_strreplace(od->sess->authinfo->chpassurl, "%s", gaim_account_get_username(gaim_connection_get_account(gc))); |
6465
fb64cc87bc96
[gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents:
6400
diff
changeset
|
6358 gaim_notify_uri(gc, substituted); |
5517 | 6359 g_free(substituted); |
4333 | 6360 } |
6361 | |
7026 | 6362 static void oscar_show_imforwardingurl(GaimConnection *gc) |
6363 { | |
6364 gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); | |
6365 } | |
6366 | |
5842 | 6367 static void oscar_set_icon(GaimConnection *gc, const char *iconfile) |
6368 { | |
5844 | 6369 struct oscar_data *od = gc->proto_data; |
6370 aim_session_t *sess = od->sess; | |
5842 | 6371 FILE *file; |
6372 struct stat st; | |
5844 | 6373 |
6039 | 6374 if (iconfile == NULL) { |
6375 /* Set an empty icon, or something */ | |
6376 } else if (!stat(iconfile, &st)) { | |
5842 | 6377 char *buf = g_malloc(st.st_size); |
6378 file = fopen(iconfile, "rb"); | |
6379 if (file) { | |
6052 | 6380 md5_state_t *state; |
6039 | 6381 char md5[16]; |
5842 | 6382 int len = fread(buf, 1, st.st_size, file); |
6039 | 6383 fclose(file); |
6052 | 6384 state = g_malloc(sizeof(md5_state_t)); |
5842 | 6385 md5_init(state); |
6386 md5_append(state, buf, len); | |
6387 md5_finish(state, md5); | |
6388 g_free(state); | |
6389 aim_ssi_seticon(sess, md5, 16); | |
6390 } else | |
6391 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6392 "Can't open buddy icon file!\n"); | |
6393 g_free(buf); | |
6394 } else | |
6395 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6396 "Can't stat buddy icon file!\n"); | |
6397 } | |
6398 | |
6399 | |
5575 | 6400 static GList *oscar_actions(GaimConnection *gc) |
2086 | 6401 { |
6402 struct oscar_data *od = gc->proto_data; | |
4333 | 6403 struct proto_actions_menu *pam; |
6404 GList *m = NULL; | |
6405 | |
6406 pam = g_new0(struct proto_actions_menu, 1); | |
6407 pam->label = _("Set User Info"); | |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6408 pam->callback = oscar_show_set_info; |
4333 | 6409 pam->gc = gc; |
6410 m = g_list_append(m, pam); | |
6411 | |
5917 | 6412 #if 0 |
6413 pam = g_new0(struct proto_actions_menu, 1); | |
6414 pam->label = _("Set Available Message"); | |
6415 pam->callback = oscar_show_setavailmsg; | |
6416 pam->gc = gc; | |
6417 m = g_list_append(m, pam); | |
6418 #endif | |
6419 | |
5238 | 6420 pam = g_new0(struct proto_actions_menu, 1); |
6421 pam->label = _("Change Password"); | |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6422 pam->callback = oscar_change_pass; |
5238 | 6423 pam->gc = gc; |
6424 m = g_list_append(m, pam); | |
4617 | 6425 |
6426 if (od->sess->authinfo->chpassurl) { | |
6427 pam = g_new0(struct proto_actions_menu, 1); | |
6428 pam->label = _("Change Password (URL)"); | |
6429 pam->callback = oscar_show_chpassurl; | |
6430 pam->gc = gc; | |
6431 m = g_list_append(m, pam); | |
6432 } | |
6433 | |
7026 | 6434 if (od->sess->authinfo->chpassurl) { |
6435 pam = g_new0(struct proto_actions_menu, 1); | |
6436 pam->label = _("Configure IM Forwarding (URL)"); | |
6437 pam->callback = oscar_show_imforwardingurl; | |
6438 pam->gc = gc; | |
6439 m = g_list_append(m, pam); | |
6440 } | |
6441 | |
5238 | 6442 if (!od->icq) { |
4617 | 6443 /* AIM actions */ |
6444 m = g_list_append(m, NULL); | |
4333 | 6445 |
5917 | 6446 pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6447 pam->label = _("Format Screenname"); |
5844 | 6448 pam->callback = oscar_show_format_screenname; |
4333 | 6449 pam->gc = gc; |
6450 m = g_list_append(m, pam); | |
6451 | |
6452 pam = g_new0(struct proto_actions_menu, 1); | |
6453 pam->label = _("Confirm Account"); | |
6454 pam->callback = oscar_confirm_account; | |
6455 pam->gc = gc; | |
6456 m = g_list_append(m, pam); | |
6457 | |
6458 pam = g_new0(struct proto_actions_menu, 1); | |
6459 pam->label = _("Display Current Registered Address"); | |
6460 pam->callback = oscar_show_email; | |
6461 pam->gc = gc; | |
6462 m = g_list_append(m, pam); | |
6463 | |
6464 pam = g_new0(struct proto_actions_menu, 1); | |
6465 pam->label = _("Change Current Registered Address"); | |
6466 pam->callback = oscar_show_change_email; | |
6467 pam->gc = gc; | |
6468 m = g_list_append(m, pam); | |
2086 | 6469 } |
4333 | 6470 |
6471 m = g_list_append(m, NULL); | |
6472 | |
6473 pam = g_new0(struct proto_actions_menu, 1); | |
6474 pam->label = _("Show Buddies Awaiting Authorization"); | |
6475 pam->callback = oscar_show_awaitingauth; | |
6476 pam->gc = gc; | |
6477 m = g_list_append(m, pam); | |
6478 | |
2086 | 6479 m = g_list_append(m, NULL); |
4333 | 6480 |
6481 pam = g_new0(struct proto_actions_menu, 1); | |
6482 pam->label = _("Search for Buddy by Email"); | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6483 pam->callback = oscar_show_find_email; |
4333 | 6484 pam->gc = gc; |
6485 m = g_list_append(m, pam); | |
6486 | |
4336 | 6487 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6488 pam->label = _("Search for Buddy by Information"); |
6489 pam->callback = show_find_info; | |
6490 pam->gc = gc; | |
4336 | 6491 m = g_list_append(m, pam); */ |
2086 | 6492 |
6493 return m; | |
6494 } | |
6495 | |
5575 | 6496 static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) |
2086 | 6497 { |
6498 struct oscar_data *od = gc->proto_data; | |
4617 | 6499 |
6500 if (od->icq) { | |
6501 aim_icq_changepasswd(od->sess, new); | |
2086 | 6502 } else { |
4617 | 6503 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6504 if (conn) { | |
6505 aim_admin_changepasswd(od->sess, conn, new, old); | |
6506 } else { | |
6507 od->chpass = TRUE; | |
6508 od->oldp = g_strdup(old); | |
6509 od->newp = g_strdup(new); | |
6510 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6511 } | |
2086 | 6512 } |
6513 } | |
6514 | |
6059 | 6515 static void oscar_convo_closed(GaimConnection *gc, const char *who) |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6516 { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6517 struct oscar_data *od = gc->proto_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6518 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6519 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6520 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6521 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6522 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6523 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6524 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6525 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6526 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6527 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6528 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6529 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6530 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6531 GAIM_PROTO_OSCAR, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6532 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
|
6533 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6534 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6535 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6536 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6537 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6538 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6539 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6540 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6541 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6542 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6543 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6544 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6545 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6546 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6547 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6548 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6549 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6550 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6551 oscar_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6552 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6553 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6554 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6555 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6556 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6557 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6558 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6559 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6560 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6561 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6562 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6563 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6564 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6565 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6566 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6567 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6568 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6569 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6570 oscar_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6571 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6572 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6573 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6574 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6575 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6576 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6577 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6578 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6579 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6580 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6581 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6582 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6583 #endif |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6584 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6585 oscar_convo_closed, |
5842 | 6586 NULL, |
6587 oscar_set_icon | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6588 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6589 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6590 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6591 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6592 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6593 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6594 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6595 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6596 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6597 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6598 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6599 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6600 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6601 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6602 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6603 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6604 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6605 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6606 NULL, /**< author */ |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
6607 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6608 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6609 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6610 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6611 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6612 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6613 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6614 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6615 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6616 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6617 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6618 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6619 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6620 GaimAccountOption *option; |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6621 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6622 option = gaim_account_option_string_new(_("Auth host"), "server", |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6623 "login.oscar.aol.com"); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6624 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6625 option); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6626 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6627 option = gaim_account_option_int_new(_("Auth port"), "port", 5190); |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6628 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6629 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6630 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6631 my_protocol = plugin; |
2086 | 6632 } |
6633 | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6634 GAIM_INIT_PLUGIN(oscar, init_plugin, info); |