Mercurial > pidgin.yaz
annotate src/protocols/oscar/oscar.c @ 7297:ceda503e55a6
[gaim-migrate @ 7881]
This is AIM Alerts and Reminders (alerts.aol.com). I think this is kinda
a cool thing. And it was totally easy to do. Unfortunately, though, it seems
that AOL won't give your browser the alert unless you send an X-Aim header
in your HTML request. I could parse the HTML myself, but it has, like forms
and stuff in it... and some alerts have images... it wouldn't be worth it.
So this just prints stuff to the debug window. Maybe someday someone will
be able to do something with it.
Mark's going to make sure I didn't screw anything up.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 18 Oct 2003 03:34:14 +0000 |
parents | a50eea7628cb |
children | 0ed0ac132b1b |
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 | |
7283 | 58 #define OSCAR_CONNECT_STEPS 6 |
59 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
60 static GaimPlugin *my_protocol = NULL; |
4249 | 61 |
6871 | 62 static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_INTEROPERATE; |
63 static int caps_icq = AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_ICQUTF8 | AIM_CAPS_INTEROPERATE; | |
3458 | 64 |
4665 | 65 static fu8_t features_aim[] = {0x01, 0x01, 0x01, 0x02}; |
66 static fu8_t features_icq[] = {0x01, 0x06}; | |
2086 | 67 |
7283 | 68 typedef struct _OscarData OscarData; |
69 struct _OscarData { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
70 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
71 aim_conn_t *conn; |
2086 | 72 |
73 guint cnpa; | |
74 guint paspa; | |
3694 | 75 guint emlpa; |
4804 | 76 guint icopa; |
2086 | 77 |
4823 | 78 gboolean iconconnecting; |
5842 | 79 gboolean set_icon; |
4823 | 80 |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
81 GSList *create_rooms; |
2086 | 82 |
83 gboolean conf; | |
84 gboolean reqemail; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
85 gboolean setemail; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
86 char *email; |
2979 | 87 gboolean setnick; |
88 char *newsn; | |
2086 | 89 gboolean chpass; |
90 char *oldp; | |
91 char *newp; | |
5842 | 92 |
2086 | 93 GSList *oscar_chats; |
94 GSList *direct_ims; | |
3630 | 95 GSList *file_transfers; |
4738 | 96 GHashTable *buddyinfo; |
4804 | 97 GSList *requesticon; |
2086 | 98 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
99 gboolean killme; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
100 gboolean icq; |
4804 | 101 guint icontimer; |
5968 | 102 guint getblisttimer; |
2993 | 103 |
104 struct { | |
4230 | 105 guint maxwatchers; /* max users who can watch you */ |
2993 | 106 guint maxbuddies; /* max users you can watch */ |
4230 | 107 guint maxgroups; /* max groups in server list */ |
2993 | 108 guint maxpermits; /* max users on permit list */ |
109 guint maxdenies; /* max users on deny list */ | |
110 guint maxsiglen; /* max size (bytes) of profile */ | |
111 guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
112 } rights; | |
2086 | 113 }; |
114 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
115 struct create_room { |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
116 char *name; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
117 int exchange; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
118 }; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
119 |
2086 | 120 struct chat_connection { |
121 char *name; | |
122 char *show; /* AOL did something funny to us */ | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
123 fu16_t exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
124 fu16_t instance; |
2086 | 125 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
|
126 aim_conn_t *conn; |
2086 | 127 int inpa; |
128 int id; | |
5575 | 129 GaimConnection *gc; /* i hate this. */ |
5679 | 130 GaimConversation *cnv; /* bah. */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
131 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
132 int maxvis; |
2086 | 133 }; |
134 | |
135 struct direct_im { | |
5575 | 136 GaimConnection *gc; |
2086 | 137 char name[80]; |
138 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
139 aim_conn_t *conn; |
3008 | 140 gboolean connected; |
2086 | 141 }; |
142 | |
143 struct ask_direct { | |
5575 | 144 GaimConnection *gc; |
2086 | 145 char *sn; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
146 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
147 fu8_t cookie[8]; |
2086 | 148 }; |
149 | |
7011 | 150 /* |
151 * Various PRPL-specific buddy info that we want to keep track of | |
152 * Some other info is maintained by locate.c, and I'd like to move | |
153 * the rest of this to libfaim, mostly im.c | |
154 */ | |
4738 | 155 struct buddyinfo { |
156 gboolean typingnot; | |
6292 | 157 gchar *availmsg; |
6857 | 158 fu32_t ipaddr; |
5836 | 159 |
160 unsigned long ico_me_len; | |
161 unsigned long ico_me_csum; | |
162 time_t ico_me_time; | |
163 gboolean ico_informed; | |
4738 | 164 |
165 unsigned long ico_len; | |
166 unsigned long ico_csum; | |
167 time_t ico_time; | |
168 gboolean ico_need; | |
2086 | 169 }; |
170 | |
4230 | 171 struct name_data { |
5575 | 172 GaimConnection *gc; |
4230 | 173 gchar *name; |
3453 | 174 gchar *nick; |
3141 | 175 }; |
176 | |
5129 | 177 static char *msgerrreason[] = { |
178 N_("Invalid error"), | |
179 N_("Invalid SNAC"), | |
180 N_("Rate to host"), | |
181 N_("Rate to client"), | |
182 N_("Not logged in"), | |
183 N_("Service unavailable"), | |
184 N_("Service not defined"), | |
185 N_("Obsolete SNAC"), | |
186 N_("Not supported by host"), | |
187 N_("Not supported by client"), | |
188 N_("Refused by client"), | |
189 N_("Reply too big"), | |
190 N_("Responses lost"), | |
191 N_("Request denied"), | |
192 N_("Busted SNAC payload"), | |
193 N_("Insufficient rights"), | |
194 N_("In local permit/deny"), | |
195 N_("Too evil (sender)"), | |
196 N_("Too evil (receiver)"), | |
197 N_("User temporarily unavailable"), | |
198 N_("No match"), | |
199 N_("List overflow"), | |
200 N_("Request ambiguous"), | |
201 N_("Queue full"), | |
202 N_("Not while on AOL") | |
203 }; | |
204 static int msgerrreasonlen = 25; | |
205 | |
206 /* All the libfaim->gaim callback functions */ | |
207 static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); | |
208 static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); | |
209 static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); | |
210 static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); | |
211 static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); | |
212 static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); | |
213 static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); | |
214 static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); | |
215 static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); | |
216 static int gaim_parse_clientauto (aim_session_t *, aim_frame_t *, ...); | |
7011 | 217 static int gaim_parse_userinfo (aim_session_t *, aim_frame_t *, ...); |
5129 | 218 static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); |
219 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
|
220 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
|
221 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
|
222 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
|
223 static int gaim_conv_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); |
5129 | 224 static int gaim_email_parseupdate(aim_session_t *, aim_frame_t *, ...); |
225 static int gaim_icon_error (aim_session_t *, aim_frame_t *, ...); | |
226 static int gaim_icon_parseicon (aim_session_t *, aim_frame_t *, ...); | |
5844 | 227 static int oscar_icon_req (aim_session_t *, aim_frame_t *, ...); |
5129 | 228 static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); |
229 static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); | |
230 static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); | |
231 static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); | |
232 static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); | |
233 static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); | |
234 static int gaim_connerr (aim_session_t *, aim_frame_t *, ...); | |
235 static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); | |
236 static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); | |
237 static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); | |
238 static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); | |
239 static int conninitdone_email (aim_session_t *, aim_frame_t *, ...); | |
240 static int conninitdone_icon (aim_session_t *, aim_frame_t *, ...); | |
241 static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); | |
242 static int gaim_parse_mtn (aim_session_t *, aim_frame_t *, ...); | |
243 static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); | |
244 static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); | |
245 static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); | |
246 static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); | |
247 static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); | |
248 static int gaim_memrequest (aim_session_t *, aim_frame_t *, ...); | |
249 static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); | |
250 static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); | |
251 static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); | |
252 static int gaim_icqalias (aim_session_t *, aim_frame_t *, ...); | |
253 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); | |
254 static int gaim_popup (aim_session_t *, aim_frame_t *, ...); | |
255 #ifndef NOSSI | |
256 static int gaim_ssi_parseerr (aim_session_t *, aim_frame_t *, ...); | |
257 static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); | |
258 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); | |
259 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); | |
260 static int gaim_ssi_authgiven (aim_session_t *, aim_frame_t *, ...); | |
261 static int gaim_ssi_authrequest (aim_session_t *, aim_frame_t *, ...); | |
262 static int gaim_ssi_authreply (aim_session_t *, aim_frame_t *, ...); | |
263 static int gaim_ssi_gotadded (aim_session_t *, aim_frame_t *, ...); | |
264 #endif | |
265 | |
266 /* for DirectIM/image transfer */ | |
267 static int gaim_odc_initiate (aim_session_t *, aim_frame_t *, ...); | |
268 static int gaim_odc_incoming (aim_session_t *, aim_frame_t *, ...); | |
269 static int gaim_odc_typing (aim_session_t *, aim_frame_t *, ...); | |
6982 | 270 static int gaim_odc_update_ui (aim_session_t *, aim_frame_t *, ...); |
5129 | 271 |
272 /* for file transfer */ | |
273 static int oscar_sendfile_estblsh(aim_session_t *, aim_frame_t *, ...); | |
274 static int oscar_sendfile_prompt (aim_session_t *, aim_frame_t *, ...); | |
275 static int oscar_sendfile_ack (aim_session_t *, aim_frame_t *, ...); | |
276 static int oscar_sendfile_done (aim_session_t *, aim_frame_t *, ...); | |
277 | |
278 /* for icons */ | |
279 static gboolean gaim_icon_timerfunc(gpointer data); | |
280 | |
5306 | 281 /* prpl actions - remove this at some point */ |
7282 | 282 /* Because I don't like forward declarations? I think that was why... */ |
5954 | 283 static void oscar_set_info(GaimConnection *gc, const char *text); |
5306 | 284 |
5836 | 285 static void oscar_free_name_data(struct name_data *data) { |
4230 | 286 g_free(data->name); |
287 g_free(data->nick); | |
288 g_free(data); | |
289 } | |
290 | |
5836 | 291 static void oscar_free_buddyinfo(void *data) { |
292 struct buddyinfo *bi = data; | |
6292 | 293 g_free(bi->availmsg); |
5836 | 294 g_free(bi); |
295 } | |
296 | |
5129 | 297 static fu32_t oscar_encoding_check(const char *utf8) |
298 { | |
299 int i = 0; | |
300 fu32_t encodingflag = 0; | |
301 | |
302 /* Determine how we can send this message. Per the warnings elsewhere | |
303 * in this file, these little checks determine the simplest encoding | |
304 * we can use for a given message send using it. */ | |
305 while (utf8[i]) { | |
306 if ((unsigned char)utf8[i] > 0x7f) { | |
307 /* not ASCII! */ | |
308 encodingflag = AIM_IMFLAGS_ISO_8859_1; | |
309 break; | |
310 } | |
311 i++; | |
312 } | |
313 while (utf8[i]) { | |
314 /* ISO-8859-1 is 0x00-0xbf in the first byte | |
315 * followed by 0xc0-0xc3 in the second */ | |
316 if ((unsigned char)utf8[i] < 0x80) { | |
317 i++; | |
318 continue; | |
319 } else if (((unsigned char)utf8[i] & 0xfc) == 0xc0 && | |
320 ((unsigned char)utf8[i + 1] & 0xc0) == 0x80) { | |
321 i += 2; | |
322 continue; | |
323 } | |
324 encodingflag = AIM_IMFLAGS_UNICODE; | |
325 break; | |
326 } | |
327 | |
328 return encodingflag; | |
329 } | |
330 | |
331 static fu32_t oscar_encoding_parse(const char *enc) | |
332 { | |
333 char *charset; | |
334 | |
335 /* If anything goes wrong, fall back on ASCII and print a message */ | |
336 if (enc == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
337 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
338 "Encoding was null, that's odd\n"); |
5129 | 339 return 0; |
340 } | |
341 charset = strstr(enc, "charset="); | |
342 if (charset == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
343 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
344 "No charset specified for info, assuming ASCII\n"); |
5129 | 345 return 0; |
346 } | |
347 charset += 8; | |
348 if (!strcmp(charset, "\"us-ascii\"") || !strcmp(charset, "\"utf-8\"")) { | |
349 /* UTF-8 is our native charset, ASCII is a proper subset */ | |
350 return 0; | |
351 } else if (!strcmp(charset, "\"iso-8859-1\"")) { | |
352 return AIM_IMFLAGS_ISO_8859_1; | |
353 } else if (!strcmp(charset, "\"unicode-2-0\"")) { | |
354 return AIM_IMFLAGS_UNICODE; | |
355 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
356 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
357 "Unrecognized character set '%s', using ASCII\n", charset); |
5129 | 358 return 0; |
359 } | |
360 } | |
361 | |
362 gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen) | |
363 { | |
364 gchar *utf8 = NULL; | |
365 int flags = oscar_encoding_parse(encoding); | |
366 | |
367 switch (flags) { | |
368 case 0: | |
369 utf8 = g_strndup(text, textlen); | |
370 break; | |
371 case AIM_IMFLAGS_ISO_8859_1: | |
372 utf8 = g_convert(text, textlen, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); | |
373 break; | |
374 case AIM_IMFLAGS_UNICODE: | |
375 utf8 = g_convert(text, textlen, "UTF-8", "UCS-2BE", NULL, NULL, NULL); | |
376 break; | |
377 } | |
378 | |
379 return utf8; | |
380 } | |
381 | |
7283 | 382 static struct direct_im *find_direct_im(OscarData *od, const char *who) { |
2086 | 383 GSList *d = od->direct_ims; |
384 struct direct_im *m = NULL; | |
385 | |
386 while (d) { | |
387 m = (struct direct_im *)d->data; | |
4355 | 388 if (!aim_sncmp(who, m->name)) |
4269 | 389 return m; |
2086 | 390 d = d->next; |
391 } | |
392 | |
4269 | 393 return NULL; |
2086 | 394 } |
395 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
396 static char *extract_name(const char *name) { |
4121 | 397 char *tmp, *x; |
2086 | 398 int i, j; |
4120 | 399 |
400 if (!name) | |
4121 | 401 return NULL; |
402 | |
4120 | 403 x = strchr(name, '-'); |
4121 | 404 |
2086 | 405 if (!x) return NULL; |
406 x = strchr(++x, '-'); | |
407 if (!x) return NULL; | |
408 tmp = g_strdup(++x); | |
409 | |
410 for (i = 0, j = 0; x[i]; i++) { | |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
411 char hex[3]; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
412 if (x[i] != '%') { |
2086 | 413 tmp[j++] = x[i]; |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
414 continue; |
2086 | 415 } |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
416 strncpy(hex, x + ++i, 2); hex[2] = 0; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
417 i++; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
418 tmp[j++] = strtol(hex, NULL, 16); |
2086 | 419 } |
420 | |
421 tmp[j] = 0; | |
422 return tmp; | |
423 } | |
424 | |
5575 | 425 static struct chat_connection *find_oscar_chat(GaimConnection *gc, int id) { |
7283 | 426 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 427 struct chat_connection *c = NULL; |
428 | |
429 while (g) { | |
430 c = (struct chat_connection *)g->data; | |
431 if (c->id == id) | |
432 break; | |
433 g = g->next; | |
434 c = NULL; | |
435 } | |
436 | |
437 return c; | |
438 } | |
439 | |
5575 | 440 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
|
441 aim_conn_t *conn) { |
7283 | 442 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 443 struct chat_connection *c = NULL; |
444 | |
445 while (g) { | |
446 c = (struct chat_connection *)g->data; | |
447 if (c->conn == conn) | |
448 break; | |
449 g = g->next; | |
450 c = NULL; | |
451 } | |
452 | |
453 return c; | |
454 } | |
455 | |
4617 | 456 static void gaim_odc_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
5575 | 457 GaimConnection *gc = sess->aux_data; |
7283 | 458 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 459 GaimConversation *cnv; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
460 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
461 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
462 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
463 |
4617 | 464 sn = g_strdup(aim_odc_getsn(conn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
465 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
466 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
467 "%s disconnected Direct IM.\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
468 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
469 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
470 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
471 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
472 |
3008 | 473 if (dim->connected) |
474 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
475 else | |
476 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
|
477 |
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
478 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
|
479 if (cnv) |
6982 | 480 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
|
481 |
5579 | 482 gaim_conversation_update_progress(cnv, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
483 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
484 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
|
485 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
486 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
487 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
488 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
489 |
4617 | 490 static void oscar_callback(gpointer data, gint source, GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
491 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
492 aim_session_t *sess = aim_conn_getsess(conn); |
5575 | 493 GaimConnection *gc = sess ? sess->aux_data : NULL; |
7283 | 494 OscarData *od; |
2086 | 495 |
496 if (!gc) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
497 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
498 "oscar callback for closed connection (1).\n"); |
2086 | 499 return; |
500 } | |
501 | |
7283 | 502 od = (OscarData *)gc->proto_data; |
2086 | 503 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
504 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 505 /* oh boy. this is probably bad. i guess the only thing we |
506 * can really do is return? */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
507 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
508 "oscar callback for closed connection (2).\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
509 gaim_debug(GAIM_DEBUG_MISC, "oscar", "gc = %p\n", gc); |
2086 | 510 return; |
511 } | |
512 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
513 if (condition & GAIM_INPUT_READ) { |
4617 | 514 if (conn->type == AIM_CONN_TYPE_LISTENER) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
515 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
516 "got information on rendezvous listener\n"); |
4617 | 517 if (aim_handlerendconnect(od->sess, conn) < 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
518 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
519 "connection error (rendezvous listener)\n"); |
4617 | 520 aim_conn_kill(od->sess, &conn); |
2086 | 521 } |
522 } else { | |
4617 | 523 if (aim_get_command(od->sess, conn) >= 0) { |
524 aim_rxdispatch(od->sess); | |
6029 | 525 if (od->killme) { |
526 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "Waiting to be destroyed\n"); | |
527 return; | |
528 } | |
2086 | 529 } else { |
530 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
4617 | 531 !(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
532 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
533 "major connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
534 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 535 } else if (conn->type == AIM_CONN_TYPE_CHAT) { |
536 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
5420 | 537 char *buf; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
538 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
539 "disconnected from chat room %s\n", c->name); |
2086 | 540 c->conn = NULL; |
541 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
542 gaim_input_remove(c->inpa); |
2086 | 543 c->inpa = 0; |
544 c->fd = -1; | |
4617 | 545 aim_conn_kill(od->sess, &conn); |
5420 | 546 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
|
547 gaim_notify_error(gc, NULL, buf, NULL); |
5420 | 548 g_free(buf); |
2086 | 549 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
4617 | 550 if (od->cnpa > 0) |
551 gaim_input_remove(od->cnpa); | |
552 od->cnpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
553 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
554 "removing chatnav input watcher\n"); |
4617 | 555 while (od->create_rooms) { |
556 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
557 g_free(cr->name); |
4617 | 558 od->create_rooms = |
559 g_slist_remove(od->create_rooms, cr); | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
560 g_free(cr); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
561 gaim_notify_error(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
562 _("Chat is currently unavailable"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
563 NULL); |
2086 | 564 } |
4617 | 565 aim_conn_kill(od->sess, &conn); |
2086 | 566 } else if (conn->type == AIM_CONN_TYPE_AUTH) { |
4617 | 567 if (od->paspa > 0) |
568 gaim_input_remove(od->paspa); | |
569 od->paspa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
570 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
571 "removing authconn input watcher\n"); |
4617 | 572 aim_conn_kill(od->sess, &conn); |
3694 | 573 } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
4617 | 574 if (od->emlpa > 0) |
575 gaim_input_remove(od->emlpa); | |
576 od->emlpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
577 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
578 "removing email input watcher\n"); |
4617 | 579 aim_conn_kill(od->sess, &conn); |
4804 | 580 } else if (conn->type == AIM_CONN_TYPE_ICON) { |
581 if (od->icopa > 0) | |
582 gaim_input_remove(od->icopa); | |
583 od->icopa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
584 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
585 "removing icon input watcher\n"); |
4804 | 586 aim_conn_kill(od->sess, &conn); |
2086 | 587 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
588 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
4617 | 589 gaim_odc_disconnect(od->sess, conn); |
590 aim_conn_kill(od->sess, &conn); | |
2086 | 591 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
592 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
593 "holy crap! generic connection error! %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
594 conn->type); |
4617 | 595 aim_conn_kill(od->sess, &conn); |
2086 | 596 } |
597 } | |
598 } | |
599 } | |
600 } | |
601 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
602 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
5575 | 603 GaimConnection *gc = sess->aux_data; |
7285 | 604 gchar *s = g_strdup_vprintf(format, va); |
605 gchar *buf; | |
606 | |
607 buf = g_strdup_printf("%s %d: %s", gaim_account_get_username(gaim_connection_get_account(gc)), level, s); | |
608 gaim_debug(GAIM_DEBUG_INFO, "oscar", buf); | |
609 if (buf[strlen(buf)-1] != '\n') | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
610 gaim_debug(GAIM_DEBUG_INFO, NULL, "\n"); |
7285 | 611 g_free(buf); |
2086 | 612 g_free(s); |
613 } | |
614 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
615 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 616 { |
5575 | 617 GaimConnection *gc = data; |
7283 | 618 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
619 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
620 aim_conn_t *conn; |
2086 | 621 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
622 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 623 close(source); |
624 return; | |
625 } | |
626 | |
4617 | 627 od = gc->proto_data; |
628 sess = od->sess; | |
2086 | 629 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 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); |
7282 | 639 aim_request_login(sess, conn, gaim_account_get_username(gaim_connection_get_account(gc))); |
640 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
641 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
7282 | 642 "Screen name sent, waiting for response\n"); |
7283 | 643 gaim_connection_update_progress(gc, _("Screen name sent"), 1, OSCAR_CONNECT_STEPS); |
2086 | 644 } |
645 | |
5575 | 646 static void oscar_login(GaimAccount *account) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
647 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
648 aim_conn_t *conn; |
5575 | 649 GaimConnection *gc = gaim_account_get_connection(account); |
7283 | 650 OscarData *od = gc->proto_data = g_new0(OscarData, 1); |
2086 | 651 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
652 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
|
653 |
5575 | 654 if (isdigit(*(gaim_account_get_username(account)))) { |
4617 | 655 od->icq = TRUE; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
656 } else { |
6622 | 657 gc->flags |= GAIM_CONNECTION_HTML; |
658 gc->flags |= GAIM_CONNECTION_AUTO_RESP; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
659 } |
5836 | 660 od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, oscar_free_buddyinfo); |
2086 | 661 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
662 sess = g_new0(aim_session_t, 1); |
7285 | 663 aim_session_init(sess, TRUE, 0); |
2086 | 664 aim_setdebuggingcb(sess, oscar_debug); |
7282 | 665 /* |
666 * We need an immediate queue because we don't use a while-loop | |
667 * to see if things need to be sent. | |
668 */ | |
2086 | 669 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); |
4617 | 670 od->sess = sess; |
2086 | 671 sess->aux_data = gc; |
672 | |
673 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
674 if (conn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
675 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
676 "internal connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
677 gaim_connection_error(gc, _("Unable to login to AIM")); |
2086 | 678 return; |
679 } | |
680 | |
4649 | 681 aim_conn_addhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2086 | 682 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); |
683 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
684 | |
685 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
686 if (gaim_proxy_connect(account, gaim_account_get_string(account, "server", FAIM_LOGIN_SERVER), |
5575 | 687 gaim_account_get_int(account, "port", FAIM_LOGIN_PORT), |
688 oscar_login_connect, gc) < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
689 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 690 return; |
691 } | |
7282 | 692 |
7283 | 693 gaim_connection_update_progress(gc, _("Connecting"), 0, OSCAR_CONNECT_STEPS); |
5575 | 694 } |
695 | |
696 static void oscar_close(GaimConnection *gc) { | |
7283 | 697 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 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; |
7283 | 763 OscarData *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); |
7283 | 784 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
785 gaim_connection_update_progress(gc, |
7283 | 786 _("Connection established, cookie sent"), 4, OSCAR_CONNECT_STEPS); |
2086 | 787 } |
788 | |
4617 | 789 /* BBB */ |
4656 | 790 /* |
791 * This little area in oscar.c is the nexus of file transfer code, | |
792 * so I wrote a little explanation of what happens. I am such a | |
793 * ninja. | |
794 * | |
795 * The series of events for a file send is: | |
796 * -Create xfer and call gaim_xfer_request (this happens in oscar_ask_sendfile) | |
797 * -User chooses a file and oscar_xfer_init is called. It establishs a | |
798 * listening socket, then asks the remote user to connect to us (and | |
799 * gives them the file name, port, IP, etc.) | |
800 * -They connect to us and we send them an AIM_CB_OFT_PROMPT (this happens | |
801 * in oscar_sendfile_estblsh) | |
802 * -They send us an AIM_CB_OFT_ACK and then we start sending data | |
803 * -When we finish, they send us an AIM_CB_OFT_DONE and they close the | |
804 * connection. | |
805 * -We get drunk because file transfer kicks ass. | |
806 * | |
807 * The series of events for a file receive is: | |
808 * -Create xfer and call gaim_xfer request (this happens in incomingim_chan2) | |
809 * -Gaim user selects file to name and location to save file to and | |
810 * oscar_xfer_init is called | |
811 * -It connects to the remote user using the IP they gave us earlier | |
812 * -After connecting, they send us an AIM_CB_OFT_PROMPT. In reply, we send | |
813 * them an AIM_CB_OFT_ACK. | |
814 * -They begin to send us lots of raw data. | |
815 * -When they finish sending data we send an AIM_CB_OFT_DONE and then close | |
816 * the connectionn. | |
817 */ | |
818 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition); | |
819 | |
820 /* XXX - This function is pretty ugly */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
821 static void oscar_xfer_init(GaimXfer *xfer) |
4656 | 822 { |
5146 | 823 struct aim_oft_info *oft_info = xfer->data; |
5575 | 824 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 825 OscarData *od = gc->proto_data; |
4656 | 826 |
827 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
828 int i; | |
829 | |
830 xfer->filename = g_path_get_basename(xfer->local_filename); | |
5146 | 831 strncpy(oft_info->fh.name, xfer->filename, 64); |
832 oft_info->fh.totsize = gaim_xfer_get_size(xfer); | |
833 oft_info->fh.size = gaim_xfer_get_size(xfer); | |
834 oft_info->fh.checksum = aim_oft_checksum_file(xfer->local_filename); | |
4656 | 835 |
836 /* | |
5146 | 837 * First try the port specified earlier (5190). If that fails, |
838 * increment by 1 and try again. | |
4656 | 839 */ |
5146 | 840 aim_sendfile_listen(od->sess, oft_info); |
841 for (i=0; (i<5 && !oft_info->conn); i++) { | |
842 xfer->local_port = oft_info->port = oft_info->port + 1; | |
843 aim_sendfile_listen(od->sess, oft_info); | |
4656 | 844 } |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
845 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
846 "port is %d, ip is %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
847 xfer->local_port, oft_info->clientip); |
5146 | 848 if (oft_info->conn) { |
849 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
850 aim_im_sendch2_sendfile_ask(od->sess, oft_info); | |
851 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ESTABLISHED, oscar_sendfile_estblsh, 0); | |
4656 | 852 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
853 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
854 _("Unable to establish listener socket.")); |
4656 | 855 /* 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
|
856 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 857 } |
858 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 859 oft_info->conn = aim_newconn(od->sess, AIM_CONN_TYPE_RENDEZVOUS, NULL); |
860 if (oft_info->conn) { | |
861 oft_info->conn->subtype = AIM_CONN_SUBTYPE_OFT_SENDFILE; | |
862 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
|
863 oft_info->conn->fd = xfer->fd = gaim_proxy_connect(gaim_connection_get_account(gc), xfer->remote_ip, xfer->remote_port, |
5575 | 864 oscar_sendfile_connected, xfer); |
4656 | 865 if (xfer->fd == -1) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
866 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
867 _("Unable to establish file descriptor.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
868 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 869 } |
870 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
871 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
872 _("Unable to create new connection.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
873 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 874 /* Try a different port? Ask them to connect to us? */ |
875 } | |
876 | |
877 } | |
878 } | |
879 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
880 static void oscar_xfer_start(GaimXfer *xfer) |
4656 | 881 { |
5146 | 882 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
883 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_start\n"); |
4656 | 884 /* I'm pretty sure we don't need to do jack here. Nor Jill. */ |
885 } | |
886 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
887 static void oscar_xfer_end(GaimXfer *xfer) |
4656 | 888 { |
5146 | 889 struct aim_oft_info *oft_info = xfer->data; |
5575 | 890 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 891 OscarData *od = gc->proto_data; |
4656 | 892 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
893 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_end\n"); |
5146 | 894 |
895 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
896 oft_info->fh.nrecvd = gaim_xfer_get_bytes_sent(xfer); | |
897 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_DONE, oft_info); | |
898 } | |
899 | |
900 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
901 aim_oft_destroyinfo(oft_info); | |
4656 | 902 xfer->data = NULL; |
5146 | 903 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 904 } |
905 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
906 static void oscar_xfer_cancel_send(GaimXfer *xfer) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
907 { |
5146 | 908 struct aim_oft_info *oft_info = xfer->data; |
5575 | 909 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 910 OscarData *od = gc->proto_data; |
4763 | 911 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
912 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
913 "AAA - in oscar_xfer_cancel_send\n"); |
5146 | 914 |
915 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
916 | |
917 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
918 aim_oft_destroyinfo(oft_info); | |
4763 | 919 xfer->data = NULL; |
5146 | 920 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
921 } |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
922 |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
923 static void oscar_xfer_cancel_recv(GaimXfer *xfer) |
4656 | 924 { |
5146 | 925 struct aim_oft_info *oft_info = xfer->data; |
5575 | 926 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 927 OscarData *od = gc->proto_data; |
4656 | 928 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
929 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
930 "AAA - in oscar_xfer_cancel_recv\n"); |
5146 | 931 |
932 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
933 | |
934 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
935 aim_oft_destroyinfo(oft_info); | |
4656 | 936 xfer->data = NULL; |
5146 | 937 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 938 } |
939 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
940 static void oscar_xfer_ack(GaimXfer *xfer, const char *buffer, size_t size) |
4656 | 941 { |
5146 | 942 struct aim_oft_info *oft_info = xfer->data; |
4656 | 943 |
944 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
945 /* | |
946 * If we're done sending, intercept the socket from the core ft code | |
947 * and wait for the other guy to send the "done" OFT packet. | |
948 */ | |
949 if (gaim_xfer_get_bytes_remaining(xfer) <= 0) { | |
950 gaim_input_remove(xfer->watcher); | |
5146 | 951 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); |
4656 | 952 xfer->fd = 0; |
953 gaim_xfer_set_completed(xfer, TRUE); | |
954 } | |
955 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 956 /* Update our rolling checksum. Like Walmart, yo. */ |
957 oft_info->fh.recvcsum = aim_oft_checksum_chunk(buffer, size, oft_info->fh.recvcsum); | |
4656 | 958 } |
959 } | |
960 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
961 static GaimXfer *oscar_find_xfer_by_cookie(GSList *fts, const char *ck) |
4656 | 962 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
963 GaimXfer *xfer; |
5146 | 964 struct aim_oft_info *oft_info; |
4656 | 965 |
966 while (fts) { | |
967 xfer = fts->data; | |
5146 | 968 oft_info = xfer->data; |
969 | |
970 if (oft_info && !strcmp(ck, oft_info->cookie)) | |
4656 | 971 return xfer; |
972 | |
973 fts = g_slist_next(fts); | |
974 } | |
975 | |
976 return NULL; | |
977 } | |
978 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
979 static GaimXfer *oscar_find_xfer_by_conn(GSList *fts, aim_conn_t *conn) |
4656 | 980 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
981 GaimXfer *xfer; |
5146 | 982 struct aim_oft_info *oft_info; |
4656 | 983 |
984 while (fts) { | |
985 xfer = fts->data; | |
5146 | 986 oft_info = xfer->data; |
987 | |
988 if (oft_info && (conn == oft_info->conn)) | |
4656 | 989 return xfer; |
990 | |
991 fts = g_slist_next(fts); | |
992 } | |
993 | |
994 return NULL; | |
995 } | |
996 | |
5575 | 997 static void oscar_ask_sendfile(GaimConnection *gc, const char *destsn) { |
7283 | 998 OscarData *od = (OscarData *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
999 GaimXfer *xfer; |
5146 | 1000 struct aim_oft_info *oft_info; |
3752 | 1001 |
4617 | 1002 /* You want to send a file to someone else, you're so generous */ |
1003 | |
1004 /* Build the file transfer handle */ | |
5575 | 1005 xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, destsn); |
4617 | 1006 xfer->local_port = 5190; |
1007 | |
5146 | 1008 /* Create the oscar-specific data */ |
1009 oft_info = aim_oft_createinfo(od->sess, NULL, destsn, xfer->local_ip, xfer->local_port, 0, 0, NULL); | |
1010 xfer->data = oft_info; | |
1011 | |
4617 | 1012 /* Setup our I/O op functions */ |
1013 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
1014 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
1015 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1016 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1017 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4656 | 1018 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
4617 | 1019 |
1020 /* Keep track of this transfer for later */ | |
1021 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
1022 | |
1023 /* Now perform the request */ | |
1024 gaim_xfer_request(xfer); | |
3630 | 1025 } |
1026 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1027 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
6029 | 1028 GaimConnection *gc = sess->aux_data; |
7283 | 1029 OscarData *od = gc->proto_data; |
6029 | 1030 GaimAccount *account = gc->account; |
1031 aim_conn_t *bosconn; | |
1032 char *host; int port; | |
1033 int i, rc; | |
2086 | 1034 va_list ap; |
2704 | 1035 struct aim_authresp_info *info; |
6029 | 1036 |
5575 | 1037 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1038 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1039 va_start(ap, fr); |
2704 | 1040 info = va_arg(ap, struct aim_authresp_info *); |
2086 | 1041 va_end(ap); |
1042 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1043 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1044 "inside auth_resp (Screen name: %s)\n", info->sn); |
2704 | 1045 |
4293 | 1046 if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { |
4056 | 1047 char buf[256]; |
2704 | 1048 switch (info->errorcode) { |
2086 | 1049 case 0x05: |
1050 /* Incorrect nick/password */ | |
6498 | 1051 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1052 gaim_connection_error(gc, _("Incorrect nickname or password.")); |
2086 | 1053 break; |
1054 case 0x11: | |
1055 /* Suspended account */ | |
6498 | 1056 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1057 gaim_connection_error(gc, _("Your account is currently suspended.")); |
2086 | 1058 break; |
3498 | 1059 case 0x14: |
1060 /* service temporarily unavailable */ | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1061 gaim_connection_error(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); |
3498 | 1062 break; |
2086 | 1063 case 0x18: |
1064 /* connecting too frequently */ | |
6498 | 1065 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1066 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 | 1067 break; |
1068 case 0x1c: | |
1069 /* client too old */ | |
6498 | 1070 gc->wants_to_die = TRUE; |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1071 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
|
1072 gaim_connection_error(gc, buf); |
2086 | 1073 break; |
1074 default: | |
6623 | 1075 gaim_connection_error(gc, _("Authentication failed")); |
2086 | 1076 break; |
1077 } | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1078 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1079 "Login Error Code 0x%04hx\n", info->errorcode); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1080 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1081 "Error URL: %s\n", info->errorurl); |
2086 | 1082 od->killme = TRUE; |
1083 return 1; | |
1084 } | |
1085 | |
1086 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1087 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1088 "Reg status: %hu\n", info->regstatus); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1089 |
2704 | 1090 if (info->email) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1091 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email: %s\n", info->email); |
2086 | 1092 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1093 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email is NULL\n"); |
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 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1096 gaim_debug(GAIM_DEBUG_MISC, "oscar", "BOSIP: %s\n", info->bosip); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1097 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1098 "Closing auth connection...\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1099 aim_conn_kill(sess, &fr->conn); |
2086 | 1100 |
1101 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
1102 if (bosconn == NULL) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1103 gaim_connection_error(gc, _("Internal Error")); |
2086 | 1104 od->killme = TRUE; |
1105 return 0; | |
1106 } | |
1107 | |
4649 | 1108 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1109 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
2086 | 1110 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
1111 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
1112 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
2993 | 1113 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
2086 | 1114 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
1115 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
1116 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
1117 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
1118 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
1119 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
3212 | 1120 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
2086 | 1121 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
1122 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
1123 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
1124 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
1125 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
3595 | 1126 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
7011 | 1127 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_userinfo, 0); |
2086 | 1128 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); |
1129 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
|
1130 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 1131 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
1132 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
1133 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
1134 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1135 aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
5844 | 1136 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
|
1137 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
|
1138 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
|
1139 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
4759 | 1140 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS, gaim_icqalias, 0); |
4624 | 1141 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO, gaim_icqinfo, 0); |
4230 | 1142 #ifndef NOSSI |
4642 | 1143 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ERROR, gaim_ssi_parseerr, 0); |
2991 | 1144 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
1145 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
1146 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
4230 | 1147 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); |
1148 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTH, gaim_ssi_authgiven, 0); | |
1149 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREQ, gaim_ssi_authrequest, 0); | |
1150 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREP, gaim_ssi_authreply, 0); | |
1151 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADDED, gaim_ssi_gotadded, 0); | |
1152 #endif | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1153 |
7283 | 1154 od->conn = bosconn; |
2704 | 1155 for (i = 0; i < (int)strlen(info->bosip); i++) { |
1156 if (info->bosip[i] == ':') { | |
1157 port = atoi(&(info->bosip[i+1])); | |
2086 | 1158 break; |
1159 } | |
1160 } | |
2704 | 1161 host = g_strndup(info->bosip, i); |
2086 | 1162 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1163 rc = gaim_proxy_connect(gc->account, host, port, oscar_bos_connect, gc); |
2086 | 1164 g_free(host); |
4366 | 1165 if (rc < 0) { |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1166 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 1167 od->killme = TRUE; |
1168 return 0; | |
1169 } | |
4293 | 1170 aim_sendcookie(sess, bosconn, info->cookielen, info->cookie); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1171 gaim_input_remove(gc->inpa); |
2704 | 1172 |
7283 | 1173 gaim_connection_update_progress(gc, _("Received authorization"), 3, OSCAR_CONNECT_STEPS); |
7282 | 1174 |
2086 | 1175 return 1; |
1176 } | |
1177 | |
7285 | 1178 /* XXX - Should use gaim_url_fetch for the below stuff */ |
2086 | 1179 struct pieceofcrap { |
5575 | 1180 GaimConnection *gc; |
2086 | 1181 unsigned long offset; |
1182 unsigned long len; | |
1183 char *modname; | |
1184 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1185 aim_conn_t *conn; |
2086 | 1186 unsigned int inpa; |
1187 }; | |
1188 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1189 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 1190 { |
1191 struct pieceofcrap *pos = data; | |
7283 | 1192 OscarData *od = pos->gc->proto_data; |
2086 | 1193 char in = '\0'; |
1194 int x = 0; | |
1195 unsigned char m[17]; | |
1196 | |
1197 while (read(pos->fd, &in, 1) == 1) { | |
1198 if (in == '\n') | |
1199 x++; | |
1200 else if (in != '\r') | |
1201 x = 0; | |
1202 if (x == 2) | |
1203 break; | |
1204 in = '\0'; | |
1205 } | |
1206 if (in != '\n') { | |
4056 | 1207 char buf[256]; |
1208 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
|
1209 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1210 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1211 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1212 buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1213 gaim_input_remove(pos->inpa); |
2086 | 1214 close(pos->fd); |
1215 g_free(pos); | |
1216 return; | |
1217 } | |
1218 read(pos->fd, m, 16); | |
1219 m[16] = '\0'; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1220 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Sending hash: "); |
2086 | 1221 for (x = 0; x < 16; x++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1222 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx ", (unsigned char)m[x]); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1223 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1224 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1225 gaim_input_remove(pos->inpa); |
2086 | 1226 close(pos->fd); |
1227 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
1228 g_free(pos); | |
1229 } | |
1230 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1231 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1232 struct pieceofcrap *pos = data; |
5420 | 1233 gchar *buf; |
2086 | 1234 |
4366 | 1235 pos->fd = source; |
1236 | |
2086 | 1237 if (source < 0) { |
5420 | 1238 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
|
1239 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1240 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1241 _("Gaim was Unable to get a valid AIM login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1242 buf); |
5420 | 1243 g_free(buf); |
2086 | 1244 if (pos->modname) |
1245 g_free(pos->modname); | |
1246 g_free(pos); | |
1247 return; | |
1248 } | |
1249 | |
5420 | 1250 buf = g_strdup_printf("GET " AIMHASHDATA "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", |
2086 | 1251 pos->offset, pos->len, pos->modname ? pos->modname : ""); |
1252 write(pos->fd, buf, strlen(buf)); | |
5420 | 1253 g_free(buf); |
2086 | 1254 if (pos->modname) |
1255 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1256 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 1257 return; |
1258 } | |
1259 | |
1260 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
1261 #define AIM_MAX_FILE_SIZE 98304 | |
1262 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1263 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1264 va_list ap; |
1265 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1266 fu32_t offset, len; |
2086 | 1267 char *modname; |
1268 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1269 va_start(ap, fr); |
4200 | 1270 offset = va_arg(ap, fu32_t); |
1271 len = va_arg(ap, fu32_t); | |
2086 | 1272 modname = va_arg(ap, char *); |
1273 va_end(ap); | |
1274 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1275 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 1276 "offset: %u, len: %u, file: %s\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1277 offset, len, (modname ? modname : "aim.exe")); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1278 |
2086 | 1279 if (len == 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1280 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
|
1281 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 1282 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1283 return 1; | |
1284 } | |
1285 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
1286 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
1287 char *buf; | |
1288 int i = 8; | |
1289 if (modname) | |
1290 i += strlen(modname); | |
1291 buf = g_malloc(i); | |
1292 i = 0; | |
1293 if (modname) { | |
1294 memcpy(buf, modname, strlen(modname)); | |
1295 i += strlen(modname); | |
1296 } | |
1297 buf[i++] = offset & 0xff; | |
1298 buf[i++] = (offset >> 8) & 0xff; | |
1299 buf[i++] = (offset >> 16) & 0xff; | |
1300 buf[i++] = (offset >> 24) & 0xff; | |
1301 buf[i++] = len & 0xff; | |
1302 buf[i++] = (len >> 8) & 0xff; | |
1303 buf[i++] = (len >> 16) & 0xff; | |
1304 buf[i++] = (len >> 24) & 0xff; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1305 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len + offset is invalid, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1306 "hashing request\n"); |
2086 | 1307 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1308 g_free(buf); | |
1309 return 1; | |
1310 } | |
1311 */ | |
1312 | |
1313 pos = g_new0(struct pieceofcrap, 1); | |
1314 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1315 pos->conn = fr->conn; |
2086 | 1316 |
1317 pos->offset = offset; | |
1318 pos->len = len; | |
1319 pos->modname = modname ? g_strdup(modname) : NULL; | |
1320 | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1321 if (gaim_proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) != 0) { |
4056 | 1322 char buf[256]; |
2086 | 1323 if (pos->modname) |
1324 g_free(pos->modname); | |
1325 g_free(pos); | |
4056 | 1326 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
|
1327 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1328 gaim_notify_warning(pos->gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1329 _("Gaim was Unable to get a valid login hash."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1330 buf); |
2086 | 1331 } |
1332 | |
1333 return 1; | |
1334 } | |
1335 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1336 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1337 GaimConnection *gc = sess->aux_data; |
7283 | 1338 OscarData *od = gc->proto_data; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1339 GaimAccount *account = gaim_connection_get_account(gc); |
5575 | 1340 GaimAccount *ac = gaim_connection_get_account(gc); |
7282 | 1341 #if 0 |
1342 struct client_info_s info = {"gaim", 7, 3, 2003, "us", "en", 0x0004, 0x0000, 0x04b}; | |
1343 #endif | |
7011 | 1344 va_list ap; |
1345 char *key; | |
2086 | 1346 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1347 va_start(ap, fr); |
2086 | 1348 key = va_arg(ap, char *); |
1349 va_end(ap); | |
1350 | |
4617 | 1351 if (od->icq) { |
3458 | 1352 struct client_info_s info = CLIENTINFO_ICQ_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 } else { |
1356 struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; | |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1357 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1358 gaim_account_get_password(account), &info, key); |
3458 | 1359 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1360 |
7283 | 1361 gaim_connection_update_progress(gc, _("Password sent"), 2, OSCAR_CONNECT_STEPS); |
7282 | 1362 |
2086 | 1363 return 1; |
1364 } | |
1365 | |
2675 | 1366 static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1367 GaimConnection *gc = sess->aux_data; |
2647 | 1368 struct chat_connection *chatcon; |
1369 static int id = 1; | |
1370 | |
6905 | 1371 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
|
1372 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
|
1373 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
|
1374 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
|
1375 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_conv_chat_incoming_msg, 0); |
2675 | 1376 |
2672 | 1377 aim_clientready(sess, fr->conn); |
2675 | 1378 |
2647 | 1379 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
1380 chatcon->id = id; | |
1381 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
1382 | |
1383 return 1; | |
1384 } | |
1385 | |
2675 | 1386 static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
1387 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1388 aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
2647 | 1389 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
2675 | 1390 |
1391 aim_clientready(sess, fr->conn); | |
1392 | |
1393 aim_chatnav_reqrights(sess, fr->conn); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1394 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1395 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1396 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1397 |
3694 | 1398 static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
1399 | |
1400 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1401 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); | |
1402 | |
7282 | 1403 aim_email_sendcookies(sess); |
1404 aim_email_activate(sess); | |
3694 | 1405 aim_clientready(sess, fr->conn); |
1406 | |
1407 return 1; | |
1408 } | |
1409 | |
4804 | 1410 static int conninitdone_icon(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1411 GaimConnection *gc = sess->aux_data; |
7283 | 1412 OscarData *od = gc->proto_data; |
4804 | 1413 |
1414 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1415 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_ERROR, gaim_icon_error, 0); | |
1416 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_RESPONSE, gaim_icon_parseicon, 0); | |
1417 | |
1418 aim_clientready(sess, fr->conn); | |
1419 | |
4823 | 1420 od->iconconnecting = FALSE; |
1421 | |
4804 | 1422 if (od->icontimer) |
1423 g_source_remove(od->icontimer); | |
1424 od->icontimer = g_timeout_add(100, gaim_icon_timerfunc, gc); | |
1425 | |
1426 return 1; | |
1427 } | |
1428 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1429 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1430 GaimConnection *gc = data; |
7283 | 1431 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1432 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1433 aim_conn_t *tstconn; |
2086 | 1434 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1435 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1436 close(source); |
1437 return; | |
1438 } | |
1439 | |
4617 | 1440 od = gc->proto_data; |
1441 sess = od->sess; | |
2086 | 1442 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); |
4366 | 1443 tstconn->fd = source; |
2086 | 1444 |
1445 if (source < 0) { | |
1446 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1447 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1448 "unable to connect to chatnav server\n"); |
2086 | 1449 return; |
1450 } | |
1451 | |
1452 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1453 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
|
1454 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1455 } |
1456 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1457 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1458 { |
5575 | 1459 GaimConnection *gc = data; |
7283 | 1460 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1461 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1462 aim_conn_t *tstconn; |
2086 | 1463 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1464 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1465 close(source); |
1466 return; | |
1467 } | |
1468 | |
4617 | 1469 od = gc->proto_data; |
1470 sess = od->sess; | |
2086 | 1471 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 1472 tstconn->fd = source; |
2086 | 1473 |
1474 if (source < 0) { | |
1475 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1476 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1477 "unable to connect to authorizer\n"); |
2086 | 1478 return; |
1479 } | |
1480 | |
1481 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1482 od->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
6905 | 1483 gaim_debug(GAIM_DEBUG_INFO, "oscar", "admin: connected\n"); |
2086 | 1484 } |
1485 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1486 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1487 { |
1488 struct chat_connection *ccon = data; | |
5575 | 1489 GaimConnection *gc = ccon->gc; |
7283 | 1490 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1491 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1492 aim_conn_t *tstconn; |
2086 | 1493 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1494 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1495 close(source); |
1496 g_free(ccon->show); | |
1497 g_free(ccon->name); | |
1498 g_free(ccon); | |
1499 return; | |
1500 } | |
1501 | |
4617 | 1502 od = gc->proto_data; |
1503 sess = od->sess; | |
2086 | 1504 tstconn = ccon->conn; |
4366 | 1505 tstconn->fd = source; |
2086 | 1506 |
1507 if (source < 0) { | |
1508 aim_conn_kill(sess, &tstconn); | |
1509 g_free(ccon->show); | |
1510 g_free(ccon->name); | |
1511 g_free(ccon); | |
1512 return; | |
1513 } | |
1514 | |
1515 aim_conn_completeconnect(sess, ccon->conn); | |
4617 | 1516 ccon->inpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
1517 od->oscar_chats = g_slist_append(od->oscar_chats, ccon); | |
2086 | 1518 } |
1519 | |
3694 | 1520 static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1521 GaimConnection *gc = data; |
7283 | 1522 OscarData *od; |
3694 | 1523 aim_session_t *sess; |
1524 aim_conn_t *tstconn; | |
1525 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1526 if (!g_list_find(gaim_connections_get_all(), gc)) { |
3694 | 1527 close(source); |
1528 return; | |
1529 } | |
1530 | |
4617 | 1531 od = gc->proto_data; |
1532 sess = od->sess; | |
3694 | 1533 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
4366 | 1534 tstconn->fd = source; |
3694 | 1535 |
1536 if (source < 0) { | |
1537 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1538 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1539 "unable to connect to email server\n"); |
3694 | 1540 return; |
1541 } | |
1542 | |
1543 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1544 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
|
1545 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1546 "email: connected\n"); |
3694 | 1547 } |
1548 | |
4804 | 1549 static void oscar_icon_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1550 GaimConnection *gc = data; |
7283 | 1551 OscarData *od; |
4804 | 1552 aim_session_t *sess; |
1553 aim_conn_t *tstconn; | |
1554 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1555 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4804 | 1556 close(source); |
1557 return; | |
1558 } | |
1559 | |
1560 od = gc->proto_data; | |
1561 sess = od->sess; | |
1562 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_ICON); | |
1563 tstconn->fd = source; | |
1564 | |
1565 if (source < 0) { | |
1566 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1567 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1568 "unable to connect to icon server\n"); |
4804 | 1569 return; |
1570 } | |
1571 | |
1572 aim_conn_completeconnect(sess, tstconn); | |
1573 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
|
1574 gaim_debug(GAIM_DEBUG_INFO, "oscar", "icon: connected\n"); |
4804 | 1575 } |
1576 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1577 /* 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
|
1578 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1579 GaimConnection *gc = sess->aux_data; |
1580 GaimAccount *account = gaim_connection_get_account(gc); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1581 aim_conn_t *tstconn; |
4452 | 1582 int i; |
2086 | 1583 char *host; |
1584 int port; | |
4821 | 1585 va_list ap; |
1586 struct aim_redirect_data *redir; | |
2086 | 1587 |
5575 | 1588 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1589 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1590 va_start(ap, fr); |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1591 redir = va_arg(ap, struct aim_redirect_data *); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1592 va_end(ap); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1593 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1594 for (i = 0; i < (int)strlen(redir->ip); i++) { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1595 if (redir->ip[i] == ':') { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1596 port = atoi(&(redir->ip[i+1])); |
2086 | 1597 break; |
1598 } | |
1599 } | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1600 host = g_strndup(redir->ip, i); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1601 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1602 switch(redir->group) { |
2086 | 1603 case 0x7: /* Authorizer */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1604 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1605 "Reconnecting with authorizor...\n"); |
2086 | 1606 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); |
1607 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1608 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1609 "unable to reconnect with authorizer\n"); |
2086 | 1610 g_free(host); |
1611 return 1; | |
1612 } | |
4649 | 1613 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1614 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
2086 | 1615 |
1616 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1617 if (gaim_proxy_connect(account, host, port, oscar_auth_connect, gc) != 0) { |
2086 | 1618 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1619 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1620 "unable to reconnect with authorizer\n"); |
2086 | 1621 g_free(host); |
1622 return 1; | |
1623 } | |
4293 | 1624 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1625 break; |
1626 | |
2086 | 1627 case 0xd: /* ChatNav */ |
1628 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1629 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1630 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1631 "unable to connect to chatnav server\n"); |
2086 | 1632 g_free(host); |
1633 return 1; | |
1634 } | |
4649 | 1635 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1636 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
2086 | 1637 |
1638 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1639 if (gaim_proxy_connect(account, host, port, oscar_chatnav_connect, gc) != 0) { |
2086 | 1640 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1641 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1642 "unable to connect to chatnav server\n"); |
2086 | 1643 g_free(host); |
1644 return 1; | |
1645 } | |
4293 | 1646 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1647 break; |
1648 | |
1649 case 0xe: { /* Chat */ | |
2086 | 1650 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1651 |
2086 | 1652 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1653 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1654 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1655 "unable to connect to chat server\n"); |
2086 | 1656 g_free(host); |
1657 return 1; | |
1658 } | |
1659 | |
4649 | 1660 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1661 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
1662 | |
2086 | 1663 ccon = g_new0(struct chat_connection, 1); |
1664 ccon->conn = tstconn; | |
1665 ccon->gc = gc; | |
1666 ccon->fd = -1; | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1667 ccon->name = g_strdup(redir->chat.room); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1668 ccon->exchange = redir->chat.exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1669 ccon->instance = redir->chat.instance; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1670 ccon->show = extract_name(redir->chat.room); |
4634 | 1671 |
2086 | 1672 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1673 if (gaim_proxy_connect(account, host, port, oscar_chat_connect, ccon) != 0) { |
2086 | 1674 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1675 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1676 "unable to connect to chat server\n"); |
2086 | 1677 g_free(host); |
1678 g_free(ccon->show); | |
1679 g_free(ccon->name); | |
1680 g_free(ccon); | |
1681 return 1; | |
1682 } | |
4293 | 1683 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1684 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1685 "Connected to chat room %s exchange %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1686 ccon->name, ccon->exchange); |
4194 | 1687 } break; |
3694 | 1688 |
4804 | 1689 case 0x0010: { /* icon */ |
1690 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_ICON, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1691 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1692 "unable to connect to icon server\n"); |
4804 | 1693 g_free(host); |
1694 return 1; | |
1695 } | |
1696 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); | |
1697 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_icon, 0); | |
1698 | |
1699 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1700 if (gaim_proxy_connect(account, host, port, oscar_icon_connect, gc) != 0) { |
4804 | 1701 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1702 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1703 "unable to connect to icon server\n"); |
4804 | 1704 g_free(host); |
1705 return 1; | |
1706 } | |
1707 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); | |
1708 } break; | |
1709 | |
3694 | 1710 case 0x0018: { /* email */ |
1711 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1712 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1713 "unable to connect to email server\n"); |
3694 | 1714 g_free(host); |
1715 return 1; | |
1716 } | |
4649 | 1717 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
3694 | 1718 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
1719 | |
1720 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1721 if (gaim_proxy_connect(account, host, port, oscar_email_connect, gc) != 0) { |
3694 | 1722 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1723 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1724 "unable to connect to email server\n"); |
3694 | 1725 g_free(host); |
1726 return 1; | |
1727 } | |
4293 | 1728 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
3694 | 1729 } break; |
1730 | |
2086 | 1731 default: /* huh? */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1732 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1733 "got redirect for unknown service 0x%04hx\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1734 redir->group); |
2086 | 1735 break; |
1736 } | |
1737 | |
1738 g_free(host); | |
1739 return 1; | |
1740 } | |
1741 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1742 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1743 GaimConnection *gc = sess->aux_data; |
7283 | 1744 OscarData *od = gc->proto_data; |
4738 | 1745 struct buddyinfo *bi; |
2993 | 1746 time_t time_idle = 0, signon = 0; |
1747 int type = 0; | |
1748 int caps = 0; | |
2086 | 1749 va_list ap; |
4738 | 1750 aim_userinfo_t *info; |
4194 | 1751 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1752 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1753 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1754 va_end(ap); |
1755 | |
2993 | 1756 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
1757 caps = info->capabilities; | |
3267 | 1758 if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
1759 type |= UC_AB; | |
6318 | 1760 if (caps & AIM_CAPS_HIPTOP) |
1761 type |= UC_HIPTOP; | |
3267 | 1762 |
4766 | 1763 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1764 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1765 type |= UC_UNCONFIRMED; | |
1766 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1767 type |= UC_ADMIN; | |
1768 if (info->flags & AIM_FLAG_AOL) | |
1769 type |= UC_AOL; | |
1770 if (info->flags & AIM_FLAG_FREE) | |
1771 type |= UC_NORMAL; | |
1772 if (info->flags & AIM_FLAG_AWAY) | |
1773 type |= UC_UNAVAILABLE; | |
1774 if (info->flags & AIM_FLAG_WIRELESS) | |
1775 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1776 } |
2993 | 1777 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1778 type = (info->icqinfo.status << 16); |
3013 | 1779 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1780 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1781 type |= UC_UNAVAILABLE; |
3013 | 1782 } |
2993 | 1783 } |
1784 | |
7141 | 1785 if (caps & AIM_CAPS_ICQ_DIRECT) |
1786 caps ^= AIM_CAPS_ICQ_DIRECT; | |
2993 | 1787 |
1788 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1789 time(&time_idle); |
1790 time_idle -= info->idletime*60; | |
2993 | 1791 } |
1792 | |
5836 | 1793 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
1794 signon = info->onlinesince; | |
1795 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
2993 | 1796 signon = time(NULL) - info->sessionlen; |
2086 | 1797 |
5575 | 1798 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), info->sn)) |
1799 gaim_connection_set_display_name(gc, info->sn); | |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1800 |
7261 | 1801 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
4738 | 1802 if (!bi) { |
1803 bi = g_new0(struct buddyinfo, 1); | |
7261 | 1804 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, info->sn)), bi); |
4738 | 1805 } |
4739 | 1806 bi->typingnot = FALSE; |
1807 bi->ico_informed = FALSE; | |
6857 | 1808 bi->ipaddr = info->icqinfo.ipaddr; |
1809 | |
1810 /* Available message stuff */ | |
6292 | 1811 free(bi->availmsg); |
7011 | 1812 if (info->avail != NULL) |
1813 if (info->avail_encoding) { | |
1814 gchar *enc = g_strdup_printf("charset=\"%s\"", info->avail_encoding); | |
1815 bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len); | |
6292 | 1816 g_free(enc); |
1817 } else { | |
1818 /* No explicit encoding means utf8. Yay. */ | |
7011 | 1819 bi->availmsg = g_strdup(info->avail); |
6292 | 1820 } |
5837 | 1821 else |
6292 | 1822 bi->availmsg = NULL; |
4732 | 1823 |
4804 | 1824 /* Server stored icon stuff */ |
4853 | 1825 if (info->iconcsumlen) { |
7125 | 1826 const char *filename = NULL, *saved_b16 = NULL; |
1827 char *b16 = NULL; | |
7093 | 1828 GaimBuddy *b = NULL; |
4853 | 1829 |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
1830 b16 = gaim_base16_encode(info->iconcsum, info->iconcsumlen); |
4853 | 1831 b = gaim_find_buddy(gc->account, info->sn); |
7093 | 1832 /* |
1833 * If for some reason the checksum is valid, but cached file is not.. | |
1834 * we want to know. | |
1835 */ | |
1836 filename = gaim_buddy_get_setting(b, "buddy_icon"); | |
1837 if (filename != NULL) { | |
1838 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
1839 saved_b16 = gaim_buddy_get_setting(b, "icon_checksum"); | |
1840 } else | |
1841 saved_b16 = NULL; | |
7054
7c04a0775918
[gaim-migrate @ 7617]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7045
diff
changeset
|
1842 |
4853 | 1843 if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { |
1844 GSList *cur = od->requesticon; | |
1845 while (cur && aim_sncmp((char *)cur->data, info->sn)) | |
1846 cur = cur->next; | |
1847 if (!cur) { | |
7261 | 1848 od->requesticon = g_slist_append(od->requesticon, strdup(gaim_normalize(gc->account, info->sn))); |
4853 | 1849 if (od->icontimer) |
1850 g_source_remove(od->icontimer); | |
1851 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
1852 } | |
1853 } | |
6053 | 1854 g_free(b16); |
4853 | 1855 } |
1856 | |
5628 | 1857 serv_got_update(gc, info->sn, 1, (info->warnlevel/10.0) + 0.5, signon, time_idle, type); |
2086 | 1858 |
1859 return 1; | |
1860 } | |
1861 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1862 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1863 GaimConnection *gc = sess->aux_data; |
7283 | 1864 OscarData *od = gc->proto_data; |
2086 | 1865 va_list ap; |
4739 | 1866 aim_userinfo_t *info; |
2086 | 1867 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1868 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1869 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1870 va_end(ap); |
1871 | |
4732 | 1872 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0); |
2086 | 1873 |
7261 | 1874 g_hash_table_remove(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
5837 | 1875 |
2086 | 1876 return 1; |
1877 } | |
1878 | |
3730 | 1879 static void cancel_direct_im(struct ask_direct *d) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1880 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Freeing DirectIM prompts.\n"); |
2086 | 1881 |
1882 g_free(d->sn); | |
1883 g_free(d); | |
1884 } | |
1885 | |
4617 | 1886 static void oscar_odc_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1887 struct direct_im *dim = data; |
5575 | 1888 GaimConnection *gc = dim->gc; |
7283 | 1889 OscarData *od = gc->proto_data; |
5679 | 1890 GaimConversation *cnv; |
2086 | 1891 char buf[256]; |
3008 | 1892 struct sockaddr name; |
1893 socklen_t name_len = 1; | |
1894 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1895 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1896 g_free(dim); |
1897 return; | |
1898 } | |
1899 | |
1900 if (source < 0) { | |
1901 g_free(dim); | |
1902 return; | |
1903 } | |
1904 | |
4366 | 1905 dim->conn->fd = source; |
2086 | 1906 aim_conn_completeconnect(od->sess, dim->conn); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
1907 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, dim->name); |
3008 | 1908 |
1909 /* This is the best way to see if we're connected or not */ | |
1910 if (getpeername(source, &name, &name_len) == 0) { | |
1911 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
1912 dim->connected = TRUE; | |
6982 | 1913 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
3008 | 1914 } |
2086 | 1915 od->direct_ims = g_slist_append(od->direct_ims, dim); |
3008 | 1916 |
4617 | 1917 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
2086 | 1918 } |
1919 | |
4617 | 1920 /* BBB */ |
3952 | 1921 /* |
4617 | 1922 * This is called after a remote AIM user has connected to us. We |
1923 * want to do some voodoo with the socket file descriptors, add a | |
1924 * callback or two, and then send the AIM_CB_OFT_PROMPT. | |
3952 | 1925 */ |
4656 | 1926 static int oscar_sendfile_estblsh(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1927 GaimConnection *gc = sess->aux_data; |
7283 | 1928 OscarData *od = (OscarData *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1929 GaimXfer *xfer; |
5146 | 1930 struct aim_oft_info *oft_info; |
3630 | 1931 va_list ap; |
1932 aim_conn_t *conn, *listenerconn; | |
4656 | 1933 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1934 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1935 "AAA - in oscar_sendfile_estblsh\n"); |
3630 | 1936 va_start(ap, fr); |
1937 conn = va_arg(ap, aim_conn_t *); | |
1938 listenerconn = va_arg(ap, aim_conn_t *); | |
1939 va_end(ap); | |
1940 | |
4617 | 1941 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, listenerconn))) |
1942 return 1; | |
1943 | |
5146 | 1944 if (!(oft_info = xfer->data)) |
4617 | 1945 return 1; |
1946 | |
3630 | 1947 /* Stop watching listener conn; watch transfer conn instead */ |
4617 | 1948 gaim_input_remove(xfer->watcher); |
3630 | 1949 aim_conn_kill(sess, &listenerconn); |
1950 | |
5146 | 1951 oft_info->conn = conn; |
1952 xfer->fd = oft_info->conn->fd; | |
1953 | |
1954 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ACK, oscar_sendfile_ack, 0); | |
1955 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DONE, oscar_sendfile_done, 0); | |
1956 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1957 |
1958 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1959 aim_oft_sendheader(sess, AIM_CB_OFT_PROMPT, oft_info); |
3630 | 1960 |
1961 return 0; | |
1962 } | |
1963 | |
3952 | 1964 /* |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1965 * This is the gaim callback passed to gaim_proxy_connect when connecting to another AIM |
4617 | 1966 * user in order to transfer a file. |
3952 | 1967 */ |
4617 | 1968 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
|
1969 GaimXfer *xfer; |
5146 | 1970 struct aim_oft_info *oft_info; |
4656 | 1971 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1972 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1973 "AAA - in oscar_sendfile_connected\n"); |
4617 | 1974 if (!(xfer = data)) |
1975 return; | |
5146 | 1976 if (!(oft_info = xfer->data)) |
3630 | 1977 return; |
4617 | 1978 if (source < 0) |
1979 return; | |
1980 | |
1981 xfer->fd = source; | |
5146 | 1982 oft_info->conn->fd = source; |
1983 | |
1984 aim_conn_completeconnect(oft_info->sess, oft_info->conn); | |
1985 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1986 |
1987 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1988 aim_im_sendch2_sendfile_accept(oft_info->sess, oft_info); |
4617 | 1989 |
1990 return; | |
3630 | 1991 } |
1992 | |
3952 | 1993 /* |
4617 | 1994 * This is called when a buddy sends us some file info. This happens when they |
1995 * are sending a file to you, and you have just established a connection to them. | |
4650 | 1996 * You should send them the exact same info except use the real cookie. We also |
4617 | 1997 * get like totally ready to like, receive the file, kay? |
3952 | 1998 */ |
4617 | 1999 static int oscar_sendfile_prompt(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2000 GaimConnection *gc = sess->aux_data; |
7283 | 2001 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2002 GaimXfer *xfer; |
5146 | 2003 struct aim_oft_info *oft_info; |
4617 | 2004 va_list ap; |
2005 aim_conn_t *conn; | |
2006 fu8_t *cookie; | |
2007 struct aim_fileheader_t *fh; | |
4656 | 2008 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2009 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2010 "AAA - in oscar_sendfile_prompt\n"); |
4617 | 2011 va_start(ap, fr); |
2012 conn = va_arg(ap, aim_conn_t *); | |
2013 cookie = va_arg(ap, fu8_t *); | |
2014 fh = va_arg(ap, struct aim_fileheader_t *); | |
2015 va_end(ap); | |
2016 | |
2017 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2018 return 1; | |
2019 | |
5146 | 2020 if (!(oft_info = xfer->data)) |
4617 | 2021 return 1; |
2022 | |
2023 /* We want to stop listening with a normal thingy */ | |
2024 gaim_input_remove(xfer->watcher); | |
2025 xfer->watcher = 0; | |
2026 | |
5146 | 2027 /* They sent us some information about the file they're sending */ |
2028 memcpy(&oft_info->fh, fh, sizeof(*fh)); | |
2029 | |
2030 /* Fill in the cookie */ | |
2031 memcpy(&oft_info->fh.bcookie, oft_info->cookie, 8); | |
2032 | |
4617 | 2033 /* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */ |
5146 | 2034 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info); |
4617 | 2035 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2036 | |
2037 return 0; | |
3630 | 2038 } |
2039 | |
3952 | 2040 /* |
4657 | 2041 * We are sending a file to someone else. They have just acknowledged our |
4617 | 2042 * prompt, so we want to start sending data like there's no tomorrow. |
3952 | 2043 */ |
4617 | 2044 static int oscar_sendfile_ack(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2045 GaimConnection *gc = sess->aux_data; |
7283 | 2046 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2047 GaimXfer *xfer; |
4617 | 2048 va_list ap; |
2049 aim_conn_t *conn; | |
2050 fu8_t *cookie; | |
2051 struct aim_fileheader_t *fh; | |
4656 | 2052 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2053 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_ack\n"); |
4617 | 2054 va_start(ap, fr); |
2055 conn = va_arg(ap, aim_conn_t *); | |
2056 cookie = va_arg(ap, fu8_t *); | |
2057 fh = va_arg(ap, struct aim_fileheader_t *); | |
2058 va_end(ap); | |
2059 | |
2060 if (!(xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) | |
2061 return 1; | |
2062 | |
4656 | 2063 /* We want to stop listening with a normal thingy */ |
2064 gaim_input_remove(xfer->watcher); | |
2065 xfer->watcher = 0; | |
2066 | |
4617 | 2067 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2068 | |
2069 return 0; | |
3630 | 2070 } |
4617 | 2071 |
2072 /* | |
2073 * We just sent a file to someone. They said they got it and everything, | |
2074 * so we can close our direct connection and what not. | |
2075 */ | |
2076 static int oscar_sendfile_done(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 2077 GaimConnection *gc = sess->aux_data; |
7283 | 2078 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2079 GaimXfer *xfer; |
4617 | 2080 va_list ap; |
2081 aim_conn_t *conn; | |
2082 fu8_t *cookie; | |
2083 struct aim_fileheader_t *fh; | |
4656 | 2084 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2085 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_done\n"); |
4617 | 2086 va_start(ap, fr); |
2087 conn = va_arg(ap, aim_conn_t *); | |
2088 cookie = va_arg(ap, fu8_t *); | |
2089 fh = va_arg(ap, struct aim_fileheader_t *); | |
2090 va_end(ap); | |
2091 | |
2092 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2093 return 1; | |
2094 | |
4656 | 2095 xfer->fd = conn->fd; |
4617 | 2096 gaim_xfer_end(xfer); |
2097 | |
2098 return 0; | |
2099 } | |
3630 | 2100 |
4244 | 2101 static void accept_direct_im(struct ask_direct *d) { |
5575 | 2102 GaimConnection *gc = d->gc; |
7283 | 2103 OscarData *od; |
2086 | 2104 struct direct_im *dim; |
2945 | 2105 char *host; int port = 4443; |
4366 | 2106 int i, rc; |
2086 | 2107 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2108 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2109 cancel_direct_im(d); |
2110 return; | |
2111 } | |
2112 | |
7283 | 2113 od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2114 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Accepted DirectIM.\n"); |
2086 | 2115 |
2116 dim = find_direct_im(od, d->sn); | |
2117 if (dim) { | |
3730 | 2118 cancel_direct_im(d); /* 40 */ |
4244 | 2119 return; |
2086 | 2120 } |
2121 dim = g_new0(struct direct_im, 1); | |
2122 dim->gc = d->gc; | |
2123 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
2124 | |
4617 | 2125 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
|
2126 if (!dim->conn) { |
2086 | 2127 g_free(dim); |
3730 | 2128 cancel_direct_im(d); |
4244 | 2129 return; |
2086 | 2130 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2131 |
2086 | 2132 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
4617 | 2133 gaim_odc_incoming, 0); |
2086 | 2134 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, |
4617 | 2135 gaim_odc_typing, 0); |
3033 | 2136 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
6982 | 2137 gaim_odc_update_ui, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2138 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2139 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2140 port = atoi(&(d->ip[i+1])); |
2086 | 2141 break; |
2142 } | |
2143 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2144 host = g_strndup(d->ip, i); |
2086 | 2145 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
2146 rc = gaim_proxy_connect(gc->account, host, port, oscar_odc_callback, dim); |
2086 | 2147 g_free(host); |
4366 | 2148 if (rc < 0) { |
2086 | 2149 aim_conn_kill(od->sess, &dim->conn); |
2150 g_free(dim); | |
3730 | 2151 cancel_direct_im(d); |
4244 | 2152 return; |
2086 | 2153 } |
2154 | |
3730 | 2155 cancel_direct_im(d); |
2086 | 2156 |
4244 | 2157 return; |
2086 | 2158 } |
2159 | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2160 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
5575 | 2161 GaimConnection *gc = sess->aux_data; |
7283 | 2162 OscarData *od = gc->proto_data; |
4738 | 2163 char *tmp; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2164 GaimConvImFlags flags = 0; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
2165 gsize convlen; |
3659 | 2166 GError *err = NULL; |
4738 | 2167 struct buddyinfo *bi; |
5575 | 2168 const char *iconfile; |
4738 | 2169 |
7261 | 2170 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, userinfo->sn)); |
4738 | 2171 if (!bi) { |
2172 bi = g_new0(struct buddyinfo, 1); | |
7261 | 2173 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, userinfo->sn)), bi); |
4738 | 2174 } |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2175 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2176 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2177 flags |= GAIM_CONV_IM_AUTO_RESP; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2178 |
4738 | 2179 if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) |
2180 bi->typingnot = TRUE; | |
2181 else | |
2182 bi->typingnot = FALSE; | |
2183 | |
4380 | 2184 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
|
2185 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2186 "%s has an icon\n", userinfo->sn); |
4738 | 2187 if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { |
2188 bi->ico_need = TRUE; | |
2189 bi->ico_len = args->iconlen; | |
2190 bi->ico_csum = args->iconsum; | |
2191 bi->ico_time = args->iconstamp; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2192 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2193 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2194 |
5575 | 2195 if ((iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc))) && |
2196 (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2197 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2198 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2199 |
5575 | 2200 if (!stat(iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2201 char *buf = g_malloc(st.st_size); |
5575 | 2202 file = fopen(iconfile, "rb"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2203 if (file) { |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
2204 int len = fread(buf, 1, st.st_size, file); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2205 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2206 "Sending buddy icon to %s (%d bytes, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2207 "%lu reported)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2208 userinfo->sn, len, st.st_size); |
4617 | 2209 aim_im_sendch2_icon(sess, userinfo->sn, buf, st.st_size, |
2210 st.st_mtime, aimutil_iconsum(buf, st.st_size)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2211 fclose(file); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2212 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2213 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2214 "Can't open buddy icon file!\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2215 g_free(buf); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2216 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2217 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2218 "Can't stat buddy icon file!\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2219 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2220 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2221 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2222 "Character set is %hu %hu\n", args->charset, args->charsubset); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2223 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
3722 | 2224 /* This message is marked as UNICODE, so we have to |
2225 * convert it to utf-8 before handing it to the gaim core. | |
2226 * This conversion should *never* fail, if it does it | |
2227 * means that either the incoming ICBM is corrupted or | |
4662 | 2228 * there is something we don't understand about it. |
2229 * For the record, AIM Unicode is big-endian UCS-2 */ | |
2230 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2231 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Received UNICODE IM\n"); |
4121 | 2232 |
2233 if (!args->msg || !args->msglen) | |
2234 return 1; | |
4641 | 2235 |
3659 | 2236 tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
2237 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2238 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2239 "Unicode IM conversion: %s\n", err->message); |
3659 | 2240 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2241 g_error_free(err); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2242 } |
3722 | 2243 } else { |
3850 | 2244 /* This will get executed for both AIM_IMFLAGS_ISO_8859_1 and |
3722 | 2245 * unflagged messages, which are ASCII. That's OK because |
2246 * ASCII is a strict subset of ISO-8859-1; this should | |
2247 * help with compatibility with old, broken versions of | |
2248 * gaim (everything before 0.60) and other broken clients | |
2249 * that will happily send ISO-8859-1 without marking it as | |
2250 * such */ | |
4662 | 2251 if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2252 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2253 "Received ISO-8859-1 IM\n"); |
4121 | 2254 |
2255 if (!args->msg || !args->msglen) | |
2256 return 1; | |
2257 | |
3659 | 2258 tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
2259 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2260 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2261 "ISO-8859-1 IM conversion: %s\n", err->message); |
3659 | 2262 tmp = strdup(_("(There was an error receiving this message)")); |
4800 | 2263 g_error_free(err); |
3659 | 2264 } |
3642 | 2265 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2266 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2267 /* gaim_str_strip_linefeed(tmp); */ |
6982 | 2268 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2269 g_free(tmp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2270 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2271 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2272 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2273 |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2274 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
5575 | 2275 GaimConnection *gc = sess->aux_data; |
7283 | 2276 OscarData *od = gc->proto_data; |
5575 | 2277 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
|
2278 |
4121 | 2279 if (!args) |
2280 return 0; | |
4194 | 2281 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2282 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2283 "rendezvous with %s, status is %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2284 userinfo->sn, args->status); |
2869 | 2285 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2286 if (args->reqclass & AIM_CAPS_CHAT) { |
4121 | 2287 char *name; |
5234 | 2288 GHashTable *components; |
2289 | |
4121 | 2290 if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange || !args->msg) |
2291 return 1; | |
5234 | 2292 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
2293 g_free); | |
4121 | 2294 name = extract_name(args->info.chat.roominfo.name); |
5234 | 2295 g_hash_table_replace(components, g_strdup("room"), g_strdup(name ? name : args->info.chat.roominfo.name)); |
2296 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
|
2297 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2298 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2299 userinfo->sn, |
6059 | 2300 args->msg, |
5234 | 2301 components); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2302 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2303 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2304 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
4617 | 2305 /* BBB */ |
2306 if (args->status == AIM_RENDEZVOUS_PROPOSE) { | |
2307 /* Someone wants to send a file (or files) to us */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2308 GaimXfer *xfer; |
5146 | 2309 struct aim_oft_info *oft_info; |
2310 | |
2311 if (!args->cookie || !args->port || !args->verifiedip || | |
2312 !args->info.sendfile.filename || !args->info.sendfile.totsize || | |
4656 | 2313 !args->info.sendfile.totfiles || !args->reqclass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2314 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2315 "%s tried to send you a file with incomplete " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2316 "information.\n", userinfo->sn); |
5146 | 2317 if (args->proxyip) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2318 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2319 "IP for a proxy server was given. Gaim " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2320 "does not support this yet.\n"); |
4617 | 2321 return 1; |
4656 | 2322 } |
4617 | 2323 |
2324 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) { | |
2325 /* last char of the ft req is a star, they are sending us a | |
2326 * directory -- remove the star and trailing slash so we dont save | |
2327 * directories that look like 'dirname\*' -- arl */ | |
2328 char *tmp = strrchr(args->info.sendfile.filename, '\\'); | |
2329 if (tmp && (tmp[1] == '*')) { | |
2330 tmp[0] = '\0'; | |
2331 } | |
2332 } | |
2333 | |
2334 /* Build the file transfer handle */ | |
2335 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, userinfo->sn); | |
5163 | 2336 xfer->remote_ip = g_strdup(args->verifiedip); |
5146 | 2337 xfer->remote_port = args->port; |
4617 | 2338 gaim_xfer_set_filename(xfer, args->info.sendfile.filename); |
2339 gaim_xfer_set_size(xfer, args->info.sendfile.totsize); | |
5146 | 2340 |
2341 /* Create the oscar-specific data */ | |
5163 | 2342 oft_info = aim_oft_createinfo(od->sess, args->cookie, userinfo->sn, args->clientip, xfer->remote_port, 0, 0, NULL); |
4898 | 2343 if (args->proxyip) |
5146 | 2344 oft_info->proxyip = g_strdup(args->proxyip); |
4898 | 2345 if (args->verifiedip) |
5146 | 2346 oft_info->verifiedip = g_strdup(args->verifiedip); |
2347 xfer->data = oft_info; | |
4617 | 2348 |
2349 /* Setup our I/O op functions */ | |
2350 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
2351 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
2352 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2353 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2354 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4617 | 2355 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
2356 | |
2357 /* | |
2358 * XXX - Should do something with args->msg, args->encoding, and args->language | |
2359 * probably make it apply to all ch2 messages. | |
3752 | 2360 */ |
4617 | 2361 |
2362 /* Keep track of this transfer for later */ | |
2363 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
2364 | |
2365 /* Now perform the request */ | |
2366 gaim_xfer_request(xfer); | |
2367 } else if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
2368 /* The other user wants to cancel a file transfer */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2369 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2370 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2371 "AAA - File transfer canceled by remote user\n"); |
4617 | 2372 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
|
2373 gaim_xfer_cancel_remote(xfer); |
4617 | 2374 } else if (args->status == AIM_RENDEZVOUS_ACCEPT) { |
2375 /* | |
2376 * This gets sent by the receiver of a file | |
2377 * as they connect directly to us. If we don't | |
2378 * get this, then maybe a third party connected | |
2379 * to us, and we shouldn't send them anything. | |
2380 */ | |
2381 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2382 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2383 "unknown rendezvous status!\n"); |
3630 | 2384 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2385 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2386 } else if (args->reqclass & AIM_CAPS_VOICE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2387 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2388 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2389 userinfo->sn, args->info.icon.icon, |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2390 args->info.icon.length); |
6871 | 2391 } else if (args->reqclass & AIM_CAPS_DIRECTIM) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2392 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2393 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2394 |
4212 | 2395 if (!args->verifiedip) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2396 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2397 "directim kill blocked (%s)\n", userinfo->sn); |
4650 | 2398 return 1; |
4212 | 2399 } |
2400 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2401 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2402 "%s received direct im request from %s (%s)\n", |
5575 | 2403 username, userinfo->sn, args->verifiedip); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2404 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2405 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2406 d->sn = g_strdup(userinfo->sn); |
2869 | 2407 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2408 memcpy(d->cookie, args->cookie, 8); |
5575 | 2409 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
|
2410 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2411 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2412 _("This requires a direct connection between " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2413 "the two computers and is necessary for IM " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2414 "Images. Because your IP address will be " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2415 "revealed, this may be considered a privacy " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2416 "risk."), 0, d, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2417 _("Connect"), G_CALLBACK(accept_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2418 _("Cancel"), G_CALLBACK(cancel_direct_im)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2419 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2420 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2421 "Unknown reqclass %hu\n", args->reqclass); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2422 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2423 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2424 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2425 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2426 |
3453 | 2427 /* |
4230 | 2428 * Authorization Functions |
2429 * Most of these are callbacks from dialogs. They're used by both | |
2430 * methods of authorization (SSI and old-school channel 4 ICBM) | |
3453 | 2431 */ |
4269 | 2432 /* When you ask other people for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2433 static void gaim_auth_request(struct name_data *data, char *msg) { |
5575 | 2434 GaimConnection *gc = data->gc; |
4244 | 2435 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2436 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2437 OscarData *od = gc->proto_data; |
6695 | 2438 GaimBuddy *buddy = gaim_find_buddy(gc->account, data->name); |
2439 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4244 | 2440 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2441 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2442 "ssi: adding buddy %s to group %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2443 buddy->name, group->name); |
4889 | 2444 aim_ssi_sendauthrequest(od->sess, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); |
4269 | 2445 if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) |
4889 | 2446 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); |
4244 | 2447 } |
4230 | 2448 } |
4337 | 2449 } |
2450 | |
2451 static void gaim_auth_request_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2452 gaim_request_input(data->gc, NULL, _("Authorization Request Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2453 NULL, _("Please authorize me!"), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2454 _("OK"), G_CALLBACK(gaim_auth_request), |
5836 | 2455 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2456 data); |
4230 | 2457 } |
2458 | |
2459 static void gaim_auth_dontrequest(struct name_data *data) { | |
5575 | 2460 GaimConnection *gc = data->gc; |
4244 | 2461 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2462 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2463 /* OscarData *od = gc->proto_data; */ |
4244 | 2464 /* XXX - Take the buddy out of our buddy list */ |
2465 } | |
2466 | |
5836 | 2467 oscar_free_name_data(data); |
4230 | 2468 } |
2469 | |
5575 | 2470 static void gaim_auth_sendrequest(GaimConnection *gc, const char *name) { |
4269 | 2471 struct name_data *data = g_new(struct name_data, 1); |
6695 | 2472 GaimBuddy *buddy; |
4269 | 2473 gchar *dialog_msg, *nombre; |
2474 | |
4687 | 2475 buddy = gaim_find_buddy(gc->account, name); |
2476 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
2477 nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); | |
4269 | 2478 else |
4830 | 2479 nombre = NULL; |
2480 | |
2481 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 | 2482 data->gc = gc; |
2483 data->name = g_strdup(name); | |
2484 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2485 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2486 gaim_request_action(gc, NULL, _("Request Authorization"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2487 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2488 _("Request Authorization"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2489 G_CALLBACK(gaim_auth_request_msgprompt), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2490 _("Cancel"), G_CALLBACK(gaim_auth_dontrequest)); |
4269 | 2491 |
2492 g_free(dialog_msg); | |
2493 g_free(nombre); | |
2494 } | |
2495 | |
4230 | 2496 /* When other people ask you for authorization */ |
2497 static void gaim_auth_grant(struct name_data *data) { | |
5575 | 2498 GaimConnection *gc = data->gc; |
4244 | 2499 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2500 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2501 OscarData *od = gc->proto_data; |
4236 | 2502 #ifdef NOSSI |
6695 | 2503 GaimBuddy *buddy; |
4244 | 2504 gchar message; |
2505 message = 0; | |
4687 | 2506 buddy = gaim_find_buddy(gc->account, data->name); |
4617 | 2507 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
|
2508 gaim_account_notify_added(gc->account, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 2509 #else |
4889 | 2510 aim_ssi_sendauthreply(od->sess, data->name, 0x01, NULL); |
4230 | 2511 #endif |
4244 | 2512 } |
2513 | |
5836 | 2514 oscar_free_name_data(data); |
3141 | 2515 } |
2516 | |
4230 | 2517 /* When other people ask you for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2518 static void gaim_auth_dontgrant(struct name_data *data, char *msg) { |
5575 | 2519 GaimConnection *gc = data->gc; |
4244 | 2520 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2521 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2522 OscarData *od = gc->proto_data; |
4230 | 2523 #ifdef NOSSI |
4617 | 2524 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHDENIED, msg ? msg : _("No reason given.")); |
4230 | 2525 #else |
4889 | 2526 aim_ssi_sendauthreply(od->sess, data->name, 0x00, msg ? msg : _("No reason given.")); |
4230 | 2527 #endif |
4244 | 2528 } |
4337 | 2529 } |
2530 | |
2531 static void gaim_auth_dontgrant_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2532 gaim_request_input(data->gc, NULL, _("Authorization Denied Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2533 NULL, _("No reason given."), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2534 _("OK"), G_CALLBACK(gaim_auth_dontgrant), |
5836 | 2535 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2536 data); |
3141 | 2537 } |
2538 | |
7023 | 2539 /* When someone sends you buddies */ |
2540 static void gaim_icq_buddyadd(struct name_data *data) { | |
5575 | 2541 GaimConnection *gc = data->gc; |
4244 | 2542 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2543 if (g_list_find(gaim_connections_get_all(), gc)) { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
2544 gaim_blist_request_add_buddy(gaim_connection_get_account(gc), data->name, NULL, data->nick); |
4244 | 2545 } |
2546 | |
5836 | 2547 oscar_free_name_data(data); |
3453 | 2548 } |
2549 | |
4075 | 2550 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 | 2551 GaimConnection *gc = sess->aux_data; |
4076 | 2552 gchar **msg1, **msg2; |
2553 GError *err = NULL; | |
6051 | 2554 int i, numtoks; |
4076 | 2555 |
4121 | 2556 if (!args->type || !args->msg || !args->uin) |
2557 return 1; | |
4194 | 2558 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2559 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2560 "Received a channel 4 message of type 0x%02hhx.\n", args->type); |
4076 | 2561 |
2562 /* Split up the message at the delimeter character, then convert each string to UTF-8 */ | |
4173 | 2563 msg1 = g_strsplit(args->msg, "\376", 0); |
6051 | 2564 for (numtoks=0; msg1[numtoks]; numtoks++); |
2565 msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *)); | |
4076 | 2566 for (i=0; msg1[i]; i++) { |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2567 gaim_str_strip_linefeed(msg1[i]); |
4076 | 2568 msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err); |
4800 | 2569 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2570 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2571 "Error converting a string from ISO-8859-1 to " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2572 "UTF-8 in oscar ICBM channel 4 parsing\n"); |
4800 | 2573 g_error_free(err); |
2574 } | |
4076 | 2575 } |
2576 msg2[i] = NULL; | |
2577 | |
3952 | 2578 switch (args->type) { |
4173 | 2579 case 0x01: { /* MacICQ message or basic offline message */ |
4076 | 2580 if (i >= 1) { |
5556 | 2581 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2582 if (t) { /* This is an offline message */ |
2583 /* I think this timestamp is in UTC, or something */ | |
6982 | 2584 serv_got_im(gc, uin, msg2[0], 0, t); |
4076 | 2585 } else { /* This is a message from MacICQ/Miranda */ |
6982 | 2586 serv_got_im(gc, uin, msg2[0], 0, time(NULL)); |
4076 | 2587 } |
2588 g_free(uin); | |
4075 | 2589 } |
3316 | 2590 } break; |
2591 | |
4173 | 2592 case 0x04: { /* Someone sent you a URL */ |
4076 | 2593 if (i >= 2) { |
5556 | 2594 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2595 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", msg2[1], msg2[0]); |
6982 | 2596 serv_got_im(gc, uin, message, 0, time(NULL)); |
3453 | 2597 g_free(uin); |
2598 g_free(message); | |
2599 } | |
2600 } break; | |
2601 | |
4173 | 2602 case 0x06: { /* Someone requested authorization */ |
4076 | 2603 if (i >= 6) { |
4230 | 2604 struct name_data *data = g_new(struct name_data, 1); |
5556 | 2605 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
|
2606 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5556 | 2607 "Received an authorization request from UIN %u\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2608 args->uin); |
4076 | 2609 data->gc = gc; |
5556 | 2610 data->name = g_strdup_printf("%u", args->uin); |
4230 | 2611 data->nick = NULL; |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2612 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2613 gaim_request_action(gc, NULL, _("Authorization Request"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2614 dialog_msg, 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2615 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2616 G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2617 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2618 G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4076 | 2619 g_free(dialog_msg); |
2620 } | |
3141 | 2621 } break; |
2622 | |
4173 | 2623 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2624 if (i >= 1) { |
7023 | 2625 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
|
2626 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2627 dialog_msg); |
4076 | 2628 g_free(dialog_msg); |
2629 } | |
3141 | 2630 } break; |
2631 | |
4173 | 2632 case 0x08: { /* Someone has granted you authorization */ |
7023 | 2633 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
|
2634 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2635 dialog_msg); |
3141 | 2636 g_free(dialog_msg); |
2637 } break; | |
2638 | |
4333 | 2639 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2640 if (i >= 5) { | |
2641 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
|
2642 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2643 g_free(dialog_msg); |
2644 } | |
2645 } break; | |
2646 | |
4173 | 2647 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2648 if (i >= 6) { |
4194 | 2649 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
|
2650 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2651 g_free(dialog_msg); |
2652 } | |
4075 | 2653 } break; |
2654 | |
4173 | 2655 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2656 if (i >= 6) { |
4308 | 2657 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
|
2658 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2659 g_free(dialog_msg); |
2660 } | |
4075 | 2661 } break; |
2662 | |
4173 | 2663 case 0x12: { |
3141 | 2664 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
7023 | 2665 /* Someone added you to their buddy list? */ |
3141 | 2666 } break; |
2667 | |
7023 | 2668 case 0x13: { /* Someone has sent you some ICQ buddies */ |
3453 | 2669 int i, num; |
2670 gchar **text; | |
4173 | 2671 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2672 if (text) { |
2673 num = 0; | |
2674 for (i=0; i<strlen(text[0]); i++) | |
2675 num = num*10 + text[0][i]-48; | |
2676 for (i=0; i<num; i++) { | |
4230 | 2677 struct name_data *data = g_new(struct name_data, 1); |
7023 | 2678 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 | 2679 data->gc = gc; |
4790 | 2680 data->name = g_strdup(text[i*2+1]); |
2681 data->nick = g_strdup(text[i*2+2]); | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2682 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2683 gaim_request_action(gc, NULL, message, |
7023 | 2684 _("Do you want to add this buddy " |
2685 "to your buddy list?"), | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2686 0, data, 2, |
7023 | 2687 _("Add"), G_CALLBACK(gaim_icq_buddyadd), |
5836 | 2688 _("Decline"), G_CALLBACK(oscar_free_name_data)); |
3453 | 2689 g_free(message); |
2690 } | |
2691 g_strfreev(text); | |
2692 } | |
2693 } break; | |
2694 | |
7023 | 2695 case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ |
3453 | 2696 /* This is boring and silly. */ |
2697 } break; | |
2698 | |
3141 | 2699 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2700 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2701 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2702 "(type 0x%02hhx).\n", args->type); |
3141 | 2703 } break; |
2704 } | |
2705 | |
4076 | 2706 g_strfreev(msg1); |
2707 g_strfreev(msg2); | |
2708 | |
3141 | 2709 return 1; |
2710 } | |
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 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2713 fu16_t channel; |
2714 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2715 aim_userinfo_t *userinfo; |
2086 | 2716 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2717 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2718 va_start(ap, fr); |
4200 | 2719 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2720 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2721 |
3141 | 2722 switch (channel) { |
2723 case 1: { /* standard message */ | |
2724 struct aim_incomingim_ch1_args *args; | |
2725 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2726 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2727 } break; | |
2728 | |
2729 case 2: { /* rendevous */ | |
2730 struct aim_incomingim_ch2_args *args; | |
2731 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2732 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2733 } break; | |
2734 | |
2735 case 4: { /* ICQ */ | |
2736 struct aim_incomingim_ch4_args *args; | |
2737 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2738 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2739 } break; |
2740 | |
2741 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2742 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2743 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2744 "0x%04hx).", channel); |
3141 | 2745 } break; |
2086 | 2746 } |
2747 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2748 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2749 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2750 return ret; |
2086 | 2751 } |
2752 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2753 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2754 char *buf; |
2086 | 2755 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2756 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2757 aim_userinfo_t *userinfo; |
2086 | 2758 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2759 va_start(ap, fr); |
4200 | 2760 chan = (fu16_t)va_arg(ap, unsigned int); |
2761 userinfo = va_arg(ap, aim_userinfo_t *); | |
2762 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2763 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2764 va_end(ap); |
2765 | |
2766 switch(reason) { | |
5420 | 2767 case 0: /* Invalid (0) */ |
2768 buf = g_strdup_printf( | |
2769 ngettext( | |
4276 | 2770 "You missed %hu message from %s because it was invalid.", |
2771 "You missed %hu messages from %s because they were invalid.", | |
2772 nummissed), | |
4282 | 2773 nummissed, |
2774 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2775 break; |
5420 | 2776 case 1: /* Message too large */ |
2777 buf = g_strdup_printf( | |
2778 ngettext( | |
4276 | 2779 "You missed %hu message from %s because it was too large.", |
2780 "You missed %hu messages from %s because they were too large.", | |
2781 nummissed), | |
4282 | 2782 nummissed, |
2783 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2784 break; |
5420 | 2785 case 2: /* Rate exceeded */ |
2786 buf = g_strdup_printf( | |
2787 ngettext( | |
4276 | 2788 "You missed %hu message from %s because the rate limit has been exceeded.", |
2789 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2790 nummissed), | |
4282 | 2791 nummissed, |
2792 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2793 break; |
5420 | 2794 case 3: /* Evil Sender */ |
2795 buf = g_strdup_printf( | |
2796 ngettext( | |
4276 | 2797 "You missed %hu message from %s because he/she was too evil.", |
2798 "You missed %hu messages from %s because he/she was too evil.", | |
2799 nummissed), | |
4282 | 2800 nummissed, |
2801 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2802 break; |
5420 | 2803 case 4: /* Evil Receiver */ |
2804 buf = g_strdup_printf( | |
2805 ngettext( | |
4276 | 2806 "You missed %hu message from %s because you are too evil.", |
2807 "You missed %hu messages from %s because you are too evil.", | |
2808 nummissed), | |
4282 | 2809 nummissed, |
2810 userinfo->sn); | |
2086 | 2811 break; |
2812 default: | |
5420 | 2813 buf = g_strdup_printf( |
2814 ngettext( | |
4276 | 2815 "You missed %hu message from %s for an unknown reason.", |
2816 "You missed %hu messages from %s for an unknown reason.", | |
2817 nummissed), | |
4282 | 2818 nummissed, |
2819 userinfo->sn); | |
2086 | 2820 break; |
2821 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2822 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2823 g_free(buf); |
2086 | 2824 |
2825 return 1; | |
2826 } | |
2827 | |
3212 | 2828 static char *gaim_icq_status(int state) { |
2829 /* Make a cute little string that shows the status of the dude or dudet */ | |
2830 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2831 return g_strdup_printf(_("Free For Chat")); |
3212 | 2832 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2833 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2834 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2835 return g_strdup_printf(_("Not Available")); |
3212 | 2836 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2837 return g_strdup_printf(_("Occupied")); |
3212 | 2838 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2839 return g_strdup_printf(_("Away")); |
3212 | 2840 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2841 return g_strdup_printf(_("Web Aware")); |
3212 | 2842 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2843 return g_strdup_printf(_("Invisible")); |
3212 | 2844 else |
4342 | 2845 return g_strdup_printf(_("Online")); |
3212 | 2846 } |
2847 | |
4194 | 2848 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
5575 | 2849 GaimConnection *gc = sess->aux_data; |
7283 | 2850 OscarData *od = gc->proto_data; |
4617 | 2851 |
2852 /* BBB */ | |
3630 | 2853 switch (reason) { |
4151 | 2854 case 3: { /* Decline sendfile. */ |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2855 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2856 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2857 "AAA - Other user declined file transfer\n"); |
4617 | 2858 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
|
2859 gaim_xfer_cancel_remote(xfer); |
4151 | 2860 } break; |
2861 | |
2862 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2863 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2864 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2865 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2866 } |
3630 | 2867 |
2868 } | |
2869 | |
2870 return 0; | |
2871 } | |
2872 | |
4194 | 2873 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
5575 | 2874 GaimConnection *gc = sess->aux_data; |
4151 | 2875 |
2876 switch(reason) { | |
2877 case 0x0003: { /* Reply from an ICQ status message request */ | |
2878 char *status_msg = gaim_icq_status(state); | |
2879 char *dialog_msg, **splitmsg; | |
2880 | |
2881 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2882 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2883 | |
7011 | 2884 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
7032 | 2885 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, dialog_msg, NULL, NULL); |
4151 | 2886 |
2887 g_free(status_msg); | |
2888 g_free(dialog_msg); | |
2889 g_strfreev(splitmsg); | |
2890 } break; | |
2891 | |
2892 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2893 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2894 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2895 "Type 0x%04hx\n", who, reason); |
4151 | 2896 } break; |
2897 } /* end of switch */ | |
2898 | |
2899 return 0; | |
2900 } | |
2901 | |
3212 | 2902 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2903 va_list ap; | |
2904 fu16_t chan, reason; | |
2905 char *who; | |
2906 | |
2907 va_start(ap, fr); | |
4200 | 2908 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2909 who = va_arg(ap, char *); |
4200 | 2910 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2911 |
3952 | 2912 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2913 char *cookie = va_arg(ap, char *); |
4151 | 2914 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2915 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2916 fu32_t state = 0; |
4151 | 2917 char *msg = NULL; |
2918 if (reason == 0x0003) { | |
4200 | 2919 state = va_arg(ap, fu32_t); |
4151 | 2920 msg = va_arg(ap, char *); |
2921 } | |
2922 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2923 } | |
3952 | 2924 |
3212 | 2925 va_end(ap); |
2926 | |
2927 return 1; | |
2928 } | |
2929 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2930 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2931 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2932 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2933 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2934 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2935 va_start(ap, fr); |
4199 | 2936 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2937 va_end(ap); |
2938 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2939 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2940 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2941 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2942 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2943 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2944 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2945 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2946 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2947 |
2086 | 2948 return 1; |
2949 } | |
2950 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2951 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2952 #if 0 |
5575 | 2953 GaimConnection *gc = sess->aux_data; |
7283 | 2954 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2955 GaimXfer *xfer; |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2956 #endif |
4617 | 2957 va_list ap; |
2958 fu16_t reason; | |
2959 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2960 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2961 va_start(ap, fr); |
4617 | 2962 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 2963 data = va_arg(ap, char *); |
2086 | 2964 va_end(ap); |
2965 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2966 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2967 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 2968 |
2969 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2970 #if 0 |
4617 | 2971 /* If this was a file transfer request, data is a cookie */ |
2972 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
|
2973 gaim_xfer_cancel_remote(xfer); |
3630 | 2974 return 1; |
2975 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2976 #endif |
3630 | 2977 |
4617 | 2978 /* Data is assumed to be the destination sn */ |
2979 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
|
2980 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2981 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 2982 g_free(buf); |
2086 | 2983 |
2984 return 1; | |
2985 } | |
2986 | |
3595 | 2987 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2988 GaimConnection *gc = sess->aux_data; |
3595 | 2989 va_list ap; |
2990 fu16_t type1, type2; | |
2991 char *sn; | |
2992 | |
2993 va_start(ap, fr); | |
4199 | 2994 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2995 sn = va_arg(ap, char *); |
4199 | 2996 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2997 va_end(ap); |
2998 | |
2999 switch (type2) { | |
3000 case 0x0000: { /* Text has been cleared */ | |
3001 serv_got_typing_stopped(gc, sn); | |
3002 } break; | |
3003 | |
3004 case 0x0001: { /* Paused typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3005 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
3595 | 3006 } break; |
3007 | |
3008 case 0x0002: { /* Typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3009 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
3595 | 3010 } break; |
3011 | |
3012 default: { | |
5435 | 3013 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 | 3014 } break; |
3015 } | |
3016 | |
3017 return 1; | |
3018 } | |
3019 | |
7141 | 3020 /* |
3021 * We get this error when there was an error in the locate family. This | |
7259 | 3022 * happens when you request info of someone who is offline. |
7141 | 3023 */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3024 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
7259 | 3025 gchar *buf; |
2086 | 3026 va_list ap; |
5420 | 3027 fu16_t reason; |
2086 | 3028 char *destn; |
3029 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3030 va_start(ap, fr); |
4199 | 3031 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3032 destn = va_arg(ap, char *); |
3033 va_end(ap); | |
3034 | |
5420 | 3035 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3036 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3037 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
5420 | 3038 g_free(buf); |
2086 | 3039 |
3040 return 1; | |
3041 } | |
3042 | |
6982 | 3043 #if 0 |
2086 | 3044 static char *images(int flags) { |
3045 static char buf[1024]; | |
3101 | 3046 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3047 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3048 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3049 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3050 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3051 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3052 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3053 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3054 return buf; |
3055 } | |
6982 | 3056 #endif |
3101 | 3057 |
2920 | 3058 static char *caps_string(guint caps) |
3059 { | |
3060 static char buf[512], *tmp; | |
3061 int count = 0, i = 0; | |
3062 guint bit = 1; | |
4742 | 3063 |
3064 if (!caps) { | |
4744 | 3065 return NULL; |
6318 | 3066 } else while (bit <= AIM_CAPS_LAST) { |
2920 | 3067 if (bit & caps) { |
3068 switch (bit) { | |
6871 | 3069 case AIM_CAPS_BUDDYICON: |
2920 | 3070 tmp = _("Buddy Icon"); |
3071 break; | |
6871 | 3072 case AIM_CAPS_VOICE: |
2920 | 3073 tmp = _("Voice"); |
3074 break; | |
6871 | 3075 case AIM_CAPS_DIRECTIM: |
7141 | 3076 tmp = _("AIM Direct IM"); |
2920 | 3077 break; |
6871 | 3078 case AIM_CAPS_CHAT: |
2920 | 3079 tmp = _("Chat"); |
3080 break; | |
6871 | 3081 case AIM_CAPS_GETFILE: |
2920 | 3082 tmp = _("Get File"); |
3083 break; | |
6871 | 3084 case AIM_CAPS_SENDFILE: |
2920 | 3085 tmp = _("Send File"); |
3086 break; | |
6871 | 3087 case AIM_CAPS_GAMES: |
3088 case AIM_CAPS_GAMES2: | |
2920 | 3089 tmp = _("Games"); |
3090 break; | |
6871 | 3091 case AIM_CAPS_SAVESTOCKS: |
4898 | 3092 tmp = _("Add-Ins"); |
2920 | 3093 break; |
6871 | 3094 case AIM_CAPS_SENDBUDDYLIST: |
2920 | 3095 tmp = _("Send Buddy List"); |
3096 break; | |
7141 | 3097 case AIM_CAPS_ICQ_DIRECT: |
3098 tmp = _("ICQ Direct Connect"); | |
2920 | 3099 break; |
6871 | 3100 case AIM_CAPS_APINFO: |
2920 | 3101 tmp = _("AP User"); |
3102 break; | |
6871 | 3103 case AIM_CAPS_ICQRTF: |
2920 | 3104 tmp = _("ICQ RTF"); |
3105 break; | |
6871 | 3106 case AIM_CAPS_EMPTY: |
2920 | 3107 tmp = _("Nihilist"); |
3108 break; | |
6871 | 3109 case AIM_CAPS_ICQSERVERRELAY: |
2920 | 3110 tmp = _("ICQ Server Relay"); |
3111 break; | |
6871 | 3112 case AIM_CAPS_ICQUTF8OLD: |
3113 tmp = _("Old ICQ UTF8"); | |
2920 | 3114 break; |
6871 | 3115 case AIM_CAPS_TRILLIANCRYPT: |
2920 | 3116 tmp = _("Trillian Encryption"); |
3117 break; | |
6871 | 3118 case AIM_CAPS_ICQUTF8: |
4742 | 3119 tmp = _("ICQ UTF8"); |
3120 break; | |
6318 | 3121 case AIM_CAPS_HIPTOP: |
3122 tmp = _("Hiptop"); | |
3123 break; | |
6871 | 3124 case AIM_CAPS_SECUREIM: |
3125 tmp = _("Secure IM"); | |
3126 break; | |
2920 | 3127 default: |
3128 tmp = NULL; | |
3129 break; | |
3130 } | |
3131 if (tmp) | |
3132 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3133 tmp); | |
3134 count++; | |
3135 } | |
3136 bit <<= 1; | |
3137 } | |
4744 | 3138 return buf; |
2920 | 3139 } |
3140 | |
7011 | 3141 static int gaim_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3142 GaimConnection *gc = sess->aux_data; |
7011 | 3143 GString *text; |
7162 | 3144 gchar *info_utf8 = NULL, *away_utf8 = NULL; |
3145 const char *final = NULL; | |
4791 | 3146 va_list ap; |
7011 | 3147 aim_userinfo_t *userinfo; |
2086 | 3148 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3149 va_start(ap, fr); |
7011 | 3150 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3151 va_end(ap); |
3152 | |
7011 | 3153 text = g_string_new(""); |
3154 g_string_append_printf(text, _("Username: <b>%s</b><br>\n"), userinfo->sn); | |
3155 g_string_append_printf(text, _("Warning Level: <b>%d%%</b><br>\n"), (int)((userinfo->warnlevel/10.0) + 0.5)); | |
3156 | |
3157 if (userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) | |
3158 g_string_append_printf(text, _("Online Since: <b>%s</b><br>\n"), | |
3159 asctime(localtime((time_t *)&userinfo->onlinesince))); | |
3160 | |
3161 if (userinfo->present & AIM_USERINFO_PRESENT_MEMBERSINCE) | |
3162 g_string_append_printf(text, _("Member Since: <b>%s</b><br>\n"), | |
3163 asctime(localtime((time_t *)&userinfo->membersince))); | |
3164 | |
3165 if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3166 gchar *itime = gaim_str_seconds_to_string(userinfo->idletime*60); |
7011 | 3167 g_string_append_printf(text, _("Idle: <b>%s</b>"), itime); |
4426 | 3168 g_free(itime); |
2993 | 3169 } else |
7011 | 3170 g_string_append_printf(text, _("Idle: <b>Active</b>")); |
3171 | |
3172 if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
3173 away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
3174 if (away_utf8 != NULL) { | |
7129 | 3175 g_string_append_printf(text, "<hr>%s", away_utf8); |
7011 | 3176 g_free(away_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3177 } |
7011 | 3178 } |
3179 | |
3180 if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) { | |
3181 info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len); | |
3182 if (info_utf8 != NULL) { | |
7129 | 3183 g_string_append_printf(text, "<hr>%s", info_utf8); |
7011 | 3184 g_free(info_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3185 } |
7011 | 3186 } |
3187 | |
7164 | 3188 final = gaim_str_sub_away_formatters(text->str, gaim_account_get_username(gaim_connection_get_account(gc))); |
7011 | 3189 g_string_free(text, TRUE); |
7091 | 3190 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, final, NULL, NULL); |
4151 | 3191 |
2086 | 3192 return 1; |
3193 } | |
3194 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3195 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3196 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3197 fu16_t id; |
2086 | 3198 va_list ap; |
3199 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3200 va_start(ap, fr); |
4199 | 3201 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3202 msg = va_arg(ap, char *); |
3203 va_end(ap); | |
3204 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3205 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3206 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3207 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3208 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3209 _("Your AIM connection may be lost."), NULL); |
2086 | 3210 |
3211 return 1; | |
3212 } | |
3213 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3214 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3215 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3216 fu16_t type; |
5575 | 3217 GaimConnection *gc = sess->aux_data; |
7283 | 3218 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 3219 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3220 va_start(ap, fr); |
4199 | 3221 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3222 |
3223 switch(type) { | |
3224 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3225 fu8_t maxrooms; |
2086 | 3226 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3227 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3228 |
4199 | 3229 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3230 exchangecount = va_arg(ap, int); |
3231 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3232 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3233 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3234 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3235 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3236 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3237 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3238 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3239 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3240 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3241 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3242 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3243 while (od->create_rooms) { |
3244 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3245 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3246 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3247 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3248 g_free(cr->name); |
4617 | 3249 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3250 g_free(cr); |
2086 | 3251 } |
3252 } | |
3253 break; | |
3254 case 0x0008: { | |
3255 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3256 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3257 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3258 fu32_t createtime; |
2086 | 3259 |
3260 fqcn = va_arg(ap, char *); | |
4200 | 3261 instance = (fu16_t)va_arg(ap, unsigned int); |
3262 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3263 flags = (fu16_t)va_arg(ap, unsigned int); | |
3264 createtime = va_arg(ap, fu32_t); | |
3265 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3266 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3267 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3268 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3269 name = va_arg(ap, char *); | |
3270 ck = va_arg(ap, char *); | |
4194 | 3271 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3272 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3273 "created room: %s %hu %hu %hu %u %hu %hu %hhu %hu %s %s\n", |
2086 | 3274 fqcn, |
3275 exchange, instance, flags, | |
3276 createtime, | |
3277 maxmsglen, maxoccupancy, createperms, unknown, | |
3278 name, ck); | |
4617 | 3279 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3280 } |
3281 break; | |
3282 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3283 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3284 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3285 break; |
3286 } | |
4194 | 3287 |
3288 va_end(ap); | |
3289 | |
2086 | 3290 return 1; |
3291 } | |
3292 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3293 static int gaim_conv_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3294 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3295 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3296 aim_userinfo_t *info; |
5575 | 3297 GaimConnection *g = sess->aux_data; |
2086 | 3298 |
3299 struct chat_connection *c = NULL; | |
3300 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3301 va_start(ap, fr); |
2086 | 3302 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3303 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3304 va_end(ap); |
3305 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3306 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3307 if (!c) |
3308 return 1; | |
3309 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3310 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3311 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3312 |
3313 return 1; | |
3314 } | |
3315 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3316 static int gaim_conv_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3317 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3318 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3319 aim_userinfo_t *info; |
5575 | 3320 GaimConnection *g = sess->aux_data; |
2086 | 3321 |
3322 struct chat_connection *c = NULL; | |
3323 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3324 va_start(ap, fr); |
2086 | 3325 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3326 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3327 va_end(ap); |
3328 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3329 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3330 if (!c) |
3331 return 1; | |
3332 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3333 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3334 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3335 |
3336 return 1; | |
3337 } | |
3338 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3339 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
|
3340 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3341 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3342 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3343 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3344 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3345 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3346 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3347 fu32_t creationtime; |
5575 | 3348 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3349 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
|
3350 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3351 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3352 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3353 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3354 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3355 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3356 roomdesc = va_arg(ap, char *); |
4200 | 3357 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3358 creationtime = va_arg(ap, fu32_t); | |
3359 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3360 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3361 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3362 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3363 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3364 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3365 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3366 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3367 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3368 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3369 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3370 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3371 |
2086 | 3372 return 1; |
3373 } | |
3374 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3375 static int gaim_conv_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3376 GaimConnection *gc = sess->aux_data; |
2086 | 3377 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3378 aim_userinfo_t *info; |
2086 | 3379 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3380 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 3381 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3382 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3383 info = va_arg(ap, aim_userinfo_t *); |
4194 | 3384 msg = va_arg(ap, char *); |
3385 va_end(ap); | |
2086 | 3386 |
4269 | 3387 serv_got_chat_in(gc, ccon->id, info->sn, 0, msg, time((time_t)NULL)); |
2086 | 3388 |
3389 return 1; | |
3390 } | |
3391 | |
3694 | 3392 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3393 va_list ap; | |
5575 | 3394 GaimConnection *gc = sess->aux_data; |
3694 | 3395 struct aim_emailinfo *emailinfo; |
3725 | 3396 int havenewmail; |
7297 | 3397 char *alertitle, *alerturl; |
3694 | 3398 |
3399 va_start(ap, fr); | |
3400 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3401 havenewmail = va_arg(ap, int); |
7297 | 3402 alertitle = va_arg(ap, char*); |
3403 alerturl = va_arg(ap, char*); | |
3694 | 3404 va_end(ap); |
3405 | |
5628 | 3406 if (emailinfo && gaim_account_get_check_mail(gc->account)) { |
5575 | 3407 gchar *to = g_strdup_printf("%s@%s", gaim_account_get_username(gaim_connection_get_account(gc)), emailinfo->domain); |
5542 | 3408 if (emailinfo->unread && havenewmail) |
3409 gaim_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); | |
5537 | 3410 g_free(to); |
3694 | 3411 } |
7297 | 3412 |
3413 if (alertitle) { | |
3414 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Got an alert '%s' %s\n", alertitle, alerturl); | |
3415 g_free(alertitle); | |
3416 } | |
3417 if (alerturl) | |
3418 g_free(alerturl); | |
3419 | |
3694 | 3420 |
3421 return 1; | |
3422 } | |
3423 | |
4804 | 3424 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3425 GaimConnection *gc = sess->aux_data; |
7283 | 3426 OscarData *od = gc->proto_data; |
4804 | 3427 char *sn; |
3428 | |
3429 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3430 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3431 "removing %s from hash table\n", sn); |
4804 | 3432 od->requesticon = g_slist_remove(od->requesticon, sn); |
3433 free(sn); | |
3434 | |
3435 if (od->icontimer) | |
3436 g_source_remove(od->icontimer); | |
3437 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3438 | |
3439 return 1; | |
3440 } | |
3441 | |
3442 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 3443 GaimConnection *gc = sess->aux_data; |
7283 | 3444 OscarData *od = gc->proto_data; |
4804 | 3445 GSList *cur; |
3446 va_list ap; | |
3447 char *sn; | |
4853 | 3448 fu8_t *iconcsum, *icon; |
3449 fu16_t iconcsumlen, iconlen; | |
4804 | 3450 |
3451 va_start(ap, fr); | |
3452 sn = va_arg(ap, char *); | |
4853 | 3453 iconcsum = va_arg(ap, fu8_t *); |
3454 iconcsumlen = va_arg(ap, int); | |
4804 | 3455 icon = va_arg(ap, fu8_t *); |
3456 iconlen = va_arg(ap, int); | |
3457 va_end(ap); | |
3458 | |
4853 | 3459 if (iconlen > 0) { |
3460 char *b16; | |
6695 | 3461 GaimBuddy *b = gaim_find_buddy(gc->account, sn); |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3462 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3463 sn, icon, iconlen); |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
3464 b16 = gaim_base16_encode(iconcsum, iconcsumlen); |
5129 | 3465 if (b16) { |
3466 gaim_buddy_set_setting(b, "icon_checksum", b16); | |
3467 gaim_blist_save(); | |
7162 | 3468 g_free(b16); |
5129 | 3469 } |
4853 | 3470 } |
4804 | 3471 |
3472 cur = od->requesticon; | |
3473 while (cur) { | |
3474 char *cursn = cur->data; | |
3475 if (!aim_sncmp(cursn, sn)) { | |
3476 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3477 free(cursn); | |
3478 cur = od->requesticon; | |
3479 } else | |
3480 cur = cur->next; | |
3481 } | |
3482 | |
3483 if (od->icontimer) | |
3484 g_source_remove(od->icontimer); | |
3485 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3486 | |
3487 return 1; | |
3488 } | |
3489 | |
3490 static gboolean gaim_icon_timerfunc(gpointer data) { | |
5575 | 3491 GaimConnection *gc = data; |
7283 | 3492 OscarData *od = gc->proto_data; |
7011 | 3493 aim_userinfo_t *userinfo; |
4804 | 3494 aim_conn_t *conn; |
3495 | |
3496 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
5892 | 3497 if (!conn) { |
3498 if (!od->iconconnecting) { | |
3499 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
3500 od->iconconnecting = TRUE; | |
3501 } | |
4804 | 3502 return FALSE; |
3503 } | |
3504 | |
5842 | 3505 if (od->set_icon) { |
6039 | 3506 struct stat st; |
3507 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
3508 if (iconfile == NULL) { | |
3509 /* Set an empty icon, or something */ | |
3510 } else if (!stat(iconfile, &st)) { | |
3511 char *buf = g_malloc(st.st_size); | |
3512 FILE *file = fopen(iconfile, "rb"); | |
3513 if (file) { | |
3514 fread(buf, 1, st.st_size, file); | |
3515 fclose(file); | |
3516 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
3517 "Uploading icon to icon server\n"); | |
6879 | 3518 aim_bart_upload(od->sess, buf, st.st_size); |
5842 | 3519 } else |
3520 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 3521 "Can't open buddy icon file!\n"); |
3522 g_free(buf); | |
3523 } else { | |
3524 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
3525 "Can't stat buddy icon file!\n"); | |
5842 | 3526 } |
3527 od->set_icon = FALSE; | |
3528 } | |
3529 | |
3530 if (!od->requesticon) { | |
3531 gaim_debug(GAIM_DEBUG_MISC, "oscar", | |
3532 "no more icons to request\n"); | |
3533 return FALSE; | |
3534 } | |
3535 | |
7045 | 3536 userinfo = aim_locate_finduserinfo(od->sess, (char *)od->requesticon->data); |
7011 | 3537 if ((userinfo != NULL) && (userinfo->iconcsumlen > 0)) { |
3538 aim_bart_request(od->sess, od->requesticon->data, userinfo->iconcsum, userinfo->iconcsumlen); | |
4804 | 3539 return FALSE; |
3540 } else { | |
3541 char *sn = od->requesticon->data; | |
3542 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3543 free(sn); | |
3544 } | |
3545 | |
3546 return TRUE; | |
3547 } | |
3548 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3549 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3550 * 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
|
3551 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3552 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3553 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3554 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3555 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3556 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3557 va_start(ap, fr); |
4199 | 3558 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3559 sn = va_arg(ap, char *); |
3560 va_end(ap); | |
3561 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3562 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 3563 |
3564 return 1; | |
3565 } | |
3566 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3567 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
|
3568 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3569 "invalid", |
4194 | 3570 "change", |
3571 "warning", | |
3572 "limit", | |
3573 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3574 }; |
2086 | 3575 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3576 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3577 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3578 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3579 va_start(ap, fr); |
4200 | 3580 code = (fu16_t)va_arg(ap, unsigned int); |
3581 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3582 windowsize = va_arg(ap, fu32_t); | |
3583 clear = va_arg(ap, fu32_t); | |
3584 alert = va_arg(ap, fu32_t); | |
3585 limit = va_arg(ap, fu32_t); | |
3586 disconnect = va_arg(ap, fu32_t); | |
3587 currentavg = va_arg(ap, fu32_t); | |
3588 maxavg = va_arg(ap, fu32_t); | |
2086 | 3589 va_end(ap); |
3590 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3591 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3592 "rate %s (param ID 0x%04hx): curavg = %u, maxavg = %u, alert at %u, " |
3593 "clear warning at %u, limit at %u, disconnect at %u (window size = %u)\n", | |
2086 | 3594 (code < 5) ? codes[code] : codes[0], |
3595 rateclass, | |
3596 currentavg, maxavg, | |
3597 alert, clear, | |
3598 limit, disconnect, | |
3599 windowsize); | |
3600 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3601 /* XXX fix these values */ |
2086 | 3602 if (code == AIM_RATE_CODE_CHANGE) { |
3603 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3604 aim_conn_setlatency(fr->conn, 0); |
2086 | 3605 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3606 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3607 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3608 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
6040 | 3609 _("The last action you attempted could not be " |
3610 "performed because you are over the rate limit. " | |
3611 "Please wait 10 seconds and try again.")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3612 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3613 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3614 aim_conn_setlatency(fr->conn, 0); |
2086 | 3615 } |
3616 | |
3617 return 1; | |
3618 } | |
3619 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3620 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3621 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3622 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3623 aim_userinfo_t *userinfo; |
5575 | 3624 GaimConnection *gc = sess->aux_data; |
2086 | 3625 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3626 va_start(ap, fr); |
4199 | 3627 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3628 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3629 va_end(ap); |
3630 | |
7111 | 3631 serv_got_eviled(gc, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); |
2086 | 3632 |
3633 return 1; | |
3634 } | |
3635 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3636 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
|
3637 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3638 aim_userinfo_t *info; |
5575 | 3639 GaimConnection *gc = sess->aux_data; |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3640 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3641 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3642 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3643 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3644 |
5628 | 3645 gc->evil = (info->warnlevel/10.0) + 0.5; |
4841 | 3646 |
3647 if (info->onlinesince) | |
3648 gc->login_time_official = info->onlinesince; | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3649 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3650 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3651 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3652 |
4649 | 3653 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3654 GaimConnection *gc = sess->aux_data; |
7283 | 3655 OscarData *od = gc->proto_data; |
4649 | 3656 va_list ap; |
3657 fu16_t code; | |
3658 char *msg; | |
3659 | |
3660 va_start(ap, fr); | |
3661 code = (fu16_t)va_arg(ap, int); | |
3662 msg = va_arg(ap, char *); | |
3663 va_end(ap); | |
3664 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3665 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3666 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3667 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3668 if (code == 0x0001) { |
6113 | 3669 gc->wants_to_die = TRUE; |
5579 | 3670 gaim_connection_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3671 } else { |
5579 | 3672 gaim_connection_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3673 } |
4666 | 3674 od->killme = TRUE; |
4649 | 3675 } |
3676 | |
3677 return 1; | |
3678 } | |
3679 | |
2675 | 3680 static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
7283 | 3681 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3682 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3683 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3684 |
3685 #ifndef NOSSI | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3686 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting ssi list\n"); |
4889 | 3687 aim_ssi_reqrights(sess); |
6350 | 3688 aim_ssi_reqdata(sess); |
4230 | 3689 #endif |
3690 | |
7011 | 3691 aim_locate_reqrights(sess); |
7285 | 3692 aim_buddylist_reqrights(sess, fr->conn); |
4617 | 3693 aim_im_reqparams(sess); |
5948 | 3694 aim_bos_reqrights(sess, fr->conn); /* XXX - Don't call this with ssi? */ |
4230 | 3695 |
3696 #ifdef NOSSI | |
3697 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); | |
3698 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3699 #endif | |
2086 | 3700 |
7283 | 3701 gaim_connection_update_progress(gc, _("Finalizing connection"), 5, OSCAR_CONNECT_STEPS); |
3702 | |
2086 | 3703 return 1; |
3704 } | |
3705 | |
2675 | 3706 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3707 GaimConnection *gc = sess->aux_data; |
7283 | 3708 OscarData *od = gc->proto_data; |
2647 | 3709 |
6905 | 3710 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0003, gaim_info_change, 0); |
3711 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0005, gaim_info_change, 0); | |
3712 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0007, gaim_account_confirm, 0); | |
3713 | |
2672 | 3714 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3715 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3716 |
2647 | 3717 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3718 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3719 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3720 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3721 od->oldp = NULL; |
2647 | 3722 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3723 od->newp = NULL; |
2647 | 3724 od->chpass = FALSE; |
3725 } | |
2979 | 3726 if (od->setnick) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3727 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screenname\n"); |
2979 | 3728 aim_admin_setnick(sess, fr->conn, od->newsn); |
3729 g_free(od->newsn); | |
3730 od->newsn = NULL; | |
3731 od->setnick = FALSE; | |
3732 } | |
2647 | 3733 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3734 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3735 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3736 od->conf = FALSE; |
3737 } | |
3738 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3739 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3740 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3741 od->reqemail = FALSE; |
3742 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3743 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3744 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3745 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3746 g_free(od->email); |
5497 | 3747 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3748 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3749 } |
2647 | 3750 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3751 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3752 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3753 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3754 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
|
3755 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3756 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3757 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3758 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3759 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3760 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3761 |
4194 | 3762 /* 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
|
3763 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
5556 | 3764 "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
|
3765 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3766 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3767 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3768 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3769 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3770 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3771 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3772 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3773 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3774 |
4617 | 3775 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3776 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3777 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3778 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3779 |
2993 | 3780 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3781 { | |
5575 | 3782 GaimConnection *gc = sess->aux_data; |
7283 | 3783 OscarData *od = (OscarData *)gc->proto_data; |
5306 | 3784 va_list ap; |
3785 fu16_t maxsiglen; | |
2993 | 3786 |
3787 va_start(ap, fr); | |
4199 | 3788 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3789 va_end(ap); |
3790 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3791 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3792 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3793 |
4617 | 3794 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3795 | |
3796 if (od->icq) | |
7011 | 3797 aim_locate_setprofile(sess, NULL, NULL, 0, NULL, NULL, 0, caps_icq); |
5301 | 3798 else |
5954 | 3799 oscar_set_info(gc, gc->account->user_info); |
2993 | 3800 |
3801 return 1; | |
3802 } | |
3803 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3804 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
|
3805 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3806 fu16_t maxbuddies, maxwatchers; |
5575 | 3807 GaimConnection *gc = sess->aux_data; |
7283 | 3808 OscarData *od = (OscarData *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3809 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3810 va_start(ap, fr); |
4199 | 3811 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3812 maxwatchers = (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 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3817 |
4617 | 3818 od->rights.maxbuddies = (guint)maxbuddies; |
3819 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3820 |
2086 | 3821 return 1; |
3822 } | |
3823 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3824 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
|
3825 fu16_t maxpermits, maxdenies; |
2086 | 3826 va_list ap; |
5575 | 3827 GaimConnection *gc = sess->aux_data; |
7283 | 3828 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 3829 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3830 va_start(ap, fr); |
4199 | 3831 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3832 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3833 va_end(ap); |
3834 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3835 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3836 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3837 |
4617 | 3838 od->rights.maxpermits = (guint)maxpermits; |
3839 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3840 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
3841 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2993 | 3842 serv_finish_login(gc); |
3843 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3844 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3845 |
2672 | 3846 aim_clientready(sess, fr->conn); |
5948 | 3847 aim_srv_setavailmsg(sess, NULL); |
5917 | 3848 aim_bos_setidle(sess, fr->conn, 0); |
4617 | 3849 |
4664 | 3850 if (od->icq) { |
3851 aim_icq_reqofflinemsgs(sess); | |
3852 aim_icq_hideip(sess); | |
3853 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3854 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3855 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3856 if (sess->authinfo->email) |
3857 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3858 |
3859 return 1; | |
3860 } | |
3861 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3862 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
|
3863 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3864 struct aim_icq_offlinemsg *msg; |
4075 | 3865 struct aim_incomingim_ch4_args args; |
3866 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3867 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3868 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3869 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3870 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3871 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3872 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3873 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3874 args.uin = msg->sender; |
3875 args.type = msg->type; | |
4173 | 3876 args.flags = msg->flags; |
4076 | 3877 args.msglen = msg->msglen; |
4075 | 3878 args.msg = msg->msg; |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3879 t = gaim_time_build(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
4075 | 3880 incomingim_chan4(sess, fr->conn, NULL, &args, t); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3881 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3882 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3883 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3884 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3885 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
|
3886 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3887 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3888 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3889 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3890 |
4624 | 3891 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
|
3892 { |
5575 | 3893 GaimConnection *gc = sess->aux_data; |
4819 | 3894 gchar *buf, *tmp, *utf8; |
4624 | 3895 gchar who[16]; |
6873 | 3896 GaimBuddy *buddy; |
3897 gchar *primary; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3898 va_list ap; |
4151 | 3899 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3900 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3901 va_start(ap, fr); |
4151 | 3902 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3903 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3904 |
4664 | 3905 if (!info->uin) |
3906 return 0; | |
3907 | |
5556 | 3908 g_snprintf(who, sizeof(who), "%u", info->uin); |
6623 | 3909 buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3910 if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
6623 | 3911 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3912 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3913 if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) { |
6623 | 3914 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3915 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3916 if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) { |
6623 | 3917 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3918 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3919 if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) { |
6623 | 3920 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 | 3921 } |
3922 if (info->numaddresses && info->email2) { | |
3923 int i; | |
3924 for (i = 0; i < info->numaddresses; i++) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3925 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) { |
6623 | 3926 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 | 3927 } |
4625 | 3928 } |
4624 | 3929 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3930 if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) { |
6623 | 3931 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4625 | 3932 } |
3933 if (info->gender) { | |
6623 | 3934 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender"), ":</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 3935 } |
4624 | 3936 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 3937 char date[30]; |
3938 struct tm tm; | |
3939 tm.tm_mday = (int)info->birthday; | |
3940 tm.tm_mon = (int)info->birthmonth-1; | |
3941 tm.tm_year = (int)info->birthyear-1900; | |
4628 | 3942 strftime(date, sizeof(date), "%x", &tm); |
6623 | 3943 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday"), ":</b> ", date, NULL); g_free(tmp); |
4151 | 3944 } |
4624 | 3945 if (info->age) { |
3946 char age[5]; | |
3947 snprintf(age, sizeof(age), "%hhd", info->age); | |
6623 | 3948 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp); |
4819 | 3949 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3950 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) { |
6623 | 3951 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 | 3952 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3953 if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) { |
6623 | 3954 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3955 } |
3956 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 3957 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
6623 | 3958 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
|
3959 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) { |
6623 | 3960 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3961 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3962 if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) { |
6623 | 3963 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3964 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3965 if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) { |
6623 | 3966 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3967 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3968 if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) { |
6623 | 3969 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3970 } |
3971 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 3972 } |
4641 | 3973 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
6623 | 3974 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
|
3975 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) { |
6623 | 3976 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3977 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3978 if (info->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) { |
6623 | 3979 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3980 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3981 if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) { |
6623 | 3982 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3983 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3984 if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) { |
6623 | 3985 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3986 } |
3987 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
3988 } | |
4641 | 3989 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
6623 | 3990 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
|
3991 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) { |
6623 | 3992 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3993 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3994 if (info->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) { |
6623 | 3995 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3996 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3997 if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) { |
6623 | 3998 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 3999 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4000 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) { |
6623 | 4001 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 | 4002 } |
4003 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4004 } |
4005 | |
6873 | 4006 buddy = gaim_find_buddy(gaim_connection_get_account(gc), who); |
4007 primary = g_strdup_printf(_("ICQ Info for %s"), gaim_get_buddy_alias(buddy)); | |
4008 gaim_notify_formatted(gc, NULL, primary, NULL, buf, NULL, NULL); | |
4009 g_free(primary); | |
4151 | 4010 g_free(buf); |
4011 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4012 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4013 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4014 |
4759 | 4015 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
4016 { | |
5575 | 4017 GaimConnection *gc = sess->aux_data; |
4820 | 4018 gchar who[16], *utf8; |
6695 | 4019 GaimBuddy *b; |
4759 | 4020 va_list ap; |
4021 struct aim_icq_info *info; | |
4022 | |
4023 va_start(ap, fr); | |
4024 info = va_arg(ap, struct aim_icq_info *); | |
4025 va_end(ap); | |
4026 | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4027 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
5556 | 4028 g_snprintf(who, sizeof(who), "%u", info->uin); |
4820 | 4029 serv_got_alias(gc, who, utf8); |
4759 | 4030 if ((b = gaim_find_buddy(gc->account, who))) { |
4820 | 4031 gaim_buddy_set_setting(b, "servernick", utf8); |
4759 | 4032 gaim_blist_save(); |
4033 } | |
4820 | 4034 g_free(utf8); |
4759 | 4035 } |
4036 | |
4037 return 1; | |
4038 } | |
4039 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4040 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
|
4041 { |
7032 | 4042 GaimConnection *gc = sess->aux_data; |
4043 gchar *text; | |
4044 va_list ap; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4045 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4046 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4047 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4048 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4049 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4050 url = va_arg(ap, char *); |
4199 | 4051 wid = (fu16_t) va_arg(ap, int); |
4052 hei = (fu16_t) va_arg(ap, int); | |
4053 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4054 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4055 |
7032 | 4056 text = g_strdup_printf("%s<br><a href=\"%s\">%s</a>", msg, url, url); |
4057 gaim_notify_formatted(gc, NULL, _("Pop-Up Message"), NULL, text, NULL, NULL); | |
4058 g_free(text); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4059 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4060 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4061 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4062 |
7032 | 4063 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) |
4064 { | |
6873 | 4065 GaimConnection *gc = sess->aux_data; |
4066 gchar *secondary; | |
4067 GString *text; | |
4068 int i, num; | |
2086 | 4069 va_list ap; |
6873 | 4070 char *email, *SNs; |
2086 | 4071 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4072 va_start(ap, fr); |
6873 | 4073 email = va_arg(ap, char *); |
2086 | 4074 num = va_arg(ap, int); |
4075 SNs = va_arg(ap, char *); | |
4076 va_end(ap); | |
4077 | |
6873 | 4078 secondary = g_strdup_printf(_("The following screennames are associated with %s"), email); |
4079 text = g_string_new(""); | |
2086 | 4080 for (i = 0; i < num; i++) |
6873 | 4081 g_string_append_printf(text, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4082 gaim_notify_formatted(gc, NULL, _("Search Results"), secondary, text->str, NULL, NULL); | |
4083 | |
4084 g_free(secondary); | |
4085 g_string_free(text, TRUE); | |
2086 | 4086 |
4087 return 1; | |
4088 } | |
4089 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4090 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4091 va_list ap; |
6873 | 4092 char *email; |
5420 | 4093 char *buf; |
2086 | 4094 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4095 va_start(ap, fr); |
6873 | 4096 email = va_arg(ap, char *); |
2086 | 4097 va_end(ap); |
4098 | |
6873 | 4099 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
|
4100 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4101 g_free(buf); |
2086 | 4102 |
4103 return 1; | |
4104 } | |
4105 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4106 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
6873 | 4107 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4108 fu16_t status; |
2086 | 4109 va_list ap; |
4110 char msg[256]; | |
4111 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4112 va_start(ap, fr); |
4199 | 4113 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4114 va_end(ap); |
4115 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4116 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4117 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4118 status ? "unknown" : "email sent"); |
4119 if (!status) { | |
5302 | 4120 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
5575 | 4121 gaim_account_get_username(gaim_connection_get_account(gc))); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4122 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4123 } |
4124 | |
4125 return 1; | |
4126 } | |
4127 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4128 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4129 GaimConnection *gc = sess->aux_data; |
2086 | 4130 va_list ap; |
3912 | 4131 fu16_t perms, err; |
4132 char *url, *sn, *email; | |
4133 int change; | |
2086 | 4134 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4135 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4136 change = va_arg(ap, int); |
4199 | 4137 perms = (fu16_t) va_arg(ap, unsigned int); |
4138 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4139 url = va_arg(ap, char *); |
4140 sn = va_arg(ap, char *); | |
4141 email = va_arg(ap, char *); | |
2086 | 4142 va_end(ap); |
4143 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4144 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4145 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4146 change ? "change" : "request", perms, err, url, sn, email); |
4147 | |
4148 if (err && url) { | |
4149 char *dialog_msg; | |
4150 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4151 switch (err) { | |
4152 case 0x0001: { | |
4153 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4154 } break; | |
4155 case 0x0006: { | |
4156 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4157 } break; | |
4158 case 0x000b: { | |
4159 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4160 } break; | |
4161 case 0x001d: { | |
4162 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); | |
4163 } break; | |
4164 case 0x0021: { | |
4165 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); | |
4166 } break; | |
4167 case 0x0023: { | |
4168 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4169 } break; | |
4170 default: { | |
4171 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4172 } break; | |
4173 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4174 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4175 g_free(dialog_top); |
4176 g_free(dialog_msg); | |
4177 return 1; | |
4178 } | |
4179 | |
4180 if (sn) { | |
4585 | 4181 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
|
4182 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4183 g_free(dialog_msg); |
4184 } | |
4185 | |
4186 if (email) { | |
5575 | 4187 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), |
4188 gaim_account_get_username(gaim_connection_get_account(gc)), email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4189 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4190 g_free(dialog_msg); |
2086 | 4191 } |
4192 | |
4193 return 1; | |
4194 } | |
4195 | |
5575 | 4196 static void oscar_keepalive(GaimConnection *gc) { |
7283 | 4197 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4198 aim_flap_nop(od->sess, od->conn); |
2086 | 4199 } |
4200 | |
6059 | 4201 static int oscar_send_typing(GaimConnection *gc, const char *name, int typing) { |
7283 | 4202 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4203 struct direct_im *dim = find_direct_im(od, name); |
3595 | 4204 if (dim) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4205 if (typing == GAIM_TYPING) |
4870 | 4206 aim_odc_send_typing(od->sess, dim->conn, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4207 else if (typing == GAIM_TYPED) |
4870 | 4208 aim_odc_send_typing(od->sess, dim->conn, 0x0001); |
4209 else | |
4210 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4211 else { |
5300 | 4212 /* Don't send if this turkey is in our deny list */ |
4213 GSList *list; | |
4214 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4215 if (!list) { | |
7261 | 4216 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
5300 | 4217 if (bi && bi->typingnot) { |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4218 if (typing == GAIM_TYPING) |
5300 | 4219 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4220 else if (typing == GAIM_TYPED) |
5300 | 4221 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); |
4222 else | |
4223 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4224 } | |
3595 | 4225 } |
4226 } | |
2993 | 4227 return 0; |
4228 } | |
5575 | 4229 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
|
4230 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
|
4231 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4232 static int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimConvImFlags imflags) { |
7283 | 4233 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4234 struct direct_im *dim = find_direct_im(od, name); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4235 int ret = 0; |
3659 | 4236 GError *err = NULL; |
5575 | 4237 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
|
4238 char *tmpmsg = NULL; |
3458 | 4239 |
4838 | 4240 if (dim && dim->connected) { |
4241 /* If we're directly connected, send a direct IM */ | |
6982 | 4242 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
|
4243 } else if (imflags & GAIM_CONV_IM_IMAGES) { |
3044 | 4244 /* Trying to send an IM image outside of a direct connection. */ |
4245 oscar_ask_direct_im(gc, name); | |
4838 | 4246 ret = -ENOTCONN; |
2086 | 4247 } else { |
4738 | 4248 struct buddyinfo *bi; |
3008 | 4249 struct aim_sendimext_args args; |
4250 struct stat st; | |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4251 gsize len; |
4269 | 4252 |
7261 | 4253 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
4738 | 4254 if (!bi) { |
4255 bi = g_new0(struct buddyinfo, 1); | |
7261 | 4256 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, name)), bi); |
4738 | 4257 } |
4258 | |
3008 | 4259 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4260 if (od->icq) { |
4261 args.features = features_icq; | |
4262 args.featureslen = sizeof(features_icq); | |
3008 | 4263 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4264 } else { |
4265 args.features = features_aim; | |
4266 args.featureslen = sizeof(features_aim); | |
4972 | 4267 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4268 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
4972 | 4269 args.flags |= AIM_IMFLAGS_AWAY; |
4665 | 4270 } |
4269 | 4271 |
4738 | 4272 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4273 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4274 "Sending buddy icon request with message\n"); |
3008 | 4275 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4276 bi->ico_need = FALSE; |
3008 | 4277 } |
4269 | 4278 |
5575 | 4279 if (iconfile && !stat(iconfile, &st)) { |
4280 FILE *file = fopen(iconfile, "r"); | |
3008 | 4281 if (file) { |
4282 char *buf = g_malloc(st.st_size); | |
4283 fread(buf, 1, st.st_size, file); | |
6039 | 4284 fclose(file); |
4269 | 4285 |
3008 | 4286 args.iconlen = st.st_size; |
4617 | 4287 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4288 args.iconstamp = st.st_mtime; |
4289 | |
4738 | 4290 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) |
4291 bi->ico_informed = FALSE; | |
4292 | |
4293 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4294 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4295 "Claiming to have a buddy icon\n"); |
4738 | 4296 args.flags |= AIM_IMFLAGS_HASICON; |
4297 bi->ico_me_len = args.iconlen; | |
4298 bi->ico_me_csum = args.iconsum; | |
4299 bi->ico_me_time = args.iconstamp; | |
4300 bi->ico_informed = TRUE; | |
4301 } | |
4302 | |
3008 | 4303 g_free(buf); |
2086 | 4304 } |
4305 } | |
4269 | 4306 |
3008 | 4307 args.destsn = name; |
4269 | 4308 |
6310 | 4309 /* For ICQ send newlines as CR/LF, for AIM send newlines as <BR> */ |
4310 if (isdigit(name[0])) | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4311 tmpmsg = gaim_str_add_cr(message); |
6310 | 4312 else |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4313 tmpmsg = gaim_strdup_withhtml(message); |
6310 | 4314 len = strlen(tmpmsg); |
4315 | |
4316 args.flags |= oscar_encoding_check(tmpmsg); | |
3642 | 4317 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4318 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4319 args.charset = 0x0002; |
4665 | 4320 args.charsubset = 0x0000; |
6310 | 4321 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
3659 | 4322 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4323 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4324 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4325 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4326 "This really shouldn't happen!\n"); |
3659 | 4327 /* We really shouldn't try to send the |
4328 * IM now, but I'm not sure what to do */ | |
4800 | 4329 g_error_free(err); |
3659 | 4330 } |
3850 | 4331 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4332 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4333 "Sending ISO-8859-1 IM\n"); |
4662 | 4334 args.charset = 0x0003; |
4665 | 4335 args.charsubset = 0x0000; |
6310 | 4336 args.msg = g_convert(tmpmsg, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
3659 | 4337 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4338 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4339 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4340 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4341 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4342 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
6310 | 4343 len = strlen(tmpmsg); |
4800 | 4344 g_error_free(err); |
6310 | 4345 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
3659 | 4346 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4347 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4348 "Error in unicode fallback: %s\n", err->message); |
4800 | 4349 g_error_free(err); |
3659 | 4350 } |
3642 | 4351 } |
4352 } else { | |
4662 | 4353 args.charset = 0x0000; |
4354 args.charsubset = 0x0000; | |
6310 | 4355 args.msg = tmpmsg; |
3642 | 4356 } |
4357 args.msglen = len; | |
4269 | 4358 |
4617 | 4359 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4360 } |
4838 | 4361 |
6310 | 4362 g_free(tmpmsg); |
4363 | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4364 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4365 return 1; |
6310 | 4366 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4367 return ret; |
2086 | 4368 } |
4369 | |
7011 | 4370 static void oscar_get_info(GaimConnection *gc, const char *name) { |
7283 | 4371 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4372 |
7173 | 4373 if (od->icq && isdigit(name[0])) |
4624 | 4374 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4375 else |
7235 | 4376 aim_locate_getinfoshort(od->sess, name, 0x00000003); |
7011 | 4377 } |
4378 | |
4379 static void oscar_get_away(GaimConnection *gc, const char *who) { | |
7283 | 4380 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4381 if (od->icq) { |
7011 | 4382 GaimBuddy *budlight = gaim_find_buddy(gc->account, who); |
3212 | 4383 if (budlight) |
3595 | 4384 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4385 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4386 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4387 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4388 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4389 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4390 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
7023 | 4391 "Error: Could not find %s in local buddy list, therefore unable to request status message.\n", who); |
3212 | 4392 } else |
7011 | 4393 aim_locate_getinfoshort(od->sess, who, 0x00000002); |
4394 } | |
4395 | |
4396 static void oscar_set_dir(GaimConnection *gc, const char *first, const char *middle, const char *last, | |
3466 | 4397 const char *maiden, const char *city, const char *state, const char *country, int web) { |
4617 | 4398 /* XXX - some of these things are wrong, but i'm lazy */ |
7283 | 4399 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4400 aim_locate_setdirinfo(od->sess, first, middle, last, |
2086 | 4401 maiden, NULL, NULL, city, state, NULL, 0, web); |
4402 } | |
4403 | |
5575 | 4404 static void oscar_set_idle(GaimConnection *gc, int time) { |
7283 | 4405 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4406 aim_bos_setidle(od->sess, od->conn, time); |
2086 | 4407 } |
4408 | |
5954 | 4409 static void oscar_set_info(GaimConnection *gc, const char *text) { |
7283 | 4410 OscarData *od = (OscarData *)gc->proto_data; |
5129 | 4411 fu32_t flags = 0; |
6019 | 4412 char *text_html = NULL; |
5129 | 4413 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4414 gsize msglen = 0; |
2993 | 4415 |
4617 | 4416 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4417 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4418 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4419 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4420 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4421 "again when you are fully connected.")); |
4617 | 4422 |
4423 if (od->icq) | |
7011 | 4424 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, NULL, 0, caps_icq); |
4151 | 4425 else { |
5129 | 4426 if (!text) { |
7011 | 4427 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, NULL, 0, caps_aim); |
5129 | 4428 return; |
4429 } | |
6019 | 4430 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4431 text_html = gaim_strdup_withhtml(text); |
6019 | 4432 flags = oscar_encoding_check(text_html); |
5129 | 4433 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4434 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4435 aim_locate_setprofile(od->sess, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
5129 | 4436 g_free(msg); |
4437 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4438 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4439 aim_locate_setprofile(od->sess, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
5129 | 4440 g_free(msg); |
4151 | 4441 } else { |
6019 | 4442 msglen = strlen(text_html); |
7011 | 4443 aim_locate_setprofile(od->sess, "us-ascii", text_html, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0, caps_aim); |
4151 | 4444 } |
5129 | 4445 |
4446 if (msglen > od->rights.maxsiglen) { | |
4447 gchar *errstr; | |
6308 | 4448 errstr = g_strdup_printf(ngettext("The maximum profile length of %d byte " |
4449 "has been exceeded. Gaim has truncated it for you.", | |
4450 "The maximum profile length of %d bytes " | |
4451 "has been exceeded. Gaim has truncated it for you.", | |
4452 od->rights.maxsiglen), od->rights.maxsiglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4453 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); |
5129 | 4454 g_free(errstr); |
4455 } | |
4456 | |
6019 | 4457 g_free(text_html); |
4458 | |
5129 | 4459 } |
2993 | 4460 |
4461 return; | |
2086 | 4462 } |
4463 | |
7283 | 4464 static void oscar_set_away_aim(GaimConnection *gc, OscarData *od, const char *text) |
2993 | 4465 { |
5129 | 4466 fu32_t flags = 0; |
6019 | 4467 gchar *text_html = NULL; |
5129 | 4468 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4469 gsize msglen = 0; |
2993 | 4470 |
4471 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4472 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4473 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4474 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4475 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4476 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4477 "fully connected.")); |
5129 | 4478 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4479 if (gc->away) { |
2993 | 4480 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4481 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4482 } |
2993 | 4483 |
5129 | 4484 if (!text) { |
7011 | 4485 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
|
4486 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4487 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4488 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4489 text_html = gaim_strdup_withhtml(text); |
6019 | 4490 flags = oscar_encoding_check(text_html); |
5129 | 4491 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4492 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4493 aim_locate_setprofile(od->sess, NULL, NULL, 0, "unicode-2-0", msg, |
5129 | 4494 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
4495 g_free(msg); | |
4496 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4497 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4498 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4499 aim_locate_setprofile(od->sess, NULL, NULL, 0, "iso-8859-1", msg, |
5129 | 4500 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
4501 g_free(msg); | |
6019 | 4502 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4503 } else { |
6019 | 4504 msglen = strlen(text_html); |
7011 | 4505 aim_locate_setprofile(od->sess, NULL, NULL, 0, "us-ascii", text_html, |
5129 | 4506 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen), caps_aim); |
6019 | 4507 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4508 } |
4509 | |
4510 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4511 gchar *errstr; |
4512 | |
6308 | 4513 errstr = g_strdup_printf(ngettext("The maximum away message length of %d byte " |
4514 "has been exceeded. Gaim has truncated it for you.", | |
4515 "The maximum away message length of %d bytes " | |
4516 "has been exceeded. Gaim has truncated it for you.", | |
4517 od->rights.maxawaymsglen), od->rights.maxawaymsglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4518 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4519 g_free(errstr); |
4520 } | |
6019 | 4521 |
4522 g_free(text_html); | |
2993 | 4523 return; |
4524 } | |
4525 | |
7283 | 4526 static void oscar_set_away_icq(GaimConnection *gc, OscarData *od, const char *state, const char *message) |
2993 | 4527 { |
5575 | 4528 GaimAccount *account = gaim_connection_get_account(gc); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4529 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4530 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4531 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4532 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4533 |
4342 | 4534 if (strcmp(state, _("Invisible"))) { |
5575 | 4535 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != account->perm_deny)) |
4536 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); | |
4537 account->perm_deny = 4; | |
4342 | 4538 } else { |
5542 | 4539 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03)) |
4889 | 4540 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
5575 | 4541 account->perm_deny = 3; |
4342 | 4542 } |
4543 | |
4544 if (!strcmp(state, _("Online"))) | |
4901 | 4545 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4546 else if (!strcmp(state, _("Away"))) { |
4901 | 4547 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4548 gc->away = g_strdup(""); |
4342 | 4549 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4550 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
|
4551 gc->away = g_strdup(""); |
4342 | 4552 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4553 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
|
4554 gc->away = g_strdup(""); |
4342 | 4555 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4556 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
|
4557 gc->away = g_strdup(""); |
4342 | 4558 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4559 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4560 gc->away = g_strdup(""); |
4342 | 4561 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4562 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4563 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4564 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4565 if (message) { |
4901 | 4566 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
|
4567 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4568 } else { |
4901 | 4569 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4570 } |
2086 | 4571 } |
2993 | 4572 |
4573 return; | |
4574 } | |
4575 | |
6059 | 4576 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message) |
2993 | 4577 { |
7283 | 4578 OscarData *od = (OscarData *)gc->proto_data; |
2993 | 4579 |
4580 if (od->icq) | |
4581 oscar_set_away_icq(gc, od, state, message); | |
4582 else | |
4583 oscar_set_away_aim(gc, od, message); | |
4584 | |
4585 return; | |
2086 | 4586 } |
4587 | |
6059 | 4588 static void oscar_warn(GaimConnection *gc, const char *name, int anon) { |
7283 | 4589 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4590 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); |
2086 | 4591 } |
4592 | |
5575 | 4593 static void oscar_dir_search(GaimConnection *gc, const char *first, const char *middle, const char *last, |
3466 | 4594 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
7283 | 4595 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 4596 if (strlen(email)) |
6879 | 4597 aim_search_address(od->sess, od->conn, email); |
2086 | 4598 } |
4599 | |
6787
faa491042c66
[gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4600 static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { |
7283 | 4601 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4602 #ifdef NOSSI |
4603 aim_add_buddy(od->sess, od->conn, name); | |
4604 #else | |
4605 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
6695 | 4606 GaimBuddy *buddy = gaim_find_buddy(gc->account, name); |
4607 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4608 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4609 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4610 "ssi: adding buddy %s to group %s\n", name, group->name); |
4889 | 4611 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4612 } |
4613 } | |
4614 #endif | |
4759 | 4615 if (od->icq) |
4616 aim_icq_getalias(od->sess, name); | |
4230 | 4617 } |
4618 | |
5575 | 4619 static void oscar_add_buddies(GaimConnection *gc, GList *buddies) { |
7283 | 4620 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4621 #ifdef NOSSI |
4622 char buf[MSG_LEN]; | |
4623 int n=0; | |
4624 while (buddies) { | |
4625 if (n > MSG_LEN - 18) { | |
7285 | 4626 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4627 n = 0; |
3092 | 4628 } |
4230 | 4629 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); |
4630 buddies = buddies->next; | |
4631 } | |
7285 | 4632 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4633 #else |
4634 if (od->sess->ssi.received_data) { | |
4635 while (buddies) { | |
6695 | 4636 GaimBuddy *buddy = gaim_find_buddy(gc->account, (const char *)buddies->data); |
4637 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4638 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4639 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4640 "ssi: adding buddy %s to group %s\n", (const char *)buddies->data, group->name); |
4889 | 4641 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4642 } |
4643 buddies = buddies->next; | |
4644 } | |
4645 } | |
4646 #endif | |
4647 } | |
4648 | |
6059 | 4649 static void oscar_remove_buddy(GaimConnection *gc, const char *name, const char *group) { |
7283 | 4650 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4651 #ifdef NOSSI |
4652 aim_remove_buddy(od->sess, od->conn, name); | |
4653 #else | |
4654 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4655 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4656 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4657 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4658 } |
4659 #endif | |
4660 } | |
4661 | |
5575 | 4662 static void oscar_remove_buddies(GaimConnection *gc, GList *buddies, const char *group) { |
7283 | 4663 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4664 #ifdef NOSSI |
4665 GList *cur; | |
4666 for (cur=buddies; cur; cur=cur->next) | |
4667 aim_remove_buddy(od->sess, od->conn, cur->data); | |
4668 #else | |
4669 if (od->sess->ssi.received_data) { | |
3092 | 4670 while (buddies) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4671 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4672 "ssi: deleting buddy %s from group %s\n", (char *)buddies->data, group); |
4889 | 4673 aim_ssi_delbuddy(od->sess, buddies->data, group); |
3092 | 4674 buddies = buddies->next; |
4675 } | |
4230 | 4676 } |
4677 #endif | |
4678 } | |
4679 | |
4680 #ifndef NOSSI | |
5575 | 4681 static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { |
7283 | 4682 OscarData *od = (OscarData *)gc->proto_data; |
4303 | 4683 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
|
4684 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4685 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4686 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4687 } |
4688 } | |
4689 | |
5575 | 4690 static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { |
7283 | 4691 OscarData *od = (OscarData *)gc->proto_data; |
4269 | 4692 if (od->sess->ssi.received_data) { |
4693 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4694 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4695 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4696 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4697 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4698 } |
4699 } | |
4700 } | |
4701 | |
5575 | 4702 static void oscar_rename_group(GaimConnection *g, const char *old_group, const char *new_group, GList *members) { |
7283 | 4703 OscarData *od = (OscarData *)g->proto_data; |
4230 | 4704 |
4705 if (od->sess->ssi.received_data) { | |
4706 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4707 oscar_remove_buddies(g, members, old_group); | |
4708 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4709 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4710 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4711 } else { |
4889 | 4712 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4713 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4714 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4715 } |
4716 } | |
4717 } | |
4718 | |
5968 | 4719 static gboolean gaim_ssi_rerequestdata(gpointer data) { |
4720 aim_session_t *sess = data; | |
6350 | 4721 aim_ssi_reqdata(sess); |
5968 | 4722 return FALSE; |
4723 } | |
4724 | |
4642 | 4725 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4726 GaimConnection *gc = sess->aux_data; |
7283 | 4727 OscarData *od = gc->proto_data; |
4642 | 4728 va_list ap; |
4729 fu16_t reason; | |
4730 | |
4731 va_start(ap, fr); | |
4732 reason = (fu16_t)va_arg(ap, unsigned int); | |
4733 va_end(ap); | |
4734 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4735 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4736 |
4737 if (reason == 0x0005) { | |
5892 | 4738 gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), |
5828 | 4739 _("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 | 4740 od->getblisttimer = g_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); |
4642 | 4741 } |
4742 | |
4743 /* Activate SSI */ | |
4744 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4745 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5968 | 4746 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: activating server-stored buddy list\n"); |
4642 | 4747 aim_ssi_enable(od->sess); |
4748 | |
4749 return 1; | |
4750 } | |
4751 | |
2991 | 4752 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4753 GaimConnection *gc = sess->aux_data; |
7283 | 4754 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4755 int numtypes, i; |
4756 fu16_t *maxitems; | |
2991 | 4757 va_list ap; |
4758 | |
4759 va_start(ap, fr); | |
4230 | 4760 numtypes = va_arg(ap, int); |
4761 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4762 va_end(ap); |
4763 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4764 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4765 |
4230 | 4766 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4767 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4768 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4769 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4770 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4771 |
4772 if (numtypes >= 0) | |
4773 od->rights.maxbuddies = maxitems[0]; | |
4774 if (numtypes >= 1) | |
4775 od->rights.maxgroups = maxitems[1]; | |
4776 if (numtypes >= 2) | |
4777 od->rights.maxpermits = maxitems[2]; | |
4778 if (numtypes >= 3) | |
4779 od->rights.maxdenies = maxitems[3]; | |
2991 | 4780 |
4781 return 1; | |
4782 } | |
4783 | |
4784 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4785 GaimConnection *gc = sess->aux_data; |
4786 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 4787 OscarData *od = (OscarData *)gc->proto_data; |
2995 | 4788 struct aim_ssi_item *curitem; |
2991 | 4789 int tmp; |
4778 | 4790 gboolean export = FALSE; |
4617 | 4791 /* XXX - use these? |
4230 | 4792 va_list ap; |
4793 | |
4794 va_start(ap, fr); | |
4795 fmtver = (fu16_t)va_arg(ap, int); | |
4796 numitems = (fu16_t)va_arg(ap, int); | |
4797 items = va_arg(ap, struct aim_ssi_item); | |
4798 timestamp = va_arg(ap, fu32_t); | |
4799 va_end(ap); */ | |
2991 | 4800 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4801 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4802 "ssi: syncing local list and server list\n"); |
2991 | 4803 |
4804 /* Clean the buddy list */ | |
4889 | 4805 aim_ssi_cleanlist(sess); |
2991 | 4806 |
4807 /* Add from server list to local list */ | |
4230 | 4808 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
2991 | 4809 switch (curitem->type) { |
4230 | 4810 case 0x0000: { /* Buddy */ |
4251 | 4811 if (curitem->name) { |
4292 | 4812 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
7166 | 4813 char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; |
4282 | 4814 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
7166 | 4815 char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; |
6695 | 4816 GaimBuddy *buddy = gaim_find_buddy(gc->account, curitem->name); |
4458 | 4817 /* Should gname be freed here? -- elb */ |
4754 | 4818 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 4819 free(alias); |
4282 | 4820 if (buddy) { |
4292 | 4821 /* Get server stored alias */ |
4705 | 4822 if (alias_utf8) { |
4823 g_free(buddy->alias); | |
4824 buddy->alias = g_strdup(alias_utf8); | |
4825 } | |
4282 | 4826 } else { |
6695 | 4827 GaimGroup *g; |
4687 | 4828 buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); |
5146 | 4829 |
4754 | 4830 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 4831 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 4832 gaim_blist_add_group(g, NULL); |
4833 } | |
5146 | 4834 |
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 buddy %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
6695 | 4837 gaim_blist_add_buddy(buddy, NULL, g, NULL); |
4778 | 4838 export = TRUE; |
4251 | 4839 } |
7162 | 4840 g_free(gname_utf8); |
4841 g_free(alias_utf8); | |
2991 | 4842 } |
4230 | 4843 } break; |
4844 | |
4845 case 0x0001: { /* Group */ | |
4282 | 4846 /* Shouldn't add empty groups */ |
4230 | 4847 } break; |
4848 | |
4849 case 0x0002: { /* Permit buddy */ | |
2991 | 4850 if (curitem->name) { |
4230 | 4851 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 4852 GSList *list; |
5575 | 4853 for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4854 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4855 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4856 "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
|
4857 gaim_privacy_permit_add(account, curitem->name, TRUE); |
4778 | 4858 export = TRUE; |
2991 | 4859 } |
4860 } | |
4230 | 4861 } break; |
4862 | |
4863 case 0x0003: { /* Deny buddy */ | |
2991 | 4864 if (curitem->name) { |
4865 GSList *list; | |
5575 | 4866 for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4867 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4868 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4869 "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
|
4870 gaim_privacy_deny_add(account, curitem->name, TRUE); |
4778 | 4871 export = TRUE; |
2991 | 4872 } |
4873 } | |
4230 | 4874 } break; |
4875 | |
4876 case 0x0004: { /* Permit/deny setting */ | |
2991 | 4877 if (curitem->data) { |
4878 fu8_t permdeny; | |
5575 | 4879 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
|
4880 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5575 | 4881 "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); |
4882 account->perm_deny = permdeny; | |
4883 if (od->icq && account->perm_deny == 0x03) { | |
4342 | 4884 serv_set_away(gc, "Invisible", ""); |
4885 } | |
4778 | 4886 export = TRUE; |
2991 | 4887 } |
4888 } | |
4230 | 4889 } break; |
4890 | |
4891 case 0x0005: { /* Presence setting */ | |
3109 | 4892 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 4893 } break; |
2991 | 4894 } /* End of switch on curitem->type */ |
4895 } /* End of for loop */ | |
4230 | 4896 |
4897 /* If changes were made, then flush buddy list to file */ | |
4778 | 4898 if (export) |
4349 | 4899 gaim_blist_save(); |
2991 | 4900 |
4759 | 4901 { /* Add from local list to server list */ |
6695 | 4902 GaimBlistNode *gnode, *cnode, *bnode; |
4903 GaimGroup *group; | |
4904 GaimBuddy *buddy; | |
7098
770233dad86c
[gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents:
7095
diff
changeset
|
4905 GaimBuddyList *blist; |
3017 | 4906 GSList *cur; |
4907 | |
2991 | 4908 /* Buddies */ |
4759 | 4909 if ((blist = gaim_get_blist())) |
4910 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
5234 | 4911 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
4912 continue; | |
6695 | 4913 group = (GaimGroup *)gnode; |
4914 for (cnode = gnode->child; cnode; cnode = cnode->next) { | |
4915 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
5234 | 4916 continue; |
6695 | 4917 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
4918 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
4919 continue; | |
4920 buddy = (GaimBuddy *)bnode; | |
4921 if (buddy->account == gc->account) { | |
7125 | 4922 const char *servernick = gaim_buddy_get_setting(buddy, "servernick"); |
4923 if (servernick) | |
6695 | 4924 serv_got_alias(gc, buddy->name, servernick); |
7125 | 4925 |
6695 | 4926 if (aim_ssi_itemlist_exists(sess->ssi.local, buddy->name)) { |
4927 /* Store local alias on server */ | |
4928 char *alias = aim_ssi_getalias(sess->ssi.local, group->name, buddy->name); | |
4929 if (!alias && buddy->alias && strlen(buddy->alias)) | |
4930 aim_ssi_aliasbuddy(sess, group->name, buddy->name, buddy->alias); | |
4931 free(alias); | |
4932 } else { | |
4933 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4934 "ssi: adding buddy %s from local list to server list\n", buddy->name); | |
4935 aim_ssi_addbuddy(sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); | |
4936 } | |
4759 | 4937 } |
4349 | 4938 } |
4230 | 4939 } |
4292 | 4940 } |
6695 | 4941 |
2991 | 4942 /* Permit list */ |
4491 | 4943 if (gc->account->permit) { |
4944 for (cur=gc->account->permit; cur; cur=cur->next) | |
4230 | 4945 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
|
4946 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 4947 "ssi: adding permit %s from local list to server list\n", (char *)cur->data); |
4889 | 4948 aim_ssi_addpermit(sess, cur->data); |
4230 | 4949 } |
2991 | 4950 } |
4951 | |
4952 /* Deny list */ | |
4491 | 4953 if (gc->account->deny) { |
4954 for (cur=gc->account->deny; cur; cur=cur->next) | |
4230 | 4955 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
|
4956 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 4957 "ssi: adding deny %s from local list to server list\n", (char *)cur->data); |
4889 | 4958 aim_ssi_adddeny(sess, cur->data); |
4230 | 4959 } |
2991 | 4960 } |
3109 | 4961 /* Presence settings (idle time visibility) */ |
4230 | 4962 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) |
5631 | 4963 if (!(tmp & 0x400)) |
4889 | 4964 aim_ssi_setpresence(sess, tmp | 0x400); |
4778 | 4965 } /* end adding buddies from local list to server list */ |
4966 | |
4901 | 4967 /* Set our ICQ status */ |
4968 if (od->icq && !gc->away) { | |
4969 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
4970 } | |
4971 | |
4342 | 4972 /* Activate SSI */ |
4973 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4974 /* 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
|
4975 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4976 "ssi: activating server-stored buddy list\n"); |
4642 | 4977 aim_ssi_enable(sess); |
4342 | 4978 |
2991 | 4979 return 1; |
2086 | 4980 } |
4230 | 4981 |
4982 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4983 GaimConnection *gc = sess->aux_data; |
4230 | 4984 va_list ap; |
4985 struct aim_ssi_tmp *retval; | |
4986 | |
4987 va_start(ap, fr); | |
4988 retval = va_arg(ap, struct aim_ssi_tmp *); | |
4989 va_end(ap); | |
4990 | |
4991 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4992 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4993 "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 | 4994 |
4995 if (retval->ack != 0xffff) | |
4996 switch (retval->ack) { | |
4997 case 0x0000: { /* added successfully */ | |
4998 } break; | |
4999 | |
4829 | 5000 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
5001 gchar *buf; | |
5002 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
|
5003 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 5004 g_free(buf); |
5005 } | |
5006 | |
7023 | 5007 case 0x000e: { /* buddy requires authorization */ |
4828 | 5008 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 5009 gaim_auth_sendrequest(gc, retval->name); |
4230 | 5010 } break; |
5011 | |
5012 default: { /* La la la */ | |
5197 | 5013 gchar *buf; |
5402 | 5014 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
5015 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
|
5016 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 5017 g_free(buf); |
5402 | 5018 /* XXX - Should remove buddy from local list */ |
4230 | 5019 } break; |
5020 } | |
5021 | |
5022 retval = retval->next; | |
5023 } | |
5024 | |
5025 return 1; | |
5026 } | |
5027 | |
5028 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5029 GaimConnection *gc = sess->aux_data; |
4230 | 5030 va_list ap; |
5031 char *sn, *msg; | |
4236 | 5032 gchar *dialog_msg, *nombre; |
4230 | 5033 struct name_data *data; |
6695 | 5034 GaimBuddy *buddy; |
4230 | 5035 |
5036 va_start(ap, fr); | |
5037 sn = va_arg(ap, char *); | |
5038 msg = va_arg(ap, char *); | |
5039 va_end(ap); | |
5040 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5041 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5042 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 5043 |
4687 | 5044 buddy = gaim_find_buddy(gc->account, sn); |
5045 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5046 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5047 else |
5048 nombre = g_strdup(sn); | |
5049 | |
5050 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 | 5051 data = g_new(struct name_data, 1); |
5052 data->gc = gc; | |
5053 data->name = g_strdup(sn); | |
5054 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5055 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5056 gaim_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5057 0, data, |
7023 | 5058 G_CALLBACK(gaim_icq_buddyadd), |
5836 | 5059 G_CALLBACK(oscar_free_name_data)); |
4236 | 5060 |
4230 | 5061 g_free(dialog_msg); |
4236 | 5062 g_free(nombre); |
4230 | 5063 |
5064 return 1; | |
5065 } | |
5066 | |
5067 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5068 GaimConnection *gc = sess->aux_data; |
4230 | 5069 va_list ap; |
5070 char *sn, *msg; | |
4236 | 5071 gchar *dialog_msg, *nombre; |
4230 | 5072 struct name_data *data; |
6695 | 5073 GaimBuddy *buddy; |
4230 | 5074 |
5075 va_start(ap, fr); | |
5076 sn = va_arg(ap, char *); | |
5077 msg = va_arg(ap, char *); | |
5078 va_end(ap); | |
5079 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5080 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5081 "ssi: received authorization request from %s\n", sn); |
4230 | 5082 |
4687 | 5083 buddy = gaim_find_buddy(gc->account, sn); |
5084 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5085 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5086 else |
5087 nombre = g_strdup(sn); | |
5088 | |
4337 | 5089 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 | 5090 data = g_new(struct name_data, 1); |
5091 data->gc = gc; | |
5092 data->name = g_strdup(sn); | |
5093 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5094 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5095 gaim_request_action(gc, NULL, _("Authorization Request"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5096 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5097 _("Authorize"), G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5098 _("Deny"), G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4236 | 5099 |
4230 | 5100 g_free(dialog_msg); |
4236 | 5101 g_free(nombre); |
4230 | 5102 |
5103 return 1; | |
5104 } | |
5105 | |
5106 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5107 GaimConnection *gc = sess->aux_data; |
4230 | 5108 va_list ap; |
5109 char *sn, *msg; | |
4236 | 5110 gchar *dialog_msg, *nombre; |
4230 | 5111 fu8_t reply; |
6695 | 5112 GaimBuddy *buddy; |
4230 | 5113 |
5114 va_start(ap, fr); | |
5115 sn = va_arg(ap, char *); | |
5116 reply = (fu8_t)va_arg(ap, int); | |
5117 msg = va_arg(ap, char *); | |
5118 va_end(ap); | |
5119 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5120 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5121 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5122 |
4687 | 5123 buddy = gaim_find_buddy(gc->account, sn); |
5124 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5125 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5126 else |
5127 nombre = g_strdup(sn); | |
5128 | |
4230 | 5129 if (reply) { |
5130 /* Granted */ | |
7023 | 5131 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
|
5132 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5133 } else { |
5134 /* Denied */ | |
7023 | 5135 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
|
5136 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5137 } |
5138 g_free(dialog_msg); | |
4236 | 5139 g_free(nombre); |
4230 | 5140 |
5141 return 1; | |
5142 } | |
5143 | |
5144 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5145 GaimConnection *gc = sess->aux_data; |
4230 | 5146 va_list ap; |
5147 char *sn; | |
6695 | 5148 GaimBuddy *buddy; |
4230 | 5149 |
5150 va_start(ap, fr); | |
5151 sn = va_arg(ap, char *); | |
5152 va_end(ap); | |
5153 | |
4687 | 5154 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5155 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5156 "ssi: %s added you to their buddy list\n", sn); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
5157 gaim_account_notify_added(gc->account, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5158 |
5159 return 1; | |
5160 } | |
4269 | 5161 #endif |
2086 | 5162 |
5575 | 5163 static GList *oscar_chat_info(GaimConnection *gc) { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5164 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5165 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5166 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5167 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5168 pce->label = _("Join what group:"); |
5234 | 5169 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5170 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5171 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5172 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5173 pce->label = _("Exchange:"); |
5234 | 5174 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5175 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5176 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5177 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5178 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5179 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5180 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5181 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5182 |
5575 | 5183 static void oscar_join_chat(GaimConnection *g, GHashTable *data) { |
7283 | 5184 OscarData *od = (OscarData *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5185 aim_conn_t *cur; |
5234 | 5186 char *name, *exchange; |
5187 | |
5188 name = g_hash_table_lookup(data, "room"); | |
5189 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5190 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5191 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5192 "Attempting to join chat room %s.\n", name); |
4617 | 5193 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
|
5194 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5195 "chatnav exists, creating room\n"); |
5234 | 5196 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5197 } else { |
5198 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5199 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5200 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5201 "chatnav does not exist, opening chatnav\n"); |
5234 | 5202 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5203 cr->name = g_strdup(name); |
4617 | 5204 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5205 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5206 } |
5207 } | |
5208 | |
5575 | 5209 static void oscar_chat_invite(GaimConnection *g, int id, const char *message, const char *name) { |
7283 | 5210 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5211 struct chat_connection *ccon = find_oscar_chat(g, id); |
5212 | |
5213 if (!ccon) | |
5214 return; | |
5215 | |
4617 | 5216 aim_chat_invite(od->sess, od->conn, name, message ? message : "", |
2086 | 5217 ccon->exchange, ccon->name, 0x0); |
5218 } | |
5219 | |
5575 | 5220 static void oscar_chat_leave(GaimConnection *g, int id) { |
7283 | 5221 OscarData *od = g ? (OscarData *)g->proto_data : NULL; |
2086 | 5222 GSList *bcs = g->buddy_chats; |
5679 | 5223 GaimConversation *b = NULL; |
2086 | 5224 struct chat_connection *c = NULL; |
5225 int count = 0; | |
5226 | |
5227 while (bcs) { | |
5228 count++; | |
5679 | 5229 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5230 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5231 break; |
5232 bcs = bcs->next; | |
5233 b = NULL; | |
5234 } | |
5235 | |
5236 if (!b) | |
5237 return; | |
5238 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5239 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5240 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5241 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5242 c = find_oscar_chat(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5243 if (c != NULL) { |
4617 | 5244 if (od) |
5245 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5246 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5247 gaim_input_remove(c->inpa); |
4617 | 5248 if (g && od->sess) |
5249 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5250 g_free(c->name); |
5251 g_free(c->show); | |
5252 g_free(c); | |
5253 } | |
5254 /* 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
|
5255 serv_got_chat_left(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5256 } |
5257 | |
6059 | 5258 static int oscar_chat_send(GaimConnection *g, int id, const char *message) { |
7283 | 5259 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5260 GSList *bcs = g->buddy_chats; |
5679 | 5261 GaimConversation *b = NULL; |
2086 | 5262 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5263 char *buf, *buf2; |
2086 | 5264 int i, j; |
5265 | |
5266 while (bcs) { | |
5679 | 5267 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5268 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5269 break; |
5270 bcs = bcs->next; | |
5271 b = NULL; | |
5272 } | |
5273 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5274 return -EINVAL; |
2086 | 5275 |
4617 | 5276 bcs = od->oscar_chats; |
2086 | 5277 while (bcs) { |
5278 c = (struct chat_connection *)bcs->data; | |
5279 if (b == c->cnv) | |
5280 break; | |
5281 bcs = bcs->next; | |
5282 c = NULL; | |
5283 } | |
5284 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5285 return -EINVAL; |
2086 | 5286 |
5287 buf = g_malloc(strlen(message) * 4 + 1); | |
5288 for (i = 0, j = 0; i < strlen(message); i++) { | |
5289 if (message[i] == '\n') { | |
5290 buf[j++] = '<'; | |
5291 buf[j++] = 'B'; | |
5292 buf[j++] = 'R'; | |
5293 buf[j++] = '>'; | |
5294 } else { | |
5295 buf[j++] = message[i]; | |
5296 } | |
5297 } | |
5298 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5299 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5300 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5301 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5302 |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5303 buf2 = gaim_markup_strip_html(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5304 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5305 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5306 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5307 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5308 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5309 |
4617 | 5310 aim_chat_send_im(od->sess, c->conn, 0, buf, strlen(buf)); |
2086 | 5311 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5312 return 0; |
2086 | 5313 } |
5314 | |
6695 | 5315 static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) { |
4766 | 5316 if (!b || (b && b->name && b->name[0] == '+')) { |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5317 if (a != NULL && isdigit(*gaim_account_get_username(a))) |
4687 | 5318 return "icq"; |
5319 else | |
5320 return "aim"; | |
5321 } | |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5322 |
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5323 if (b != NULL && isdigit(b->name[0])) |
4687 | 5324 return "icq"; |
5325 return "aim"; | |
5326 } | |
5327 | |
6695 | 5328 static void oscar_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5329 { |
5330 char *emblems[4] = {NULL,NULL,NULL,NULL}; | |
5331 int i = 0; | |
5332 | |
5131 | 5333 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5575 | 5334 GaimAccount *account; |
5335 GaimConnection *gc; | |
7283 | 5336 OscarData *od; |
5131 | 5337 char *gname; |
5338 if ((b->name) && (account = b->account) && (gc = account->gc) && | |
5339 (od = gc->proto_data) && (od->sess->ssi.received_data) && | |
5340 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && | |
5341 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5342 emblems[i++] = "notauthorized"; | |
5343 } else { | |
5344 emblems[i++] = "offline"; | |
5345 } | |
5346 } | |
4916 | 5347 |
4766 | 5348 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5349 int uc = b->uc >> 16; |
4766 | 5350 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5351 emblems[i++] = "invisible"; |
4766 | 5352 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5353 emblems[i++] = "freeforchat"; |
4766 | 5354 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5355 emblems[i++] = "dnd"; |
4766 | 5356 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5357 emblems[i++] = "na"; |
4766 | 5358 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5359 emblems[i++] = "occupied"; |
4766 | 5360 else if (uc & AIM_ICQ_STATE_AWAY) |
5361 emblems[i++] = "away"; | |
5362 } else { | |
5363 if (b->uc & UC_UNAVAILABLE) | |
5364 emblems[i++] = "away"; | |
5365 } | |
4687 | 5366 if (b->uc & UC_WIRELESS) |
5367 emblems[i++] = "wireless"; | |
5368 if (b->uc & UC_AOL) | |
5369 emblems[i++] = "aol"; | |
5370 if (b->uc & UC_ADMIN) | |
5371 emblems[i++] = "admin"; | |
5372 if (b->uc & UC_AB && i < 4) | |
5373 emblems[i++] = "activebuddy"; | |
6318 | 5374 if (b->uc & UC_HIPTOP && i < 4) |
5375 emblems[i++] = "hiptop"; | |
4766 | 5376 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5377 emblems[i++] = "unconfirmed"; */ | |
4687 | 5378 *se = emblems[0]; |
5379 *sw = emblems[1]; | |
5380 *nw = emblems[2]; | |
5381 *ne = emblems[3]; | |
5382 } | |
5383 | |
6695 | 5384 static char *oscar_tooltip_text(GaimBuddy *b) { |
5575 | 5385 GaimConnection *gc = b->account->gc; |
7283 | 5386 OscarData *od = gc->proto_data; |
7261 | 5387 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
7045 | 5388 aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 5389 gchar *tmp = NULL, *ret = g_strdup(""); |
5131 | 5390 |
5391 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5392 if (isdigit(b->name[0])) { | |
7011 | 5393 char *status; |
5131 | 5394 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); |
7011 | 5395 tmp = ret; |
5396 ret = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5131 | 5397 g_free(tmp); |
5398 g_free(status); | |
5399 } | |
5400 | |
7011 | 5401 if (userinfo != NULL) { |
7162 | 5402 char *tstr = gaim_str_seconds_to_string(time(NULL) - userinfo->onlinesince + |
5131 | 5403 (gc->login_time_official ? gc->login_time_official - gc->login_time : 0)); |
7011 | 5404 tmp = ret; |
5405 ret = g_strconcat(tmp, _("<b>Logged In:</b> "), tstr, "\n", NULL); | |
7162 | 5406 g_free(tmp); |
5407 g_free(tstr); | |
7011 | 5408 } |
5409 | |
5410 if ((bi != NULL) && (bi->ipaddr)) { | |
7283 | 5411 char *tstr = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", |
7011 | 5412 (bi->ipaddr & 0xff000000) >> 24, |
5413 (bi->ipaddr & 0x00ff0000) >> 16, | |
5414 (bi->ipaddr & 0x0000ff00) >> 8, | |
5415 (bi->ipaddr & 0x000000ff)); | |
5416 tmp = ret; | |
5417 ret = g_strconcat(tmp, _("<b>IP Address:</b> "), tstr, "\n", NULL); | |
7162 | 5418 g_free(tmp); |
5419 g_free(tstr); | |
7011 | 5420 } |
5421 | |
5422 if ((userinfo != NULL) && (userinfo->capabilities)) { | |
5423 char *caps = caps_string(userinfo->capabilities); | |
5424 tmp = ret; | |
5425 ret = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
7162 | 5426 g_free(tmp); |
7011 | 5427 } |
5428 | |
5429 if ((bi != NULL) && (bi->availmsg != NULL) && !(b->uc & UC_UNAVAILABLE)) { | |
5430 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5431 tmp = ret; | |
5432 ret = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); | |
7162 | 5433 g_free(tmp); |
7011 | 5434 g_free(escaped); |
5435 } | |
5436 | |
5437 if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
5438 gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
5439 if (away_utf8 != NULL) { | |
7091 | 5440 gchar *tmp1, *tmp2; |
7162 | 5441 const char *tmp3; |
7091 | 5442 tmp1 = gaim_strreplace(away_utf8, "<BR>", "\n"); |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5443 tmp2 = gaim_markup_strip_html(tmp1); |
7091 | 5444 g_free(tmp1); |
7235 | 5445 tmp1 = g_markup_escape_text(tmp2, strlen(tmp2)); |
7091 | 5446 g_free(tmp2); |
7235 | 5447 tmp3 = gaim_str_sub_away_formatters(tmp1, gaim_account_get_username(gaim_connection_get_account(gc))); |
5448 g_free(tmp1); | |
7011 | 5449 tmp = ret; |
7162 | 5450 ret = g_strconcat(tmp, _("<b>Away Message:</b> "), tmp3, "\n", NULL); |
5451 g_free(tmp); | |
7011 | 5452 g_free(away_utf8); |
5836 | 5453 } |
5131 | 5454 } |
5455 } else { | |
5456 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5457 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
7011 | 5458 tmp = ret; |
5459 ret = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5131 | 5460 g_free(tmp); |
5461 } else { | |
7011 | 5462 tmp = ret; |
5463 ret = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5131 | 5464 g_free(tmp); |
5465 } | |
5466 } | |
5467 | |
5468 /* remove the trailing newline character */ | |
7011 | 5469 if (ret) |
5470 ret[strlen(ret)-1] = '\0'; | |
5471 return ret; | |
5131 | 5472 } |
5473 | |
6695 | 5474 static char *oscar_status_text(GaimBuddy *b) { |
5575 | 5475 GaimConnection *gc = b->account->gc; |
7283 | 5476 OscarData *od = gc->proto_data; |
5167 | 5477 gchar *ret = NULL; |
5478 | |
5479 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5480 if (isdigit(b->name[0])) | |
5481 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
7038 | 5482 else |
5483 ret = g_strdup(_("Away")); | |
5836 | 5484 } else if (GAIM_BUDDY_IS_ONLINE(b)) { |
7261 | 5485 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
6292 | 5486 if (bi->availmsg) |
5487 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5836 | 5488 } else { |
5167 | 5489 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); |
5490 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5491 ret = g_strdup(_("Not Authorized")); | |
5492 else | |
5493 ret = g_strdup(_("Offline")); | |
5494 } | |
5495 | |
5496 return ret; | |
5497 } | |
5498 | |
5842 | 5499 |
5844 | 5500 static int oscar_icon_req(aim_session_t *sess, aim_frame_t *fr, ...) { |
5842 | 5501 GaimConnection *gc = sess->aux_data; |
7283 | 5502 OscarData *od = gc->proto_data; |
5892 | 5503 va_list ap; |
5842 | 5504 fu16_t type; |
5892 | 5505 fu8_t flags = 0, length = 0; |
5506 char *md5 = NULL; | |
5507 | |
5842 | 5508 va_start(ap, fr); |
5509 type = va_arg(ap, int); | |
5892 | 5510 |
5511 switch(type) { | |
5512 case 0x0000: | |
5513 case 0x0001: { | |
5514 flags = va_arg(ap, int); | |
5515 length = va_arg(ap, int); | |
5516 md5 = va_arg(ap, char *); | |
5517 | |
5518 if (flags == 0x41) { | |
5519 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON) && !od->iconconnecting) { | |
5520 od->iconconnecting = TRUE; | |
5521 od->set_icon = TRUE; | |
5522 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
5523 } else { | |
6039 | 5524 struct stat st; |
5525 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
5526 if (iconfile == NULL) { | |
5527 /* Set an empty icon, or something */ | |
5528 } else if (!stat(iconfile, &st)) { | |
5529 char *buf = g_malloc(st.st_size); | |
5530 FILE *file = fopen(iconfile, "rb"); | |
5531 if (file) { | |
5532 fread(buf, 1, st.st_size, file); | |
5533 fclose(file); | |
5534 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5535 "Uploading icon to icon server\n"); | |
6879 | 5536 aim_bart_upload(od->sess, buf, st.st_size); |
5892 | 5537 } else |
5538 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 5539 "Can't open buddy icon file!\n"); |
5540 g_free(buf); | |
5541 } else { | |
5542 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5543 "Can't stat buddy icon file!\n"); | |
5892 | 5544 } |
5545 } | |
5893 | 5546 } else if (flags == 0x81) |
5547 aim_ssi_seticon(od->sess, md5, length); | |
5892 | 5548 } break; |
5549 | |
5550 case 0x0002: { /* We just set an "available" message? */ | |
5551 } break; | |
5552 } | |
5553 | |
5842 | 5554 va_end(ap); |
5844 | 5555 |
5556 return 0; | |
5842 | 5557 } |
5892 | 5558 |
3952 | 5559 /* |
4617 | 5560 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5561 */ |
4617 | 5562 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5563 GaimConnection *gc = sess->aux_data; |
7283 | 5564 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5565 GaimConversation *cnv; |
2086 | 5566 struct direct_im *dim; |
5567 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5568 char *sn; |
4617 | 5569 va_list ap; |
5570 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5571 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5572 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5573 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5574 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5575 va_end(ap); |
5576 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5577 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5578 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5579 |
4617 | 5580 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5581 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5582 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5583 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5584 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5585 |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5586 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
|
5587 gaim_input_remove(dim->watcher); |
2086 | 5588 dim->conn = newconn; |
4617 | 5589 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5590 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5591 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5592 g_free(sn); |
6982 | 5593 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
2086 | 5594 |
4617 | 5595 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5596 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
6982 | 5597 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_odc_update_ui, 0); |
4617 | 5598 |
2993 | 5599 return 1; |
5600 } | |
5601 | |
6982 | 5602 /* |
5603 * This is called when each chunk of an image is received. It can be used to | |
5604 * update a progress bar, or to eat lots of dry cat food. Wet cat food is | |
5605 * nasty, you sicko. | |
5606 */ | |
5607 static int gaim_odc_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2993 | 5608 va_list ap; |
5609 char *sn; | |
5610 double percent; | |
5575 | 5611 GaimConnection *gc = sess->aux_data; |
7283 | 5612 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5613 GaimConversation *c; |
2993 | 5614 struct direct_im *dim; |
5615 | |
5616 va_start(ap, fr); | |
5617 sn = va_arg(ap, char *); | |
5618 percent = va_arg(ap, double); | |
5619 va_end(ap); | |
6873 | 5620 |
2994 | 5621 if (!(dim = find_direct_im(od, sn))) |
5622 return 1; | |
3059 | 5623 if (dim->watcher) { |
5624 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5625 dim->watcher = 0; | |
5626 } | |
6982 | 5627 /* XXX is this really necessary? */ |
7082
25a616f16b6c
[gaim-migrate @ 7647]
Christian Hammond <chipx86@chipx86.com>
parents:
7080
diff
changeset
|
5628 gaim_core_mainloop_finish_events(); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5629 |
6982 | 5630 c = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
6873 | 5631 if (c != NULL) |
5632 gaim_conversation_update_progress(c, percent); | |
2993 | 5633 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5634 oscar_callback, dim->conn); | |
2086 | 5635 |
5636 return 1; | |
5637 } | |
5638 | |
6982 | 5639 /* |
5640 * This is called after a direct IM has been received in its entirety. This | |
5641 * function is passed a long chunk of data which contains the IM with any | |
5642 * data chunks (images) appended to it. | |
5643 * | |
5644 * This function rips out all the data chunks and creates an imgstore for | |
5645 * each one. In order to do this, it first goes through the IM and takes | |
5646 * out all the IMG tags. When doing so, it rewrites the original IMG tag | |
5647 * with one compatable with the imgstore Gaim core code. For each one, we | |
5648 * then read in chunks of data from the end of the message and actually | |
5649 * create the img store using the given data. | |
5650 * | |
5651 * For somewhat easy reference, here's a sample message | |
5652 * (without the whitespace and asterisks): | |
5653 * | |
5654 * <HTML><BODY BGCOLOR="#ffffff"> | |
5655 * <FONT LANG="0"> | |
5656 * This is a really stupid picture:<BR> | |
5657 * <IMG SRC="Sample.jpg" ID="1" WIDTH="283" HEIGHT="212" DATASIZE="9894"><BR> | |
5658 * Yeah it is<BR> | |
5659 * Here is another one:<BR> | |
5660 * <IMG SRC="Soap Bubbles.bmp" ID="2" WIDTH="256" HEIGHT="256" DATASIZE="65978"> | |
5661 * </FONT> | |
5662 * </BODY></HTML> | |
5663 * <BINARY> | |
5664 * <DATA ID="1" SIZE="9894">datadatadatadata</DATA> | |
5665 * <DATA ID="2" SIZE="65978">datadatadatadata</DATA> | |
5666 * </BINARY> | |
5667 */ | |
4617 | 5668 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5669 GaimConnection *gc = sess->aux_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5670 GaimConvImFlags imflags = 0; |
6982 | 5671 GString *newmsg = g_string_new(""); |
5672 GSList *images = NULL; | |
2086 | 5673 va_list ap; |
6982 | 5674 const char *sn, *msg, *msgend, *binary; |
5675 size_t len; | |
5676 int encoding, isawaymsg; | |
2086 | 5677 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5678 va_start(ap, fr); |
6982 | 5679 sn = va_arg(ap, const char *); |
5680 msg = va_arg(ap, const char *); | |
5681 len = va_arg(ap, size_t); | |
3952 | 5682 encoding = va_arg(ap, int); |
4870 | 5683 isawaymsg = va_arg(ap, int); |
2086 | 5684 va_end(ap); |
6982 | 5685 msgend = msg + len; |
2086 | 5686 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5687 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5688 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5689 |
4870 | 5690 if (isawaymsg) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5691 imflags |= GAIM_CONV_IM_AUTO_RESP; |
4870 | 5692 |
6982 | 5693 /* message has a binary trailer */ |
5694 if ((binary = gaim_strcasestr(msg, "<binary>"))) { | |
5695 GData *attribs; | |
5696 const char *tmp, *start, *end, *last = NULL; | |
5697 | |
5698 tmp = msg; | |
5699 | |
5700 /* for each valid image tag... */ | |
5701 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5702 const char *id, *src, *datasize; | |
5703 const char *tag = NULL, *data = NULL; | |
5704 size_t size; | |
5705 int imgid = 0; | |
5706 | |
5707 /* update the location of the last img tag */ | |
5708 last = end; | |
5709 | |
5710 /* grab attributes */ | |
5711 id = g_datalist_get_data(&attribs, "id"); | |
5712 src = g_datalist_get_data(&attribs, "src"); | |
5713 datasize = g_datalist_get_data(&attribs, "datasize"); | |
5714 | |
5715 /* if we have id & datasize, build the data tag */ | |
5716 if (id && datasize) | |
5717 tag = g_strdup_printf("<data id=\"%s\" size=\"%s\">", id, datasize); | |
5718 | |
5719 /* if we have a tag, find the start of the data */ | |
5720 if (tag && (data = gaim_strcasestr(binary, tag))) | |
5721 data += strlen(tag); | |
5722 | |
5723 /* check the data is here and store it */ | |
5724 if (data + (size = atoi(datasize)) <= msgend) | |
5725 imgid = gaim_imgstore_add(data, size, src); | |
5726 | |
5727 /* if we have a stored image... */ | |
5728 if (imgid) { | |
5729 /* append the message up to the tag */ | |
5730 newmsg = g_string_append_len(newmsg, tmp, start - tmp); | |
5731 | |
5732 /* write the new image tag */ | |
5733 g_string_append_printf(newmsg, "<IMG ID=\"%d\">", imgid); | |
5734 | |
5735 /* and record the image number */ | |
5736 images = g_slist_append(images, GINT_TO_POINTER(imgid)); | |
5737 } else { | |
5738 /* otherwise, copy up to the end of the tag */ | |
5739 newmsg = g_string_append_len(newmsg, tmp, (end + 1) - tmp); | |
5740 } | |
5741 | |
5742 /* clear the attribute list */ | |
5743 g_datalist_clear(&attribs); | |
5744 | |
5745 /* continue from the end of the tag */ | |
5746 tmp = end + 1; | |
5747 } | |
5748 | |
5749 /* append any remaining message data (without the > :-) */ | |
5750 if (last++ && (last < binary)) | |
5751 newmsg = g_string_append_len(newmsg, last, binary - last); | |
5752 | |
5753 /* set the flag if we caught any images */ | |
5754 if (images) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5755 imflags |= GAIM_CONV_IM_IMAGES; |
6982 | 5756 } else { |
5757 g_string_append_len(newmsg, msg, len); | |
5758 } | |
5759 | |
4617 | 5760 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
6982 | 5761 serv_got_im(gc, sn, newmsg->str, imflags, time(NULL)); |
5762 | |
5763 /* free up the message */ | |
5764 g_string_free(newmsg, TRUE); | |
5765 | |
5766 /* unref any images we allocated */ | |
5767 if (images) { | |
5768 GSList *tmp; | |
5769 int id; | |
5770 | |
5771 for (tmp = images; tmp != NULL; tmp = tmp->next) { | |
5772 id = GPOINTER_TO_INT(tmp->data); | |
5773 gaim_imgstore_unref(id); | |
5774 } | |
5775 | |
5776 g_slist_free(images); | |
5777 } | |
2086 | 5778 |
5779 return 1; | |
5780 } | |
5781 | |
4617 | 5782 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5783 va_list ap; |
5784 char *sn; | |
2993 | 5785 int typing; |
5575 | 5786 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5787 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5788 va_start(ap, fr); |
2086 | 5789 sn = va_arg(ap, char *); |
2993 | 5790 typing = va_arg(ap, int); |
2086 | 5791 va_end(ap); |
5792 | |
4870 | 5793 if (typing == 0x0002) { |
2993 | 5794 /* 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
|
5795 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5796 "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
|
5797 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
4870 | 5798 } else if (typing == 0x0001) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
5799 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
4870 | 5800 else |
4342 | 5801 serv_got_typing_stopped(gc, sn); |
2086 | 5802 return 1; |
5803 } | |
5804 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5805 static int gaim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *message, GaimConvImFlags imflags) { |
6982 | 5806 char *buf; |
5807 size_t len; | |
5808 int ret; | |
5809 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5810 if (imflags & GAIM_CONV_IM_IMAGES) { |
6982 | 5811 GString *msg = g_string_new(""); |
5812 GString *data = g_string_new("<BINARY>"); | |
5813 GData *attribs; | |
5814 const char *tmp, *start, *end, *last = NULL; | |
5815 int oscar_id = 0; | |
5816 | |
5817 tmp = message; | |
5818 | |
5819 /* for each valid IMG tag... */ | |
5820 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5821 GaimStoredImage *image = NULL; | |
5822 const char *id; | |
5823 | |
5824 last = end; | |
5825 id = g_datalist_get_data(&attribs, "id"); | |
5826 | |
5827 /* ... if it refers to a valid gaim image ... */ | |
5828 if (id && (image = gaim_imgstore_get(atoi(id)))) { | |
5829 /* ... append the message from start to the tag ... */ | |
5830 msg = g_string_append_len(msg, tmp, start - tmp); | |
5831 oscar_id++; | |
5832 | |
5833 /* ... insert a new img tag with the oscar id ... */ | |
5834 if (image->filename) | |
5835 g_string_append_printf(msg, | |
5836 "<IMG SRC=\"file://%s\" ID=\"%d\" DATASIZE=\"%d\">", | |
5837 image->filename, oscar_id, image->size); | |
5838 else | |
5839 g_string_append_printf(msg, | |
5840 "<IMG ID=\"%d\" DATASIZE=\"%d\">", | |
5841 oscar_id, image->size); | |
5842 | |
5843 /* ... and append the data to the binary section ... */ | |
5844 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%d\">", | |
5845 oscar_id, image->size); | |
5846 data = g_string_append_len(data, image->data, image->size); | |
5847 data = g_string_append(data, "</DATA>"); | |
5848 } else { | |
5849 /* ... otherwise, allow the possibly invalid img tag through. */ | |
5850 /* should we do something else? */ | |
5851 msg = g_string_append_len(msg, tmp, (end + 1) - tmp); | |
5852 } | |
5853 | |
5854 g_datalist_clear(&attribs); | |
5855 | |
5856 /* continue from the end of the tag */ | |
5857 tmp = end + 1; | |
5858 } | |
5859 | |
5860 /* append any remaining message data (without the > :-) */ | |
5861 if (last++ && *last) | |
5862 msg = g_string_append(msg, last); | |
5863 | |
5864 /* if we inserted any images in the binary section, append it */ | |
5865 if (oscar_id) { | |
5866 msg = g_string_append_len(msg, data->str, data->len); | |
5867 msg = g_string_append(msg, "</BINARY>"); | |
5868 } | |
5869 | |
5870 len = msg->len; | |
5871 buf = msg->str; | |
5872 g_string_free(msg, FALSE); | |
5873 g_string_free(data, TRUE); | |
5874 } else { | |
5875 len = strlen(message); | |
5876 buf = g_memdup(message, len+1); | |
5877 } | |
5878 | |
5879 /* 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
|
5880 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
6982 | 5881 ret = aim_odc_send_im(sess, conn, buf, len, 0, 1); |
5882 else | |
5883 ret = aim_odc_send_im(sess, conn, buf, len, 0, 0); | |
5884 | |
5885 g_free(buf); | |
5886 | |
5887 return ret; | |
5888 } | |
5889 | |
2086 | 5890 struct ask_do_dir_im { |
5891 char *who; | |
5575 | 5892 GaimConnection *gc; |
2086 | 5893 }; |
5894 | |
3730 | 5895 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 5896 g_free(data->who); |
2086 | 5897 g_free(data); |
5898 } | |
5899 | |
3730 | 5900 static void oscar_direct_im(struct ask_do_dir_im *data) { |
5575 | 5901 GaimConnection *gc = data->gc; |
7283 | 5902 OscarData *od; |
2086 | 5903 struct direct_im *dim; |
5904 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
5905 if (!g_list_find(gaim_connections_get_all(), gc)) { |
5136 | 5906 g_free(data->who); |
4244 | 5907 g_free(data); |
5908 return; | |
5909 } | |
5910 | |
7283 | 5911 od = (OscarData *)gc->proto_data; |
4244 | 5912 |
2086 | 5913 dim = find_direct_im(od, data->who); |
5914 if (dim) { | |
3008 | 5915 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
5916 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
5917 gaim_input_remove(dim->watcher); | |
5918 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5919 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5920 "Gave up on old direct IM, trying again\n"); |
3008 | 5921 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5922 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 5923 g_free(data->who); |
4244 | 5924 g_free(data); |
3008 | 5925 return; |
5926 } | |
2086 | 5927 } |
5928 dim = g_new0(struct direct_im, 1); | |
5929 dim->gc = gc; | |
5930 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
5931 | |
4617 | 5932 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 5933 if (dim->conn != NULL) { |
5934 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5935 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 5936 oscar_callback, dim->conn); |
4617 | 5937 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
5938 gaim_odc_initiate, 0); | |
2086 | 5939 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5940 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 5941 g_free(dim); |
5942 } | |
4244 | 5943 |
5136 | 5944 g_free(data->who); |
4244 | 5945 g_free(data); |
2086 | 5946 } |
5947 | |
5575 | 5948 static void oscar_ask_direct_im(GaimConnection *gc, const char *who) { |
5420 | 5949 gchar *buf; |
2086 | 5950 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 5951 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
5952 data->gc = gc; |
5420 | 5953 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
|
5954 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5955 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5956 _("Because this reveals your IP address, it " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5957 "may be considered a privacy risk. Do you " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5958 "wish to continue?"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5959 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5960 _("Connect"), G_CALLBACK(oscar_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5961 _("Cancel"), G_CALLBACK(oscar_cancel_direct_im)); |
5420 | 5962 g_free(buf); |
2086 | 5963 } |
5964 | |
5575 | 5965 static void oscar_set_permit_deny(GaimConnection *gc) { |
5966 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 5967 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 5968 #ifdef NOSSI |
4770 | 5969 GSList *list, *g = gaim_blist_groups(), *g1; |
4230 | 5970 char buf[MAXMSGLEN]; |
5971 int at; | |
5972 | |
5575 | 5973 switch(account->perm_deny) { |
4687 | 5974 case 1: |
5575 | 5975 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gaim_account_get_username(account)); |
4230 | 5976 break; |
5977 case 2: | |
5575 | 5978 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gaim_account_get_username(account)); |
4230 | 5979 break; |
5980 case 3: | |
5575 | 5981 list = account->permit; |
4230 | 5982 at = 0; |
5983 while (list) { | |
5984 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5985 list = list->next; | |
5986 } | |
5987 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
5988 break; | |
5989 case 4: | |
5575 | 5990 list = account->deny; |
4230 | 5991 at = 0; |
5992 while (list) { | |
5993 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
5994 list = list->next; | |
5995 } | |
5996 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
5997 break; | |
5998 case 5: | |
4770 | 5999 g1 = g; |
4230 | 6000 at = 0; |
4770 | 6001 while (g1) { |
6002 list = gaim_blist_members((struct group *)g->data); | |
6003 GSList list1 = list; | |
6004 while (list1) { | |
6005 struct buddy *b = list1->data; | |
5575 | 6006 if(b->account == account) |
4349 | 6007 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", b->name); |
4770 | 6008 list1 = list1->next; |
2995 | 6009 } |
4770 | 6010 g_slist_free(list); |
6011 g1 = g1->next; | |
4349 | 6012 } |
4770 | 6013 g_slist_free(g); |
4230 | 6014 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
6015 break; | |
6016 default: | |
6017 break; | |
2086 | 6018 } |
4230 | 6019 signoff_blocked(gc); |
6020 #else | |
6021 if (od->sess->ssi.received_data) | |
5575 | 6022 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); |
4230 | 6023 #endif |
2086 | 6024 } |
6025 | |
5575 | 6026 static void oscar_add_permit(GaimConnection *gc, const char *who) { |
4269 | 6027 #ifdef NOSSI |
4491 | 6028 if (gc->account->permdeny == 3) |
4269 | 6029 oscar_set_permit_deny(gc); |
6030 #else | |
7283 | 6031 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6032 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 6033 if (od->sess->ssi.received_data) |
4889 | 6034 aim_ssi_addpermit(od->sess, who); |
4230 | 6035 #endif |
2086 | 6036 } |
6037 | |
5575 | 6038 static void oscar_add_deny(GaimConnection *gc, const char *who) { |
4269 | 6039 #ifdef NOSSI |
4491 | 6040 if (gc->account->permdeny == 4) |
4269 | 6041 oscar_set_permit_deny(gc); |
6042 #else | |
7283 | 6043 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6044 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 6045 if (od->sess->ssi.received_data) |
4889 | 6046 aim_ssi_adddeny(od->sess, who); |
4230 | 6047 #endif |
2086 | 6048 } |
6049 | |
5575 | 6050 static void oscar_rem_permit(GaimConnection *gc, const char *who) { |
4269 | 6051 #ifdef NOSSI |
4491 | 6052 if (gc->account->permdeny == 3) |
4269 | 6053 oscar_set_permit_deny(gc); |
6054 #else | |
7283 | 6055 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6056 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 6057 if (od->sess->ssi.received_data) |
4889 | 6058 aim_ssi_delpermit(od->sess, who); |
4230 | 6059 #endif |
2086 | 6060 } |
6061 | |
5575 | 6062 static void oscar_rem_deny(GaimConnection *gc, const char *who) { |
4269 | 6063 #ifdef NOSSI |
4491 | 6064 if (gc->account->permdeny == 4) |
4269 | 6065 oscar_set_permit_deny(gc); |
6066 #else | |
7283 | 6067 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6068 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 6069 if (od->sess->ssi.received_data) |
4889 | 6070 aim_ssi_deldeny(od->sess, who); |
4230 | 6071 #endif |
2086 | 6072 } |
6073 | |
5575 | 6074 static GList *oscar_away_states(GaimConnection *gc) |
2086 | 6075 { |
7283 | 6076 OscarData *od = gc->proto_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6077 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6078 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6079 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6080 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6081 |
4333 | 6082 m = g_list_append(m, _("Online")); |
6083 m = g_list_append(m, _("Away")); | |
6084 m = g_list_append(m, _("Do Not Disturb")); | |
6085 m = g_list_append(m, _("Not Available")); | |
6086 m = g_list_append(m, _("Occupied")); | |
6087 m = g_list_append(m, _("Free For Chat")); | |
6088 m = g_list_append(m, _("Invisible")); | |
6089 | |
6090 return m; | |
6091 } | |
6092 | |
7172 | 6093 static void oscar_ssi_editcomment(struct name_data *data, const char *text) { |
7283 | 6094 OscarData *od = data->gc->proto_data; |
7172 | 6095 GaimBuddy *b; |
6096 GaimGroup *g; | |
6097 | |
6098 if (!(b = gaim_find_buddy(gaim_connection_get_account(data->gc), data->name))) { | |
6099 oscar_free_name_data(data); | |
6100 return; | |
6101 } | |
6102 | |
6103 if (!(g = gaim_find_buddys_group(b))) { | |
6104 oscar_free_name_data(data); | |
6105 return; | |
6106 } | |
6107 | |
6108 aim_ssi_editcomment(od->sess, g->name, data->name, text); | |
6109 oscar_free_name_data(data); | |
6110 } | |
6111 | |
6112 static void oscar_buddycb_edit_comment(GaimConnection *gc, const char *name) { | |
7283 | 6113 OscarData *od = gc->proto_data; |
7172 | 6114 struct name_data *data = g_new(struct name_data, 1); |
6115 GaimBuddy *b; | |
6116 GaimGroup *g; | |
6117 char *comment; | |
6118 gchar *comment_utf8; | |
6119 | |
6120 if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name))) | |
6121 return; | |
6122 if (!(g = gaim_find_buddys_group(b))) | |
6123 return; | |
6124 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name); | |
6125 comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL; | |
6126 | |
6127 data->gc = gc; | |
6128 data->name = g_strdup(name); | |
6129 data->nick = NULL; | |
6130 | |
6131 gaim_request_input(gc, NULL, _("Buddy Comment:"), NULL, | |
6132 comment_utf8, TRUE, FALSE, | |
6133 _("OK"), G_CALLBACK(oscar_ssi_editcomment), | |
6134 _("Cancel"), G_CALLBACK(oscar_free_name_data), | |
6135 data); | |
6136 | |
6137 free(comment); | |
6138 g_free(comment_utf8); | |
6139 } | |
6140 | |
5575 | 6141 static GList *oscar_buddy_menu(GaimConnection *gc, const char *who) { |
7283 | 6142 OscarData *od = gc->proto_data; |
4333 | 6143 GList *m = NULL; |
6144 struct proto_buddy_menu *pbm; | |
6145 | |
7172 | 6146 pbm = g_new0(struct proto_buddy_menu, 1); |
6147 pbm->label = _("Edit Buddy Comment"); | |
6148 pbm->callback = oscar_buddycb_edit_comment; | |
6149 pbm->gc = gc; | |
6150 m = g_list_append(m, pbm); | |
6151 | |
4333 | 6152 if (od->icq) { |
4624 | 6153 #if 0 |
4333 | 6154 pbm = g_new0(struct proto_buddy_menu, 1); |
6155 pbm->label = _("Get Status Msg"); | |
4969 | 6156 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 6157 pbm->gc = gc; |
6158 m = g_list_append(m, pbm); | |
4624 | 6159 #endif |
4333 | 6160 } else { |
6695 | 6161 GaimBuddy *b = gaim_find_buddy(gc->account, who); |
7011 | 6162 aim_userinfo_t *userinfo; |
5975 | 6163 |
6164 if (b) | |
7045 | 6165 userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 6166 |
6167 if (b && userinfo && aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), who) && GAIM_BUDDY_IS_ONLINE(b)) { | |
6168 if (userinfo->capabilities & AIM_CAPS_DIRECTIM) { | |
5917 | 6169 pbm = g_new0(struct proto_buddy_menu, 1); |
6170 pbm->label = _("Direct IM"); | |
6171 pbm->callback = oscar_ask_direct_im; | |
6172 pbm->gc = gc; | |
6173 m = g_list_append(m, pbm); | |
6174 } | |
6175 | |
7011 | 6176 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { |
5917 | 6177 pbm = g_new0(struct proto_buddy_menu, 1); |
6178 pbm->label = _("Send File"); | |
6179 pbm->callback = oscar_ask_sendfile; | |
6180 pbm->gc = gc; | |
6181 m = g_list_append(m, pbm); | |
6182 } | |
4826 | 6183 #if 0 |
7011 | 6184 if (userinfo->capabilities & AIM_CAPS_GETFILE) { |
5917 | 6185 pbm = g_new0(struct proto_buddy_menu, 1); |
6186 pbm->label = _("Get File"); | |
6187 pbm->callback = oscar_ask_getfile; | |
6188 pbm->gc = gc; | |
6189 m = g_list_append(m, pbm); | |
6190 } | |
4826 | 6191 #endif |
4333 | 6192 } |
5131 | 6193 } |
5197 | 6194 |
5131 | 6195 if (od->sess->ssi.received_data) { |
6196 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
6197 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
6198 pbm = g_new0(struct proto_buddy_menu, 1); | |
6873 | 6199 pbm->label = _("Re-request Authorization"); |
5131 | 6200 pbm->callback = gaim_auth_sendrequest; |
6201 pbm->gc = gc; | |
6202 m = g_list_append(m, pbm); | |
4333 | 6203 } |
4916 | 6204 } |
6205 | |
4333 | 6206 return m; |
6207 } | |
6208 | |
5575 | 6209 static void oscar_format_screenname(GaimConnection *gc, const char *nick) { |
7283 | 6210 OscarData *od = gc->proto_data; |
5575 | 6211 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), nick)) { |
4333 | 6212 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
6213 od->setnick = TRUE; | |
6214 od->newsn = g_strdup(nick); | |
6215 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6216 } else { | |
6217 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
6218 } | |
6219 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6220 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6221 _("Screenname formatting can change only capitalization and whitespace.")); |
4333 | 6222 } |
6223 } | |
6224 | |
5575 | 6225 static void oscar_show_format_screenname(GaimConnection *gc) |
4333 | 6226 { |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6227 gaim_request_input(gc, NULL, _("New screenname formatting:"), NULL, |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6228 gaim_connection_get_display_name(gc), FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6229 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6230 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6231 gc); |
4333 | 6232 } |
6233 | |
5575 | 6234 static void oscar_confirm_account(GaimConnection *gc) |
4333 | 6235 { |
7283 | 6236 OscarData *od = gc->proto_data; |
4333 | 6237 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6238 | |
6239 if (conn) { | |
6240 aim_admin_reqconfirm(od->sess, conn); | |
6241 } else { | |
6242 od->conf = TRUE; | |
6243 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6244 } | |
6245 } | |
6246 | |
5575 | 6247 static void oscar_show_email(GaimConnection *gc) |
4333 | 6248 { |
7283 | 6249 OscarData *od = gc->proto_data; |
4333 | 6250 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6251 | |
6252 if (conn) { | |
6253 aim_admin_getinfo(od->sess, conn, 0x11); | |
6254 } else { | |
6255 od->reqemail = TRUE; | |
6256 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6257 } | |
6258 } | |
6259 | |
5575 | 6260 static void oscar_change_email(GaimConnection *gc, const char *email) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6261 { |
7283 | 6262 OscarData *od = gc->proto_data; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6263 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
|
6264 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6265 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6266 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6267 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6268 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6269 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6270 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6271 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6272 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6273 |
5575 | 6274 static void oscar_show_change_email(GaimConnection *gc) |
4333 | 6275 { |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6276 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, |
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6277 FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6278 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6279 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6280 gc); |
4333 | 6281 } |
6282 | |
5575 | 6283 static void oscar_show_awaitingauth(GaimConnection *gc) |
4333 | 6284 { |
7283 | 6285 OscarData *od = gc->proto_data; |
4333 | 6286 gchar *nombre, *text, *tmp; |
6695 | 6287 GaimBlistNode *gnode, *cnode, *bnode; |
4333 | 6288 int num=0; |
6289 | |
6873 | 6290 text = g_strdup(""); |
4333 | 6291 |
4785 | 6292 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
6695 | 6293 GaimGroup *group = (GaimGroup *)gnode; |
4785 | 6294 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
6295 continue; | |
6695 | 6296 for (cnode = gnode->child; cnode; cnode = cnode->next) { |
6297 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 6298 continue; |
6695 | 6299 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
6300 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
6301 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
6302 continue; | |
6303 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { | |
6304 if (gaim_get_buddy_alias_only(buddy)) | |
6305 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
6306 else | |
6307 nombre = g_strdup_printf(" %s", buddy->name); | |
6873 | 6308 tmp = g_strdup_printf("%s%s<br>", text, nombre); |
6695 | 6309 g_free(text); |
6310 text = tmp; | |
6311 g_free(nombre); | |
6312 num++; | |
6313 } | |
4333 | 6314 } |
2979 | 6315 } |
4333 | 6316 } |
6317 | |
6318 if (!num) { | |
6319 g_free(text); | |
6873 | 6320 text = g_strdup(_("<i>you are not waiting for authorization</i>")); |
6321 } | |
6322 | |
6323 gaim_notify_formatted(gc, NULL, _("You are awaiting authorization from " | |
6324 "the following buddies"), _("You can re-request " | |
6325 "authorization from these buddies by " | |
6326 "right-clicking on them and selecting " | |
6327 "\"Re-request Authorization.\""), text, NULL, NULL); | |
4333 | 6328 g_free(text); |
2979 | 6329 } |
6330 | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6331 static void search_by_email_cb(GaimConnection *gc, const char *email) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6332 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6333 serv_dir_search(gc, "", "", "", "", "", "", "", email); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6334 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6335 |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6336 static void oscar_show_find_email(GaimConnection *gc) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6337 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6338 gaim_request_input(gc, _("Find Buddy by E-mail"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6339 _("Search for a buddy by e-mail address"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6340 _("Type the e-mail address of the buddy you are " |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6341 "searching for."), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6342 NULL, FALSE, FALSE, |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6343 _("Search"), G_CALLBACK(search_by_email_cb), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6344 _("Cancel"), NULL, gc); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6345 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6346 |
5975 | 6347 #if 0 |
5917 | 6348 static void oscar_setavailmsg(GaimConnection *gc, char *text) { |
7283 | 6349 OscarData *od = (OscarData *)gc->proto_data; |
5917 | 6350 |
6351 aim_srv_setavailmsg(od->sess, text); | |
6352 } | |
6353 | |
6354 static void oscar_show_setavailmsg(GaimConnection *gc) | |
6355 { | |
6356 gaim_request_input(gc, NULL, _("Available Message:"), | |
7032 | 6357 NULL, "Please talk to me, I'm lonely! (and single)", TRUE, FALSE, |
5917 | 6358 _("OK"), G_CALLBACK(oscar_setavailmsg), |
6359 _("Cancel"), NULL, | |
6360 gc); | |
6361 } | |
5975 | 6362 #endif |
5917 | 6363 |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6364 static void oscar_show_set_info(GaimConnection *gc) |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6365 { |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6366 gaim_account_request_change_user_info(gaim_connection_get_account(gc)); |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6367 } |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6368 |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6369 static void oscar_change_pass(GaimConnection *gc) |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6370 { |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6371 gaim_account_request_change_password(gaim_connection_get_account(gc)); |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6372 } |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6373 |
5575 | 6374 static void oscar_show_chpassurl(GaimConnection *gc) |
4333 | 6375 { |
7283 | 6376 OscarData *od = gc->proto_data; |
5575 | 6377 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
|
6378 gaim_notify_uri(gc, substituted); |
5517 | 6379 g_free(substituted); |
4333 | 6380 } |
6381 | |
7026 | 6382 static void oscar_show_imforwardingurl(GaimConnection *gc) |
6383 { | |
6384 gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); | |
6385 } | |
6386 | |
5842 | 6387 static void oscar_set_icon(GaimConnection *gc, const char *iconfile) |
6388 { | |
7283 | 6389 OscarData *od = gc->proto_data; |
5844 | 6390 aim_session_t *sess = od->sess; |
5842 | 6391 FILE *file; |
6392 struct stat st; | |
5844 | 6393 |
6039 | 6394 if (iconfile == NULL) { |
6395 /* Set an empty icon, or something */ | |
6396 } else if (!stat(iconfile, &st)) { | |
5842 | 6397 char *buf = g_malloc(st.st_size); |
6398 file = fopen(iconfile, "rb"); | |
6399 if (file) { | |
6052 | 6400 md5_state_t *state; |
6039 | 6401 char md5[16]; |
5842 | 6402 int len = fread(buf, 1, st.st_size, file); |
6039 | 6403 fclose(file); |
6052 | 6404 state = g_malloc(sizeof(md5_state_t)); |
5842 | 6405 md5_init(state); |
6406 md5_append(state, buf, len); | |
6407 md5_finish(state, md5); | |
6408 g_free(state); | |
6409 aim_ssi_seticon(sess, md5, 16); | |
6410 } else | |
6411 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6412 "Can't open buddy icon file!\n"); | |
6413 g_free(buf); | |
6414 } else | |
6415 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6416 "Can't stat buddy icon file!\n"); | |
6417 } | |
6418 | |
6419 | |
5575 | 6420 static GList *oscar_actions(GaimConnection *gc) |
2086 | 6421 { |
7283 | 6422 OscarData *od = gc->proto_data; |
4333 | 6423 struct proto_actions_menu *pam; |
6424 GList *m = NULL; | |
6425 | |
6426 pam = g_new0(struct proto_actions_menu, 1); | |
6427 pam->label = _("Set User Info"); | |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6428 pam->callback = oscar_show_set_info; |
4333 | 6429 pam->gc = gc; |
6430 m = g_list_append(m, pam); | |
6431 | |
5917 | 6432 #if 0 |
6433 pam = g_new0(struct proto_actions_menu, 1); | |
6434 pam->label = _("Set Available Message"); | |
6435 pam->callback = oscar_show_setavailmsg; | |
6436 pam->gc = gc; | |
6437 m = g_list_append(m, pam); | |
6438 #endif | |
6439 | |
5238 | 6440 pam = g_new0(struct proto_actions_menu, 1); |
6441 pam->label = _("Change Password"); | |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6442 pam->callback = oscar_change_pass; |
5238 | 6443 pam->gc = gc; |
6444 m = g_list_append(m, pam); | |
4617 | 6445 |
6446 if (od->sess->authinfo->chpassurl) { | |
6447 pam = g_new0(struct proto_actions_menu, 1); | |
6448 pam->label = _("Change Password (URL)"); | |
6449 pam->callback = oscar_show_chpassurl; | |
6450 pam->gc = gc; | |
6451 m = g_list_append(m, pam); | |
6452 } | |
6453 | |
7026 | 6454 if (od->sess->authinfo->chpassurl) { |
6455 pam = g_new0(struct proto_actions_menu, 1); | |
6456 pam->label = _("Configure IM Forwarding (URL)"); | |
6457 pam->callback = oscar_show_imforwardingurl; | |
6458 pam->gc = gc; | |
6459 m = g_list_append(m, pam); | |
6460 } | |
6461 | |
5238 | 6462 if (!od->icq) { |
4617 | 6463 /* AIM actions */ |
6464 m = g_list_append(m, NULL); | |
4333 | 6465 |
5917 | 6466 pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6467 pam->label = _("Format Screenname"); |
5844 | 6468 pam->callback = oscar_show_format_screenname; |
4333 | 6469 pam->gc = gc; |
6470 m = g_list_append(m, pam); | |
6471 | |
6472 pam = g_new0(struct proto_actions_menu, 1); | |
6473 pam->label = _("Confirm Account"); | |
6474 pam->callback = oscar_confirm_account; | |
6475 pam->gc = gc; | |
6476 m = g_list_append(m, pam); | |
6477 | |
6478 pam = g_new0(struct proto_actions_menu, 1); | |
6479 pam->label = _("Display Current Registered Address"); | |
6480 pam->callback = oscar_show_email; | |
6481 pam->gc = gc; | |
6482 m = g_list_append(m, pam); | |
6483 | |
6484 pam = g_new0(struct proto_actions_menu, 1); | |
6485 pam->label = _("Change Current Registered Address"); | |
6486 pam->callback = oscar_show_change_email; | |
6487 pam->gc = gc; | |
6488 m = g_list_append(m, pam); | |
2086 | 6489 } |
4333 | 6490 |
6491 m = g_list_append(m, NULL); | |
6492 | |
6493 pam = g_new0(struct proto_actions_menu, 1); | |
6494 pam->label = _("Show Buddies Awaiting Authorization"); | |
6495 pam->callback = oscar_show_awaitingauth; | |
6496 pam->gc = gc; | |
6497 m = g_list_append(m, pam); | |
6498 | |
2086 | 6499 m = g_list_append(m, NULL); |
4333 | 6500 |
6501 pam = g_new0(struct proto_actions_menu, 1); | |
6502 pam->label = _("Search for Buddy by Email"); | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6503 pam->callback = oscar_show_find_email; |
4333 | 6504 pam->gc = gc; |
6505 m = g_list_append(m, pam); | |
6506 | |
4336 | 6507 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6508 pam->label = _("Search for Buddy by Information"); |
6509 pam->callback = show_find_info; | |
6510 pam->gc = gc; | |
4336 | 6511 m = g_list_append(m, pam); */ |
2086 | 6512 |
6513 return m; | |
6514 } | |
6515 | |
5575 | 6516 static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) |
2086 | 6517 { |
7283 | 6518 OscarData *od = gc->proto_data; |
4617 | 6519 |
6520 if (od->icq) { | |
6521 aim_icq_changepasswd(od->sess, new); | |
2086 | 6522 } else { |
4617 | 6523 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6524 if (conn) { | |
6525 aim_admin_changepasswd(od->sess, conn, new, old); | |
6526 } else { | |
6527 od->chpass = TRUE; | |
6528 od->oldp = g_strdup(old); | |
6529 od->newp = g_strdup(new); | |
6530 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6531 } | |
2086 | 6532 } |
6533 } | |
6534 | |
6059 | 6535 static void oscar_convo_closed(GaimConnection *gc, const char *who) |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6536 { |
7283 | 6537 OscarData *od = gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6538 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6539 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6540 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6541 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6542 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6543 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6544 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6545 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6546 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6547 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6548 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6549 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6550 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6551 GAIM_PROTO_OSCAR, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6552 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
|
6553 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6554 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6555 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6556 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6557 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6558 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6559 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6560 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6561 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6562 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6563 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6564 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6565 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6566 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6567 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6568 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6569 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6570 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6571 oscar_set_dir, |
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 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6574 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6575 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6576 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6577 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6578 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6579 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6580 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6581 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6582 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6583 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6584 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6585 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6586 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6587 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6588 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6589 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6590 oscar_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6591 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6592 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6593 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6594 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6595 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6596 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6597 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6598 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6599 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6600 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6601 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6602 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6603 #endif |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6604 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6605 oscar_convo_closed, |
5842 | 6606 NULL, |
6607 oscar_set_icon | |
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 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6610 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6611 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6612 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6613 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6614 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6615 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6616 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6617 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6618 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6619 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6620 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6621 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6622 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6623 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6624 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6625 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6626 NULL, /**< author */ |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
6627 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6628 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6629 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6630 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6631 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6632 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6633 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6634 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6635 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6636 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6637 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6638 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6639 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6640 GaimAccountOption *option; |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6641 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6642 option = gaim_account_option_string_new(_("Auth host"), "server", |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6643 "login.oscar.aol.com"); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6644 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6645 option); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6646 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6647 option = gaim_account_option_int_new(_("Auth port"), "port", 5190); |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6648 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6649 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6650 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6651 my_protocol = plugin; |
2086 | 6652 } |
6653 | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6654 GAIM_INIT_PLUGIN(oscar, init_plugin, info); |