Mercurial > pidgin.yaz
annotate src/protocols/oscar/oscar.c @ 8092:697221d5d0ff
[gaim-migrate @ 8791]
Give a nice little warning if you add an AIM or ICQ buddy with an invalid
name. I'm thinking some of those bug reports on SF about "Could not add
buddy with no name" are caused by this. Hopefully. Sometime before the
next release I'll probably actually remove invalid people from the local
list.
Also recognize the WinAIM Video and Camera caps.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 13 Jan 2004 05:44:37 +0000 |
parents | abee07bc573f |
children | 8633dc570442 |
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 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
54 |
2086 | 55 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" |
56 | |
7283 | 57 #define OSCAR_CONNECT_STEPS 6 |
58 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
59 static GaimPlugin *my_protocol = NULL; |
4249 | 60 |
7376 | 61 static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_INTEROPERATE | AIM_CAPS_ICHAT; |
62 static int caps_icq = AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_ICQUTF8 | AIM_CAPS_INTEROPERATE | AIM_CAPS_ICHAT; | |
3458 | 63 |
4665 | 64 static fu8_t features_aim[] = {0x01, 0x01, 0x01, 0x02}; |
65 static fu8_t features_icq[] = {0x01, 0x06}; | |
2086 | 66 |
7283 | 67 typedef struct _OscarData OscarData; |
68 struct _OscarData { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
69 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
70 aim_conn_t *conn; |
2086 | 71 |
72 guint cnpa; | |
73 guint paspa; | |
3694 | 74 guint emlpa; |
4804 | 75 guint icopa; |
2086 | 76 |
4823 | 77 gboolean iconconnecting; |
5842 | 78 gboolean set_icon; |
4823 | 79 |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
80 GSList *create_rooms; |
2086 | 81 |
82 gboolean conf; | |
83 gboolean reqemail; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
84 gboolean setemail; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
85 char *email; |
2979 | 86 gboolean setnick; |
87 char *newsn; | |
2086 | 88 gboolean chpass; |
89 char *oldp; | |
90 char *newp; | |
5842 | 91 |
2086 | 92 GSList *oscar_chats; |
93 GSList *direct_ims; | |
3630 | 94 GSList *file_transfers; |
4738 | 95 GHashTable *buddyinfo; |
4804 | 96 GSList *requesticon; |
2086 | 97 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
98 gboolean killme; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
99 gboolean icq; |
4804 | 100 guint icontimer; |
5968 | 101 guint getblisttimer; |
2993 | 102 |
103 struct { | |
4230 | 104 guint maxwatchers; /* max users who can watch you */ |
2993 | 105 guint maxbuddies; /* max users you can watch */ |
4230 | 106 guint maxgroups; /* max groups in server list */ |
2993 | 107 guint maxpermits; /* max users on permit list */ |
108 guint maxdenies; /* max users on deny list */ | |
109 guint maxsiglen; /* max size (bytes) of profile */ | |
110 guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
111 } rights; | |
2086 | 112 }; |
113 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
114 struct create_room { |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
115 char *name; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
116 int exchange; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
117 }; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
118 |
2086 | 119 struct chat_connection { |
120 char *name; | |
121 char *show; /* AOL did something funny to us */ | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
122 fu16_t exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
123 fu16_t instance; |
2086 | 124 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
|
125 aim_conn_t *conn; |
2086 | 126 int inpa; |
127 int id; | |
5575 | 128 GaimConnection *gc; /* i hate this. */ |
5679 | 129 GaimConversation *cnv; /* bah. */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
130 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
131 int maxvis; |
2086 | 132 }; |
133 | |
134 struct direct_im { | |
5575 | 135 GaimConnection *gc; |
2086 | 136 char name[80]; |
137 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
138 aim_conn_t *conn; |
3008 | 139 gboolean connected; |
2086 | 140 }; |
141 | |
142 struct ask_direct { | |
5575 | 143 GaimConnection *gc; |
2086 | 144 char *sn; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
145 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
146 fu8_t cookie[8]; |
2086 | 147 }; |
148 | |
7011 | 149 /* |
150 * Various PRPL-specific buddy info that we want to keep track of | |
151 * Some other info is maintained by locate.c, and I'd like to move | |
152 * the rest of this to libfaim, mostly im.c | |
153 */ | |
4738 | 154 struct buddyinfo { |
155 gboolean typingnot; | |
6292 | 156 gchar *availmsg; |
6857 | 157 fu32_t ipaddr; |
5836 | 158 |
159 unsigned long ico_me_len; | |
160 unsigned long ico_me_csum; | |
161 time_t ico_me_time; | |
162 gboolean ico_informed; | |
4738 | 163 |
164 unsigned long ico_len; | |
165 unsigned long ico_csum; | |
166 time_t ico_time; | |
167 gboolean ico_need; | |
7406 | 168 gboolean ico_sent; |
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 | |
8076 | 281 /* remove these 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); |
8076 | 284 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message); |
5306 | 285 |
5836 | 286 static void oscar_free_name_data(struct name_data *data) { |
4230 | 287 g_free(data->name); |
288 g_free(data->nick); | |
289 g_free(data); | |
290 } | |
291 | |
5836 | 292 static void oscar_free_buddyinfo(void *data) { |
293 struct buddyinfo *bi = data; | |
6292 | 294 g_free(bi->availmsg); |
5836 | 295 g_free(bi); |
296 } | |
297 | |
5129 | 298 static fu32_t oscar_encoding_check(const char *utf8) |
299 { | |
300 int i = 0; | |
301 fu32_t encodingflag = 0; | |
302 | |
303 /* Determine how we can send this message. Per the warnings elsewhere | |
304 * in this file, these little checks determine the simplest encoding | |
305 * we can use for a given message send using it. */ | |
306 while (utf8[i]) { | |
307 if ((unsigned char)utf8[i] > 0x7f) { | |
308 /* not ASCII! */ | |
309 encodingflag = AIM_IMFLAGS_ISO_8859_1; | |
310 break; | |
311 } | |
312 i++; | |
313 } | |
314 while (utf8[i]) { | |
315 /* ISO-8859-1 is 0x00-0xbf in the first byte | |
316 * followed by 0xc0-0xc3 in the second */ | |
317 if ((unsigned char)utf8[i] < 0x80) { | |
318 i++; | |
319 continue; | |
320 } else if (((unsigned char)utf8[i] & 0xfc) == 0xc0 && | |
321 ((unsigned char)utf8[i + 1] & 0xc0) == 0x80) { | |
322 i += 2; | |
323 continue; | |
324 } | |
325 encodingflag = AIM_IMFLAGS_UNICODE; | |
326 break; | |
327 } | |
328 | |
329 return encodingflag; | |
330 } | |
331 | |
332 static fu32_t oscar_encoding_parse(const char *enc) | |
333 { | |
334 char *charset; | |
335 | |
336 /* If anything goes wrong, fall back on ASCII and print a message */ | |
337 if (enc == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
338 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
339 "Encoding was null, that's odd\n"); |
5129 | 340 return 0; |
341 } | |
342 charset = strstr(enc, "charset="); | |
343 if (charset == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
344 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
345 "No charset specified for info, assuming ASCII\n"); |
5129 | 346 return 0; |
347 } | |
348 charset += 8; | |
349 if (!strcmp(charset, "\"us-ascii\"") || !strcmp(charset, "\"utf-8\"")) { | |
350 /* UTF-8 is our native charset, ASCII is a proper subset */ | |
351 return 0; | |
352 } else if (!strcmp(charset, "\"iso-8859-1\"")) { | |
353 return AIM_IMFLAGS_ISO_8859_1; | |
354 } else if (!strcmp(charset, "\"unicode-2-0\"")) { | |
355 return AIM_IMFLAGS_UNICODE; | |
356 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
357 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
358 "Unrecognized character set '%s', using ASCII\n", charset); |
5129 | 359 return 0; |
360 } | |
361 } | |
362 | |
363 gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen) | |
364 { | |
365 gchar *utf8 = NULL; | |
366 int flags = oscar_encoding_parse(encoding); | |
367 | |
368 switch (flags) { | |
369 case 0: | |
370 utf8 = g_strndup(text, textlen); | |
371 break; | |
372 case AIM_IMFLAGS_ISO_8859_1: | |
373 utf8 = g_convert(text, textlen, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); | |
374 break; | |
375 case AIM_IMFLAGS_UNICODE: | |
376 utf8 = g_convert(text, textlen, "UTF-8", "UCS-2BE", NULL, NULL, NULL); | |
377 break; | |
378 } | |
379 | |
380 return utf8; | |
381 } | |
382 | |
7283 | 383 static struct direct_im *find_direct_im(OscarData *od, const char *who) { |
2086 | 384 GSList *d = od->direct_ims; |
385 struct direct_im *m = NULL; | |
386 | |
387 while (d) { | |
388 m = (struct direct_im *)d->data; | |
4355 | 389 if (!aim_sncmp(who, m->name)) |
4269 | 390 return m; |
2086 | 391 d = d->next; |
392 } | |
393 | |
4269 | 394 return NULL; |
2086 | 395 } |
396 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
397 static char *extract_name(const char *name) { |
4121 | 398 char *tmp, *x; |
2086 | 399 int i, j; |
4120 | 400 |
401 if (!name) | |
4121 | 402 return NULL; |
403 | |
4120 | 404 x = strchr(name, '-'); |
4121 | 405 |
2086 | 406 if (!x) return NULL; |
407 x = strchr(++x, '-'); | |
408 if (!x) return NULL; | |
409 tmp = g_strdup(++x); | |
410 | |
411 for (i = 0, j = 0; x[i]; i++) { | |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
412 char hex[3]; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
413 if (x[i] != '%') { |
2086 | 414 tmp[j++] = x[i]; |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
415 continue; |
2086 | 416 } |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
417 strncpy(hex, x + ++i, 2); hex[2] = 0; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
418 i++; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
419 tmp[j++] = strtol(hex, NULL, 16); |
2086 | 420 } |
421 | |
422 tmp[j] = 0; | |
423 return tmp; | |
424 } | |
425 | |
5575 | 426 static struct chat_connection *find_oscar_chat(GaimConnection *gc, int id) { |
7283 | 427 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 428 struct chat_connection *c = NULL; |
429 | |
430 while (g) { | |
431 c = (struct chat_connection *)g->data; | |
432 if (c->id == id) | |
433 break; | |
434 g = g->next; | |
435 c = NULL; | |
436 } | |
437 | |
438 return c; | |
439 } | |
440 | |
5575 | 441 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
|
442 aim_conn_t *conn) { |
7283 | 443 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 444 struct chat_connection *c = NULL; |
445 | |
446 while (g) { | |
447 c = (struct chat_connection *)g->data; | |
448 if (c->conn == conn) | |
449 break; | |
450 g = g->next; | |
451 c = NULL; | |
452 } | |
453 | |
454 return c; | |
455 } | |
456 | |
4617 | 457 static void gaim_odc_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
5575 | 458 GaimConnection *gc = sess->aux_data; |
7283 | 459 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 460 GaimConversation *cnv; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
461 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
462 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
463 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
464 |
4617 | 465 sn = g_strdup(aim_odc_getsn(conn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
466 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
467 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
468 "%s disconnected Direct IM.\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
469 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
470 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
471 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
472 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
473 |
3008 | 474 if (dim->connected) |
475 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
476 else | |
477 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
|
478 |
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
479 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
|
480 if (cnv) |
6982 | 481 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
|
482 |
5579 | 483 gaim_conversation_update_progress(cnv, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
484 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
485 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
|
486 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
487 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
488 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
489 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
490 |
4617 | 491 static void oscar_callback(gpointer data, gint source, GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
492 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
493 aim_session_t *sess = aim_conn_getsess(conn); |
5575 | 494 GaimConnection *gc = sess ? sess->aux_data : NULL; |
7283 | 495 OscarData *od; |
2086 | 496 |
497 if (!gc) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
498 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
499 "oscar callback for closed connection (1).\n"); |
2086 | 500 return; |
501 } | |
502 | |
7283 | 503 od = (OscarData *)gc->proto_data; |
2086 | 504 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
505 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 506 /* oh boy. this is probably bad. i guess the only thing we |
507 * can really do is return? */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
508 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
509 "oscar callback for closed connection (2).\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
510 gaim_debug(GAIM_DEBUG_MISC, "oscar", "gc = %p\n", gc); |
2086 | 511 return; |
512 } | |
513 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
514 if (condition & GAIM_INPUT_READ) { |
4617 | 515 if (conn->type == AIM_CONN_TYPE_LISTENER) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
516 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
517 "got information on rendezvous listener\n"); |
4617 | 518 if (aim_handlerendconnect(od->sess, conn) < 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
519 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
520 "connection error (rendezvous listener)\n"); |
4617 | 521 aim_conn_kill(od->sess, &conn); |
2086 | 522 } |
523 } else { | |
4617 | 524 if (aim_get_command(od->sess, conn) >= 0) { |
525 aim_rxdispatch(od->sess); | |
6029 | 526 if (od->killme) { |
527 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "Waiting to be destroyed\n"); | |
528 return; | |
529 } | |
2086 | 530 } else { |
531 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
4617 | 532 !(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
533 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
534 "major connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
535 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 536 } else if (conn->type == AIM_CONN_TYPE_CHAT) { |
537 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
5420 | 538 char *buf; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
539 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
540 "disconnected from chat room %s\n", c->name); |
2086 | 541 c->conn = NULL; |
542 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
543 gaim_input_remove(c->inpa); |
2086 | 544 c->inpa = 0; |
545 c->fd = -1; | |
4617 | 546 aim_conn_kill(od->sess, &conn); |
5420 | 547 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
|
548 gaim_notify_error(gc, NULL, buf, NULL); |
5420 | 549 g_free(buf); |
2086 | 550 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
4617 | 551 if (od->cnpa > 0) |
552 gaim_input_remove(od->cnpa); | |
553 od->cnpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
554 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
555 "removing chatnav input watcher\n"); |
4617 | 556 while (od->create_rooms) { |
557 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
558 g_free(cr->name); |
4617 | 559 od->create_rooms = |
560 g_slist_remove(od->create_rooms, cr); | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
561 g_free(cr); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
562 gaim_notify_error(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
563 _("Chat is currently unavailable"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
564 NULL); |
2086 | 565 } |
4617 | 566 aim_conn_kill(od->sess, &conn); |
2086 | 567 } else if (conn->type == AIM_CONN_TYPE_AUTH) { |
4617 | 568 if (od->paspa > 0) |
569 gaim_input_remove(od->paspa); | |
570 od->paspa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
571 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
572 "removing authconn input watcher\n"); |
4617 | 573 aim_conn_kill(od->sess, &conn); |
3694 | 574 } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
4617 | 575 if (od->emlpa > 0) |
576 gaim_input_remove(od->emlpa); | |
577 od->emlpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
578 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
579 "removing email input watcher\n"); |
4617 | 580 aim_conn_kill(od->sess, &conn); |
4804 | 581 } else if (conn->type == AIM_CONN_TYPE_ICON) { |
582 if (od->icopa > 0) | |
583 gaim_input_remove(od->icopa); | |
584 od->icopa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
585 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
586 "removing icon input watcher\n"); |
4804 | 587 aim_conn_kill(od->sess, &conn); |
2086 | 588 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
589 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
4617 | 590 gaim_odc_disconnect(od->sess, conn); |
591 aim_conn_kill(od->sess, &conn); | |
2086 | 592 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
593 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
594 "holy crap! generic connection error! %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
595 conn->type); |
4617 | 596 aim_conn_kill(od->sess, &conn); |
2086 | 597 } |
598 } | |
599 } | |
600 } | |
601 } | |
602 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
603 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
5575 | 604 GaimConnection *gc = sess->aux_data; |
7285 | 605 gchar *s = g_strdup_vprintf(format, va); |
606 gchar *buf; | |
607 | |
608 buf = g_strdup_printf("%s %d: %s", gaim_account_get_username(gaim_connection_get_account(gc)), level, s); | |
609 gaim_debug(GAIM_DEBUG_INFO, "oscar", buf); | |
610 if (buf[strlen(buf)-1] != '\n') | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
611 gaim_debug(GAIM_DEBUG_INFO, NULL, "\n"); |
7285 | 612 g_free(buf); |
2086 | 613 g_free(s); |
614 } | |
615 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
616 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 617 { |
5575 | 618 GaimConnection *gc = data; |
7283 | 619 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
620 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
621 aim_conn_t *conn; |
2086 | 622 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
623 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 624 close(source); |
625 return; | |
626 } | |
627 | |
4617 | 628 od = gc->proto_data; |
629 sess = od->sess; | |
2086 | 630 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 631 conn->fd = source; |
2086 | 632 |
633 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
634 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 635 return; |
636 } | |
637 | |
638 aim_conn_completeconnect(sess, conn); | |
4617 | 639 gc->inpa = gaim_input_add(conn->fd, GAIM_INPUT_READ, oscar_callback, conn); |
7282 | 640 aim_request_login(sess, conn, gaim_account_get_username(gaim_connection_get_account(gc))); |
641 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
642 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
7282 | 643 "Screen name sent, waiting for response\n"); |
7283 | 644 gaim_connection_update_progress(gc, _("Screen name sent"), 1, OSCAR_CONNECT_STEPS); |
2086 | 645 } |
646 | |
5575 | 647 static void oscar_login(GaimAccount *account) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
648 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
649 aim_conn_t *conn; |
5575 | 650 GaimConnection *gc = gaim_account_get_connection(account); |
7283 | 651 OscarData *od = gc->proto_data = g_new0(OscarData, 1); |
2086 | 652 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
653 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
|
654 |
5575 | 655 if (isdigit(*(gaim_account_get_username(account)))) { |
4617 | 656 od->icq = TRUE; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
657 } else { |
6622 | 658 gc->flags |= GAIM_CONNECTION_HTML; |
659 gc->flags |= GAIM_CONNECTION_AUTO_RESP; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
660 } |
5836 | 661 od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, oscar_free_buddyinfo); |
2086 | 662 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
663 sess = g_new0(aim_session_t, 1); |
7285 | 664 aim_session_init(sess, TRUE, 0); |
2086 | 665 aim_setdebuggingcb(sess, oscar_debug); |
7282 | 666 /* |
667 * We need an immediate queue because we don't use a while-loop | |
668 * to see if things need to be sent. | |
669 */ | |
2086 | 670 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); |
4617 | 671 od->sess = sess; |
2086 | 672 sess->aux_data = gc; |
673 | |
674 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
675 if (conn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
676 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
677 "internal connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
678 gaim_connection_error(gc, _("Unable to login to AIM")); |
2086 | 679 return; |
680 } | |
681 | |
4649 | 682 aim_conn_addhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2086 | 683 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); |
684 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
685 | |
686 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
687 if (gaim_proxy_connect(account, gaim_account_get_string(account, "server", FAIM_LOGIN_SERVER), |
5575 | 688 gaim_account_get_int(account, "port", FAIM_LOGIN_PORT), |
689 oscar_login_connect, gc) < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
690 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 691 return; |
692 } | |
7282 | 693 |
7283 | 694 gaim_connection_update_progress(gc, _("Connecting"), 0, OSCAR_CONNECT_STEPS); |
5575 | 695 } |
696 | |
697 static void oscar_close(GaimConnection *gc) { | |
7283 | 698 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 699 |
700 while (od->oscar_chats) { | |
701 struct chat_connection *n = od->oscar_chats->data; | |
2086 | 702 if (n->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
703 gaim_input_remove(n->inpa); |
2086 | 704 g_free(n->name); |
705 g_free(n->show); | |
4617 | 706 od->oscar_chats = g_slist_remove(od->oscar_chats, n); |
2086 | 707 g_free(n); |
708 } | |
4617 | 709 while (od->direct_ims) { |
710 struct direct_im *n = od->direct_ims->data; | |
2086 | 711 if (n->watcher > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
712 gaim_input_remove(n->watcher); |
4617 | 713 od->direct_ims = g_slist_remove(od->direct_ims, n); |
2086 | 714 g_free(n); |
715 } | |
4617 | 716 /* BBB */ |
717 while (od->file_transfers) { | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
718 GaimXfer *xfer; |
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
719 xfer = (GaimXfer *)od->file_transfers->data; |
7805 | 720 gaim_xfer_cancel_local(xfer); |
3630 | 721 } |
4804 | 722 while (od->requesticon) { |
723 char *sn = od->requesticon->data; | |
724 od->requesticon = g_slist_remove(od->requesticon, sn); | |
725 free(sn); | |
726 } | |
4738 | 727 g_hash_table_destroy(od->buddyinfo); |
4617 | 728 while (od->create_rooms) { |
729 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
730 g_free(cr->name); |
4617 | 731 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
732 g_free(cr); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
733 } |
4617 | 734 if (od->email) |
735 g_free(od->email); | |
736 if (od->newp) | |
737 g_free(od->newp); | |
738 if (od->oldp) | |
739 g_free(od->oldp); | |
2086 | 740 if (gc->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
741 gaim_input_remove(gc->inpa); |
4617 | 742 if (od->cnpa > 0) |
743 gaim_input_remove(od->cnpa); | |
744 if (od->paspa > 0) | |
745 gaim_input_remove(od->paspa); | |
746 if (od->emlpa > 0) | |
747 gaim_input_remove(od->emlpa); | |
4804 | 748 if (od->icopa > 0) |
749 gaim_input_remove(od->icopa); | |
6907 | 750 if (od->icontimer > 0) |
4832 | 751 g_source_remove(od->icontimer); |
5968 | 752 if (od->getblisttimer) |
753 g_source_remove(od->getblisttimer); | |
4617 | 754 aim_session_kill(od->sess); |
755 g_free(od->sess); | |
756 od->sess = NULL; | |
2086 | 757 g_free(gc->proto_data); |
758 gc->proto_data = NULL; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
759 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Signed off.\n"); |
2086 | 760 } |
761 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
762 static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 763 GaimConnection *gc = data; |
7283 | 764 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
765 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
766 aim_conn_t *bosconn; |
2086 | 767 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
768 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 769 close(source); |
770 return; | |
771 } | |
772 | |
4617 | 773 od = gc->proto_data; |
774 sess = od->sess; | |
775 bosconn = od->conn; | |
4366 | 776 bosconn->fd = source; |
2086 | 777 |
778 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
779 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 780 return; |
781 } | |
782 | |
783 aim_conn_completeconnect(sess, bosconn); | |
4617 | 784 gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, oscar_callback, bosconn); |
7283 | 785 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
786 gaim_connection_update_progress(gc, |
7283 | 787 _("Connection established, cookie sent"), 4, OSCAR_CONNECT_STEPS); |
2086 | 788 } |
789 | |
4617 | 790 /* BBB */ |
4656 | 791 /* |
792 * This little area in oscar.c is the nexus of file transfer code, | |
793 * so I wrote a little explanation of what happens. I am such a | |
794 * ninja. | |
795 * | |
796 * The series of events for a file send is: | |
797 * -Create xfer and call gaim_xfer_request (this happens in oscar_ask_sendfile) | |
798 * -User chooses a file and oscar_xfer_init is called. It establishs a | |
799 * listening socket, then asks the remote user to connect to us (and | |
800 * gives them the file name, port, IP, etc.) | |
801 * -They connect to us and we send them an AIM_CB_OFT_PROMPT (this happens | |
802 * in oscar_sendfile_estblsh) | |
803 * -They send us an AIM_CB_OFT_ACK and then we start sending data | |
804 * -When we finish, they send us an AIM_CB_OFT_DONE and they close the | |
805 * connection. | |
806 * -We get drunk because file transfer kicks ass. | |
807 * | |
808 * The series of events for a file receive is: | |
809 * -Create xfer and call gaim_xfer request (this happens in incomingim_chan2) | |
810 * -Gaim user selects file to name and location to save file to and | |
811 * oscar_xfer_init is called | |
812 * -It connects to the remote user using the IP they gave us earlier | |
813 * -After connecting, they send us an AIM_CB_OFT_PROMPT. In reply, we send | |
814 * them an AIM_CB_OFT_ACK. | |
815 * -They begin to send us lots of raw data. | |
816 * -When they finish sending data we send an AIM_CB_OFT_DONE and then close | |
817 * the connectionn. | |
818 */ | |
819 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition); | |
820 | |
821 /* XXX - This function is pretty ugly */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
822 static void oscar_xfer_init(GaimXfer *xfer) |
4656 | 823 { |
5146 | 824 struct aim_oft_info *oft_info = xfer->data; |
5575 | 825 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 826 OscarData *od = gc->proto_data; |
4656 | 827 |
828 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
829 int i; | |
830 | |
831 xfer->filename = g_path_get_basename(xfer->local_filename); | |
5146 | 832 strncpy(oft_info->fh.name, xfer->filename, 64); |
833 oft_info->fh.totsize = gaim_xfer_get_size(xfer); | |
834 oft_info->fh.size = gaim_xfer_get_size(xfer); | |
835 oft_info->fh.checksum = aim_oft_checksum_file(xfer->local_filename); | |
4656 | 836 |
837 /* | |
5146 | 838 * First try the port specified earlier (5190). If that fails, |
839 * increment by 1 and try again. | |
4656 | 840 */ |
5146 | 841 aim_sendfile_listen(od->sess, oft_info); |
842 for (i=0; (i<5 && !oft_info->conn); i++) { | |
843 xfer->local_port = oft_info->port = oft_info->port + 1; | |
844 aim_sendfile_listen(od->sess, oft_info); | |
4656 | 845 } |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
846 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
847 "port is %d, ip is %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
848 xfer->local_port, oft_info->clientip); |
5146 | 849 if (oft_info->conn) { |
850 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
851 aim_im_sendch2_sendfile_ask(od->sess, oft_info); | |
852 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ESTABLISHED, oscar_sendfile_estblsh, 0); | |
4656 | 853 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
854 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
855 _("Unable to establish listener socket.")); |
4656 | 856 /* 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
|
857 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 858 } |
859 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 860 oft_info->conn = aim_newconn(od->sess, AIM_CONN_TYPE_RENDEZVOUS, NULL); |
861 if (oft_info->conn) { | |
862 oft_info->conn->subtype = AIM_CONN_SUBTYPE_OFT_SENDFILE; | |
863 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
|
864 oft_info->conn->fd = xfer->fd = gaim_proxy_connect(gaim_connection_get_account(gc), xfer->remote_ip, xfer->remote_port, |
5575 | 865 oscar_sendfile_connected, xfer); |
4656 | 866 if (xfer->fd == -1) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
867 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
868 _("Unable to establish file descriptor.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
869 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 870 } |
871 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
872 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
873 _("Unable to create new connection.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
874 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 875 /* Try a different port? Ask them to connect to us? */ |
876 } | |
877 | |
878 } | |
879 } | |
880 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
881 static void oscar_xfer_start(GaimXfer *xfer) |
4656 | 882 { |
5146 | 883 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
884 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_start\n"); |
4656 | 885 /* I'm pretty sure we don't need to do jack here. Nor Jill. */ |
886 } | |
887 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
888 static void oscar_xfer_end(GaimXfer *xfer) |
4656 | 889 { |
5146 | 890 struct aim_oft_info *oft_info = xfer->data; |
5575 | 891 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 892 OscarData *od = gc->proto_data; |
4656 | 893 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
894 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_end\n"); |
5146 | 895 |
896 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
897 oft_info->fh.nrecvd = gaim_xfer_get_bytes_sent(xfer); | |
898 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_DONE, oft_info); | |
899 } | |
900 | |
901 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
902 aim_oft_destroyinfo(oft_info); | |
4656 | 903 xfer->data = NULL; |
5146 | 904 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 905 } |
906 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
907 static void oscar_xfer_cancel_send(GaimXfer *xfer) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
908 { |
5146 | 909 struct aim_oft_info *oft_info = xfer->data; |
5575 | 910 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 911 OscarData *od = gc->proto_data; |
4763 | 912 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
913 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
914 "AAA - in oscar_xfer_cancel_send\n"); |
5146 | 915 |
916 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
917 | |
918 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
919 aim_oft_destroyinfo(oft_info); | |
4763 | 920 xfer->data = NULL; |
5146 | 921 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
922 } |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
923 |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
924 static void oscar_xfer_cancel_recv(GaimXfer *xfer) |
4656 | 925 { |
5146 | 926 struct aim_oft_info *oft_info = xfer->data; |
5575 | 927 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 928 OscarData *od = gc->proto_data; |
4656 | 929 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
930 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
931 "AAA - in oscar_xfer_cancel_recv\n"); |
5146 | 932 |
933 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
934 | |
935 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
936 aim_oft_destroyinfo(oft_info); | |
4656 | 937 xfer->data = NULL; |
5146 | 938 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 939 } |
940 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
941 static void oscar_xfer_ack(GaimXfer *xfer, const char *buffer, size_t size) |
4656 | 942 { |
5146 | 943 struct aim_oft_info *oft_info = xfer->data; |
4656 | 944 |
945 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
946 /* | |
947 * If we're done sending, intercept the socket from the core ft code | |
948 * and wait for the other guy to send the "done" OFT packet. | |
949 */ | |
950 if (gaim_xfer_get_bytes_remaining(xfer) <= 0) { | |
951 gaim_input_remove(xfer->watcher); | |
5146 | 952 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); |
4656 | 953 xfer->fd = 0; |
954 gaim_xfer_set_completed(xfer, TRUE); | |
955 } | |
956 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 957 /* Update our rolling checksum. Like Walmart, yo. */ |
958 oft_info->fh.recvcsum = aim_oft_checksum_chunk(buffer, size, oft_info->fh.recvcsum); | |
4656 | 959 } |
960 } | |
961 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
962 static GaimXfer *oscar_find_xfer_by_cookie(GSList *fts, const char *ck) |
4656 | 963 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
964 GaimXfer *xfer; |
5146 | 965 struct aim_oft_info *oft_info; |
4656 | 966 |
967 while (fts) { | |
968 xfer = fts->data; | |
5146 | 969 oft_info = xfer->data; |
970 | |
971 if (oft_info && !strcmp(ck, oft_info->cookie)) | |
4656 | 972 return xfer; |
973 | |
974 fts = g_slist_next(fts); | |
975 } | |
976 | |
977 return NULL; | |
978 } | |
979 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
980 static GaimXfer *oscar_find_xfer_by_conn(GSList *fts, aim_conn_t *conn) |
4656 | 981 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
982 GaimXfer *xfer; |
5146 | 983 struct aim_oft_info *oft_info; |
4656 | 984 |
985 while (fts) { | |
986 xfer = fts->data; | |
5146 | 987 oft_info = xfer->data; |
988 | |
989 if (oft_info && (conn == oft_info->conn)) | |
4656 | 990 return xfer; |
991 | |
992 fts = g_slist_next(fts); | |
993 } | |
994 | |
995 return NULL; | |
996 } | |
997 | |
5575 | 998 static void oscar_ask_sendfile(GaimConnection *gc, const char *destsn) { |
7283 | 999 OscarData *od = (OscarData *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1000 GaimXfer *xfer; |
5146 | 1001 struct aim_oft_info *oft_info; |
3752 | 1002 |
4617 | 1003 /* You want to send a file to someone else, you're so generous */ |
1004 | |
1005 /* Build the file transfer handle */ | |
5575 | 1006 xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, destsn); |
4617 | 1007 xfer->local_port = 5190; |
1008 | |
5146 | 1009 /* Create the oscar-specific data */ |
1010 oft_info = aim_oft_createinfo(od->sess, NULL, destsn, xfer->local_ip, xfer->local_port, 0, 0, NULL); | |
1011 xfer->data = oft_info; | |
1012 | |
4617 | 1013 /* Setup our I/O op functions */ |
1014 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
1015 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
1016 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1017 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1018 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4656 | 1019 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
4617 | 1020 |
1021 /* Keep track of this transfer for later */ | |
1022 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
1023 | |
1024 /* Now perform the request */ | |
1025 gaim_xfer_request(xfer); | |
3630 | 1026 } |
1027 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1028 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
6029 | 1029 GaimConnection *gc = sess->aux_data; |
7283 | 1030 OscarData *od = gc->proto_data; |
6029 | 1031 GaimAccount *account = gc->account; |
1032 aim_conn_t *bosconn; | |
1033 char *host; int port; | |
1034 int i, rc; | |
2086 | 1035 va_list ap; |
2704 | 1036 struct aim_authresp_info *info; |
6029 | 1037 |
5575 | 1038 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1039 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1040 va_start(ap, fr); |
2704 | 1041 info = va_arg(ap, struct aim_authresp_info *); |
2086 | 1042 va_end(ap); |
1043 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1044 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1045 "inside auth_resp (Screen name: %s)\n", info->sn); |
2704 | 1046 |
4293 | 1047 if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { |
4056 | 1048 char buf[256]; |
2704 | 1049 switch (info->errorcode) { |
2086 | 1050 case 0x05: |
1051 /* Incorrect nick/password */ | |
6498 | 1052 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1053 gaim_connection_error(gc, _("Incorrect nickname or password.")); |
2086 | 1054 break; |
1055 case 0x11: | |
1056 /* Suspended account */ | |
6498 | 1057 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1058 gaim_connection_error(gc, _("Your account is currently suspended.")); |
2086 | 1059 break; |
3498 | 1060 case 0x14: |
1061 /* service temporarily unavailable */ | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1062 gaim_connection_error(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); |
3498 | 1063 break; |
2086 | 1064 case 0x18: |
1065 /* connecting too frequently */ | |
6498 | 1066 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1067 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 | 1068 break; |
1069 case 0x1c: | |
1070 /* client too old */ | |
6498 | 1071 gc->wants_to_die = TRUE; |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1072 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
|
1073 gaim_connection_error(gc, buf); |
2086 | 1074 break; |
1075 default: | |
6623 | 1076 gaim_connection_error(gc, _("Authentication failed")); |
2086 | 1077 break; |
1078 } | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1079 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1080 "Login Error Code 0x%04hx\n", info->errorcode); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1081 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1082 "Error URL: %s\n", info->errorurl); |
2086 | 1083 od->killme = TRUE; |
1084 return 1; | |
1085 } | |
1086 | |
1087 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1088 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1089 "Reg status: %hu\n", info->regstatus); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1090 |
2704 | 1091 if (info->email) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1092 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email: %s\n", info->email); |
2086 | 1093 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1094 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email is NULL\n"); |
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 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1097 gaim_debug(GAIM_DEBUG_MISC, "oscar", "BOSIP: %s\n", info->bosip); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1098 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1099 "Closing auth connection...\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1100 aim_conn_kill(sess, &fr->conn); |
2086 | 1101 |
1102 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
1103 if (bosconn == NULL) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1104 gaim_connection_error(gc, _("Internal Error")); |
2086 | 1105 od->killme = TRUE; |
1106 return 0; | |
1107 } | |
1108 | |
4649 | 1109 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1110 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
2086 | 1111 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
1112 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
1113 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
2993 | 1114 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
2086 | 1115 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
1116 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
1117 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
1118 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
1119 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
1120 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
3212 | 1121 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
2086 | 1122 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
1123 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
1124 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
1125 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
1126 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
3595 | 1127 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
7011 | 1128 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_userinfo, 0); |
2086 | 1129 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); |
1130 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
|
1131 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 1132 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
1133 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
1134 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
1135 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1136 aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
5844 | 1137 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
|
1138 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
|
1139 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
|
1140 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
4759 | 1141 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS, gaim_icqalias, 0); |
4624 | 1142 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO, gaim_icqinfo, 0); |
4230 | 1143 #ifndef NOSSI |
4642 | 1144 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ERROR, gaim_ssi_parseerr, 0); |
2991 | 1145 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
1146 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
1147 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
4230 | 1148 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); |
1149 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTH, gaim_ssi_authgiven, 0); | |
1150 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREQ, gaim_ssi_authrequest, 0); | |
1151 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREP, gaim_ssi_authreply, 0); | |
1152 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADDED, gaim_ssi_gotadded, 0); | |
1153 #endif | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1154 |
7283 | 1155 od->conn = bosconn; |
2704 | 1156 for (i = 0; i < (int)strlen(info->bosip); i++) { |
1157 if (info->bosip[i] == ':') { | |
1158 port = atoi(&(info->bosip[i+1])); | |
2086 | 1159 break; |
1160 } | |
1161 } | |
2704 | 1162 host = g_strndup(info->bosip, i); |
2086 | 1163 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1164 rc = gaim_proxy_connect(gc->account, host, port, oscar_bos_connect, gc); |
2086 | 1165 g_free(host); |
4366 | 1166 if (rc < 0) { |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1167 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 1168 od->killme = TRUE; |
1169 return 0; | |
1170 } | |
4293 | 1171 aim_sendcookie(sess, bosconn, info->cookielen, info->cookie); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1172 gaim_input_remove(gc->inpa); |
2704 | 1173 |
7283 | 1174 gaim_connection_update_progress(gc, _("Received authorization"), 3, OSCAR_CONNECT_STEPS); |
7282 | 1175 |
2086 | 1176 return 1; |
1177 } | |
1178 | |
7285 | 1179 /* XXX - Should use gaim_url_fetch for the below stuff */ |
2086 | 1180 struct pieceofcrap { |
5575 | 1181 GaimConnection *gc; |
2086 | 1182 unsigned long offset; |
1183 unsigned long len; | |
1184 char *modname; | |
1185 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1186 aim_conn_t *conn; |
2086 | 1187 unsigned int inpa; |
1188 }; | |
1189 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1190 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 1191 { |
1192 struct pieceofcrap *pos = data; | |
7283 | 1193 OscarData *od = pos->gc->proto_data; |
2086 | 1194 char in = '\0'; |
1195 int x = 0; | |
1196 unsigned char m[17]; | |
1197 | |
1198 while (read(pos->fd, &in, 1) == 1) { | |
1199 if (in == '\n') | |
1200 x++; | |
1201 else if (in != '\r') | |
1202 x = 0; | |
1203 if (x == 2) | |
1204 break; | |
1205 in = '\0'; | |
1206 } | |
1207 if (in != '\n') { | |
4056 | 1208 char buf[256]; |
1209 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
|
1210 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1211 gaim_notify_warning(pos->gc, NULL, |
7422 | 1212 _("Gaim was unable to get a valid AIM login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1213 buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1214 gaim_input_remove(pos->inpa); |
2086 | 1215 close(pos->fd); |
1216 g_free(pos); | |
1217 return; | |
1218 } | |
1219 read(pos->fd, m, 16); | |
1220 m[16] = '\0'; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1221 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Sending hash: "); |
2086 | 1222 for (x = 0; x < 16; x++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1223 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx ", (unsigned char)m[x]); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1224 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1225 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1226 gaim_input_remove(pos->inpa); |
2086 | 1227 close(pos->fd); |
1228 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
1229 g_free(pos); | |
1230 } | |
1231 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1232 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1233 struct pieceofcrap *pos = data; |
5420 | 1234 gchar *buf; |
2086 | 1235 |
4366 | 1236 pos->fd = source; |
1237 | |
2086 | 1238 if (source < 0) { |
5420 | 1239 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
|
1240 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1241 gaim_notify_warning(pos->gc, NULL, |
7422 | 1242 _("Gaim was unable to get a valid AIM login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1243 buf); |
5420 | 1244 g_free(buf); |
2086 | 1245 if (pos->modname) |
1246 g_free(pos->modname); | |
1247 g_free(pos); | |
1248 return; | |
1249 } | |
1250 | |
5420 | 1251 buf = g_strdup_printf("GET " AIMHASHDATA "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", |
2086 | 1252 pos->offset, pos->len, pos->modname ? pos->modname : ""); |
1253 write(pos->fd, buf, strlen(buf)); | |
5420 | 1254 g_free(buf); |
2086 | 1255 if (pos->modname) |
1256 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1257 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 1258 return; |
1259 } | |
1260 | |
1261 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
1262 #define AIM_MAX_FILE_SIZE 98304 | |
1263 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1264 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1265 va_list ap; |
1266 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1267 fu32_t offset, len; |
2086 | 1268 char *modname; |
1269 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1270 va_start(ap, fr); |
4200 | 1271 offset = va_arg(ap, fu32_t); |
1272 len = va_arg(ap, fu32_t); | |
2086 | 1273 modname = va_arg(ap, char *); |
1274 va_end(ap); | |
1275 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1276 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 1277 "offset: %u, len: %u, file: %s\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1278 offset, len, (modname ? modname : "aim.exe")); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1279 |
2086 | 1280 if (len == 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1281 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
|
1282 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 1283 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1284 return 1; | |
1285 } | |
1286 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
1287 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
1288 char *buf; | |
1289 int i = 8; | |
1290 if (modname) | |
1291 i += strlen(modname); | |
1292 buf = g_malloc(i); | |
1293 i = 0; | |
1294 if (modname) { | |
1295 memcpy(buf, modname, strlen(modname)); | |
1296 i += strlen(modname); | |
1297 } | |
1298 buf[i++] = offset & 0xff; | |
1299 buf[i++] = (offset >> 8) & 0xff; | |
1300 buf[i++] = (offset >> 16) & 0xff; | |
1301 buf[i++] = (offset >> 24) & 0xff; | |
1302 buf[i++] = len & 0xff; | |
1303 buf[i++] = (len >> 8) & 0xff; | |
1304 buf[i++] = (len >> 16) & 0xff; | |
1305 buf[i++] = (len >> 24) & 0xff; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1306 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len + offset is invalid, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1307 "hashing request\n"); |
2086 | 1308 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1309 g_free(buf); | |
1310 return 1; | |
1311 } | |
1312 */ | |
1313 | |
1314 pos = g_new0(struct pieceofcrap, 1); | |
1315 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1316 pos->conn = fr->conn; |
2086 | 1317 |
1318 pos->offset = offset; | |
1319 pos->len = len; | |
1320 pos->modname = modname ? g_strdup(modname) : NULL; | |
1321 | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1322 if (gaim_proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) != 0) { |
4056 | 1323 char buf[256]; |
2086 | 1324 if (pos->modname) |
1325 g_free(pos->modname); | |
1326 g_free(pos); | |
4056 | 1327 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
|
1328 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1329 gaim_notify_warning(pos->gc, NULL, |
7422 | 1330 _("Gaim was unable to get a valid login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1331 buf); |
2086 | 1332 } |
1333 | |
1334 return 1; | |
1335 } | |
1336 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1337 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1338 GaimConnection *gc = sess->aux_data; |
7283 | 1339 OscarData *od = gc->proto_data; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1340 GaimAccount *account = gaim_connection_get_account(gc); |
5575 | 1341 GaimAccount *ac = gaim_connection_get_account(gc); |
7282 | 1342 #if 0 |
1343 struct client_info_s info = {"gaim", 7, 3, 2003, "us", "en", 0x0004, 0x0000, 0x04b}; | |
1344 #endif | |
7011 | 1345 va_list ap; |
1346 char *key; | |
2086 | 1347 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1348 va_start(ap, fr); |
2086 | 1349 key = va_arg(ap, char *); |
1350 va_end(ap); | |
1351 | |
4617 | 1352 if (od->icq) { |
3458 | 1353 struct client_info_s info = CLIENTINFO_ICQ_KNOWNGOOD; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1354 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1355 gaim_account_get_password(account), &info, key); |
3458 | 1356 } else { |
1357 struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; | |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1358 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1359 gaim_account_get_password(account), &info, key); |
3458 | 1360 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1361 |
7283 | 1362 gaim_connection_update_progress(gc, _("Password sent"), 2, OSCAR_CONNECT_STEPS); |
7282 | 1363 |
2086 | 1364 return 1; |
1365 } | |
1366 | |
2675 | 1367 static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1368 GaimConnection *gc = sess->aux_data; |
2647 | 1369 struct chat_connection *chatcon; |
1370 static int id = 1; | |
1371 | |
6905 | 1372 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
|
1373 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
|
1374 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
|
1375 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
|
1376 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_conv_chat_incoming_msg, 0); |
2675 | 1377 |
2672 | 1378 aim_clientready(sess, fr->conn); |
2675 | 1379 |
2647 | 1380 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
1381 chatcon->id = id; | |
1382 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
1383 | |
1384 return 1; | |
1385 } | |
1386 | |
2675 | 1387 static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
1388 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1389 aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
2647 | 1390 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
2675 | 1391 |
1392 aim_clientready(sess, fr->conn); | |
1393 | |
1394 aim_chatnav_reqrights(sess, fr->conn); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1395 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1396 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1397 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1398 |
3694 | 1399 static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
1400 | |
1401 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1402 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); | |
1403 | |
7282 | 1404 aim_email_sendcookies(sess); |
1405 aim_email_activate(sess); | |
3694 | 1406 aim_clientready(sess, fr->conn); |
1407 | |
1408 return 1; | |
1409 } | |
1410 | |
4804 | 1411 static int conninitdone_icon(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1412 GaimConnection *gc = sess->aux_data; |
7283 | 1413 OscarData *od = gc->proto_data; |
4804 | 1414 |
1415 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1416 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_ERROR, gaim_icon_error, 0); | |
1417 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_RESPONSE, gaim_icon_parseicon, 0); | |
1418 | |
1419 aim_clientready(sess, fr->conn); | |
1420 | |
4823 | 1421 od->iconconnecting = FALSE; |
1422 | |
4804 | 1423 if (od->icontimer) |
1424 g_source_remove(od->icontimer); | |
1425 od->icontimer = g_timeout_add(100, gaim_icon_timerfunc, gc); | |
1426 | |
1427 return 1; | |
1428 } | |
1429 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1430 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1431 GaimConnection *gc = data; |
7283 | 1432 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1433 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1434 aim_conn_t *tstconn; |
2086 | 1435 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1436 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1437 close(source); |
1438 return; | |
1439 } | |
1440 | |
4617 | 1441 od = gc->proto_data; |
1442 sess = od->sess; | |
2086 | 1443 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); |
4366 | 1444 tstconn->fd = source; |
2086 | 1445 |
1446 if (source < 0) { | |
1447 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1448 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1449 "unable to connect to chatnav server\n"); |
2086 | 1450 return; |
1451 } | |
1452 | |
1453 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1454 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
|
1455 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1456 } |
1457 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1458 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1459 { |
5575 | 1460 GaimConnection *gc = data; |
7283 | 1461 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1462 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1463 aim_conn_t *tstconn; |
2086 | 1464 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1465 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1466 close(source); |
1467 return; | |
1468 } | |
1469 | |
4617 | 1470 od = gc->proto_data; |
1471 sess = od->sess; | |
2086 | 1472 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 1473 tstconn->fd = source; |
2086 | 1474 |
1475 if (source < 0) { | |
1476 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1477 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1478 "unable to connect to authorizer\n"); |
2086 | 1479 return; |
1480 } | |
1481 | |
1482 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1483 od->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
6905 | 1484 gaim_debug(GAIM_DEBUG_INFO, "oscar", "admin: connected\n"); |
2086 | 1485 } |
1486 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1487 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1488 { |
1489 struct chat_connection *ccon = data; | |
5575 | 1490 GaimConnection *gc = ccon->gc; |
7283 | 1491 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1492 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1493 aim_conn_t *tstconn; |
2086 | 1494 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1495 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1496 close(source); |
1497 g_free(ccon->show); | |
1498 g_free(ccon->name); | |
1499 g_free(ccon); | |
1500 return; | |
1501 } | |
1502 | |
4617 | 1503 od = gc->proto_data; |
1504 sess = od->sess; | |
2086 | 1505 tstconn = ccon->conn; |
4366 | 1506 tstconn->fd = source; |
2086 | 1507 |
1508 if (source < 0) { | |
1509 aim_conn_kill(sess, &tstconn); | |
1510 g_free(ccon->show); | |
1511 g_free(ccon->name); | |
1512 g_free(ccon); | |
1513 return; | |
1514 } | |
1515 | |
1516 aim_conn_completeconnect(sess, ccon->conn); | |
4617 | 1517 ccon->inpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
1518 od->oscar_chats = g_slist_append(od->oscar_chats, ccon); | |
2086 | 1519 } |
1520 | |
3694 | 1521 static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1522 GaimConnection *gc = data; |
7283 | 1523 OscarData *od; |
3694 | 1524 aim_session_t *sess; |
1525 aim_conn_t *tstconn; | |
1526 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1527 if (!g_list_find(gaim_connections_get_all(), gc)) { |
3694 | 1528 close(source); |
1529 return; | |
1530 } | |
1531 | |
4617 | 1532 od = gc->proto_data; |
1533 sess = od->sess; | |
3694 | 1534 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
4366 | 1535 tstconn->fd = source; |
3694 | 1536 |
1537 if (source < 0) { | |
1538 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1539 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1540 "unable to connect to email server\n"); |
3694 | 1541 return; |
1542 } | |
1543 | |
1544 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1545 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
|
1546 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1547 "email: connected\n"); |
3694 | 1548 } |
1549 | |
4804 | 1550 static void oscar_icon_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1551 GaimConnection *gc = data; |
7283 | 1552 OscarData *od; |
4804 | 1553 aim_session_t *sess; |
1554 aim_conn_t *tstconn; | |
1555 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1556 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4804 | 1557 close(source); |
1558 return; | |
1559 } | |
1560 | |
1561 od = gc->proto_data; | |
1562 sess = od->sess; | |
1563 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_ICON); | |
1564 tstconn->fd = source; | |
1565 | |
1566 if (source < 0) { | |
1567 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1568 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1569 "unable to connect to icon server\n"); |
4804 | 1570 return; |
1571 } | |
1572 | |
1573 aim_conn_completeconnect(sess, tstconn); | |
1574 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
|
1575 gaim_debug(GAIM_DEBUG_INFO, "oscar", "icon: connected\n"); |
4804 | 1576 } |
1577 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1578 /* 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
|
1579 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1580 GaimConnection *gc = sess->aux_data; |
1581 GaimAccount *account = gaim_connection_get_account(gc); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1582 aim_conn_t *tstconn; |
4452 | 1583 int i; |
2086 | 1584 char *host; |
1585 int port; | |
4821 | 1586 va_list ap; |
1587 struct aim_redirect_data *redir; | |
2086 | 1588 |
5575 | 1589 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1590 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1591 va_start(ap, fr); |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1592 redir = va_arg(ap, struct aim_redirect_data *); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1593 va_end(ap); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1594 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1595 for (i = 0; i < (int)strlen(redir->ip); i++) { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1596 if (redir->ip[i] == ':') { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1597 port = atoi(&(redir->ip[i+1])); |
2086 | 1598 break; |
1599 } | |
1600 } | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1601 host = g_strndup(redir->ip, i); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1602 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1603 switch(redir->group) { |
2086 | 1604 case 0x7: /* Authorizer */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1605 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1606 "Reconnecting with authorizor...\n"); |
2086 | 1607 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); |
1608 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1609 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1610 "unable to reconnect with authorizer\n"); |
2086 | 1611 g_free(host); |
1612 return 1; | |
1613 } | |
4649 | 1614 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1615 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
2086 | 1616 |
1617 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1618 if (gaim_proxy_connect(account, host, port, oscar_auth_connect, gc) != 0) { |
2086 | 1619 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1620 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1621 "unable to reconnect with authorizer\n"); |
2086 | 1622 g_free(host); |
1623 return 1; | |
1624 } | |
4293 | 1625 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1626 break; |
1627 | |
2086 | 1628 case 0xd: /* ChatNav */ |
1629 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1630 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1631 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1632 "unable to connect to chatnav server\n"); |
2086 | 1633 g_free(host); |
1634 return 1; | |
1635 } | |
4649 | 1636 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1637 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
2086 | 1638 |
1639 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1640 if (gaim_proxy_connect(account, host, port, oscar_chatnav_connect, gc) != 0) { |
2086 | 1641 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1642 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1643 "unable to connect to chatnav server\n"); |
2086 | 1644 g_free(host); |
1645 return 1; | |
1646 } | |
4293 | 1647 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1648 break; |
1649 | |
1650 case 0xe: { /* Chat */ | |
2086 | 1651 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1652 |
2086 | 1653 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1654 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1655 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1656 "unable to connect to chat server\n"); |
2086 | 1657 g_free(host); |
1658 return 1; | |
1659 } | |
1660 | |
4649 | 1661 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1662 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
1663 | |
2086 | 1664 ccon = g_new0(struct chat_connection, 1); |
1665 ccon->conn = tstconn; | |
1666 ccon->gc = gc; | |
1667 ccon->fd = -1; | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1668 ccon->name = g_strdup(redir->chat.room); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1669 ccon->exchange = redir->chat.exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1670 ccon->instance = redir->chat.instance; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1671 ccon->show = extract_name(redir->chat.room); |
4634 | 1672 |
2086 | 1673 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1674 if (gaim_proxy_connect(account, host, port, oscar_chat_connect, ccon) != 0) { |
2086 | 1675 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1676 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1677 "unable to connect to chat server\n"); |
2086 | 1678 g_free(host); |
1679 g_free(ccon->show); | |
1680 g_free(ccon->name); | |
1681 g_free(ccon); | |
1682 return 1; | |
1683 } | |
4293 | 1684 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1685 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1686 "Connected to chat room %s exchange %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1687 ccon->name, ccon->exchange); |
4194 | 1688 } break; |
3694 | 1689 |
4804 | 1690 case 0x0010: { /* icon */ |
1691 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_ICON, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1692 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1693 "unable to connect to icon server\n"); |
4804 | 1694 g_free(host); |
1695 return 1; | |
1696 } | |
1697 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); | |
1698 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_icon, 0); | |
1699 | |
1700 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1701 if (gaim_proxy_connect(account, host, port, oscar_icon_connect, gc) != 0) { |
4804 | 1702 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1703 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1704 "unable to connect to icon server\n"); |
4804 | 1705 g_free(host); |
1706 return 1; | |
1707 } | |
1708 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); | |
1709 } break; | |
1710 | |
3694 | 1711 case 0x0018: { /* email */ |
1712 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1713 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1714 "unable to connect to email server\n"); |
3694 | 1715 g_free(host); |
1716 return 1; | |
1717 } | |
4649 | 1718 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
3694 | 1719 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
1720 | |
1721 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1722 if (gaim_proxy_connect(account, host, port, oscar_email_connect, gc) != 0) { |
3694 | 1723 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1724 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1725 "unable to connect to email server\n"); |
3694 | 1726 g_free(host); |
1727 return 1; | |
1728 } | |
4293 | 1729 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
3694 | 1730 } break; |
1731 | |
2086 | 1732 default: /* huh? */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1733 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1734 "got redirect for unknown service 0x%04hx\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1735 redir->group); |
2086 | 1736 break; |
1737 } | |
1738 | |
1739 g_free(host); | |
1740 return 1; | |
1741 } | |
1742 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1743 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1744 GaimConnection *gc = sess->aux_data; |
7283 | 1745 OscarData *od = gc->proto_data; |
4738 | 1746 struct buddyinfo *bi; |
2993 | 1747 time_t time_idle = 0, signon = 0; |
1748 int type = 0; | |
1749 int caps = 0; | |
2086 | 1750 va_list ap; |
4738 | 1751 aim_userinfo_t *info; |
4194 | 1752 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1753 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1754 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1755 va_end(ap); |
1756 | |
2993 | 1757 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
1758 caps = info->capabilities; | |
3267 | 1759 if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
1760 type |= UC_AB; | |
1761 | |
4766 | 1762 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1763 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1764 type |= UC_UNCONFIRMED; | |
1765 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1766 type |= UC_ADMIN; | |
1767 if (info->flags & AIM_FLAG_AOL) | |
1768 type |= UC_AOL; | |
1769 if (info->flags & AIM_FLAG_FREE) | |
1770 type |= UC_NORMAL; | |
1771 if (info->flags & AIM_FLAG_AWAY) | |
1772 type |= UC_UNAVAILABLE; | |
1773 if (info->flags & AIM_FLAG_WIRELESS) | |
1774 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1775 } |
2993 | 1776 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1777 type = (info->icqinfo.status << 16); |
3013 | 1778 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1779 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1780 type |= UC_UNAVAILABLE; |
3013 | 1781 } |
2993 | 1782 } |
1783 | |
7141 | 1784 if (caps & AIM_CAPS_ICQ_DIRECT) |
1785 caps ^= AIM_CAPS_ICQ_DIRECT; | |
2993 | 1786 |
1787 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1788 time(&time_idle); |
1789 time_idle -= info->idletime*60; | |
2993 | 1790 } |
1791 | |
5836 | 1792 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
1793 signon = info->onlinesince; | |
1794 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
2993 | 1795 signon = time(NULL) - info->sessionlen; |
2086 | 1796 |
5575 | 1797 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), info->sn)) |
1798 gaim_connection_set_display_name(gc, info->sn); | |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1799 |
7261 | 1800 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
4738 | 1801 if (!bi) { |
1802 bi = g_new0(struct buddyinfo, 1); | |
7261 | 1803 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, info->sn)), bi); |
4738 | 1804 } |
4739 | 1805 bi->typingnot = FALSE; |
1806 bi->ico_informed = FALSE; | |
6857 | 1807 bi->ipaddr = info->icqinfo.ipaddr; |
1808 | |
1809 /* Available message stuff */ | |
6292 | 1810 free(bi->availmsg); |
7011 | 1811 if (info->avail != NULL) |
1812 if (info->avail_encoding) { | |
1813 gchar *enc = g_strdup_printf("charset=\"%s\"", info->avail_encoding); | |
1814 bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len); | |
6292 | 1815 g_free(enc); |
1816 } else { | |
1817 /* No explicit encoding means utf8. Yay. */ | |
7011 | 1818 bi->availmsg = g_strdup(info->avail); |
6292 | 1819 } |
5837 | 1820 else |
6292 | 1821 bi->availmsg = NULL; |
4732 | 1822 |
4804 | 1823 /* Server stored icon stuff */ |
4853 | 1824 if (info->iconcsumlen) { |
7125 | 1825 const char *filename = NULL, *saved_b16 = NULL; |
1826 char *b16 = NULL; | |
7093 | 1827 GaimBuddy *b = NULL; |
4853 | 1828 |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
1829 b16 = gaim_base16_encode(info->iconcsum, info->iconcsumlen); |
4853 | 1830 b = gaim_find_buddy(gc->account, info->sn); |
7093 | 1831 /* |
1832 * If for some reason the checksum is valid, but cached file is not.. | |
1833 * we want to know. | |
1834 */ | |
7693 | 1835 filename = gaim_blist_node_get_string((GaimBlistNode*)b, "buddy_icon"); |
7093 | 1836 if (filename != NULL) { |
1837 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
7693 | 1838 saved_b16 = gaim_blist_node_get_string((GaimBlistNode*)b, |
1839 "icon_checksum"); | |
7093 | 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) { | |
7475 | 1848 od->requesticon = g_slist_append(od->requesticon, g_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; |
7475 | 2163 gchar *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))) && |
7406 | 2196 (args->icbmflags & AIM_IMFLAGS_BUDDYREQ) && !bi->ico_sent && bi->ico_informed) { |
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); |
7475 | 2240 tmp = g_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); |
7475 | 2262 tmp = g_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 |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2267 /* gaim_str_strip_cr(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) { |
8092 | 2386 } else if (args->reqclass & AIM_CAPS_TALK) { |
2246
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++) { |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2567 gaim_str_strip_cr(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) { |
7385 | 2594 if (msg2[1] != NULL) { |
2595 gchar *uin = g_strdup_printf("%u", args->uin); | |
2596 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", | |
2597 msg2[1], | |
2598 (msg2[0] && msg2[0][0]) ? msg2[0] : msg2[1]); | |
2599 serv_got_im(gc, uin, message, 0, time(NULL)); | |
2600 g_free(uin); | |
2601 g_free(message); | |
2602 } | |
3453 | 2603 } |
2604 } break; | |
2605 | |
4173 | 2606 case 0x06: { /* Someone requested authorization */ |
4076 | 2607 if (i >= 6) { |
4230 | 2608 struct name_data *data = g_new(struct name_data, 1); |
5556 | 2609 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
|
2610 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5556 | 2611 "Received an authorization request from UIN %u\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2612 args->uin); |
4076 | 2613 data->gc = gc; |
5556 | 2614 data->name = g_strdup_printf("%u", args->uin); |
4230 | 2615 data->nick = NULL; |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2616 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2617 gaim_request_action(gc, NULL, _("Authorization Request"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2618 dialog_msg, 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2619 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2620 G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2621 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2622 G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4076 | 2623 g_free(dialog_msg); |
2624 } | |
3141 | 2625 } break; |
2626 | |
4173 | 2627 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2628 if (i >= 1) { |
7023 | 2629 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
|
2630 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2631 dialog_msg); |
4076 | 2632 g_free(dialog_msg); |
2633 } | |
3141 | 2634 } break; |
2635 | |
4173 | 2636 case 0x08: { /* Someone has granted you authorization */ |
7023 | 2637 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
|
2638 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2639 dialog_msg); |
3141 | 2640 g_free(dialog_msg); |
2641 } break; | |
2642 | |
4333 | 2643 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2644 if (i >= 5) { | |
2645 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
|
2646 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2647 g_free(dialog_msg); |
2648 } | |
2649 } break; | |
2650 | |
4173 | 2651 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2652 if (i >= 6) { |
4194 | 2653 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
|
2654 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2655 g_free(dialog_msg); |
2656 } | |
4075 | 2657 } break; |
2658 | |
4173 | 2659 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2660 if (i >= 6) { |
4308 | 2661 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
|
2662 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2663 g_free(dialog_msg); |
2664 } | |
4075 | 2665 } break; |
2666 | |
4173 | 2667 case 0x12: { |
3141 | 2668 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
7023 | 2669 /* Someone added you to their buddy list? */ |
3141 | 2670 } break; |
2671 | |
7023 | 2672 case 0x13: { /* Someone has sent you some ICQ buddies */ |
7631 | 2673 guint i, num; |
3453 | 2674 gchar **text; |
4173 | 2675 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2676 if (text) { |
2677 num = 0; | |
2678 for (i=0; i<strlen(text[0]); i++) | |
2679 num = num*10 + text[0][i]-48; | |
2680 for (i=0; i<num; i++) { | |
4230 | 2681 struct name_data *data = g_new(struct name_data, 1); |
7023 | 2682 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 | 2683 data->gc = gc; |
4790 | 2684 data->name = g_strdup(text[i*2+1]); |
2685 data->nick = g_strdup(text[i*2+2]); | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2686 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2687 gaim_request_action(gc, NULL, message, |
7023 | 2688 _("Do you want to add this buddy " |
2689 "to your buddy list?"), | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2690 0, data, 2, |
7023 | 2691 _("Add"), G_CALLBACK(gaim_icq_buddyadd), |
5836 | 2692 _("Decline"), G_CALLBACK(oscar_free_name_data)); |
3453 | 2693 g_free(message); |
2694 } | |
2695 g_strfreev(text); | |
2696 } | |
2697 } break; | |
2698 | |
7023 | 2699 case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ |
3453 | 2700 /* This is boring and silly. */ |
2701 } break; | |
2702 | |
3141 | 2703 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2704 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2705 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2706 "(type 0x%02hhx).\n", args->type); |
3141 | 2707 } break; |
2708 } | |
2709 | |
4076 | 2710 g_strfreev(msg1); |
2711 g_strfreev(msg2); | |
2712 | |
3141 | 2713 return 1; |
2714 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2715 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2716 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2717 fu16_t channel; |
2718 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2719 aim_userinfo_t *userinfo; |
2086 | 2720 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2721 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2722 va_start(ap, fr); |
4200 | 2723 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2724 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2725 |
3141 | 2726 switch (channel) { |
2727 case 1: { /* standard message */ | |
2728 struct aim_incomingim_ch1_args *args; | |
2729 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2730 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2731 } break; | |
2732 | |
2733 case 2: { /* rendevous */ | |
2734 struct aim_incomingim_ch2_args *args; | |
2735 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2736 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2737 } break; | |
2738 | |
2739 case 4: { /* ICQ */ | |
2740 struct aim_incomingim_ch4_args *args; | |
2741 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2742 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2743 } break; |
2744 | |
2745 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2746 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2747 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2748 "0x%04hx).", channel); |
3141 | 2749 } break; |
2086 | 2750 } |
2751 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2752 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2753 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2754 return ret; |
2086 | 2755 } |
2756 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2757 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2758 char *buf; |
2086 | 2759 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2760 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2761 aim_userinfo_t *userinfo; |
2086 | 2762 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2763 va_start(ap, fr); |
4200 | 2764 chan = (fu16_t)va_arg(ap, unsigned int); |
2765 userinfo = va_arg(ap, aim_userinfo_t *); | |
2766 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2767 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2768 va_end(ap); |
2769 | |
2770 switch(reason) { | |
5420 | 2771 case 0: /* Invalid (0) */ |
2772 buf = g_strdup_printf( | |
2773 ngettext( | |
4276 | 2774 "You missed %hu message from %s because it was invalid.", |
2775 "You missed %hu messages from %s because they were invalid.", | |
2776 nummissed), | |
4282 | 2777 nummissed, |
2778 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2779 break; |
5420 | 2780 case 1: /* Message too large */ |
2781 buf = g_strdup_printf( | |
2782 ngettext( | |
4276 | 2783 "You missed %hu message from %s because it was too large.", |
2784 "You missed %hu messages from %s because they were too large.", | |
2785 nummissed), | |
4282 | 2786 nummissed, |
2787 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2788 break; |
5420 | 2789 case 2: /* Rate exceeded */ |
2790 buf = g_strdup_printf( | |
2791 ngettext( | |
4276 | 2792 "You missed %hu message from %s because the rate limit has been exceeded.", |
2793 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2794 nummissed), | |
4282 | 2795 nummissed, |
2796 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2797 break; |
5420 | 2798 case 3: /* Evil Sender */ |
2799 buf = g_strdup_printf( | |
2800 ngettext( | |
4276 | 2801 "You missed %hu message from %s because he/she was too evil.", |
2802 "You missed %hu messages from %s because he/she was too evil.", | |
2803 nummissed), | |
4282 | 2804 nummissed, |
2805 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2806 break; |
5420 | 2807 case 4: /* Evil Receiver */ |
2808 buf = g_strdup_printf( | |
2809 ngettext( | |
4276 | 2810 "You missed %hu message from %s because you are too evil.", |
2811 "You missed %hu messages from %s because you are too evil.", | |
2812 nummissed), | |
4282 | 2813 nummissed, |
2814 userinfo->sn); | |
2086 | 2815 break; |
2816 default: | |
5420 | 2817 buf = g_strdup_printf( |
2818 ngettext( | |
4276 | 2819 "You missed %hu message from %s for an unknown reason.", |
2820 "You missed %hu messages from %s for an unknown reason.", | |
2821 nummissed), | |
4282 | 2822 nummissed, |
2823 userinfo->sn); | |
2086 | 2824 break; |
2825 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2826 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2827 g_free(buf); |
2086 | 2828 |
2829 return 1; | |
2830 } | |
2831 | |
3212 | 2832 static char *gaim_icq_status(int state) { |
2833 /* Make a cute little string that shows the status of the dude or dudet */ | |
2834 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2835 return g_strdup_printf(_("Free For Chat")); |
3212 | 2836 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2837 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2838 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2839 return g_strdup_printf(_("Not Available")); |
3212 | 2840 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2841 return g_strdup_printf(_("Occupied")); |
3212 | 2842 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2843 return g_strdup_printf(_("Away")); |
3212 | 2844 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2845 return g_strdup_printf(_("Web Aware")); |
3212 | 2846 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2847 return g_strdup_printf(_("Invisible")); |
3212 | 2848 else |
4342 | 2849 return g_strdup_printf(_("Online")); |
3212 | 2850 } |
2851 | |
4194 | 2852 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
5575 | 2853 GaimConnection *gc = sess->aux_data; |
7283 | 2854 OscarData *od = gc->proto_data; |
4617 | 2855 |
2856 /* BBB */ | |
3630 | 2857 switch (reason) { |
4151 | 2858 case 3: { /* Decline sendfile. */ |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2859 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2860 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2861 "AAA - Other user declined file transfer\n"); |
4617 | 2862 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
|
2863 gaim_xfer_cancel_remote(xfer); |
4151 | 2864 } break; |
2865 | |
2866 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2867 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2868 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2869 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2870 } |
3630 | 2871 |
2872 } | |
2873 | |
2874 return 0; | |
2875 } | |
2876 | |
4194 | 2877 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
5575 | 2878 GaimConnection *gc = sess->aux_data; |
4151 | 2879 |
2880 switch(reason) { | |
2881 case 0x0003: { /* Reply from an ICQ status message request */ | |
2882 char *status_msg = gaim_icq_status(state); | |
2883 char *dialog_msg, **splitmsg; | |
2884 | |
2885 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2886 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2887 | |
7011 | 2888 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
7032 | 2889 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, dialog_msg, NULL, NULL); |
4151 | 2890 |
2891 g_free(status_msg); | |
2892 g_free(dialog_msg); | |
2893 g_strfreev(splitmsg); | |
2894 } break; | |
2895 | |
2896 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2897 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2898 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2899 "Type 0x%04hx\n", who, reason); |
4151 | 2900 } break; |
2901 } /* end of switch */ | |
2902 | |
2903 return 0; | |
2904 } | |
2905 | |
3212 | 2906 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2907 va_list ap; | |
2908 fu16_t chan, reason; | |
2909 char *who; | |
2910 | |
2911 va_start(ap, fr); | |
4200 | 2912 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2913 who = va_arg(ap, char *); |
4200 | 2914 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2915 |
3952 | 2916 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2917 char *cookie = va_arg(ap, char *); |
4151 | 2918 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2919 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2920 fu32_t state = 0; |
4151 | 2921 char *msg = NULL; |
2922 if (reason == 0x0003) { | |
4200 | 2923 state = va_arg(ap, fu32_t); |
4151 | 2924 msg = va_arg(ap, char *); |
2925 } | |
2926 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2927 } | |
3952 | 2928 |
3212 | 2929 va_end(ap); |
2930 | |
2931 return 1; | |
2932 } | |
2933 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2934 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2935 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2936 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2937 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2938 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2939 va_start(ap, fr); |
4199 | 2940 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2941 va_end(ap); |
2942 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2943 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2944 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2945 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2946 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2947 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2948 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2949 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2950 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2951 |
2086 | 2952 return 1; |
2953 } | |
2954 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2955 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2956 #if 0 |
5575 | 2957 GaimConnection *gc = sess->aux_data; |
7283 | 2958 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2959 GaimXfer *xfer; |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2960 #endif |
4617 | 2961 va_list ap; |
2962 fu16_t reason; | |
2963 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2964 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2965 va_start(ap, fr); |
4617 | 2966 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 2967 data = va_arg(ap, char *); |
2086 | 2968 va_end(ap); |
2969 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2970 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2971 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 2972 |
2973 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2974 #if 0 |
4617 | 2975 /* If this was a file transfer request, data is a cookie */ |
2976 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
|
2977 gaim_xfer_cancel_remote(xfer); |
3630 | 2978 return 1; |
2979 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2980 #endif |
3630 | 2981 |
4617 | 2982 /* Data is assumed to be the destination sn */ |
2983 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
|
2984 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2985 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 2986 g_free(buf); |
2086 | 2987 |
2988 return 1; | |
2989 } | |
2990 | |
3595 | 2991 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2992 GaimConnection *gc = sess->aux_data; |
3595 | 2993 va_list ap; |
2994 fu16_t type1, type2; | |
2995 char *sn; | |
2996 | |
2997 va_start(ap, fr); | |
4199 | 2998 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 2999 sn = va_arg(ap, char *); |
4199 | 3000 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 3001 va_end(ap); |
3002 | |
3003 switch (type2) { | |
3004 case 0x0000: { /* Text has been cleared */ | |
3005 serv_got_typing_stopped(gc, sn); | |
3006 } break; | |
3007 | |
3008 case 0x0001: { /* Paused typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3009 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
3595 | 3010 } break; |
3011 | |
3012 case 0x0002: { /* Typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3013 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
3595 | 3014 } break; |
3015 | |
3016 default: { | |
5435 | 3017 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 | 3018 } break; |
3019 } | |
3020 | |
3021 return 1; | |
3022 } | |
3023 | |
7141 | 3024 /* |
3025 * We get this error when there was an error in the locate family. This | |
7259 | 3026 * happens when you request info of someone who is offline. |
7141 | 3027 */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3028 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
7259 | 3029 gchar *buf; |
2086 | 3030 va_list ap; |
5420 | 3031 fu16_t reason; |
2086 | 3032 char *destn; |
3033 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3034 va_start(ap, fr); |
4199 | 3035 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3036 destn = va_arg(ap, char *); |
3037 va_end(ap); | |
3038 | |
7781 | 3039 if (destn == NULL) |
7793 | 3040 return 1; |
3041 | |
3042 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); | |
7781 | 3043 |
3044 gaim_notify_error(sess->aux_data, NULL, buf, | |
3045 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); | |
3046 g_free(buf); | |
2086 | 3047 |
3048 return 1; | |
3049 } | |
3050 | |
6982 | 3051 #if 0 |
2086 | 3052 static char *images(int flags) { |
3053 static char buf[1024]; | |
3101 | 3054 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3055 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3056 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3057 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3058 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3059 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3060 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3061 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3062 return buf; |
3063 } | |
6982 | 3064 #endif |
3101 | 3065 |
2920 | 3066 static char *caps_string(guint caps) |
3067 { | |
3068 static char buf[512], *tmp; | |
3069 int count = 0, i = 0; | |
3070 guint bit = 1; | |
4742 | 3071 |
3072 if (!caps) { | |
4744 | 3073 return NULL; |
6318 | 3074 } else while (bit <= AIM_CAPS_LAST) { |
2920 | 3075 if (bit & caps) { |
3076 switch (bit) { | |
6871 | 3077 case AIM_CAPS_BUDDYICON: |
2920 | 3078 tmp = _("Buddy Icon"); |
3079 break; | |
8092 | 3080 case AIM_CAPS_TALK: |
2920 | 3081 tmp = _("Voice"); |
3082 break; | |
6871 | 3083 case AIM_CAPS_DIRECTIM: |
7141 | 3084 tmp = _("AIM Direct IM"); |
2920 | 3085 break; |
6871 | 3086 case AIM_CAPS_CHAT: |
2920 | 3087 tmp = _("Chat"); |
3088 break; | |
6871 | 3089 case AIM_CAPS_GETFILE: |
2920 | 3090 tmp = _("Get File"); |
3091 break; | |
6871 | 3092 case AIM_CAPS_SENDFILE: |
2920 | 3093 tmp = _("Send File"); |
3094 break; | |
6871 | 3095 case AIM_CAPS_GAMES: |
3096 case AIM_CAPS_GAMES2: | |
2920 | 3097 tmp = _("Games"); |
3098 break; | |
8092 | 3099 case AIM_CAPS_ADDINS: |
4898 | 3100 tmp = _("Add-Ins"); |
2920 | 3101 break; |
6871 | 3102 case AIM_CAPS_SENDBUDDYLIST: |
2920 | 3103 tmp = _("Send Buddy List"); |
3104 break; | |
7141 | 3105 case AIM_CAPS_ICQ_DIRECT: |
3106 tmp = _("ICQ Direct Connect"); | |
2920 | 3107 break; |
6871 | 3108 case AIM_CAPS_APINFO: |
2920 | 3109 tmp = _("AP User"); |
3110 break; | |
6871 | 3111 case AIM_CAPS_ICQRTF: |
2920 | 3112 tmp = _("ICQ RTF"); |
3113 break; | |
6871 | 3114 case AIM_CAPS_EMPTY: |
2920 | 3115 tmp = _("Nihilist"); |
3116 break; | |
6871 | 3117 case AIM_CAPS_ICQSERVERRELAY: |
2920 | 3118 tmp = _("ICQ Server Relay"); |
3119 break; | |
6871 | 3120 case AIM_CAPS_ICQUTF8OLD: |
3121 tmp = _("Old ICQ UTF8"); | |
2920 | 3122 break; |
6871 | 3123 case AIM_CAPS_TRILLIANCRYPT: |
2920 | 3124 tmp = _("Trillian Encryption"); |
3125 break; | |
6871 | 3126 case AIM_CAPS_ICQUTF8: |
4742 | 3127 tmp = _("ICQ UTF8"); |
3128 break; | |
6318 | 3129 case AIM_CAPS_HIPTOP: |
3130 tmp = _("Hiptop"); | |
3131 break; | |
6871 | 3132 case AIM_CAPS_SECUREIM: |
7334 | 3133 tmp = _("Security Enabled"); |
6871 | 3134 break; |
7582 | 3135 case AIM_CAPS_VIDEO: |
3136 tmp = _("Video Chat"); | |
3137 break; | |
8092 | 3138 /* Not actually sure about this one... WinAIM doesn't show anything */ |
7945 | 3139 case AIM_CAPS_ICHATAV: |
3140 tmp = _("iChat AV"); | |
3141 break; | |
8092 | 3142 case AIM_CAPS_LIVEVIDEO: |
3143 tmp = _("Live Video"); | |
3144 break; | |
3145 case AIM_CAPS_CAMERA: | |
3146 tmp = _("Camera"); | |
3147 break; | |
2920 | 3148 default: |
3149 tmp = NULL; | |
3150 break; | |
3151 } | |
3152 if (tmp) | |
3153 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3154 tmp); | |
3155 count++; | |
3156 } | |
3157 bit <<= 1; | |
3158 } | |
4744 | 3159 return buf; |
2920 | 3160 } |
3161 | |
7011 | 3162 static int gaim_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3163 GaimConnection *gc = sess->aux_data; |
7011 | 3164 GString *text; |
7162 | 3165 gchar *info_utf8 = NULL, *away_utf8 = NULL; |
3166 const char *final = NULL; | |
4791 | 3167 va_list ap; |
7011 | 3168 aim_userinfo_t *userinfo; |
2086 | 3169 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3170 va_start(ap, fr); |
7011 | 3171 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3172 va_end(ap); |
3173 | |
7011 | 3174 text = g_string_new(""); |
3175 g_string_append_printf(text, _("Username: <b>%s</b><br>\n"), userinfo->sn); | |
3176 g_string_append_printf(text, _("Warning Level: <b>%d%%</b><br>\n"), (int)((userinfo->warnlevel/10.0) + 0.5)); | |
3177 | |
3178 if (userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) | |
3179 g_string_append_printf(text, _("Online Since: <b>%s</b><br>\n"), | |
3180 asctime(localtime((time_t *)&userinfo->onlinesince))); | |
3181 | |
3182 if (userinfo->present & AIM_USERINFO_PRESENT_MEMBERSINCE) | |
3183 g_string_append_printf(text, _("Member Since: <b>%s</b><br>\n"), | |
3184 asctime(localtime((time_t *)&userinfo->membersince))); | |
3185 | |
3186 if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3187 gchar *itime = gaim_str_seconds_to_string(userinfo->idletime*60); |
7011 | 3188 g_string_append_printf(text, _("Idle: <b>%s</b>"), itime); |
4426 | 3189 g_free(itime); |
2993 | 3190 } else |
7011 | 3191 g_string_append_printf(text, _("Idle: <b>Active</b>")); |
3192 | |
3193 if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
3194 away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
3195 if (away_utf8 != NULL) { | |
7129 | 3196 g_string_append_printf(text, "<hr>%s", away_utf8); |
7011 | 3197 g_free(away_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3198 } |
7011 | 3199 } |
3200 | |
3201 if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) { | |
3202 info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len); | |
3203 if (info_utf8 != NULL) { | |
7129 | 3204 g_string_append_printf(text, "<hr>%s", info_utf8); |
7011 | 3205 g_free(info_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3206 } |
7011 | 3207 } |
3208 | |
7164 | 3209 final = gaim_str_sub_away_formatters(text->str, gaim_account_get_username(gaim_connection_get_account(gc))); |
7011 | 3210 g_string_free(text, TRUE); |
7091 | 3211 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, final, NULL, NULL); |
4151 | 3212 |
2086 | 3213 return 1; |
3214 } | |
3215 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3216 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3217 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3218 fu16_t id; |
2086 | 3219 va_list ap; |
3220 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3221 va_start(ap, fr); |
4199 | 3222 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3223 msg = va_arg(ap, char *); |
3224 va_end(ap); | |
3225 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3226 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3227 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3228 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3229 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3230 _("Your AIM connection may be lost."), NULL); |
2086 | 3231 |
3232 return 1; | |
3233 } | |
3234 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3235 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3236 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3237 fu16_t type; |
5575 | 3238 GaimConnection *gc = sess->aux_data; |
7283 | 3239 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 3240 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3241 va_start(ap, fr); |
4199 | 3242 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3243 |
3244 switch(type) { | |
3245 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3246 fu8_t maxrooms; |
2086 | 3247 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3248 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3249 |
4199 | 3250 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3251 exchangecount = va_arg(ap, int); |
3252 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3253 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3254 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3255 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3256 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3257 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3258 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3259 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3260 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3261 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3262 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3263 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3264 while (od->create_rooms) { |
3265 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3266 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3267 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3268 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3269 g_free(cr->name); |
4617 | 3270 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3271 g_free(cr); |
2086 | 3272 } |
3273 } | |
3274 break; | |
3275 case 0x0008: { | |
3276 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3277 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3278 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3279 fu32_t createtime; |
2086 | 3280 |
3281 fqcn = va_arg(ap, char *); | |
4200 | 3282 instance = (fu16_t)va_arg(ap, unsigned int); |
3283 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3284 flags = (fu16_t)va_arg(ap, unsigned int); | |
3285 createtime = va_arg(ap, fu32_t); | |
3286 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3287 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3288 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3289 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3290 name = va_arg(ap, char *); | |
3291 ck = va_arg(ap, char *); | |
4194 | 3292 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3293 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3294 "created room: %s %hu %hu %hu %u %hu %hu %hhu %hu %s %s\n", |
2086 | 3295 fqcn, |
3296 exchange, instance, flags, | |
3297 createtime, | |
3298 maxmsglen, maxoccupancy, createperms, unknown, | |
3299 name, ck); | |
4617 | 3300 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3301 } |
3302 break; | |
3303 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3304 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3305 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3306 break; |
3307 } | |
4194 | 3308 |
3309 va_end(ap); | |
3310 | |
2086 | 3311 return 1; |
3312 } | |
3313 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3314 static int gaim_conv_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3315 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3316 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3317 aim_userinfo_t *info; |
5575 | 3318 GaimConnection *g = sess->aux_data; |
2086 | 3319 |
3320 struct chat_connection *c = NULL; | |
3321 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3322 va_start(ap, fr); |
2086 | 3323 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3324 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3325 va_end(ap); |
3326 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3327 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3328 if (!c) |
3329 return 1; | |
3330 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3331 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3332 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3333 |
3334 return 1; | |
3335 } | |
3336 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3337 static int gaim_conv_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3338 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3339 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3340 aim_userinfo_t *info; |
5575 | 3341 GaimConnection *g = sess->aux_data; |
2086 | 3342 |
3343 struct chat_connection *c = NULL; | |
3344 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3345 va_start(ap, fr); |
2086 | 3346 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3347 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3348 va_end(ap); |
3349 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3350 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3351 if (!c) |
3352 return 1; | |
3353 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3354 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3355 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3356 |
3357 return 1; | |
3358 } | |
3359 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3360 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
|
3361 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3362 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3363 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3364 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3365 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3366 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3367 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3368 fu32_t creationtime; |
5575 | 3369 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3370 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
|
3371 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3372 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3373 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3374 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3375 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3376 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3377 roomdesc = va_arg(ap, char *); |
4200 | 3378 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3379 creationtime = va_arg(ap, fu32_t); | |
3380 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3381 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3382 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3383 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3384 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3385 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3386 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3387 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3388 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3389 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3390 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3391 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3392 |
2086 | 3393 return 1; |
3394 } | |
3395 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3396 static int gaim_conv_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3397 GaimConnection *gc = sess->aux_data; |
2086 | 3398 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3399 aim_userinfo_t *info; |
2086 | 3400 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3401 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 3402 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3403 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3404 info = va_arg(ap, aim_userinfo_t *); |
4194 | 3405 msg = va_arg(ap, char *); |
3406 va_end(ap); | |
2086 | 3407 |
4269 | 3408 serv_got_chat_in(gc, ccon->id, info->sn, 0, msg, time((time_t)NULL)); |
2086 | 3409 |
3410 return 1; | |
3411 } | |
3412 | |
3694 | 3413 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3414 va_list ap; | |
5575 | 3415 GaimConnection *gc = sess->aux_data; |
3694 | 3416 struct aim_emailinfo *emailinfo; |
3725 | 3417 int havenewmail; |
7297 | 3418 char *alertitle, *alerturl; |
3694 | 3419 |
3420 va_start(ap, fr); | |
3421 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3422 havenewmail = va_arg(ap, int); |
7301 | 3423 alertitle = va_arg(ap, char *); |
3424 alerturl = va_arg(ap, char *); | |
3694 | 3425 va_end(ap); |
3426 | |
5628 | 3427 if (emailinfo && gaim_account_get_check_mail(gc->account)) { |
5575 | 3428 gchar *to = g_strdup_printf("%s@%s", gaim_account_get_username(gaim_connection_get_account(gc)), emailinfo->domain); |
5542 | 3429 if (emailinfo->unread && havenewmail) |
3430 gaim_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); | |
5537 | 3431 g_free(to); |
3694 | 3432 } |
7297 | 3433 |
7301 | 3434 if (alertitle) |
7313 | 3435 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Got an alert '%s' %s\n", alertitle, alerturl ? alerturl : ""); |
3694 | 3436 |
3437 return 1; | |
3438 } | |
3439 | |
4804 | 3440 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3441 GaimConnection *gc = sess->aux_data; |
7283 | 3442 OscarData *od = gc->proto_data; |
4804 | 3443 char *sn; |
3444 | |
3445 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3446 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3447 "removing %s from hash table\n", sn); |
4804 | 3448 od->requesticon = g_slist_remove(od->requesticon, sn); |
3449 free(sn); | |
3450 | |
3451 if (od->icontimer) | |
3452 g_source_remove(od->icontimer); | |
3453 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3454 | |
3455 return 1; | |
3456 } | |
3457 | |
3458 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 3459 GaimConnection *gc = sess->aux_data; |
7283 | 3460 OscarData *od = gc->proto_data; |
4804 | 3461 GSList *cur; |
3462 va_list ap; | |
3463 char *sn; | |
4853 | 3464 fu8_t *iconcsum, *icon; |
3465 fu16_t iconcsumlen, iconlen; | |
4804 | 3466 |
3467 va_start(ap, fr); | |
3468 sn = va_arg(ap, char *); | |
4853 | 3469 iconcsum = va_arg(ap, fu8_t *); |
3470 iconcsumlen = va_arg(ap, int); | |
4804 | 3471 icon = va_arg(ap, fu8_t *); |
3472 iconlen = va_arg(ap, int); | |
3473 va_end(ap); | |
3474 | |
4853 | 3475 if (iconlen > 0) { |
3476 char *b16; | |
6695 | 3477 GaimBuddy *b = gaim_find_buddy(gc->account, sn); |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3478 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3479 sn, icon, iconlen); |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
3480 b16 = gaim_base16_encode(iconcsum, iconcsumlen); |
5129 | 3481 if (b16) { |
7693 | 3482 gaim_blist_node_set_string((GaimBlistNode*)b, "icon_checksum", b16); |
5129 | 3483 gaim_blist_save(); |
7162 | 3484 g_free(b16); |
5129 | 3485 } |
4853 | 3486 } |
4804 | 3487 |
3488 cur = od->requesticon; | |
3489 while (cur) { | |
3490 char *cursn = cur->data; | |
3491 if (!aim_sncmp(cursn, sn)) { | |
3492 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3493 free(cursn); | |
3494 cur = od->requesticon; | |
3495 } else | |
3496 cur = cur->next; | |
3497 } | |
3498 | |
3499 if (od->icontimer) | |
3500 g_source_remove(od->icontimer); | |
3501 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3502 | |
3503 return 1; | |
3504 } | |
3505 | |
3506 static gboolean gaim_icon_timerfunc(gpointer data) { | |
5575 | 3507 GaimConnection *gc = data; |
7283 | 3508 OscarData *od = gc->proto_data; |
7011 | 3509 aim_userinfo_t *userinfo; |
4804 | 3510 aim_conn_t *conn; |
3511 | |
3512 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
5892 | 3513 if (!conn) { |
3514 if (!od->iconconnecting) { | |
3515 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
3516 od->iconconnecting = TRUE; | |
3517 } | |
4804 | 3518 return FALSE; |
3519 } | |
3520 | |
5842 | 3521 if (od->set_icon) { |
6039 | 3522 struct stat st; |
3523 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
3524 if (iconfile == NULL) { | |
3525 /* Set an empty icon, or something */ | |
3526 } else if (!stat(iconfile, &st)) { | |
3527 char *buf = g_malloc(st.st_size); | |
3528 FILE *file = fopen(iconfile, "rb"); | |
3529 if (file) { | |
3530 fread(buf, 1, st.st_size, file); | |
3531 fclose(file); | |
3532 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
3533 "Uploading icon to icon server\n"); | |
6879 | 3534 aim_bart_upload(od->sess, buf, st.st_size); |
5842 | 3535 } else |
3536 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 3537 "Can't open buddy icon file!\n"); |
3538 g_free(buf); | |
3539 } else { | |
3540 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
3541 "Can't stat buddy icon file!\n"); | |
5842 | 3542 } |
3543 od->set_icon = FALSE; | |
3544 } | |
3545 | |
3546 if (!od->requesticon) { | |
3547 gaim_debug(GAIM_DEBUG_MISC, "oscar", | |
3548 "no more icons to request\n"); | |
3549 return FALSE; | |
3550 } | |
3551 | |
7045 | 3552 userinfo = aim_locate_finduserinfo(od->sess, (char *)od->requesticon->data); |
7011 | 3553 if ((userinfo != NULL) && (userinfo->iconcsumlen > 0)) { |
3554 aim_bart_request(od->sess, od->requesticon->data, userinfo->iconcsum, userinfo->iconcsumlen); | |
4804 | 3555 return FALSE; |
3556 } else { | |
3557 char *sn = od->requesticon->data; | |
3558 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3559 free(sn); | |
3560 } | |
3561 | |
3562 return TRUE; | |
3563 } | |
3564 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3565 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3566 * 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
|
3567 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3568 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3569 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3570 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3571 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3572 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3573 va_start(ap, fr); |
4199 | 3574 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3575 sn = va_arg(ap, char *); |
3576 va_end(ap); | |
3577 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3578 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 3579 |
3580 return 1; | |
3581 } | |
3582 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3583 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
|
3584 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3585 "invalid", |
4194 | 3586 "change", |
3587 "warning", | |
3588 "limit", | |
3589 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3590 }; |
2086 | 3591 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3592 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3593 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3594 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3595 va_start(ap, fr); |
4200 | 3596 code = (fu16_t)va_arg(ap, unsigned int); |
3597 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3598 windowsize = va_arg(ap, fu32_t); | |
3599 clear = va_arg(ap, fu32_t); | |
3600 alert = va_arg(ap, fu32_t); | |
3601 limit = va_arg(ap, fu32_t); | |
3602 disconnect = va_arg(ap, fu32_t); | |
3603 currentavg = va_arg(ap, fu32_t); | |
3604 maxavg = va_arg(ap, fu32_t); | |
2086 | 3605 va_end(ap); |
3606 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3607 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3608 "rate %s (param ID 0x%04hx): curavg = %u, maxavg = %u, alert at %u, " |
3609 "clear warning at %u, limit at %u, disconnect at %u (window size = %u)\n", | |
2086 | 3610 (code < 5) ? codes[code] : codes[0], |
3611 rateclass, | |
3612 currentavg, maxavg, | |
3613 alert, clear, | |
3614 limit, disconnect, | |
3615 windowsize); | |
3616 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3617 /* XXX fix these values */ |
2086 | 3618 if (code == AIM_RATE_CODE_CHANGE) { |
3619 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3620 aim_conn_setlatency(fr->conn, 0); |
2086 | 3621 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3622 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3623 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3624 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
6040 | 3625 _("The last action you attempted could not be " |
3626 "performed because you are over the rate limit. " | |
3627 "Please wait 10 seconds and try again.")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3628 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3629 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3630 aim_conn_setlatency(fr->conn, 0); |
2086 | 3631 } |
3632 | |
3633 return 1; | |
3634 } | |
3635 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3636 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3637 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3638 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3639 aim_userinfo_t *userinfo; |
5575 | 3640 GaimConnection *gc = sess->aux_data; |
2086 | 3641 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3642 va_start(ap, fr); |
4199 | 3643 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3644 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3645 va_end(ap); |
3646 | |
7111 | 3647 serv_got_eviled(gc, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); |
2086 | 3648 |
3649 return 1; | |
3650 } | |
3651 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3652 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
|
3653 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3654 aim_userinfo_t *info; |
5575 | 3655 GaimConnection *gc = sess->aux_data; |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3656 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3657 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3658 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3659 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3660 |
5628 | 3661 gc->evil = (info->warnlevel/10.0) + 0.5; |
4841 | 3662 |
7872 | 3663 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
4841 | 3664 gc->login_time_official = info->onlinesince; |
7872 | 3665 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) |
3666 gc->login_time_official = time(NULL) - info->sessionlen; | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3667 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3668 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3669 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3670 |
4649 | 3671 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3672 GaimConnection *gc = sess->aux_data; |
7283 | 3673 OscarData *od = gc->proto_data; |
4649 | 3674 va_list ap; |
3675 fu16_t code; | |
3676 char *msg; | |
3677 | |
3678 va_start(ap, fr); | |
3679 code = (fu16_t)va_arg(ap, int); | |
3680 msg = va_arg(ap, char *); | |
3681 va_end(ap); | |
3682 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3683 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3684 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3685 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3686 if (code == 0x0001) { |
6113 | 3687 gc->wants_to_die = TRUE; |
5579 | 3688 gaim_connection_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3689 } else { |
5579 | 3690 gaim_connection_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3691 } |
4666 | 3692 od->killme = TRUE; |
4649 | 3693 } |
3694 | |
3695 return 1; | |
3696 } | |
3697 | |
2675 | 3698 static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
7283 | 3699 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3700 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3701 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3702 |
3703 #ifndef NOSSI | |
7334 | 3704 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting rights and list\n"); |
4889 | 3705 aim_ssi_reqrights(sess); |
6350 | 3706 aim_ssi_reqdata(sess); |
4230 | 3707 #endif |
3708 | |
7011 | 3709 aim_locate_reqrights(sess); |
7285 | 3710 aim_buddylist_reqrights(sess, fr->conn); |
4617 | 3711 aim_im_reqparams(sess); |
7334 | 3712 aim_bos_reqrights(sess, fr->conn); /* XXX - Don't call this with ssi */ |
4230 | 3713 |
3714 #ifdef NOSSI | |
7334 | 3715 gaim_debug(GAIM_DEBUG_INFO, "oscar", "bos: requesting rights\n"); |
3716 aim_bos_reqrights(sess, fr->conn); | |
4230 | 3717 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); |
3718 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3719 #endif | |
2086 | 3720 |
7283 | 3721 gaim_connection_update_progress(gc, _("Finalizing connection"), 5, OSCAR_CONNECT_STEPS); |
3722 | |
2086 | 3723 return 1; |
3724 } | |
3725 | |
2675 | 3726 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3727 GaimConnection *gc = sess->aux_data; |
7283 | 3728 OscarData *od = gc->proto_data; |
2647 | 3729 |
6905 | 3730 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0003, gaim_info_change, 0); |
3731 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0005, gaim_info_change, 0); | |
3732 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0007, gaim_account_confirm, 0); | |
3733 | |
2672 | 3734 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3735 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3736 |
2647 | 3737 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3738 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3739 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3740 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3741 od->oldp = NULL; |
2647 | 3742 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3743 od->newp = NULL; |
2647 | 3744 od->chpass = FALSE; |
3745 } | |
2979 | 3746 if (od->setnick) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3747 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screenname\n"); |
2979 | 3748 aim_admin_setnick(sess, fr->conn, od->newsn); |
3749 g_free(od->newsn); | |
3750 od->newsn = NULL; | |
3751 od->setnick = FALSE; | |
3752 } | |
2647 | 3753 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3754 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3755 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3756 od->conf = FALSE; |
3757 } | |
3758 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3759 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3760 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3761 od->reqemail = FALSE; |
3762 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3763 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3764 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3765 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3766 g_free(od->email); |
5497 | 3767 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3768 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3769 } |
2647 | 3770 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3771 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3772 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3773 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3774 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
|
3775 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3776 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3777 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3778 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3779 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3780 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3781 |
4194 | 3782 /* 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
|
3783 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
5556 | 3784 "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
|
3785 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3786 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3787 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3788 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3789 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3790 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3791 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3792 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3793 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3794 |
4617 | 3795 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3796 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3797 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3798 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3799 |
2993 | 3800 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3801 { | |
5575 | 3802 GaimConnection *gc = sess->aux_data; |
7283 | 3803 OscarData *od = (OscarData *)gc->proto_data; |
5306 | 3804 va_list ap; |
3805 fu16_t maxsiglen; | |
2993 | 3806 |
3807 va_start(ap, fr); | |
4199 | 3808 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3809 va_end(ap); |
3810 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3811 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3812 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3813 |
4617 | 3814 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3815 | |
3816 if (od->icq) | |
7334 | 3817 aim_locate_setcaps(od->sess, caps_icq); |
5301 | 3818 else |
7334 | 3819 aim_locate_setcaps(od->sess, caps_aim); |
3820 oscar_set_info(gc, gc->account->user_info); | |
2993 | 3821 |
3822 return 1; | |
3823 } | |
3824 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3825 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
|
3826 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3827 fu16_t maxbuddies, maxwatchers; |
5575 | 3828 GaimConnection *gc = sess->aux_data; |
7283 | 3829 OscarData *od = (OscarData *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3830 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3831 va_start(ap, fr); |
4199 | 3832 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3833 maxwatchers = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3834 va_end(ap); |
3835 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3836 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3837 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3838 |
4617 | 3839 od->rights.maxbuddies = (guint)maxbuddies; |
3840 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3841 |
2086 | 3842 return 1; |
3843 } | |
3844 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3845 static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3846 GaimConnection *gc = sess->aux_data; |
7283 | 3847 OscarData *od = (OscarData *)gc->proto_data; |
7334 | 3848 va_list ap; |
3849 fu16_t maxpermits, maxdenies; | |
2086 | 3850 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3851 va_start(ap, fr); |
4199 | 3852 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3853 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3854 va_end(ap); |
3855 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3856 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3857 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3858 |
4617 | 3859 od->rights.maxpermits = (guint)maxpermits; |
3860 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3861 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
3862 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2993 | 3863 serv_finish_login(gc); |
3864 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3865 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3866 |
2672 | 3867 aim_clientready(sess, fr->conn); |
5948 | 3868 aim_srv_setavailmsg(sess, NULL); |
7474 | 3869 aim_srv_setidle(sess, 0); |
4617 | 3870 |
4664 | 3871 if (od->icq) { |
3872 aim_icq_reqofflinemsgs(sess); | |
3873 aim_icq_hideip(sess); | |
3874 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3875 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3876 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3877 if (sess->authinfo->email) |
3878 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3879 |
3880 return 1; | |
3881 } | |
3882 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3883 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
|
3884 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3885 struct aim_icq_offlinemsg *msg; |
4075 | 3886 struct aim_incomingim_ch4_args args; |
3887 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3888 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3889 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3890 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3891 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3892 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3893 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3894 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3895 args.uin = msg->sender; |
3896 args.type = msg->type; | |
4173 | 3897 args.flags = msg->flags; |
4076 | 3898 args.msglen = msg->msglen; |
4075 | 3899 args.msg = msg->msg; |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3900 t = gaim_time_build(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
4075 | 3901 incomingim_chan4(sess, fr->conn, NULL, &args, t); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3902 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3903 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3904 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3905 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3906 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
|
3907 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3908 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3909 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3910 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3911 |
7388 | 3912 #if 0 |
3913 /* | |
7465 | 3914 * Update, 2003-11-09: |
3915 * Joseph S. Myers, a gcc dude, fixed this for gcc 3.4! Rock on! | |
3916 * | |
7388 | 3917 * It may not be my place to do this, but... |
3918 * I feel pretty strongly that the "last 2 digits" warning is ridiculously | |
3919 * stupid, and should not exist for % switches (%x in our case) that request | |
3920 * a year in the preferred representation for the current locale. For that | |
3921 * reason I've chosen to not use this workaround (n., see kluge). | |
3922 * | |
3923 * I have a date. I want to show it to the user in the "preferred" way. | |
3924 * Whether that displays a 2 digit year is perfectly fine--after all, it's | |
3925 * what the locale wanted. | |
3926 * | |
3927 * If I have a necessity for a full representation of the year in the current | |
3928 * locale, then I'll use a switch that returns a full representation of the | |
3929 * year. | |
3930 * | |
3931 * If you think the preferred locale should show 4 digits instead of 2 digits | |
3932 * (because you're anal, or whatever), then change the f***ing locale. | |
3933 * | |
3934 * I guess the bottom line is--I'm trying to show a date to the user how they | |
3935 * prefer to see it, why the hell does gcc want me to change that? | |
7389 | 3936 * |
3937 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3190 | |
3938 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8714 | |
7388 | 3939 */ |
3940 | |
3941 /* | |
3942 * This function was recommended by the STRFTIME(3) man page to remove the | |
7386 | 3943 * "last 2 digits" warning. |
3944 */ | |
3945 static size_t my_strftime(char *s, size_t max, const char *fmt, | |
3946 const struct tm *tm) | |
3947 { | |
3948 return strftime(s, max, fmt, tm); | |
3949 } | |
7388 | 3950 #endif |
7386 | 3951 |
4624 | 3952 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
|
3953 { |
5575 | 3954 GaimConnection *gc = sess->aux_data; |
4819 | 3955 gchar *buf, *tmp, *utf8; |
4624 | 3956 gchar who[16]; |
6873 | 3957 GaimBuddy *buddy; |
3958 gchar *primary; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3959 va_list ap; |
4151 | 3960 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3961 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3962 va_start(ap, fr); |
4151 | 3963 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3964 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3965 |
4664 | 3966 if (!info->uin) |
3967 return 0; | |
3968 | |
5556 | 3969 g_snprintf(who, sizeof(who), "%u", info->uin); |
6623 | 3970 buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3971 if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
6623 | 3972 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3973 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3974 if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) { |
6623 | 3975 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3976 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3977 if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) { |
6623 | 3978 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3979 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3980 if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) { |
6623 | 3981 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 | 3982 } |
3983 if (info->numaddresses && info->email2) { | |
3984 int i; | |
3985 for (i = 0; i < info->numaddresses; i++) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3986 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) { |
6623 | 3987 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 | 3988 } |
4625 | 3989 } |
4624 | 3990 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3991 if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) { |
6623 | 3992 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4625 | 3993 } |
3994 if (info->gender) { | |
6623 | 3995 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender"), ":</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 3996 } |
4624 | 3997 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 3998 char date[30]; |
3999 struct tm tm; | |
4000 tm.tm_mday = (int)info->birthday; | |
4001 tm.tm_mon = (int)info->birthmonth-1; | |
4002 tm.tm_year = (int)info->birthyear-1900; | |
7388 | 4003 strftime(date, sizeof(date), "%x", &tm); |
6623 | 4004 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday"), ":</b> ", date, NULL); g_free(tmp); |
4151 | 4005 } |
4624 | 4006 if (info->age) { |
4007 char age[5]; | |
4008 snprintf(age, sizeof(age), "%hhd", info->age); | |
6623 | 4009 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp); |
4819 | 4010 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4011 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) { |
6623 | 4012 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 | 4013 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4014 if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) { |
6623 | 4015 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4016 } |
4017 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 4018 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
6623 | 4019 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
|
4020 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) { |
6623 | 4021 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4022 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4023 if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) { |
6623 | 4024 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4025 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4026 if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) { |
6623 | 4027 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4028 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4029 if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) { |
6623 | 4030 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4031 } |
4032 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4033 } |
4641 | 4034 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
6623 | 4035 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
|
4036 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) { |
6623 | 4037 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4038 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4039 if (info->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) { |
6623 | 4040 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4041 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4042 if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) { |
6623 | 4043 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4044 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4045 if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) { |
6623 | 4046 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4047 } |
4048 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4049 } | |
4641 | 4050 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
6623 | 4051 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
|
4052 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) { |
6623 | 4053 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4054 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4055 if (info->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) { |
6623 | 4056 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4057 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4058 if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) { |
6623 | 4059 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4060 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4061 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) { |
6623 | 4062 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 | 4063 } |
4064 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4065 } |
4066 | |
6873 | 4067 buddy = gaim_find_buddy(gaim_connection_get_account(gc), who); |
4068 primary = g_strdup_printf(_("ICQ Info for %s"), gaim_get_buddy_alias(buddy)); | |
4069 gaim_notify_formatted(gc, NULL, primary, NULL, buf, NULL, NULL); | |
4070 g_free(primary); | |
4151 | 4071 g_free(buf); |
4072 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4073 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4074 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4075 |
4759 | 4076 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
4077 { | |
5575 | 4078 GaimConnection *gc = sess->aux_data; |
4820 | 4079 gchar who[16], *utf8; |
6695 | 4080 GaimBuddy *b; |
4759 | 4081 va_list ap; |
4082 struct aim_icq_info *info; | |
4083 | |
4084 va_start(ap, fr); | |
4085 info = va_arg(ap, struct aim_icq_info *); | |
4086 va_end(ap); | |
4087 | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4088 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
5556 | 4089 g_snprintf(who, sizeof(who), "%u", info->uin); |
4820 | 4090 serv_got_alias(gc, who, utf8); |
4759 | 4091 if ((b = gaim_find_buddy(gc->account, who))) { |
7693 | 4092 gaim_blist_node_set_string((GaimBlistNode*)b, "servernick", utf8); |
4759 | 4093 gaim_blist_save(); |
4094 } | |
4820 | 4095 g_free(utf8); |
4759 | 4096 } |
4097 | |
4098 return 1; | |
4099 } | |
4100 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4101 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
|
4102 { |
7032 | 4103 GaimConnection *gc = sess->aux_data; |
4104 gchar *text; | |
4105 va_list ap; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4106 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4107 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4108 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4109 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4110 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4111 url = va_arg(ap, char *); |
4199 | 4112 wid = (fu16_t) va_arg(ap, int); |
4113 hei = (fu16_t) va_arg(ap, int); | |
4114 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4115 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4116 |
7032 | 4117 text = g_strdup_printf("%s<br><a href=\"%s\">%s</a>", msg, url, url); |
4118 gaim_notify_formatted(gc, NULL, _("Pop-Up Message"), NULL, text, NULL, NULL); | |
4119 g_free(text); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4120 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4121 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4122 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4123 |
7032 | 4124 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) |
4125 { | |
6873 | 4126 GaimConnection *gc = sess->aux_data; |
4127 gchar *secondary; | |
4128 GString *text; | |
4129 int i, num; | |
2086 | 4130 va_list ap; |
6873 | 4131 char *email, *SNs; |
2086 | 4132 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4133 va_start(ap, fr); |
6873 | 4134 email = va_arg(ap, char *); |
2086 | 4135 num = va_arg(ap, int); |
4136 SNs = va_arg(ap, char *); | |
4137 va_end(ap); | |
4138 | |
6873 | 4139 secondary = g_strdup_printf(_("The following screennames are associated with %s"), email); |
4140 text = g_string_new(""); | |
2086 | 4141 for (i = 0; i < num; i++) |
6873 | 4142 g_string_append_printf(text, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4143 gaim_notify_formatted(gc, NULL, _("Search Results"), secondary, text->str, NULL, NULL); | |
4144 | |
4145 g_free(secondary); | |
4146 g_string_free(text, TRUE); | |
2086 | 4147 |
4148 return 1; | |
4149 } | |
4150 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4151 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4152 va_list ap; |
6873 | 4153 char *email; |
5420 | 4154 char *buf; |
2086 | 4155 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4156 va_start(ap, fr); |
6873 | 4157 email = va_arg(ap, char *); |
2086 | 4158 va_end(ap); |
4159 | |
6873 | 4160 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
|
4161 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4162 g_free(buf); |
2086 | 4163 |
4164 return 1; | |
4165 } | |
4166 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4167 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
6873 | 4168 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4169 fu16_t status; |
2086 | 4170 va_list ap; |
4171 char msg[256]; | |
4172 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4173 va_start(ap, fr); |
4199 | 4174 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4175 va_end(ap); |
4176 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4177 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4178 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4179 status ? "unknown" : "email sent"); |
4180 if (!status) { | |
5302 | 4181 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
5575 | 4182 gaim_account_get_username(gaim_connection_get_account(gc))); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4183 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4184 } |
4185 | |
4186 return 1; | |
4187 } | |
4188 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4189 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4190 GaimConnection *gc = sess->aux_data; |
2086 | 4191 va_list ap; |
3912 | 4192 fu16_t perms, err; |
4193 char *url, *sn, *email; | |
4194 int change; | |
2086 | 4195 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4196 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4197 change = va_arg(ap, int); |
4199 | 4198 perms = (fu16_t) va_arg(ap, unsigned int); |
4199 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4200 url = va_arg(ap, char *); |
4201 sn = va_arg(ap, char *); | |
4202 email = va_arg(ap, char *); | |
2086 | 4203 va_end(ap); |
4204 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4205 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4206 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4207 change ? "change" : "request", perms, err, url, sn, email); |
4208 | |
4209 if (err && url) { | |
4210 char *dialog_msg; | |
4211 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4212 switch (err) { | |
4213 case 0x0001: { | |
4214 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4215 } break; | |
4216 case 0x0006: { | |
4217 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4218 } break; | |
4219 case 0x000b: { | |
4220 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4221 } break; | |
4222 case 0x001d: { | |
4223 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); | |
4224 } break; | |
4225 case 0x0021: { | |
4226 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); | |
4227 } break; | |
4228 case 0x0023: { | |
4229 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4230 } break; | |
4231 default: { | |
4232 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4233 } break; | |
4234 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4235 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4236 g_free(dialog_top); |
4237 g_free(dialog_msg); | |
4238 return 1; | |
4239 } | |
4240 | |
4241 if (sn) { | |
4585 | 4242 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
|
4243 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4244 g_free(dialog_msg); |
4245 } | |
4246 | |
4247 if (email) { | |
5575 | 4248 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), |
4249 gaim_account_get_username(gaim_connection_get_account(gc)), email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4250 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4251 g_free(dialog_msg); |
2086 | 4252 } |
4253 | |
4254 return 1; | |
4255 } | |
4256 | |
5575 | 4257 static void oscar_keepalive(GaimConnection *gc) { |
7283 | 4258 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4259 aim_flap_nop(od->sess, od->conn); |
2086 | 4260 } |
4261 | |
6059 | 4262 static int oscar_send_typing(GaimConnection *gc, const char *name, int typing) { |
7283 | 4263 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4264 struct direct_im *dim = find_direct_im(od, name); |
3595 | 4265 if (dim) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4266 if (typing == GAIM_TYPING) |
4870 | 4267 aim_odc_send_typing(od->sess, dim->conn, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4268 else if (typing == GAIM_TYPED) |
4870 | 4269 aim_odc_send_typing(od->sess, dim->conn, 0x0001); |
4270 else | |
4271 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4272 else { |
5300 | 4273 /* Don't send if this turkey is in our deny list */ |
4274 GSList *list; | |
4275 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4276 if (!list) { | |
7261 | 4277 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
5300 | 4278 if (bi && bi->typingnot) { |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4279 if (typing == GAIM_TYPING) |
5300 | 4280 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4281 else if (typing == GAIM_TYPED) |
5300 | 4282 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); |
4283 else | |
4284 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4285 } | |
3595 | 4286 } |
4287 } | |
2993 | 4288 return 0; |
4289 } | |
5575 | 4290 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
|
4291 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
|
4292 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4293 static int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimConvImFlags imflags) { |
7283 | 4294 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4295 struct direct_im *dim = find_direct_im(od, name); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4296 int ret = 0; |
3659 | 4297 GError *err = NULL; |
5575 | 4298 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
|
4299 char *tmpmsg = NULL; |
3458 | 4300 |
4838 | 4301 if (dim && dim->connected) { |
4302 /* If we're directly connected, send a direct IM */ | |
6982 | 4303 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
|
4304 } else if (imflags & GAIM_CONV_IM_IMAGES) { |
3044 | 4305 /* Trying to send an IM image outside of a direct connection. */ |
4306 oscar_ask_direct_im(gc, name); | |
4838 | 4307 ret = -ENOTCONN; |
2086 | 4308 } else { |
4738 | 4309 struct buddyinfo *bi; |
3008 | 4310 struct aim_sendimext_args args; |
4311 struct stat st; | |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4312 gsize len; |
4269 | 4313 |
7261 | 4314 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
4738 | 4315 if (!bi) { |
4316 bi = g_new0(struct buddyinfo, 1); | |
7261 | 4317 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, name)), bi); |
4738 | 4318 } |
4319 | |
3008 | 4320 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4321 if (od->icq) { |
4322 args.features = features_icq; | |
4323 args.featureslen = sizeof(features_icq); | |
3008 | 4324 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4325 } else { |
4326 args.features = features_aim; | |
4327 args.featureslen = sizeof(features_aim); | |
4972 | 4328 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4329 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
4972 | 4330 args.flags |= AIM_IMFLAGS_AWAY; |
4665 | 4331 } |
4269 | 4332 |
4738 | 4333 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4334 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4335 "Sending buddy icon request with message\n"); |
3008 | 4336 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4337 bi->ico_need = FALSE; |
3008 | 4338 } |
4269 | 4339 |
5575 | 4340 if (iconfile && !stat(iconfile, &st)) { |
4341 FILE *file = fopen(iconfile, "r"); | |
3008 | 4342 if (file) { |
4343 char *buf = g_malloc(st.st_size); | |
4344 fread(buf, 1, st.st_size, file); | |
6039 | 4345 fclose(file); |
4269 | 4346 |
3008 | 4347 args.iconlen = st.st_size; |
4617 | 4348 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4349 args.iconstamp = st.st_mtime; |
4350 | |
7406 | 4351 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { |
4738 | 4352 bi->ico_informed = FALSE; |
7406 | 4353 bi->ico_sent = FALSE; |
4354 } | |
4738 | 4355 |
4356 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4357 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4358 "Claiming to have a buddy icon\n"); |
4738 | 4359 args.flags |= AIM_IMFLAGS_HASICON; |
4360 bi->ico_me_len = args.iconlen; | |
4361 bi->ico_me_csum = args.iconsum; | |
4362 bi->ico_me_time = args.iconstamp; | |
4363 bi->ico_informed = TRUE; | |
4364 } | |
4365 | |
3008 | 4366 g_free(buf); |
2086 | 4367 } |
4368 } | |
4269 | 4369 |
3008 | 4370 args.destsn = name; |
4269 | 4371 |
6310 | 4372 /* For ICQ send newlines as CR/LF, for AIM send newlines as <BR> */ |
4373 if (isdigit(name[0])) | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4374 tmpmsg = gaim_str_add_cr(message); |
6310 | 4375 else |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4376 tmpmsg = gaim_strdup_withhtml(message); |
6310 | 4377 len = strlen(tmpmsg); |
4378 | |
4379 args.flags |= oscar_encoding_check(tmpmsg); | |
3642 | 4380 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4381 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4382 args.charset = 0x0002; |
4665 | 4383 args.charsubset = 0x0000; |
6310 | 4384 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
3659 | 4385 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4386 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4387 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4388 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4389 "This really shouldn't happen!\n"); |
3659 | 4390 /* We really shouldn't try to send the |
4391 * IM now, but I'm not sure what to do */ | |
4800 | 4392 g_error_free(err); |
3659 | 4393 } |
3850 | 4394 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4395 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4396 "Sending ISO-8859-1 IM\n"); |
4662 | 4397 args.charset = 0x0003; |
4665 | 4398 args.charsubset = 0x0000; |
6310 | 4399 args.msg = g_convert(tmpmsg, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
3659 | 4400 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4401 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4402 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4403 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4404 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4405 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
6310 | 4406 len = strlen(tmpmsg); |
4800 | 4407 g_error_free(err); |
6310 | 4408 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
3659 | 4409 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4410 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4411 "Error in unicode fallback: %s\n", err->message); |
4800 | 4412 g_error_free(err); |
3659 | 4413 } |
3642 | 4414 } |
4415 } else { | |
4662 | 4416 args.charset = 0x0000; |
4417 args.charsubset = 0x0000; | |
6310 | 4418 args.msg = tmpmsg; |
3642 | 4419 } |
4420 args.msglen = len; | |
4269 | 4421 |
4617 | 4422 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4423 } |
4838 | 4424 |
6310 | 4425 g_free(tmpmsg); |
4426 | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4427 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4428 return 1; |
6310 | 4429 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4430 return ret; |
2086 | 4431 } |
4432 | |
7011 | 4433 static void oscar_get_info(GaimConnection *gc, const char *name) { |
7283 | 4434 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4435 |
7173 | 4436 if (od->icq && isdigit(name[0])) |
4624 | 4437 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4438 else |
7235 | 4439 aim_locate_getinfoshort(od->sess, name, 0x00000003); |
7011 | 4440 } |
4441 | |
4442 static void oscar_get_away(GaimConnection *gc, const char *who) { | |
7283 | 4443 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4444 if (od->icq) { |
7011 | 4445 GaimBuddy *budlight = gaim_find_buddy(gc->account, who); |
3212 | 4446 if (budlight) |
3595 | 4447 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4448 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4449 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4450 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4451 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4452 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4453 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
7023 | 4454 "Error: Could not find %s in local buddy list, therefore unable to request status message.\n", who); |
3212 | 4455 } else |
7011 | 4456 aim_locate_getinfoshort(od->sess, who, 0x00000002); |
4457 } | |
4458 | |
4459 static void oscar_set_dir(GaimConnection *gc, const char *first, const char *middle, const char *last, | |
3466 | 4460 const char *maiden, const char *city, const char *state, const char *country, int web) { |
4617 | 4461 /* XXX - some of these things are wrong, but i'm lazy */ |
7283 | 4462 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4463 aim_locate_setdirinfo(od->sess, first, middle, last, |
2086 | 4464 maiden, NULL, NULL, city, state, NULL, 0, web); |
4465 } | |
4466 | |
5575 | 4467 static void oscar_set_idle(GaimConnection *gc, int time) { |
7283 | 4468 OscarData *od = (OscarData *)gc->proto_data; |
7474 | 4469 aim_srv_setidle(od->sess, time); |
2086 | 4470 } |
4471 | |
5954 | 4472 static void oscar_set_info(GaimConnection *gc, const char *text) { |
7283 | 4473 OscarData *od = (OscarData *)gc->proto_data; |
5129 | 4474 fu32_t flags = 0; |
6019 | 4475 char *text_html = NULL; |
5129 | 4476 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4477 gsize msglen = 0; |
2993 | 4478 |
4617 | 4479 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4480 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4481 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4482 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4483 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4484 "again when you are fully connected.")); |
4617 | 4485 |
7334 | 4486 if (!text) { |
4487 aim_locate_setprofile(od->sess, NULL, "", 0, NULL, NULL, 0); | |
4488 return; | |
4489 } | |
6019 | 4490 |
7334 | 4491 text_html = gaim_strdup_withhtml(text); |
4492 flags = oscar_encoding_check(text_html); | |
4493 if (flags & AIM_IMFLAGS_UNICODE) { | |
4494 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); | |
4495 aim_locate_setprofile(od->sess, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4496 g_free(msg); | |
4497 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
4498 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); | |
4499 aim_locate_setprofile(od->sess, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4500 g_free(msg); | |
4501 } else { | |
4502 msglen = strlen(text_html); | |
4503 aim_locate_setprofile(od->sess, "us-ascii", text_html, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4504 } | |
4505 | |
4506 if (msglen > od->rights.maxsiglen) { | |
4507 gchar *errstr; | |
4508 errstr = g_strdup_printf(ngettext("The maximum profile length of %d byte " | |
4509 "has been exceeded. Gaim has truncated it for you.", | |
4510 "The maximum profile length of %d bytes " | |
4511 "has been exceeded. Gaim has truncated it for you.", | |
4512 od->rights.maxsiglen), od->rights.maxsiglen); | |
4513 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); | |
4514 g_free(errstr); | |
4515 } | |
4516 | |
4517 g_free(text_html); | |
2993 | 4518 |
4519 return; | |
2086 | 4520 } |
4521 | |
7283 | 4522 static void oscar_set_away_aim(GaimConnection *gc, OscarData *od, const char *text) |
2993 | 4523 { |
5129 | 4524 fu32_t flags = 0; |
6019 | 4525 gchar *text_html = NULL; |
5129 | 4526 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4527 gsize msglen = 0; |
2993 | 4528 |
4529 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4530 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4531 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4532 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4533 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4534 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4535 "fully connected.")); |
5129 | 4536 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4537 if (gc->away) { |
2993 | 4538 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4539 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4540 } |
2993 | 4541 |
5129 | 4542 if (!text) { |
7334 | 4543 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4544 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4545 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4546 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4547 text_html = gaim_strdup_withhtml(text); |
6019 | 4548 flags = oscar_encoding_check(text_html); |
5129 | 4549 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4550 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4551 aim_locate_setprofile(od->sess, NULL, NULL, 0, "unicode-2-0", msg, |
7334 | 4552 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4553 g_free(msg); |
4554 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4555 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4556 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4557 aim_locate_setprofile(od->sess, NULL, NULL, 0, "iso-8859-1", msg, |
7334 | 4558 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4559 g_free(msg); |
6019 | 4560 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4561 } else { |
6019 | 4562 msglen = strlen(text_html); |
7011 | 4563 aim_locate_setprofile(od->sess, NULL, NULL, 0, "us-ascii", text_html, |
7334 | 4564 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
6019 | 4565 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4566 } |
4567 | |
4568 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4569 gchar *errstr; |
4570 | |
6308 | 4571 errstr = g_strdup_printf(ngettext("The maximum away message length of %d byte " |
4572 "has been exceeded. Gaim has truncated it for you.", | |
4573 "The maximum away message length of %d bytes " | |
4574 "has been exceeded. Gaim has truncated it for you.", | |
4575 od->rights.maxawaymsglen), od->rights.maxawaymsglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4576 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4577 g_free(errstr); |
4578 } | |
6019 | 4579 |
4580 g_free(text_html); | |
2993 | 4581 return; |
4582 } | |
4583 | |
7283 | 4584 static void oscar_set_away_icq(GaimConnection *gc, OscarData *od, const char *state, const char *message) |
2993 | 4585 { |
5575 | 4586 GaimAccount *account = gaim_connection_get_account(gc); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4587 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4588 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4589 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4590 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4591 |
4342 | 4592 if (strcmp(state, _("Invisible"))) { |
5575 | 4593 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != account->perm_deny)) |
4594 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); | |
4595 account->perm_deny = 4; | |
4342 | 4596 } else { |
5542 | 4597 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03)) |
4889 | 4598 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
5575 | 4599 account->perm_deny = 3; |
4342 | 4600 } |
4601 | |
4602 if (!strcmp(state, _("Online"))) | |
4901 | 4603 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4604 else if (!strcmp(state, _("Away"))) { |
4901 | 4605 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4606 gc->away = g_strdup(""); |
4342 | 4607 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4608 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
|
4609 gc->away = g_strdup(""); |
4342 | 4610 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4611 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
|
4612 gc->away = g_strdup(""); |
4342 | 4613 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4614 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
|
4615 gc->away = g_strdup(""); |
4342 | 4616 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4617 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4618 gc->away = g_strdup(""); |
4342 | 4619 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4620 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4621 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4622 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4623 if (message) { |
4901 | 4624 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
|
4625 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4626 } else { |
4901 | 4627 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4628 } |
2086 | 4629 } |
2993 | 4630 |
4631 return; | |
4632 } | |
4633 | |
6059 | 4634 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message) |
2993 | 4635 { |
7283 | 4636 OscarData *od = (OscarData *)gc->proto_data; |
2993 | 4637 |
4638 if (od->icq) | |
4639 oscar_set_away_icq(gc, od, state, message); | |
4640 else | |
4641 oscar_set_away_aim(gc, od, message); | |
4642 | |
4643 return; | |
2086 | 4644 } |
4645 | |
6059 | 4646 static void oscar_warn(GaimConnection *gc, const char *name, int anon) { |
7283 | 4647 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4648 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); |
2086 | 4649 } |
4650 | |
5575 | 4651 static void oscar_dir_search(GaimConnection *gc, const char *first, const char *middle, const char *last, |
3466 | 4652 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
7283 | 4653 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 4654 if (strlen(email)) |
6879 | 4655 aim_search_address(od->sess, od->conn, email); |
2086 | 4656 } |
4657 | |
6787
faa491042c66
[gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4658 static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { |
7283 | 4659 OscarData *od = (OscarData *)gc->proto_data; |
8092 | 4660 |
4661 if (!aim_snvalid(name)) { | |
4662 gchar *buf; | |
4663 buf = g_strdup_printf(_("Could not add the buddy %s because the screen name is invalid. Screen names must either start with a letter and contain only letters, numbers and spaces, or contain only numbers. The buddy will be removed from your buddy list."), name); | |
4664 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); | |
4665 g_free(buf); | |
4666 /* ABC - Remove from locate list! */ | |
4667 return; | |
4668 } | |
4669 | |
4230 | 4670 #ifdef NOSSI |
4671 aim_add_buddy(od->sess, od->conn, name); | |
4672 #else | |
4673 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
6695 | 4674 GaimBuddy *buddy = gaim_find_buddy(gc->account, name); |
4675 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4676 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4677 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4678 "ssi: adding buddy %s to group %s\n", name, group->name); |
4889 | 4679 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4680 } |
4681 } | |
4682 #endif | |
4759 | 4683 if (od->icq) |
4684 aim_icq_getalias(od->sess, name); | |
4230 | 4685 } |
4686 | |
5575 | 4687 static void oscar_add_buddies(GaimConnection *gc, GList *buddies) { |
7283 | 4688 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4689 #ifdef NOSSI |
4690 char buf[MSG_LEN]; | |
4691 int n=0; | |
4692 while (buddies) { | |
4693 if (n > MSG_LEN - 18) { | |
7285 | 4694 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4695 n = 0; |
3092 | 4696 } |
4230 | 4697 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); |
4698 buddies = buddies->next; | |
4699 } | |
7285 | 4700 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4701 #else |
4702 if (od->sess->ssi.received_data) { | |
4703 while (buddies) { | |
8092 | 4704 oscar_add_buddy(gc, buddies->data, NULL); |
4230 | 4705 buddies = buddies->next; |
4706 } | |
4707 } | |
4708 #endif | |
4709 } | |
4710 | |
6059 | 4711 static void oscar_remove_buddy(GaimConnection *gc, const char *name, const char *group) { |
7283 | 4712 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4713 #ifdef NOSSI |
4714 aim_remove_buddy(od->sess, od->conn, name); | |
4715 #else | |
4716 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4717 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4718 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4719 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4720 } |
4721 #endif | |
4722 } | |
4723 | |
5575 | 4724 static void oscar_remove_buddies(GaimConnection *gc, GList *buddies, const char *group) { |
7283 | 4725 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4726 #ifdef NOSSI |
4727 GList *cur; | |
4728 for (cur=buddies; cur; cur=cur->next) | |
4729 aim_remove_buddy(od->sess, od->conn, cur->data); | |
4730 #else | |
4731 if (od->sess->ssi.received_data) { | |
3092 | 4732 while (buddies) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4733 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4734 "ssi: deleting buddy %s from group %s\n", (char *)buddies->data, group); |
4889 | 4735 aim_ssi_delbuddy(od->sess, buddies->data, group); |
3092 | 4736 buddies = buddies->next; |
4737 } | |
4230 | 4738 } |
4739 #endif | |
4740 } | |
4741 | |
4742 #ifndef NOSSI | |
5575 | 4743 static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { |
7283 | 4744 OscarData *od = (OscarData *)gc->proto_data; |
4303 | 4745 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
|
4746 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4747 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4748 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4749 } |
4750 } | |
4751 | |
5575 | 4752 static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { |
7283 | 4753 OscarData *od = (OscarData *)gc->proto_data; |
4269 | 4754 if (od->sess->ssi.received_data) { |
4755 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4756 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4757 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4758 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4759 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4760 } |
4761 } | |
4762 } | |
4763 | |
5575 | 4764 static void oscar_rename_group(GaimConnection *g, const char *old_group, const char *new_group, GList *members) { |
7283 | 4765 OscarData *od = (OscarData *)g->proto_data; |
4230 | 4766 |
4767 if (od->sess->ssi.received_data) { | |
4768 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4769 oscar_remove_buddies(g, members, old_group); | |
4770 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4771 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4772 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4773 } else { |
4889 | 4774 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4775 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4776 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4777 } |
4778 } | |
4779 } | |
4780 | |
5968 | 4781 static gboolean gaim_ssi_rerequestdata(gpointer data) { |
4782 aim_session_t *sess = data; | |
6350 | 4783 aim_ssi_reqdata(sess); |
5968 | 4784 return FALSE; |
4785 } | |
4786 | |
4642 | 4787 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4788 GaimConnection *gc = sess->aux_data; |
7283 | 4789 OscarData *od = gc->proto_data; |
4642 | 4790 va_list ap; |
4791 fu16_t reason; | |
4792 | |
4793 va_start(ap, fr); | |
4794 reason = (fu16_t)va_arg(ap, unsigned int); | |
4795 va_end(ap); | |
4796 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4797 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4798 |
4799 if (reason == 0x0005) { | |
5892 | 4800 gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), |
5828 | 4801 _("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 | 4802 od->getblisttimer = g_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); |
4642 | 4803 } |
4804 | |
4805 /* Activate SSI */ | |
4806 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4807 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5968 | 4808 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: activating server-stored buddy list\n"); |
4642 | 4809 aim_ssi_enable(od->sess); |
4810 | |
4811 return 1; | |
4812 } | |
4813 | |
2991 | 4814 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4815 GaimConnection *gc = sess->aux_data; |
7283 | 4816 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4817 int numtypes, i; |
4818 fu16_t *maxitems; | |
2991 | 4819 va_list ap; |
4820 | |
4821 va_start(ap, fr); | |
4230 | 4822 numtypes = va_arg(ap, int); |
4823 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4824 va_end(ap); |
4825 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4826 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4827 |
4230 | 4828 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4829 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4830 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4831 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4832 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4833 |
4834 if (numtypes >= 0) | |
4835 od->rights.maxbuddies = maxitems[0]; | |
4836 if (numtypes >= 1) | |
4837 od->rights.maxgroups = maxitems[1]; | |
4838 if (numtypes >= 2) | |
4839 od->rights.maxpermits = maxitems[2]; | |
4840 if (numtypes >= 3) | |
4841 od->rights.maxdenies = maxitems[3]; | |
2991 | 4842 |
4843 return 1; | |
4844 } | |
4845 | |
4846 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4847 GaimConnection *gc = sess->aux_data; |
4848 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 4849 OscarData *od = (OscarData *)gc->proto_data; |
2995 | 4850 struct aim_ssi_item *curitem; |
2991 | 4851 int tmp; |
4778 | 4852 gboolean export = FALSE; |
4617 | 4853 /* XXX - use these? |
4230 | 4854 va_list ap; |
4855 | |
4856 va_start(ap, fr); | |
4857 fmtver = (fu16_t)va_arg(ap, int); | |
4858 numitems = (fu16_t)va_arg(ap, int); | |
4859 items = va_arg(ap, struct aim_ssi_item); | |
4860 timestamp = va_arg(ap, fu32_t); | |
4861 va_end(ap); */ | |
2991 | 4862 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4863 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4864 "ssi: syncing local list and server list\n"); |
2991 | 4865 |
4866 /* Clean the buddy list */ | |
4889 | 4867 aim_ssi_cleanlist(sess); |
2991 | 4868 |
4869 /* Add from server list to local list */ | |
4230 | 4870 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
7328 | 4871 if ((curitem->name == NULL) || (g_utf8_validate(curitem->name, -1, NULL))) |
2991 | 4872 switch (curitem->type) { |
4230 | 4873 case 0x0000: { /* Buddy */ |
4251 | 4874 if (curitem->name) { |
4292 | 4875 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
7166 | 4876 char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; |
4282 | 4877 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
7166 | 4878 char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; |
6695 | 4879 GaimBuddy *buddy = gaim_find_buddy(gc->account, curitem->name); |
4458 | 4880 /* Should gname be freed here? -- elb */ |
4754 | 4881 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 4882 free(alias); |
4282 | 4883 if (buddy) { |
4292 | 4884 /* Get server stored alias */ |
4705 | 4885 if (alias_utf8) { |
4886 g_free(buddy->alias); | |
4887 buddy->alias = g_strdup(alias_utf8); | |
4888 } | |
4282 | 4889 } else { |
6695 | 4890 GaimGroup *g; |
4687 | 4891 buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); |
5146 | 4892 |
4754 | 4893 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 4894 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 4895 gaim_blist_add_group(g, NULL); |
4896 } | |
5146 | 4897 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4898 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4899 "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
6695 | 4900 gaim_blist_add_buddy(buddy, NULL, g, NULL); |
4778 | 4901 export = TRUE; |
4251 | 4902 } |
7162 | 4903 g_free(gname_utf8); |
4904 g_free(alias_utf8); | |
2991 | 4905 } |
4230 | 4906 } break; |
4907 | |
4908 case 0x0001: { /* Group */ | |
4282 | 4909 /* Shouldn't add empty groups */ |
4230 | 4910 } break; |
4911 | |
4912 case 0x0002: { /* Permit buddy */ | |
2991 | 4913 if (curitem->name) { |
4230 | 4914 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 4915 GSList *list; |
5575 | 4916 for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4917 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4918 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4919 "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
|
4920 gaim_privacy_permit_add(account, curitem->name, TRUE); |
4778 | 4921 export = TRUE; |
2991 | 4922 } |
4923 } | |
4230 | 4924 } break; |
4925 | |
4926 case 0x0003: { /* Deny buddy */ | |
2991 | 4927 if (curitem->name) { |
4928 GSList *list; | |
5575 | 4929 for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4930 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4931 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4932 "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
|
4933 gaim_privacy_deny_add(account, curitem->name, TRUE); |
4778 | 4934 export = TRUE; |
2991 | 4935 } |
4936 } | |
4230 | 4937 } break; |
4938 | |
4939 case 0x0004: { /* Permit/deny setting */ | |
2991 | 4940 if (curitem->data) { |
4941 fu8_t permdeny; | |
5575 | 4942 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
|
4943 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5575 | 4944 "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); |
4945 account->perm_deny = permdeny; | |
4946 if (od->icq && account->perm_deny == 0x03) { | |
4342 | 4947 serv_set_away(gc, "Invisible", ""); |
4948 } | |
4778 | 4949 export = TRUE; |
2991 | 4950 } |
4951 } | |
4230 | 4952 } break; |
4953 | |
4954 case 0x0005: { /* Presence setting */ | |
3109 | 4955 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 4956 } break; |
2991 | 4957 } /* End of switch on curitem->type */ |
4958 } /* End of for loop */ | |
4230 | 4959 |
4960 /* If changes were made, then flush buddy list to file */ | |
4778 | 4961 if (export) |
4349 | 4962 gaim_blist_save(); |
2991 | 4963 |
4759 | 4964 { /* Add from local list to server list */ |
6695 | 4965 GaimBlistNode *gnode, *cnode, *bnode; |
4966 GaimGroup *group; | |
4967 GaimBuddy *buddy; | |
7098
770233dad86c
[gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents:
7095
diff
changeset
|
4968 GaimBuddyList *blist; |
3017 | 4969 GSList *cur; |
4970 | |
2991 | 4971 /* Buddies */ |
4759 | 4972 if ((blist = gaim_get_blist())) |
4973 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
5234 | 4974 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
4975 continue; | |
6695 | 4976 group = (GaimGroup *)gnode; |
4977 for (cnode = gnode->child; cnode; cnode = cnode->next) { | |
4978 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
5234 | 4979 continue; |
6695 | 4980 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
4981 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
4982 continue; | |
4983 buddy = (GaimBuddy *)bnode; | |
4984 if (buddy->account == gc->account) { | |
7693 | 4985 const char *servernick = gaim_blist_node_get_string((GaimBlistNode*)buddy, "servernick"); |
7125 | 4986 if (servernick) |
6695 | 4987 serv_got_alias(gc, buddy->name, servernick); |
7125 | 4988 |
6695 | 4989 if (aim_ssi_itemlist_exists(sess->ssi.local, buddy->name)) { |
4990 /* Store local alias on server */ | |
4991 char *alias = aim_ssi_getalias(sess->ssi.local, group->name, buddy->name); | |
4992 if (!alias && buddy->alias && strlen(buddy->alias)) | |
4993 aim_ssi_aliasbuddy(sess, group->name, buddy->name, buddy->alias); | |
4994 free(alias); | |
4995 } else { | |
4996 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4997 "ssi: adding buddy %s from local list to server list\n", buddy->name); | |
8092 | 4998 oscar_add_buddy(gc, buddy->name, group); |
6695 | 4999 } |
4759 | 5000 } |
4349 | 5001 } |
4230 | 5002 } |
4292 | 5003 } |
6695 | 5004 |
2991 | 5005 /* Permit list */ |
4491 | 5006 if (gc->account->permit) { |
5007 for (cur=gc->account->permit; cur; cur=cur->next) | |
4230 | 5008 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
|
5009 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 5010 "ssi: adding permit %s from local list to server list\n", (char *)cur->data); |
4889 | 5011 aim_ssi_addpermit(sess, cur->data); |
4230 | 5012 } |
2991 | 5013 } |
5014 | |
5015 /* Deny list */ | |
4491 | 5016 if (gc->account->deny) { |
5017 for (cur=gc->account->deny; cur; cur=cur->next) | |
4230 | 5018 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
|
5019 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 5020 "ssi: adding deny %s from local list to server list\n", (char *)cur->data); |
4889 | 5021 aim_ssi_adddeny(sess, cur->data); |
4230 | 5022 } |
2991 | 5023 } |
3109 | 5024 /* Presence settings (idle time visibility) */ |
4230 | 5025 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) |
5631 | 5026 if (!(tmp & 0x400)) |
4889 | 5027 aim_ssi_setpresence(sess, tmp | 0x400); |
4778 | 5028 } /* end adding buddies from local list to server list */ |
5029 | |
4901 | 5030 /* Set our ICQ status */ |
5031 if (od->icq && !gc->away) { | |
5032 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
5033 } | |
5034 | |
4342 | 5035 /* Activate SSI */ |
5036 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
5037 /* 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
|
5038 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5039 "ssi: activating server-stored buddy list\n"); |
4642 | 5040 aim_ssi_enable(sess); |
4342 | 5041 |
2991 | 5042 return 1; |
2086 | 5043 } |
4230 | 5044 |
5045 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5046 GaimConnection *gc = sess->aux_data; |
4230 | 5047 va_list ap; |
5048 struct aim_ssi_tmp *retval; | |
5049 | |
5050 va_start(ap, fr); | |
5051 retval = va_arg(ap, struct aim_ssi_tmp *); | |
5052 va_end(ap); | |
5053 | |
5054 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5055 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5056 "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 | 5057 |
5058 if (retval->ack != 0xffff) | |
5059 switch (retval->ack) { | |
5060 case 0x0000: { /* added successfully */ | |
5061 } break; | |
5062 | |
4829 | 5063 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
5064 gchar *buf; | |
5065 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
|
5066 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 5067 g_free(buf); |
5068 } | |
5069 | |
7023 | 5070 case 0x000e: { /* buddy requires authorization */ |
4828 | 5071 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 5072 gaim_auth_sendrequest(gc, retval->name); |
4230 | 5073 } break; |
5074 | |
5075 default: { /* La la la */ | |
5197 | 5076 gchar *buf; |
5402 | 5077 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
5078 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
|
5079 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 5080 g_free(buf); |
5402 | 5081 /* XXX - Should remove buddy from local list */ |
4230 | 5082 } break; |
5083 } | |
5084 | |
5085 retval = retval->next; | |
5086 } | |
5087 | |
5088 return 1; | |
5089 } | |
5090 | |
5091 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5092 GaimConnection *gc = sess->aux_data; |
4230 | 5093 va_list ap; |
5094 char *sn, *msg; | |
4236 | 5095 gchar *dialog_msg, *nombre; |
4230 | 5096 struct name_data *data; |
6695 | 5097 GaimBuddy *buddy; |
4230 | 5098 |
5099 va_start(ap, fr); | |
5100 sn = va_arg(ap, char *); | |
5101 msg = va_arg(ap, char *); | |
5102 va_end(ap); | |
5103 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5104 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5105 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 5106 |
4687 | 5107 buddy = gaim_find_buddy(gc->account, sn); |
5108 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5109 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5110 else |
5111 nombre = g_strdup(sn); | |
5112 | |
5113 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 | 5114 data = g_new(struct name_data, 1); |
5115 data->gc = gc; | |
5116 data->name = g_strdup(sn); | |
5117 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5118 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5119 gaim_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5120 0, data, |
7023 | 5121 G_CALLBACK(gaim_icq_buddyadd), |
5836 | 5122 G_CALLBACK(oscar_free_name_data)); |
4236 | 5123 |
4230 | 5124 g_free(dialog_msg); |
4236 | 5125 g_free(nombre); |
4230 | 5126 |
5127 return 1; | |
5128 } | |
5129 | |
5130 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5131 GaimConnection *gc = sess->aux_data; |
4230 | 5132 va_list ap; |
5133 char *sn, *msg; | |
4236 | 5134 gchar *dialog_msg, *nombre; |
4230 | 5135 struct name_data *data; |
6695 | 5136 GaimBuddy *buddy; |
4230 | 5137 |
5138 va_start(ap, fr); | |
5139 sn = va_arg(ap, char *); | |
5140 msg = va_arg(ap, char *); | |
5141 va_end(ap); | |
5142 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5143 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5144 "ssi: received authorization request from %s\n", sn); |
4230 | 5145 |
4687 | 5146 buddy = gaim_find_buddy(gc->account, sn); |
5147 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5148 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5149 else |
5150 nombre = g_strdup(sn); | |
5151 | |
4337 | 5152 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 | 5153 data = g_new(struct name_data, 1); |
5154 data->gc = gc; | |
5155 data->name = g_strdup(sn); | |
5156 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5157 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5158 gaim_request_action(gc, NULL, _("Authorization Request"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5159 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5160 _("Authorize"), G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5161 _("Deny"), G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4236 | 5162 |
4230 | 5163 g_free(dialog_msg); |
4236 | 5164 g_free(nombre); |
4230 | 5165 |
5166 return 1; | |
5167 } | |
5168 | |
5169 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5170 GaimConnection *gc = sess->aux_data; |
4230 | 5171 va_list ap; |
5172 char *sn, *msg; | |
4236 | 5173 gchar *dialog_msg, *nombre; |
4230 | 5174 fu8_t reply; |
6695 | 5175 GaimBuddy *buddy; |
4230 | 5176 |
5177 va_start(ap, fr); | |
5178 sn = va_arg(ap, char *); | |
5179 reply = (fu8_t)va_arg(ap, int); | |
5180 msg = va_arg(ap, char *); | |
5181 va_end(ap); | |
5182 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5183 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5184 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5185 |
4687 | 5186 buddy = gaim_find_buddy(gc->account, sn); |
5187 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5188 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5189 else |
5190 nombre = g_strdup(sn); | |
5191 | |
4230 | 5192 if (reply) { |
5193 /* Granted */ | |
7023 | 5194 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
|
5195 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5196 } else { |
5197 /* Denied */ | |
7023 | 5198 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
|
5199 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5200 } |
5201 g_free(dialog_msg); | |
4236 | 5202 g_free(nombre); |
4230 | 5203 |
5204 return 1; | |
5205 } | |
5206 | |
5207 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5208 GaimConnection *gc = sess->aux_data; |
4230 | 5209 va_list ap; |
5210 char *sn; | |
6695 | 5211 GaimBuddy *buddy; |
4230 | 5212 |
5213 va_start(ap, fr); | |
5214 sn = va_arg(ap, char *); | |
5215 va_end(ap); | |
5216 | |
4687 | 5217 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5218 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5219 "ssi: %s added you to their buddy list\n", sn); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
5220 gaim_account_notify_added(gc->account, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5221 |
5222 return 1; | |
5223 } | |
4269 | 5224 #endif |
2086 | 5225 |
5575 | 5226 static GList *oscar_chat_info(GaimConnection *gc) { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5227 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5228 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5229 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5230 pce = g_new0(struct proto_chat_entry, 1); |
7841 | 5231 pce->label = _("_Group:"); |
5234 | 5232 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5233 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5234 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5235 pce = g_new0(struct proto_chat_entry, 1); |
7841 | 5236 pce->label = _("_Exchange:"); |
5234 | 5237 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5238 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5239 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5240 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5241 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5242 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5243 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5244 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5245 |
5575 | 5246 static void oscar_join_chat(GaimConnection *g, GHashTable *data) { |
7283 | 5247 OscarData *od = (OscarData *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5248 aim_conn_t *cur; |
5234 | 5249 char *name, *exchange; |
5250 | |
5251 name = g_hash_table_lookup(data, "room"); | |
5252 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5253 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5254 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5255 "Attempting to join chat room %s.\n", name); |
4617 | 5256 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
|
5257 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5258 "chatnav exists, creating room\n"); |
5234 | 5259 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5260 } else { |
5261 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5262 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5263 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5264 "chatnav does not exist, opening chatnav\n"); |
5234 | 5265 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5266 cr->name = g_strdup(name); |
4617 | 5267 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5268 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5269 } |
5270 } | |
5271 | |
5575 | 5272 static void oscar_chat_invite(GaimConnection *g, int id, const char *message, const char *name) { |
7283 | 5273 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5274 struct chat_connection *ccon = find_oscar_chat(g, id); |
5275 | |
5276 if (!ccon) | |
5277 return; | |
5278 | |
4617 | 5279 aim_chat_invite(od->sess, od->conn, name, message ? message : "", |
2086 | 5280 ccon->exchange, ccon->name, 0x0); |
5281 } | |
5282 | |
5575 | 5283 static void oscar_chat_leave(GaimConnection *g, int id) { |
7283 | 5284 OscarData *od = g ? (OscarData *)g->proto_data : NULL; |
2086 | 5285 GSList *bcs = g->buddy_chats; |
5679 | 5286 GaimConversation *b = NULL; |
2086 | 5287 struct chat_connection *c = NULL; |
5288 int count = 0; | |
5289 | |
5290 while (bcs) { | |
5291 count++; | |
5679 | 5292 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5293 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5294 break; |
5295 bcs = bcs->next; | |
5296 b = NULL; | |
5297 } | |
5298 | |
5299 if (!b) | |
5300 return; | |
5301 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5302 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5303 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5304 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5305 c = find_oscar_chat(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5306 if (c != NULL) { |
4617 | 5307 if (od) |
5308 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5309 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5310 gaim_input_remove(c->inpa); |
4617 | 5311 if (g && od->sess) |
5312 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5313 g_free(c->name); |
5314 g_free(c->show); | |
5315 g_free(c); | |
5316 } | |
5317 /* 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
|
5318 serv_got_chat_left(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5319 } |
5320 | |
6059 | 5321 static int oscar_chat_send(GaimConnection *g, int id, const char *message) { |
7283 | 5322 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5323 GSList *bcs = g->buddy_chats; |
5679 | 5324 GaimConversation *b = NULL; |
2086 | 5325 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5326 char *buf, *buf2; |
7631 | 5327 guint i, j; |
2086 | 5328 |
5329 while (bcs) { | |
5679 | 5330 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5331 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5332 break; |
5333 bcs = bcs->next; | |
5334 b = NULL; | |
5335 } | |
5336 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5337 return -EINVAL; |
2086 | 5338 |
4617 | 5339 bcs = od->oscar_chats; |
2086 | 5340 while (bcs) { |
5341 c = (struct chat_connection *)bcs->data; | |
5342 if (b == c->cnv) | |
5343 break; | |
5344 bcs = bcs->next; | |
5345 c = NULL; | |
5346 } | |
5347 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5348 return -EINVAL; |
2086 | 5349 |
5350 buf = g_malloc(strlen(message) * 4 + 1); | |
5351 for (i = 0, j = 0; i < strlen(message); i++) { | |
5352 if (message[i] == '\n') { | |
5353 buf[j++] = '<'; | |
5354 buf[j++] = 'B'; | |
5355 buf[j++] = 'R'; | |
5356 buf[j++] = '>'; | |
5357 } else { | |
5358 buf[j++] = message[i]; | |
5359 } | |
5360 } | |
5361 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5362 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5363 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5364 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5365 |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5366 buf2 = gaim_markup_strip_html(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5367 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5368 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5369 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5370 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5371 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5372 |
4617 | 5373 aim_chat_send_im(od->sess, c->conn, 0, buf, strlen(buf)); |
2086 | 5374 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5375 return 0; |
2086 | 5376 } |
5377 | |
6695 | 5378 static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) { |
4766 | 5379 if (!b || (b && b->name && b->name[0] == '+')) { |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5380 if (a != NULL && isdigit(*gaim_account_get_username(a))) |
4687 | 5381 return "icq"; |
5382 else | |
5383 return "aim"; | |
5384 } | |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5385 |
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5386 if (b != NULL && isdigit(b->name[0])) |
4687 | 5387 return "icq"; |
5388 return "aim"; | |
5389 } | |
5390 | |
6695 | 5391 static void oscar_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5392 { |
7334 | 5393 GaimAccount *account = NULL; |
5394 GaimConnection *gc = NULL; | |
5395 OscarData *od = NULL; | |
4687 | 5396 char *emblems[4] = {NULL,NULL,NULL,NULL}; |
5397 int i = 0; | |
7334 | 5398 aim_userinfo_t *userinfo = NULL; |
5399 | |
5400 if (b != NULL) | |
5401 account = b->account; | |
5402 if (account != NULL) | |
5403 gc = account->gc; | |
5404 if (gc != NULL) | |
5405 od = gc->proto_data; | |
7945 | 5406 if (od != NULL) |
5407 userinfo = aim_locate_finduserinfo(od->sess, b->name); | |
4687 | 5408 |
5131 | 5409 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5410 char *gname; | |
7334 | 5411 if ((b->name) && (od) && (od->sess->ssi.received_data) && |
5131 | 5412 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && |
5413 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5414 emblems[i++] = "notauthorized"; | |
5415 } else { | |
5416 emblems[i++] = "offline"; | |
5417 } | |
5418 } | |
4916 | 5419 |
4766 | 5420 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5421 int uc = b->uc >> 16; |
4766 | 5422 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5423 emblems[i++] = "invisible"; |
4766 | 5424 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5425 emblems[i++] = "freeforchat"; |
4766 | 5426 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5427 emblems[i++] = "dnd"; |
4766 | 5428 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5429 emblems[i++] = "na"; |
4766 | 5430 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5431 emblems[i++] = "occupied"; |
4766 | 5432 else if (uc & AIM_ICQ_STATE_AWAY) |
5433 emblems[i++] = "away"; | |
5434 } else { | |
5435 if (b->uc & UC_UNAVAILABLE) | |
5436 emblems[i++] = "away"; | |
5437 } | |
4687 | 5438 if (b->uc & UC_WIRELESS) |
5439 emblems[i++] = "wireless"; | |
5440 if (b->uc & UC_AOL) | |
5441 emblems[i++] = "aol"; | |
5442 if (b->uc & UC_ADMIN) | |
5443 emblems[i++] = "admin"; | |
5444 if (b->uc & UC_AB && i < 4) | |
5445 emblems[i++] = "activebuddy"; | |
4766 | 5446 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5447 emblems[i++] = "unconfirmed"; */ | |
7334 | 5448 |
7945 | 5449 if ((i < 4) && (userinfo != NULL) && (userinfo->capabilities & AIM_CAPS_HIPTOP)) |
5450 emblems[i++] = "hiptop"; | |
5451 | |
5452 if ((i < 4) && (userinfo != NULL) && (userinfo->capabilities & AIM_CAPS_SECUREIM)) | |
7334 | 5453 emblems[i++] = "secure"; |
5454 | |
4687 | 5455 *se = emblems[0]; |
5456 *sw = emblems[1]; | |
5457 *nw = emblems[2]; | |
5458 *ne = emblems[3]; | |
5459 } | |
5460 | |
6695 | 5461 static char *oscar_tooltip_text(GaimBuddy *b) { |
5575 | 5462 GaimConnection *gc = b->account->gc; |
7283 | 5463 OscarData *od = gc->proto_data; |
7692 | 5464 GaimGroup *g = gaim_find_buddys_group(b); |
7261 | 5465 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
7045 | 5466 aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 5467 gchar *tmp = NULL, *ret = g_strdup(""); |
5131 | 5468 |
5469 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5470 if (isdigit(b->name[0])) { | |
7011 | 5471 char *status; |
5131 | 5472 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); |
7011 | 5473 tmp = ret; |
5474 ret = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5131 | 5475 g_free(tmp); |
5476 g_free(status); | |
5477 } | |
5478 | |
7011 | 5479 if ((bi != NULL) && (bi->ipaddr)) { |
7283 | 5480 char *tstr = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", |
7011 | 5481 (bi->ipaddr & 0xff000000) >> 24, |
5482 (bi->ipaddr & 0x00ff0000) >> 16, | |
5483 (bi->ipaddr & 0x0000ff00) >> 8, | |
5484 (bi->ipaddr & 0x000000ff)); | |
5485 tmp = ret; | |
5486 ret = g_strconcat(tmp, _("<b>IP Address:</b> "), tstr, "\n", NULL); | |
7162 | 5487 g_free(tmp); |
5488 g_free(tstr); | |
7011 | 5489 } |
5490 | |
5491 if ((userinfo != NULL) && (userinfo->capabilities)) { | |
5492 char *caps = caps_string(userinfo->capabilities); | |
5493 tmp = ret; | |
5494 ret = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
7162 | 5495 g_free(tmp); |
7011 | 5496 } |
5497 | |
7692 | 5498 if (g && g->name) { |
5499 char *comment = NULL; | |
5500 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, b->name); | |
5501 if (comment != NULL) { | |
5502 tmp = ret; | |
5503 ret = g_strconcat(tmp, _("<b>Buddy Comment:</b> "), comment, "\n", NULL); | |
5504 free(tmp); | |
5505 free(comment); | |
5506 } | |
5507 } | |
5508 | |
7011 | 5509 if ((bi != NULL) && (bi->availmsg != NULL) && !(b->uc & UC_UNAVAILABLE)) { |
5510 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5511 tmp = ret; | |
5512 ret = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); | |
7162 | 5513 g_free(tmp); |
7011 | 5514 g_free(escaped); |
5515 } | |
5516 | |
5517 if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
5518 gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
5519 if (away_utf8 != NULL) { | |
7091 | 5520 gchar *tmp1, *tmp2; |
7162 | 5521 const char *tmp3; |
7091 | 5522 tmp1 = gaim_strreplace(away_utf8, "<BR>", "\n"); |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5523 tmp2 = gaim_markup_strip_html(tmp1); |
7091 | 5524 g_free(tmp1); |
7235 | 5525 tmp1 = g_markup_escape_text(tmp2, strlen(tmp2)); |
7091 | 5526 g_free(tmp2); |
7235 | 5527 tmp3 = gaim_str_sub_away_formatters(tmp1, gaim_account_get_username(gaim_connection_get_account(gc))); |
5528 g_free(tmp1); | |
7011 | 5529 tmp = ret; |
7162 | 5530 ret = g_strconcat(tmp, _("<b>Away Message:</b> "), tmp3, "\n", NULL); |
5531 g_free(tmp); | |
7011 | 5532 g_free(away_utf8); |
5836 | 5533 } |
5131 | 5534 } |
5535 } else { | |
5536 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5537 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
7011 | 5538 tmp = ret; |
5539 ret = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5131 | 5540 g_free(tmp); |
5541 } else { | |
7011 | 5542 tmp = ret; |
5543 ret = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5131 | 5544 g_free(tmp); |
5545 } | |
5546 } | |
5547 | |
5548 /* remove the trailing newline character */ | |
7011 | 5549 if (ret) |
5550 ret[strlen(ret)-1] = '\0'; | |
5551 return ret; | |
5131 | 5552 } |
5553 | |
6695 | 5554 static char *oscar_status_text(GaimBuddy *b) { |
5575 | 5555 GaimConnection *gc = b->account->gc; |
7283 | 5556 OscarData *od = gc->proto_data; |
5167 | 5557 gchar *ret = NULL; |
5558 | |
5559 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5560 if (isdigit(b->name[0])) | |
5561 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
7038 | 5562 else |
5563 ret = g_strdup(_("Away")); | |
5836 | 5564 } else if (GAIM_BUDDY_IS_ONLINE(b)) { |
7261 | 5565 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
6292 | 5566 if (bi->availmsg) |
5567 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5836 | 5568 } else { |
5167 | 5569 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); |
5570 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5571 ret = g_strdup(_("Not Authorized")); | |
5572 else | |
5573 ret = g_strdup(_("Offline")); | |
5574 } | |
5575 | |
5576 return ret; | |
5577 } | |
5578 | |
5842 | 5579 |
5844 | 5580 static int oscar_icon_req(aim_session_t *sess, aim_frame_t *fr, ...) { |
5842 | 5581 GaimConnection *gc = sess->aux_data; |
7283 | 5582 OscarData *od = gc->proto_data; |
5892 | 5583 va_list ap; |
5842 | 5584 fu16_t type; |
5892 | 5585 fu8_t flags = 0, length = 0; |
5586 char *md5 = NULL; | |
5587 | |
7334 | 5588 |
5842 | 5589 va_start(ap, fr); |
5590 type = va_arg(ap, int); | |
5892 | 5591 |
5592 switch(type) { | |
5593 case 0x0000: | |
5594 case 0x0001: { | |
5595 flags = va_arg(ap, int); | |
5596 length = va_arg(ap, int); | |
5597 md5 = va_arg(ap, char *); | |
5598 | |
5599 if (flags == 0x41) { | |
5600 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON) && !od->iconconnecting) { | |
5601 od->iconconnecting = TRUE; | |
5602 od->set_icon = TRUE; | |
5603 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
5604 } else { | |
6039 | 5605 struct stat st; |
5606 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
5607 if (iconfile == NULL) { | |
5608 /* Set an empty icon, or something */ | |
5609 } else if (!stat(iconfile, &st)) { | |
5610 char *buf = g_malloc(st.st_size); | |
5611 FILE *file = fopen(iconfile, "rb"); | |
5612 if (file) { | |
5613 fread(buf, 1, st.st_size, file); | |
5614 fclose(file); | |
5615 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5616 "Uploading icon to icon server\n"); | |
6879 | 5617 aim_bart_upload(od->sess, buf, st.st_size); |
5892 | 5618 } else |
5619 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 5620 "Can't open buddy icon file!\n"); |
5621 g_free(buf); | |
5622 } else { | |
5623 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5624 "Can't stat buddy icon file!\n"); | |
5892 | 5625 } |
5626 } | |
5893 | 5627 } else if (flags == 0x81) |
5628 aim_ssi_seticon(od->sess, md5, length); | |
5892 | 5629 } break; |
5630 | |
5631 case 0x0002: { /* We just set an "available" message? */ | |
5632 } break; | |
5633 } | |
5634 | |
5842 | 5635 va_end(ap); |
5844 | 5636 |
5637 return 0; | |
5842 | 5638 } |
5892 | 5639 |
3952 | 5640 /* |
4617 | 5641 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5642 */ |
4617 | 5643 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5644 GaimConnection *gc = sess->aux_data; |
7283 | 5645 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5646 GaimConversation *cnv; |
2086 | 5647 struct direct_im *dim; |
5648 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5649 char *sn; |
4617 | 5650 va_list ap; |
5651 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5652 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5653 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5654 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5655 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5656 va_end(ap); |
5657 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5658 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5659 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5660 |
4617 | 5661 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5662 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5663 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5664 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5665 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5666 |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5667 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
|
5668 gaim_input_remove(dim->watcher); |
2086 | 5669 dim->conn = newconn; |
4617 | 5670 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5671 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5672 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5673 g_free(sn); |
6982 | 5674 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
2086 | 5675 |
4617 | 5676 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5677 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
6982 | 5678 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_odc_update_ui, 0); |
4617 | 5679 |
2993 | 5680 return 1; |
5681 } | |
5682 | |
6982 | 5683 /* |
5684 * This is called when each chunk of an image is received. It can be used to | |
5685 * update a progress bar, or to eat lots of dry cat food. Wet cat food is | |
5686 * nasty, you sicko. | |
5687 */ | |
5688 static int gaim_odc_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2993 | 5689 va_list ap; |
5690 char *sn; | |
5691 double percent; | |
5575 | 5692 GaimConnection *gc = sess->aux_data; |
7283 | 5693 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5694 GaimConversation *c; |
2993 | 5695 struct direct_im *dim; |
5696 | |
5697 va_start(ap, fr); | |
5698 sn = va_arg(ap, char *); | |
5699 percent = va_arg(ap, double); | |
5700 va_end(ap); | |
6873 | 5701 |
2994 | 5702 if (!(dim = find_direct_im(od, sn))) |
5703 return 1; | |
3059 | 5704 if (dim->watcher) { |
5705 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5706 dim->watcher = 0; | |
5707 } | |
6982 | 5708 /* XXX is this really necessary? */ |
7082
25a616f16b6c
[gaim-migrate @ 7647]
Christian Hammond <chipx86@chipx86.com>
parents:
7080
diff
changeset
|
5709 gaim_core_mainloop_finish_events(); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5710 |
6982 | 5711 c = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
6873 | 5712 if (c != NULL) |
5713 gaim_conversation_update_progress(c, percent); | |
2993 | 5714 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5715 oscar_callback, dim->conn); | |
2086 | 5716 |
5717 return 1; | |
5718 } | |
5719 | |
6982 | 5720 /* |
5721 * This is called after a direct IM has been received in its entirety. This | |
5722 * function is passed a long chunk of data which contains the IM with any | |
5723 * data chunks (images) appended to it. | |
5724 * | |
5725 * This function rips out all the data chunks and creates an imgstore for | |
5726 * each one. In order to do this, it first goes through the IM and takes | |
5727 * out all the IMG tags. When doing so, it rewrites the original IMG tag | |
5728 * with one compatable with the imgstore Gaim core code. For each one, we | |
5729 * then read in chunks of data from the end of the message and actually | |
5730 * create the img store using the given data. | |
5731 * | |
5732 * For somewhat easy reference, here's a sample message | |
5733 * (without the whitespace and asterisks): | |
5734 * | |
5735 * <HTML><BODY BGCOLOR="#ffffff"> | |
5736 * <FONT LANG="0"> | |
5737 * This is a really stupid picture:<BR> | |
5738 * <IMG SRC="Sample.jpg" ID="1" WIDTH="283" HEIGHT="212" DATASIZE="9894"><BR> | |
5739 * Yeah it is<BR> | |
5740 * Here is another one:<BR> | |
5741 * <IMG SRC="Soap Bubbles.bmp" ID="2" WIDTH="256" HEIGHT="256" DATASIZE="65978"> | |
5742 * </FONT> | |
5743 * </BODY></HTML> | |
5744 * <BINARY> | |
5745 * <DATA ID="1" SIZE="9894">datadatadatadata</DATA> | |
5746 * <DATA ID="2" SIZE="65978">datadatadatadata</DATA> | |
5747 * </BINARY> | |
5748 */ | |
4617 | 5749 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5750 GaimConnection *gc = sess->aux_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5751 GaimConvImFlags imflags = 0; |
6982 | 5752 GString *newmsg = g_string_new(""); |
5753 GSList *images = NULL; | |
2086 | 5754 va_list ap; |
6982 | 5755 const char *sn, *msg, *msgend, *binary; |
5756 size_t len; | |
5757 int encoding, isawaymsg; | |
2086 | 5758 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5759 va_start(ap, fr); |
6982 | 5760 sn = va_arg(ap, const char *); |
5761 msg = va_arg(ap, const char *); | |
5762 len = va_arg(ap, size_t); | |
3952 | 5763 encoding = va_arg(ap, int); |
4870 | 5764 isawaymsg = va_arg(ap, int); |
2086 | 5765 va_end(ap); |
6982 | 5766 msgend = msg + len; |
2086 | 5767 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5768 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5769 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5770 |
4870 | 5771 if (isawaymsg) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5772 imflags |= GAIM_CONV_IM_AUTO_RESP; |
4870 | 5773 |
6982 | 5774 /* message has a binary trailer */ |
5775 if ((binary = gaim_strcasestr(msg, "<binary>"))) { | |
5776 GData *attribs; | |
5777 const char *tmp, *start, *end, *last = NULL; | |
5778 | |
5779 tmp = msg; | |
5780 | |
5781 /* for each valid image tag... */ | |
5782 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5783 const char *id, *src, *datasize; | |
5784 const char *tag = NULL, *data = NULL; | |
5785 size_t size; | |
5786 int imgid = 0; | |
5787 | |
5788 /* update the location of the last img tag */ | |
5789 last = end; | |
5790 | |
5791 /* grab attributes */ | |
5792 id = g_datalist_get_data(&attribs, "id"); | |
5793 src = g_datalist_get_data(&attribs, "src"); | |
5794 datasize = g_datalist_get_data(&attribs, "datasize"); | |
5795 | |
5796 /* if we have id & datasize, build the data tag */ | |
5797 if (id && datasize) | |
5798 tag = g_strdup_printf("<data id=\"%s\" size=\"%s\">", id, datasize); | |
5799 | |
5800 /* if we have a tag, find the start of the data */ | |
5801 if (tag && (data = gaim_strcasestr(binary, tag))) | |
5802 data += strlen(tag); | |
5803 | |
5804 /* check the data is here and store it */ | |
5805 if (data + (size = atoi(datasize)) <= msgend) | |
5806 imgid = gaim_imgstore_add(data, size, src); | |
5807 | |
5808 /* if we have a stored image... */ | |
5809 if (imgid) { | |
5810 /* append the message up to the tag */ | |
5811 newmsg = g_string_append_len(newmsg, tmp, start - tmp); | |
5812 | |
5813 /* write the new image tag */ | |
5814 g_string_append_printf(newmsg, "<IMG ID=\"%d\">", imgid); | |
5815 | |
5816 /* and record the image number */ | |
5817 images = g_slist_append(images, GINT_TO_POINTER(imgid)); | |
5818 } else { | |
5819 /* otherwise, copy up to the end of the tag */ | |
5820 newmsg = g_string_append_len(newmsg, tmp, (end + 1) - tmp); | |
5821 } | |
5822 | |
5823 /* clear the attribute list */ | |
5824 g_datalist_clear(&attribs); | |
5825 | |
5826 /* continue from the end of the tag */ | |
5827 tmp = end + 1; | |
5828 } | |
5829 | |
5830 /* append any remaining message data (without the > :-) */ | |
5831 if (last++ && (last < binary)) | |
5832 newmsg = g_string_append_len(newmsg, last, binary - last); | |
5833 | |
5834 /* set the flag if we caught any images */ | |
5835 if (images) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5836 imflags |= GAIM_CONV_IM_IMAGES; |
6982 | 5837 } else { |
5838 g_string_append_len(newmsg, msg, len); | |
5839 } | |
5840 | |
4617 | 5841 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
6982 | 5842 serv_got_im(gc, sn, newmsg->str, imflags, time(NULL)); |
5843 | |
5844 /* free up the message */ | |
5845 g_string_free(newmsg, TRUE); | |
5846 | |
5847 /* unref any images we allocated */ | |
5848 if (images) { | |
5849 GSList *tmp; | |
5850 int id; | |
5851 | |
5852 for (tmp = images; tmp != NULL; tmp = tmp->next) { | |
5853 id = GPOINTER_TO_INT(tmp->data); | |
5854 gaim_imgstore_unref(id); | |
5855 } | |
5856 | |
5857 g_slist_free(images); | |
5858 } | |
2086 | 5859 |
5860 return 1; | |
5861 } | |
5862 | |
4617 | 5863 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5864 va_list ap; |
5865 char *sn; | |
2993 | 5866 int typing; |
5575 | 5867 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5868 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5869 va_start(ap, fr); |
2086 | 5870 sn = va_arg(ap, char *); |
2993 | 5871 typing = va_arg(ap, int); |
2086 | 5872 va_end(ap); |
5873 | |
4870 | 5874 if (typing == 0x0002) { |
2993 | 5875 /* 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
|
5876 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5877 "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
|
5878 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
4870 | 5879 } else if (typing == 0x0001) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
5880 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
4870 | 5881 else |
4342 | 5882 serv_got_typing_stopped(gc, sn); |
2086 | 5883 return 1; |
5884 } | |
5885 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5886 static int gaim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *message, GaimConvImFlags imflags) { |
6982 | 5887 char *buf; |
5888 size_t len; | |
5889 int ret; | |
5890 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5891 if (imflags & GAIM_CONV_IM_IMAGES) { |
6982 | 5892 GString *msg = g_string_new(""); |
5893 GString *data = g_string_new("<BINARY>"); | |
5894 GData *attribs; | |
5895 const char *tmp, *start, *end, *last = NULL; | |
5896 int oscar_id = 0; | |
5897 | |
5898 tmp = message; | |
5899 | |
5900 /* for each valid IMG tag... */ | |
5901 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5902 GaimStoredImage *image = NULL; | |
5903 const char *id; | |
5904 | |
5905 last = end; | |
5906 id = g_datalist_get_data(&attribs, "id"); | |
5907 | |
5908 /* ... if it refers to a valid gaim image ... */ | |
5909 if (id && (image = gaim_imgstore_get(atoi(id)))) { | |
5910 /* ... append the message from start to the tag ... */ | |
5911 msg = g_string_append_len(msg, tmp, start - tmp); | |
5912 oscar_id++; | |
5913 | |
5914 /* ... insert a new img tag with the oscar id ... */ | |
5915 if (image->filename) | |
5916 g_string_append_printf(msg, | |
5917 "<IMG SRC=\"file://%s\" ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 5918 image->filename, oscar_id, (int)image->size); |
6982 | 5919 else |
5920 g_string_append_printf(msg, | |
5921 "<IMG ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 5922 oscar_id, (int)image->size); |
6982 | 5923 |
5924 /* ... and append the data to the binary section ... */ | |
5925 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%d\">", | |
7386 | 5926 oscar_id, (int)image->size); |
6982 | 5927 data = g_string_append_len(data, image->data, image->size); |
5928 data = g_string_append(data, "</DATA>"); | |
5929 } else { | |
5930 /* ... otherwise, allow the possibly invalid img tag through. */ | |
5931 /* should we do something else? */ | |
5932 msg = g_string_append_len(msg, tmp, (end + 1) - tmp); | |
5933 } | |
5934 | |
5935 g_datalist_clear(&attribs); | |
5936 | |
5937 /* continue from the end of the tag */ | |
5938 tmp = end + 1; | |
5939 } | |
5940 | |
5941 /* append any remaining message data (without the > :-) */ | |
5942 if (last++ && *last) | |
5943 msg = g_string_append(msg, last); | |
5944 | |
5945 /* if we inserted any images in the binary section, append it */ | |
5946 if (oscar_id) { | |
5947 msg = g_string_append_len(msg, data->str, data->len); | |
5948 msg = g_string_append(msg, "</BINARY>"); | |
5949 } | |
5950 | |
5951 len = msg->len; | |
5952 buf = msg->str; | |
5953 g_string_free(msg, FALSE); | |
5954 g_string_free(data, TRUE); | |
5955 } else { | |
5956 len = strlen(message); | |
5957 buf = g_memdup(message, len+1); | |
5958 } | |
5959 | |
5960 /* 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
|
5961 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
6982 | 5962 ret = aim_odc_send_im(sess, conn, buf, len, 0, 1); |
5963 else | |
5964 ret = aim_odc_send_im(sess, conn, buf, len, 0, 0); | |
5965 | |
5966 g_free(buf); | |
5967 | |
5968 return ret; | |
5969 } | |
5970 | |
2086 | 5971 struct ask_do_dir_im { |
5972 char *who; | |
5575 | 5973 GaimConnection *gc; |
2086 | 5974 }; |
5975 | |
3730 | 5976 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 5977 g_free(data->who); |
2086 | 5978 g_free(data); |
5979 } | |
5980 | |
3730 | 5981 static void oscar_direct_im(struct ask_do_dir_im *data) { |
5575 | 5982 GaimConnection *gc = data->gc; |
7283 | 5983 OscarData *od; |
2086 | 5984 struct direct_im *dim; |
5985 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
5986 if (!g_list_find(gaim_connections_get_all(), gc)) { |
5136 | 5987 g_free(data->who); |
4244 | 5988 g_free(data); |
5989 return; | |
5990 } | |
5991 | |
7283 | 5992 od = (OscarData *)gc->proto_data; |
4244 | 5993 |
2086 | 5994 dim = find_direct_im(od, data->who); |
5995 if (dim) { | |
3008 | 5996 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
5997 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
5998 gaim_input_remove(dim->watcher); | |
5999 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6000 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6001 "Gave up on old direct IM, trying again\n"); |
3008 | 6002 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6003 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 6004 g_free(data->who); |
4244 | 6005 g_free(data); |
3008 | 6006 return; |
6007 } | |
2086 | 6008 } |
6009 dim = g_new0(struct direct_im, 1); | |
6010 dim->gc = gc; | |
6011 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
6012 | |
4617 | 6013 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 6014 if (dim->conn != NULL) { |
6015 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
6016 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 6017 oscar_callback, dim->conn); |
4617 | 6018 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
6019 gaim_odc_initiate, 0); | |
2086 | 6020 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6021 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 6022 g_free(dim); |
6023 } | |
4244 | 6024 |
5136 | 6025 g_free(data->who); |
4244 | 6026 g_free(data); |
2086 | 6027 } |
6028 | |
5575 | 6029 static void oscar_ask_direct_im(GaimConnection *gc, const char *who) { |
5420 | 6030 gchar *buf; |
2086 | 6031 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 6032 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
6033 data->gc = gc; |
5420 | 6034 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
|
6035 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6036 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6037 _("Because this reveals your IP address, it " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6038 "may be considered a privacy risk. Do you " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6039 "wish to continue?"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6040 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6041 _("Connect"), G_CALLBACK(oscar_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6042 _("Cancel"), G_CALLBACK(oscar_cancel_direct_im)); |
5420 | 6043 g_free(buf); |
2086 | 6044 } |
6045 | |
5575 | 6046 static void oscar_set_permit_deny(GaimConnection *gc) { |
6047 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 6048 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 6049 #ifdef NOSSI |
4770 | 6050 GSList *list, *g = gaim_blist_groups(), *g1; |
4230 | 6051 char buf[MAXMSGLEN]; |
6052 int at; | |
6053 | |
5575 | 6054 switch(account->perm_deny) { |
4687 | 6055 case 1: |
5575 | 6056 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gaim_account_get_username(account)); |
4230 | 6057 break; |
6058 case 2: | |
5575 | 6059 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gaim_account_get_username(account)); |
4230 | 6060 break; |
6061 case 3: | |
5575 | 6062 list = account->permit; |
4230 | 6063 at = 0; |
6064 while (list) { | |
6065 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6066 list = list->next; | |
6067 } | |
6068 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
6069 break; | |
6070 case 4: | |
5575 | 6071 list = account->deny; |
4230 | 6072 at = 0; |
6073 while (list) { | |
6074 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6075 list = list->next; | |
6076 } | |
6077 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
6078 break; | |
6079 case 5: | |
4770 | 6080 g1 = g; |
4230 | 6081 at = 0; |
4770 | 6082 while (g1) { |
6083 list = gaim_blist_members((struct group *)g->data); | |
6084 GSList list1 = list; | |
6085 while (list1) { | |
6086 struct buddy *b = list1->data; | |
5575 | 6087 if(b->account == account) |
4349 | 6088 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", b->name); |
4770 | 6089 list1 = list1->next; |
2995 | 6090 } |
4770 | 6091 g_slist_free(list); |
6092 g1 = g1->next; | |
4349 | 6093 } |
4770 | 6094 g_slist_free(g); |
4230 | 6095 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
6096 break; | |
6097 default: | |
6098 break; | |
2086 | 6099 } |
4230 | 6100 signoff_blocked(gc); |
6101 #else | |
6102 if (od->sess->ssi.received_data) | |
5575 | 6103 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); |
4230 | 6104 #endif |
2086 | 6105 } |
6106 | |
5575 | 6107 static void oscar_add_permit(GaimConnection *gc, const char *who) { |
4269 | 6108 #ifdef NOSSI |
4491 | 6109 if (gc->account->permdeny == 3) |
4269 | 6110 oscar_set_permit_deny(gc); |
6111 #else | |
7283 | 6112 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6113 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 6114 if (od->sess->ssi.received_data) |
4889 | 6115 aim_ssi_addpermit(od->sess, who); |
4230 | 6116 #endif |
2086 | 6117 } |
6118 | |
5575 | 6119 static void oscar_add_deny(GaimConnection *gc, const char *who) { |
4269 | 6120 #ifdef NOSSI |
4491 | 6121 if (gc->account->permdeny == 4) |
4269 | 6122 oscar_set_permit_deny(gc); |
6123 #else | |
7283 | 6124 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6125 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 6126 if (od->sess->ssi.received_data) |
4889 | 6127 aim_ssi_adddeny(od->sess, who); |
4230 | 6128 #endif |
2086 | 6129 } |
6130 | |
5575 | 6131 static void oscar_rem_permit(GaimConnection *gc, const char *who) { |
4269 | 6132 #ifdef NOSSI |
4491 | 6133 if (gc->account->permdeny == 3) |
4269 | 6134 oscar_set_permit_deny(gc); |
6135 #else | |
7283 | 6136 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6137 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 6138 if (od->sess->ssi.received_data) |
4889 | 6139 aim_ssi_delpermit(od->sess, who); |
4230 | 6140 #endif |
2086 | 6141 } |
6142 | |
5575 | 6143 static void oscar_rem_deny(GaimConnection *gc, const char *who) { |
4269 | 6144 #ifdef NOSSI |
4491 | 6145 if (gc->account->permdeny == 4) |
4269 | 6146 oscar_set_permit_deny(gc); |
6147 #else | |
7283 | 6148 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6149 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 6150 if (od->sess->ssi.received_data) |
4889 | 6151 aim_ssi_deldeny(od->sess, who); |
4230 | 6152 #endif |
2086 | 6153 } |
6154 | |
5575 | 6155 static GList *oscar_away_states(GaimConnection *gc) |
2086 | 6156 { |
7283 | 6157 OscarData *od = gc->proto_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6158 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6159 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6160 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6161 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6162 |
4333 | 6163 m = g_list_append(m, _("Online")); |
6164 m = g_list_append(m, _("Away")); | |
6165 m = g_list_append(m, _("Do Not Disturb")); | |
6166 m = g_list_append(m, _("Not Available")); | |
6167 m = g_list_append(m, _("Occupied")); | |
6168 m = g_list_append(m, _("Free For Chat")); | |
6169 m = g_list_append(m, _("Invisible")); | |
6170 | |
6171 return m; | |
6172 } | |
6173 | |
7172 | 6174 static void oscar_ssi_editcomment(struct name_data *data, const char *text) { |
7283 | 6175 OscarData *od = data->gc->proto_data; |
7172 | 6176 GaimBuddy *b; |
6177 GaimGroup *g; | |
6178 | |
6179 if (!(b = gaim_find_buddy(gaim_connection_get_account(data->gc), data->name))) { | |
6180 oscar_free_name_data(data); | |
6181 return; | |
6182 } | |
6183 | |
6184 if (!(g = gaim_find_buddys_group(b))) { | |
6185 oscar_free_name_data(data); | |
6186 return; | |
6187 } | |
6188 | |
6189 aim_ssi_editcomment(od->sess, g->name, data->name, text); | |
6190 oscar_free_name_data(data); | |
6191 } | |
6192 | |
6193 static void oscar_buddycb_edit_comment(GaimConnection *gc, const char *name) { | |
7283 | 6194 OscarData *od = gc->proto_data; |
7172 | 6195 struct name_data *data = g_new(struct name_data, 1); |
6196 GaimBuddy *b; | |
6197 GaimGroup *g; | |
6198 char *comment; | |
6199 gchar *comment_utf8; | |
6200 | |
6201 if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name))) | |
6202 return; | |
6203 if (!(g = gaim_find_buddys_group(b))) | |
6204 return; | |
6205 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name); | |
6206 comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL; | |
6207 | |
6208 data->gc = gc; | |
6209 data->name = g_strdup(name); | |
6210 data->nick = NULL; | |
6211 | |
6212 gaim_request_input(gc, NULL, _("Buddy Comment:"), NULL, | |
6213 comment_utf8, TRUE, FALSE, | |
6214 _("OK"), G_CALLBACK(oscar_ssi_editcomment), | |
6215 _("Cancel"), G_CALLBACK(oscar_free_name_data), | |
6216 data); | |
6217 | |
6218 free(comment); | |
6219 g_free(comment_utf8); | |
6220 } | |
6221 | |
5575 | 6222 static GList *oscar_buddy_menu(GaimConnection *gc, const char *who) { |
7283 | 6223 OscarData *od = gc->proto_data; |
4333 | 6224 GList *m = NULL; |
6225 struct proto_buddy_menu *pbm; | |
6226 | |
7172 | 6227 pbm = g_new0(struct proto_buddy_menu, 1); |
6228 pbm->label = _("Edit Buddy Comment"); | |
6229 pbm->callback = oscar_buddycb_edit_comment; | |
6230 pbm->gc = gc; | |
6231 m = g_list_append(m, pbm); | |
6232 | |
4333 | 6233 if (od->icq) { |
4624 | 6234 #if 0 |
4333 | 6235 pbm = g_new0(struct proto_buddy_menu, 1); |
6236 pbm->label = _("Get Status Msg"); | |
4969 | 6237 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 6238 pbm->gc = gc; |
6239 m = g_list_append(m, pbm); | |
4624 | 6240 #endif |
4333 | 6241 } else { |
6695 | 6242 GaimBuddy *b = gaim_find_buddy(gc->account, who); |
7011 | 6243 aim_userinfo_t *userinfo; |
5975 | 6244 |
6245 if (b) | |
7045 | 6246 userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 6247 |
6248 if (b && userinfo && aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), who) && GAIM_BUDDY_IS_ONLINE(b)) { | |
6249 if (userinfo->capabilities & AIM_CAPS_DIRECTIM) { | |
5917 | 6250 pbm = g_new0(struct proto_buddy_menu, 1); |
6251 pbm->label = _("Direct IM"); | |
6252 pbm->callback = oscar_ask_direct_im; | |
6253 pbm->gc = gc; | |
6254 m = g_list_append(m, pbm); | |
6255 } | |
7650 | 6256 |
6257 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { | |
6258 pbm = g_new0(struct proto_buddy_menu, 1); | |
6259 pbm->label = _("Send File"); | |
6260 pbm->callback = oscar_ask_sendfile; | |
6261 pbm->gc = gc; | |
6262 m = g_list_append(m, pbm); | |
6263 } | |
4826 | 6264 #if 0 |
7011 | 6265 if (userinfo->capabilities & AIM_CAPS_GETFILE) { |
5917 | 6266 pbm = g_new0(struct proto_buddy_menu, 1); |
6267 pbm->label = _("Get File"); | |
6268 pbm->callback = oscar_ask_getfile; | |
6269 pbm->gc = gc; | |
6270 m = g_list_append(m, pbm); | |
6271 } | |
4826 | 6272 #endif |
4333 | 6273 } |
5131 | 6274 } |
5197 | 6275 |
5131 | 6276 if (od->sess->ssi.received_data) { |
6277 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
6278 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
6279 pbm = g_new0(struct proto_buddy_menu, 1); | |
6873 | 6280 pbm->label = _("Re-request Authorization"); |
5131 | 6281 pbm->callback = gaim_auth_sendrequest; |
6282 pbm->gc = gc; | |
6283 m = g_list_append(m, pbm); | |
4333 | 6284 } |
4916 | 6285 } |
6286 | |
4333 | 6287 return m; |
6288 } | |
6289 | |
5575 | 6290 static void oscar_format_screenname(GaimConnection *gc, const char *nick) { |
7283 | 6291 OscarData *od = gc->proto_data; |
5575 | 6292 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), nick)) { |
4333 | 6293 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
6294 od->setnick = TRUE; | |
6295 od->newsn = g_strdup(nick); | |
6296 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6297 } else { | |
6298 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
6299 } | |
6300 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6301 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6302 _("Screenname formatting can change only capitalization and whitespace.")); |
4333 | 6303 } |
6304 } | |
6305 | |
5575 | 6306 static void oscar_show_format_screenname(GaimConnection *gc) |
4333 | 6307 { |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6308 gaim_request_input(gc, NULL, _("New screenname formatting:"), NULL, |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6309 gaim_connection_get_display_name(gc), FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6310 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6311 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6312 gc); |
4333 | 6313 } |
6314 | |
5575 | 6315 static void oscar_confirm_account(GaimConnection *gc) |
4333 | 6316 { |
7283 | 6317 OscarData *od = gc->proto_data; |
4333 | 6318 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6319 | |
6320 if (conn) { | |
6321 aim_admin_reqconfirm(od->sess, conn); | |
6322 } else { | |
6323 od->conf = TRUE; | |
6324 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6325 } | |
6326 } | |
6327 | |
5575 | 6328 static void oscar_show_email(GaimConnection *gc) |
4333 | 6329 { |
7283 | 6330 OscarData *od = gc->proto_data; |
4333 | 6331 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6332 | |
6333 if (conn) { | |
6334 aim_admin_getinfo(od->sess, conn, 0x11); | |
6335 } else { | |
6336 od->reqemail = TRUE; | |
6337 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6338 } | |
6339 } | |
6340 | |
5575 | 6341 static void oscar_change_email(GaimConnection *gc, const char *email) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6342 { |
7283 | 6343 OscarData *od = gc->proto_data; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6344 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
|
6345 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6346 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6347 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6348 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6349 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6350 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6351 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6352 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6353 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6354 |
5575 | 6355 static void oscar_show_change_email(GaimConnection *gc) |
4333 | 6356 { |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6357 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, |
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6358 FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6359 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6360 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6361 gc); |
4333 | 6362 } |
6363 | |
5575 | 6364 static void oscar_show_awaitingauth(GaimConnection *gc) |
4333 | 6365 { |
7283 | 6366 OscarData *od = gc->proto_data; |
4333 | 6367 gchar *nombre, *text, *tmp; |
6695 | 6368 GaimBlistNode *gnode, *cnode, *bnode; |
4333 | 6369 int num=0; |
6370 | |
6873 | 6371 text = g_strdup(""); |
4333 | 6372 |
4785 | 6373 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
6695 | 6374 GaimGroup *group = (GaimGroup *)gnode; |
4785 | 6375 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
6376 continue; | |
6695 | 6377 for (cnode = gnode->child; cnode; cnode = cnode->next) { |
6378 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 6379 continue; |
6695 | 6380 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
6381 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
6382 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
6383 continue; | |
6384 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { | |
6385 if (gaim_get_buddy_alias_only(buddy)) | |
6386 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
6387 else | |
6388 nombre = g_strdup_printf(" %s", buddy->name); | |
6873 | 6389 tmp = g_strdup_printf("%s%s<br>", text, nombre); |
6695 | 6390 g_free(text); |
6391 text = tmp; | |
6392 g_free(nombre); | |
6393 num++; | |
6394 } | |
4333 | 6395 } |
2979 | 6396 } |
4333 | 6397 } |
6398 | |
6399 if (!num) { | |
6400 g_free(text); | |
6873 | 6401 text = g_strdup(_("<i>you are not waiting for authorization</i>")); |
6402 } | |
6403 | |
6404 gaim_notify_formatted(gc, NULL, _("You are awaiting authorization from " | |
6405 "the following buddies"), _("You can re-request " | |
6406 "authorization from these buddies by " | |
6407 "right-clicking on them and selecting " | |
6408 "\"Re-request Authorization.\""), text, NULL, NULL); | |
4333 | 6409 g_free(text); |
2979 | 6410 } |
6411 | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6412 static void search_by_email_cb(GaimConnection *gc, const char *email) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6413 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6414 serv_dir_search(gc, "", "", "", "", "", "", "", email); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6415 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6416 |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6417 static void oscar_show_find_email(GaimConnection *gc) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6418 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6419 gaim_request_input(gc, _("Find Buddy by E-mail"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6420 _("Search for a buddy by e-mail address"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6421 _("Type the e-mail address of the buddy you are " |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6422 "searching for."), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6423 NULL, FALSE, FALSE, |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6424 _("Search"), G_CALLBACK(search_by_email_cb), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6425 _("Cancel"), NULL, gc); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6426 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6427 |
7366 | 6428 #if 0 |
5917 | 6429 static void oscar_setavailmsg(GaimConnection *gc, char *text) { |
7283 | 6430 OscarData *od = (OscarData *)gc->proto_data; |
5917 | 6431 |
7334 | 6432 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
5917 | 6433 aim_srv_setavailmsg(od->sess, text); |
6434 } | |
6435 | |
6436 static void oscar_show_setavailmsg(GaimConnection *gc) | |
6437 { | |
7313 | 6438 gaim_request_input(gc, NULL, _("Available Message:"), NULL, |
6439 _("I'm doing work and hoping for a distraction--IM me!"), | |
6440 TRUE, FALSE, | |
5917 | 6441 _("OK"), G_CALLBACK(oscar_setavailmsg), |
6442 _("Cancel"), NULL, | |
6443 gc); | |
6444 } | |
7366 | 6445 #endif |
5917 | 6446 |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6447 static void oscar_show_set_info(GaimConnection *gc) |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6448 { |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6449 gaim_account_request_change_user_info(gaim_connection_get_account(gc)); |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6450 } |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6451 |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6452 static void oscar_change_pass(GaimConnection *gc) |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6453 { |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6454 gaim_account_request_change_password(gaim_connection_get_account(gc)); |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6455 } |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6456 |
5575 | 6457 static void oscar_show_chpassurl(GaimConnection *gc) |
4333 | 6458 { |
7283 | 6459 OscarData *od = gc->proto_data; |
5575 | 6460 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
|
6461 gaim_notify_uri(gc, substituted); |
5517 | 6462 g_free(substituted); |
4333 | 6463 } |
6464 | |
7026 | 6465 static void oscar_show_imforwardingurl(GaimConnection *gc) |
6466 { | |
6467 gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); | |
6468 } | |
6469 | |
5842 | 6470 static void oscar_set_icon(GaimConnection *gc, const char *iconfile) |
6471 { | |
7283 | 6472 OscarData *od = gc->proto_data; |
5844 | 6473 aim_session_t *sess = od->sess; |
5842 | 6474 FILE *file; |
6475 struct stat st; | |
5844 | 6476 |
6039 | 6477 if (iconfile == NULL) { |
6478 /* Set an empty icon, or something */ | |
6479 } else if (!stat(iconfile, &st)) { | |
5842 | 6480 char *buf = g_malloc(st.st_size); |
6481 file = fopen(iconfile, "rb"); | |
6482 if (file) { | |
6052 | 6483 md5_state_t *state; |
6039 | 6484 char md5[16]; |
5842 | 6485 int len = fread(buf, 1, st.st_size, file); |
6039 | 6486 fclose(file); |
6052 | 6487 state = g_malloc(sizeof(md5_state_t)); |
5842 | 6488 md5_init(state); |
6489 md5_append(state, buf, len); | |
6490 md5_finish(state, md5); | |
6491 g_free(state); | |
6492 aim_ssi_seticon(sess, md5, 16); | |
6493 } else | |
6494 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6495 "Can't open buddy icon file!\n"); | |
6496 g_free(buf); | |
6497 } else | |
6498 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6499 "Can't stat buddy icon file!\n"); | |
6500 } | |
6501 | |
6502 | |
5575 | 6503 static GList *oscar_actions(GaimConnection *gc) |
2086 | 6504 { |
7283 | 6505 OscarData *od = gc->proto_data; |
4333 | 6506 struct proto_actions_menu *pam; |
6507 GList *m = NULL; | |
6508 | |
6509 pam = g_new0(struct proto_actions_menu, 1); | |
7853 | 6510 pam->label = _("Set User Info..."); |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6511 pam->callback = oscar_show_set_info; |
4333 | 6512 pam->gc = gc; |
6513 m = g_list_append(m, pam); | |
6514 | |
7366 | 6515 #if 0 |
5917 | 6516 pam = g_new0(struct proto_actions_menu, 1); |
7853 | 6517 pam->label = _("Set Available Message..."); |
5917 | 6518 pam->callback = oscar_show_setavailmsg; |
6519 pam->gc = gc; | |
6520 m = g_list_append(m, pam); | |
7366 | 6521 #endif |
5917 | 6522 |
5238 | 6523 pam = g_new0(struct proto_actions_menu, 1); |
7853 | 6524 pam->label = _("Change Password..."); |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6525 pam->callback = oscar_change_pass; |
5238 | 6526 pam->gc = gc; |
6527 m = g_list_append(m, pam); | |
4617 | 6528 |
6529 if (od->sess->authinfo->chpassurl) { | |
6530 pam = g_new0(struct proto_actions_menu, 1); | |
6531 pam->label = _("Change Password (URL)"); | |
6532 pam->callback = oscar_show_chpassurl; | |
6533 pam->gc = gc; | |
6534 m = g_list_append(m, pam); | |
6535 } | |
6536 | |
7026 | 6537 if (od->sess->authinfo->chpassurl) { |
6538 pam = g_new0(struct proto_actions_menu, 1); | |
6539 pam->label = _("Configure IM Forwarding (URL)"); | |
6540 pam->callback = oscar_show_imforwardingurl; | |
6541 pam->gc = gc; | |
6542 m = g_list_append(m, pam); | |
6543 } | |
6544 | |
5238 | 6545 if (!od->icq) { |
4617 | 6546 /* AIM actions */ |
6547 m = g_list_append(m, NULL); | |
4333 | 6548 |
5917 | 6549 pam = g_new0(struct proto_actions_menu, 1); |
7853 | 6550 pam->label = _("Format Screenname..."); |
5844 | 6551 pam->callback = oscar_show_format_screenname; |
4333 | 6552 pam->gc = gc; |
6553 m = g_list_append(m, pam); | |
6554 | |
6555 pam = g_new0(struct proto_actions_menu, 1); | |
6556 pam->label = _("Confirm Account"); | |
6557 pam->callback = oscar_confirm_account; | |
6558 pam->gc = gc; | |
6559 m = g_list_append(m, pam); | |
6560 | |
6561 pam = g_new0(struct proto_actions_menu, 1); | |
7880 | 6562 pam->label = _("Display Currently Registered Address"); |
4333 | 6563 pam->callback = oscar_show_email; |
6564 pam->gc = gc; | |
6565 m = g_list_append(m, pam); | |
6566 | |
6567 pam = g_new0(struct proto_actions_menu, 1); | |
7880 | 6568 pam->label = _("Change Currently Registered Address..."); |
4333 | 6569 pam->callback = oscar_show_change_email; |
6570 pam->gc = gc; | |
6571 m = g_list_append(m, pam); | |
2086 | 6572 } |
4333 | 6573 |
6574 m = g_list_append(m, NULL); | |
6575 | |
6576 pam = g_new0(struct proto_actions_menu, 1); | |
6577 pam->label = _("Show Buddies Awaiting Authorization"); | |
6578 pam->callback = oscar_show_awaitingauth; | |
6579 pam->gc = gc; | |
6580 m = g_list_append(m, pam); | |
6581 | |
2086 | 6582 m = g_list_append(m, NULL); |
4333 | 6583 |
6584 pam = g_new0(struct proto_actions_menu, 1); | |
7853 | 6585 pam->label = _("Search for Buddy by Email..."); |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6586 pam->callback = oscar_show_find_email; |
4333 | 6587 pam->gc = gc; |
6588 m = g_list_append(m, pam); | |
6589 | |
4336 | 6590 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6591 pam->label = _("Search for Buddy by Information"); |
6592 pam->callback = show_find_info; | |
6593 pam->gc = gc; | |
4336 | 6594 m = g_list_append(m, pam); */ |
2086 | 6595 |
6596 return m; | |
6597 } | |
6598 | |
5575 | 6599 static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) |
2086 | 6600 { |
7283 | 6601 OscarData *od = gc->proto_data; |
4617 | 6602 |
6603 if (od->icq) { | |
6604 aim_icq_changepasswd(od->sess, new); | |
2086 | 6605 } else { |
4617 | 6606 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6607 if (conn) { | |
6608 aim_admin_changepasswd(od->sess, conn, new, old); | |
6609 } else { | |
6610 od->chpass = TRUE; | |
6611 od->oldp = g_strdup(old); | |
6612 od->newp = g_strdup(new); | |
6613 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6614 } | |
2086 | 6615 } |
6616 } | |
6617 | |
6059 | 6618 static void oscar_convo_closed(GaimConnection *gc, const char *who) |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6619 { |
7283 | 6620 OscarData *od = gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6621 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6622 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6623 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6624 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6625 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6626 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6627 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6628 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6629 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6630 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6631 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6632 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6633 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6634 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
|
6635 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6636 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6637 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6638 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6639 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6640 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6641 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6642 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6643 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6644 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6645 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6646 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6647 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6648 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6649 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6650 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6651 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6652 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6653 oscar_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6654 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6655 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6656 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6657 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6658 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6659 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6660 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6661 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6662 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6663 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6664 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6665 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6666 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6667 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6668 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6669 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6670 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6671 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6672 oscar_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6673 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6674 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6675 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6676 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6677 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6678 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6679 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6680 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6681 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6682 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6683 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6684 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6685 #endif |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6686 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6687 oscar_convo_closed, |
5842 | 6688 NULL, |
7650 | 6689 oscar_set_icon |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6690 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6691 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6692 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6693 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6694 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6695 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6696 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6697 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6698 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6699 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6700 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6701 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6702 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6703 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6704 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6705 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6706 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6707 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6708 NULL, /**< author */ |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
6709 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6710 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6711 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6712 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6713 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6714 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6715 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6716 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6717 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6718 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6719 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6720 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6721 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6722 GaimAccountOption *option; |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6723 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6724 option = gaim_account_option_string_new(_("Auth host"), "server", |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6725 "login.oscar.aol.com"); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6726 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6727 option); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6728 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6729 option = gaim_account_option_int_new(_("Auth port"), "port", 5190); |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6730 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6731 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6732 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6733 my_protocol = plugin; |
2086 | 6734 } |
6735 | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6736 GAIM_INIT_PLUGIN(oscar, init_plugin, info); |