Mercurial > pidgin.yaz
annotate src/protocols/oscar/oscar.c @ 7805:5f0bb52c0609
[gaim-migrate @ 8452]
File transfer changes from marv.
This fixes various ft related bugs, including:
* Sometimes clicking cancel on a send would crash.
* We seemed to leak the GaimXfer most of the time.
* Choosing to not overwrite the file would cancel the
receive altogether.
This should fix all these issues. It would be nice if
someone (SimGuy?) could test this for me, especially on
windows, to make sure i didn't break anything. Jabber
ft is untested, althoughi didn't make any changes in
the jabber source. So, it should still work, i just
can't comfirm it. Yahoo and OSCAR do still work.
Amoung other things, this patch impliments some
reference counting on the GaimXfer, so the ui can keep
it around a while if it wants, without leaking it
because we're afraid to destroy it.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 08 Dec 2003 04:58:07 +0000 |
parents | 61b5d682ddb4 |
children | 0555e59dfba9 |
rev | line source |
---|---|
2086 | 1 /* |
2 * gaim | |
3 * | |
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
6302 | 5 * Some code copyright (C) 1999-2001, Eric Warmenhoven |
6 * Some code copyright (C) 2001-2003, Sean Egan | |
7 * Some code copyright (C) 2001-2003, Mark Doliner <thekingant@users.sourceforge.net> | |
8 * | |
9 * Most libfaim code copyright (C) 1998-2001 Adam Fritzler <afritz@auk.cx> | |
10 * Some libfaim code copyright (C) 2001-2003 Mark Doliner <thekingant@users.sourceforge.net> | |
2086 | 11 * |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License as published by | |
14 * the Free Software Foundation; either version 2 of the License, or | |
15 * (at your option) any later version. | |
16 * | |
17 * This program is distributed in the hope that it will be useful, | |
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 * GNU General Public License for more details. | |
21 * | |
22 * You should have received a copy of the GNU General Public License | |
23 * along with this program; if not, write to the Free Software | |
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
25 * | |
26 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
27 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
28 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
29 #include "account.h" |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
30 #include "accountopt.h" |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
31 #include "buddyicon.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
32 #include "conversation.h" |
7083
3100a6e03644
[gaim-migrate @ 7648]
Christian Hammond <chipx86@chipx86.com>
parents:
7082
diff
changeset
|
33 #include "core.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
34 #include "debug.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
35 #include "ft.h" |
6982 | 36 #include "imgstore.h" |
2086 | 37 #include "multi.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
38 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
39 #include "privacy.h" |
2086 | 40 #include "prpl.h" |
4889 | 41 #include "proxy.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
42 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
43 #include "util.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
44 |
2086 | 45 #include "aim.h" |
5842 | 46 #include "md5.h" |
2086 | 47 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
48 #define UC_AOL 0x02 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
49 #define UC_ADMIN 0x04 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
50 #define UC_UNCONFIRMED 0x08 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
51 #define UC_NORMAL 0x10 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
52 #define UC_AB 0x20 |
3079 | 53 #define UC_WIRELESS 0x40 |
6318 | 54 #define UC_HIPTOP 0x80 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
55 |
2086 | 56 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" |
57 | |
7283 | 58 #define OSCAR_CONNECT_STEPS 6 |
59 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
60 static GaimPlugin *my_protocol = NULL; |
4249 | 61 |
7376 | 62 static int caps_aim = AIM_CAPS_CHAT | AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_INTEROPERATE | AIM_CAPS_ICHAT; |
63 static int caps_icq = AIM_CAPS_BUDDYICON | AIM_CAPS_DIRECTIM | AIM_CAPS_SENDFILE | AIM_CAPS_ICQUTF8 | AIM_CAPS_INTEROPERATE | AIM_CAPS_ICHAT; | |
3458 | 64 |
4665 | 65 static fu8_t features_aim[] = {0x01, 0x01, 0x01, 0x02}; |
66 static fu8_t features_icq[] = {0x01, 0x06}; | |
2086 | 67 |
7283 | 68 typedef struct _OscarData OscarData; |
69 struct _OscarData { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
70 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
71 aim_conn_t *conn; |
2086 | 72 |
73 guint cnpa; | |
74 guint paspa; | |
3694 | 75 guint emlpa; |
4804 | 76 guint icopa; |
2086 | 77 |
4823 | 78 gboolean iconconnecting; |
5842 | 79 gboolean set_icon; |
4823 | 80 |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
81 GSList *create_rooms; |
2086 | 82 |
83 gboolean conf; | |
84 gboolean reqemail; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
85 gboolean setemail; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
86 char *email; |
2979 | 87 gboolean setnick; |
88 char *newsn; | |
2086 | 89 gboolean chpass; |
90 char *oldp; | |
91 char *newp; | |
5842 | 92 |
2086 | 93 GSList *oscar_chats; |
94 GSList *direct_ims; | |
3630 | 95 GSList *file_transfers; |
4738 | 96 GHashTable *buddyinfo; |
4804 | 97 GSList *requesticon; |
2086 | 98 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
99 gboolean killme; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
100 gboolean icq; |
4804 | 101 guint icontimer; |
5968 | 102 guint getblisttimer; |
2993 | 103 |
104 struct { | |
4230 | 105 guint maxwatchers; /* max users who can watch you */ |
2993 | 106 guint maxbuddies; /* max users you can watch */ |
4230 | 107 guint maxgroups; /* max groups in server list */ |
2993 | 108 guint maxpermits; /* max users on permit list */ |
109 guint maxdenies; /* max users on deny list */ | |
110 guint maxsiglen; /* max size (bytes) of profile */ | |
111 guint maxawaymsglen; /* max size (bytes) of posted away message */ | |
112 } rights; | |
2086 | 113 }; |
114 | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
115 struct create_room { |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
116 char *name; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
117 int exchange; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
118 }; |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
119 |
2086 | 120 struct chat_connection { |
121 char *name; | |
122 char *show; /* AOL did something funny to us */ | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
123 fu16_t exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
124 fu16_t instance; |
2086 | 125 int fd; /* this is redundant since we have the conn below */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
126 aim_conn_t *conn; |
2086 | 127 int inpa; |
128 int id; | |
5575 | 129 GaimConnection *gc; /* i hate this. */ |
5679 | 130 GaimConversation *cnv; /* bah. */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
131 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
132 int maxvis; |
2086 | 133 }; |
134 | |
135 struct direct_im { | |
5575 | 136 GaimConnection *gc; |
2086 | 137 char name[80]; |
138 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
139 aim_conn_t *conn; |
3008 | 140 gboolean connected; |
2086 | 141 }; |
142 | |
143 struct ask_direct { | |
5575 | 144 GaimConnection *gc; |
2086 | 145 char *sn; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
146 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
147 fu8_t cookie[8]; |
2086 | 148 }; |
149 | |
7011 | 150 /* |
151 * Various PRPL-specific buddy info that we want to keep track of | |
152 * Some other info is maintained by locate.c, and I'd like to move | |
153 * the rest of this to libfaim, mostly im.c | |
154 */ | |
4738 | 155 struct buddyinfo { |
156 gboolean typingnot; | |
6292 | 157 gchar *availmsg; |
6857 | 158 fu32_t ipaddr; |
5836 | 159 |
160 unsigned long ico_me_len; | |
161 unsigned long ico_me_csum; | |
162 time_t ico_me_time; | |
163 gboolean ico_informed; | |
4738 | 164 |
165 unsigned long ico_len; | |
166 unsigned long ico_csum; | |
167 time_t ico_time; | |
168 gboolean ico_need; | |
7406 | 169 gboolean ico_sent; |
2086 | 170 }; |
171 | |
4230 | 172 struct name_data { |
5575 | 173 GaimConnection *gc; |
4230 | 174 gchar *name; |
3453 | 175 gchar *nick; |
3141 | 176 }; |
177 | |
5129 | 178 static char *msgerrreason[] = { |
179 N_("Invalid error"), | |
180 N_("Invalid SNAC"), | |
181 N_("Rate to host"), | |
182 N_("Rate to client"), | |
183 N_("Not logged in"), | |
184 N_("Service unavailable"), | |
185 N_("Service not defined"), | |
186 N_("Obsolete SNAC"), | |
187 N_("Not supported by host"), | |
188 N_("Not supported by client"), | |
189 N_("Refused by client"), | |
190 N_("Reply too big"), | |
191 N_("Responses lost"), | |
192 N_("Request denied"), | |
193 N_("Busted SNAC payload"), | |
194 N_("Insufficient rights"), | |
195 N_("In local permit/deny"), | |
196 N_("Too evil (sender)"), | |
197 N_("Too evil (receiver)"), | |
198 N_("User temporarily unavailable"), | |
199 N_("No match"), | |
200 N_("List overflow"), | |
201 N_("Request ambiguous"), | |
202 N_("Queue full"), | |
203 N_("Not while on AOL") | |
204 }; | |
205 static int msgerrreasonlen = 25; | |
206 | |
207 /* All the libfaim->gaim callback functions */ | |
208 static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); | |
209 static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); | |
210 static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); | |
211 static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); | |
212 static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); | |
213 static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); | |
214 static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); | |
215 static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); | |
216 static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); | |
217 static int gaim_parse_clientauto (aim_session_t *, aim_frame_t *, ...); | |
7011 | 218 static int gaim_parse_userinfo (aim_session_t *, aim_frame_t *, ...); |
5129 | 219 static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); |
220 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
|
221 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
|
222 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
|
223 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
|
224 static int gaim_conv_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); |
5129 | 225 static int gaim_email_parseupdate(aim_session_t *, aim_frame_t *, ...); |
226 static int gaim_icon_error (aim_session_t *, aim_frame_t *, ...); | |
227 static int gaim_icon_parseicon (aim_session_t *, aim_frame_t *, ...); | |
5844 | 228 static int oscar_icon_req (aim_session_t *, aim_frame_t *, ...); |
5129 | 229 static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); |
230 static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); | |
231 static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); | |
232 static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); | |
233 static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); | |
234 static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); | |
235 static int gaim_connerr (aim_session_t *, aim_frame_t *, ...); | |
236 static int conninitdone_admin (aim_session_t *, aim_frame_t *, ...); | |
237 static int conninitdone_bos (aim_session_t *, aim_frame_t *, ...); | |
238 static int conninitdone_chatnav (aim_session_t *, aim_frame_t *, ...); | |
239 static int conninitdone_chat (aim_session_t *, aim_frame_t *, ...); | |
240 static int conninitdone_email (aim_session_t *, aim_frame_t *, ...); | |
241 static int conninitdone_icon (aim_session_t *, aim_frame_t *, ...); | |
242 static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); | |
243 static int gaim_parse_mtn (aim_session_t *, aim_frame_t *, ...); | |
244 static int gaim_parse_locaterights(aim_session_t *, aim_frame_t *, ...); | |
245 static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); | |
246 static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); | |
247 static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); | |
248 static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); | |
249 static int gaim_memrequest (aim_session_t *, aim_frame_t *, ...); | |
250 static int gaim_selfinfo (aim_session_t *, aim_frame_t *, ...); | |
251 static int gaim_offlinemsg (aim_session_t *, aim_frame_t *, ...); | |
252 static int gaim_offlinemsgdone (aim_session_t *, aim_frame_t *, ...); | |
253 static int gaim_icqalias (aim_session_t *, aim_frame_t *, ...); | |
254 static int gaim_icqinfo (aim_session_t *, aim_frame_t *, ...); | |
255 static int gaim_popup (aim_session_t *, aim_frame_t *, ...); | |
256 #ifndef NOSSI | |
257 static int gaim_ssi_parseerr (aim_session_t *, aim_frame_t *, ...); | |
258 static int gaim_ssi_parserights (aim_session_t *, aim_frame_t *, ...); | |
259 static int gaim_ssi_parselist (aim_session_t *, aim_frame_t *, ...); | |
260 static int gaim_ssi_parseack (aim_session_t *, aim_frame_t *, ...); | |
261 static int gaim_ssi_authgiven (aim_session_t *, aim_frame_t *, ...); | |
262 static int gaim_ssi_authrequest (aim_session_t *, aim_frame_t *, ...); | |
263 static int gaim_ssi_authreply (aim_session_t *, aim_frame_t *, ...); | |
264 static int gaim_ssi_gotadded (aim_session_t *, aim_frame_t *, ...); | |
265 #endif | |
266 | |
267 /* for DirectIM/image transfer */ | |
268 static int gaim_odc_initiate (aim_session_t *, aim_frame_t *, ...); | |
269 static int gaim_odc_incoming (aim_session_t *, aim_frame_t *, ...); | |
270 static int gaim_odc_typing (aim_session_t *, aim_frame_t *, ...); | |
6982 | 271 static int gaim_odc_update_ui (aim_session_t *, aim_frame_t *, ...); |
5129 | 272 |
273 /* for file transfer */ | |
274 static int oscar_sendfile_estblsh(aim_session_t *, aim_frame_t *, ...); | |
275 static int oscar_sendfile_prompt (aim_session_t *, aim_frame_t *, ...); | |
276 static int oscar_sendfile_ack (aim_session_t *, aim_frame_t *, ...); | |
277 static int oscar_sendfile_done (aim_session_t *, aim_frame_t *, ...); | |
278 | |
279 /* for icons */ | |
280 static gboolean gaim_icon_timerfunc(gpointer data); | |
281 | |
5306 | 282 /* prpl actions - remove this at some point */ |
7282 | 283 /* Because I don't like forward declarations? I think that was why... */ |
5954 | 284 static void oscar_set_info(GaimConnection *gc, const char *text); |
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; | |
6318 | 1761 if (caps & AIM_CAPS_HIPTOP) |
1762 type |= UC_HIPTOP; | |
3267 | 1763 |
4766 | 1764 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1765 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1766 type |= UC_UNCONFIRMED; | |
1767 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1768 type |= UC_ADMIN; | |
1769 if (info->flags & AIM_FLAG_AOL) | |
1770 type |= UC_AOL; | |
1771 if (info->flags & AIM_FLAG_FREE) | |
1772 type |= UC_NORMAL; | |
1773 if (info->flags & AIM_FLAG_AWAY) | |
1774 type |= UC_UNAVAILABLE; | |
1775 if (info->flags & AIM_FLAG_WIRELESS) | |
1776 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1777 } |
2993 | 1778 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1779 type = (info->icqinfo.status << 16); |
3013 | 1780 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1781 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1782 type |= UC_UNAVAILABLE; |
3013 | 1783 } |
2993 | 1784 } |
1785 | |
7141 | 1786 if (caps & AIM_CAPS_ICQ_DIRECT) |
1787 caps ^= AIM_CAPS_ICQ_DIRECT; | |
2993 | 1788 |
1789 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1790 time(&time_idle); |
1791 time_idle -= info->idletime*60; | |
2993 | 1792 } |
1793 | |
5836 | 1794 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
1795 signon = info->onlinesince; | |
1796 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
2993 | 1797 signon = time(NULL) - info->sessionlen; |
2086 | 1798 |
5575 | 1799 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), info->sn)) |
1800 gaim_connection_set_display_name(gc, info->sn); | |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1801 |
7261 | 1802 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
4738 | 1803 if (!bi) { |
1804 bi = g_new0(struct buddyinfo, 1); | |
7261 | 1805 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, info->sn)), bi); |
4738 | 1806 } |
4739 | 1807 bi->typingnot = FALSE; |
1808 bi->ico_informed = FALSE; | |
6857 | 1809 bi->ipaddr = info->icqinfo.ipaddr; |
1810 | |
1811 /* Available message stuff */ | |
6292 | 1812 free(bi->availmsg); |
7011 | 1813 if (info->avail != NULL) |
1814 if (info->avail_encoding) { | |
1815 gchar *enc = g_strdup_printf("charset=\"%s\"", info->avail_encoding); | |
1816 bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len); | |
6292 | 1817 g_free(enc); |
1818 } else { | |
1819 /* No explicit encoding means utf8. Yay. */ | |
7011 | 1820 bi->availmsg = g_strdup(info->avail); |
6292 | 1821 } |
5837 | 1822 else |
6292 | 1823 bi->availmsg = NULL; |
4732 | 1824 |
4804 | 1825 /* Server stored icon stuff */ |
4853 | 1826 if (info->iconcsumlen) { |
7125 | 1827 const char *filename = NULL, *saved_b16 = NULL; |
1828 char *b16 = NULL; | |
7093 | 1829 GaimBuddy *b = NULL; |
4853 | 1830 |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
1831 b16 = gaim_base16_encode(info->iconcsum, info->iconcsumlen); |
4853 | 1832 b = gaim_find_buddy(gc->account, info->sn); |
7093 | 1833 /* |
1834 * If for some reason the checksum is valid, but cached file is not.. | |
1835 * we want to know. | |
1836 */ | |
7693 | 1837 filename = gaim_blist_node_get_string((GaimBlistNode*)b, "buddy_icon"); |
7093 | 1838 if (filename != NULL) { |
1839 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
7693 | 1840 saved_b16 = gaim_blist_node_get_string((GaimBlistNode*)b, |
1841 "icon_checksum"); | |
7093 | 1842 } else |
1843 saved_b16 = NULL; | |
7054
7c04a0775918
[gaim-migrate @ 7617]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7045
diff
changeset
|
1844 |
4853 | 1845 if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { |
1846 GSList *cur = od->requesticon; | |
1847 while (cur && aim_sncmp((char *)cur->data, info->sn)) | |
1848 cur = cur->next; | |
1849 if (!cur) { | |
7475 | 1850 od->requesticon = g_slist_append(od->requesticon, g_strdup(gaim_normalize(gc->account, info->sn))); |
4853 | 1851 if (od->icontimer) |
1852 g_source_remove(od->icontimer); | |
1853 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
1854 } | |
1855 } | |
6053 | 1856 g_free(b16); |
4853 | 1857 } |
1858 | |
5628 | 1859 serv_got_update(gc, info->sn, 1, (info->warnlevel/10.0) + 0.5, signon, time_idle, type); |
2086 | 1860 |
1861 return 1; | |
1862 } | |
1863 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1864 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1865 GaimConnection *gc = sess->aux_data; |
7283 | 1866 OscarData *od = gc->proto_data; |
2086 | 1867 va_list ap; |
4739 | 1868 aim_userinfo_t *info; |
2086 | 1869 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1870 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1871 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1872 va_end(ap); |
1873 | |
4732 | 1874 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0); |
2086 | 1875 |
7261 | 1876 g_hash_table_remove(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
5837 | 1877 |
2086 | 1878 return 1; |
1879 } | |
1880 | |
3730 | 1881 static void cancel_direct_im(struct ask_direct *d) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1882 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Freeing DirectIM prompts.\n"); |
2086 | 1883 |
1884 g_free(d->sn); | |
1885 g_free(d); | |
1886 } | |
1887 | |
4617 | 1888 static void oscar_odc_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1889 struct direct_im *dim = data; |
5575 | 1890 GaimConnection *gc = dim->gc; |
7283 | 1891 OscarData *od = gc->proto_data; |
5679 | 1892 GaimConversation *cnv; |
2086 | 1893 char buf[256]; |
3008 | 1894 struct sockaddr name; |
1895 socklen_t name_len = 1; | |
1896 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1897 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1898 g_free(dim); |
1899 return; | |
1900 } | |
1901 | |
1902 if (source < 0) { | |
1903 g_free(dim); | |
1904 return; | |
1905 } | |
1906 | |
4366 | 1907 dim->conn->fd = source; |
2086 | 1908 aim_conn_completeconnect(od->sess, dim->conn); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
1909 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, dim->name); |
3008 | 1910 |
1911 /* This is the best way to see if we're connected or not */ | |
1912 if (getpeername(source, &name, &name_len) == 0) { | |
1913 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
1914 dim->connected = TRUE; | |
6982 | 1915 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
3008 | 1916 } |
2086 | 1917 od->direct_ims = g_slist_append(od->direct_ims, dim); |
3008 | 1918 |
4617 | 1919 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
2086 | 1920 } |
1921 | |
4617 | 1922 /* BBB */ |
3952 | 1923 /* |
4617 | 1924 * This is called after a remote AIM user has connected to us. We |
1925 * want to do some voodoo with the socket file descriptors, add a | |
1926 * callback or two, and then send the AIM_CB_OFT_PROMPT. | |
3952 | 1927 */ |
4656 | 1928 static int oscar_sendfile_estblsh(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1929 GaimConnection *gc = sess->aux_data; |
7283 | 1930 OscarData *od = (OscarData *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1931 GaimXfer *xfer; |
5146 | 1932 struct aim_oft_info *oft_info; |
3630 | 1933 va_list ap; |
1934 aim_conn_t *conn, *listenerconn; | |
4656 | 1935 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1936 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1937 "AAA - in oscar_sendfile_estblsh\n"); |
3630 | 1938 va_start(ap, fr); |
1939 conn = va_arg(ap, aim_conn_t *); | |
1940 listenerconn = va_arg(ap, aim_conn_t *); | |
1941 va_end(ap); | |
1942 | |
4617 | 1943 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, listenerconn))) |
1944 return 1; | |
1945 | |
5146 | 1946 if (!(oft_info = xfer->data)) |
4617 | 1947 return 1; |
1948 | |
3630 | 1949 /* Stop watching listener conn; watch transfer conn instead */ |
4617 | 1950 gaim_input_remove(xfer->watcher); |
3630 | 1951 aim_conn_kill(sess, &listenerconn); |
1952 | |
5146 | 1953 oft_info->conn = conn; |
1954 xfer->fd = oft_info->conn->fd; | |
1955 | |
1956 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ACK, oscar_sendfile_ack, 0); | |
1957 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DONE, oscar_sendfile_done, 0); | |
1958 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1959 |
1960 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1961 aim_oft_sendheader(sess, AIM_CB_OFT_PROMPT, oft_info); |
3630 | 1962 |
1963 return 0; | |
1964 } | |
1965 | |
3952 | 1966 /* |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1967 * This is the gaim callback passed to gaim_proxy_connect when connecting to another AIM |
4617 | 1968 * user in order to transfer a file. |
3952 | 1969 */ |
4617 | 1970 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
|
1971 GaimXfer *xfer; |
5146 | 1972 struct aim_oft_info *oft_info; |
4656 | 1973 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1974 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1975 "AAA - in oscar_sendfile_connected\n"); |
4617 | 1976 if (!(xfer = data)) |
1977 return; | |
5146 | 1978 if (!(oft_info = xfer->data)) |
3630 | 1979 return; |
4617 | 1980 if (source < 0) |
1981 return; | |
1982 | |
1983 xfer->fd = source; | |
5146 | 1984 oft_info->conn->fd = source; |
1985 | |
1986 aim_conn_completeconnect(oft_info->sess, oft_info->conn); | |
1987 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1988 |
1989 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1990 aim_im_sendch2_sendfile_accept(oft_info->sess, oft_info); |
4617 | 1991 |
1992 return; | |
3630 | 1993 } |
1994 | |
3952 | 1995 /* |
4617 | 1996 * This is called when a buddy sends us some file info. This happens when they |
1997 * are sending a file to you, and you have just established a connection to them. | |
4650 | 1998 * You should send them the exact same info except use the real cookie. We also |
4617 | 1999 * get like totally ready to like, receive the file, kay? |
3952 | 2000 */ |
4617 | 2001 static int oscar_sendfile_prompt(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2002 GaimConnection *gc = sess->aux_data; |
7283 | 2003 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2004 GaimXfer *xfer; |
5146 | 2005 struct aim_oft_info *oft_info; |
4617 | 2006 va_list ap; |
2007 aim_conn_t *conn; | |
2008 fu8_t *cookie; | |
2009 struct aim_fileheader_t *fh; | |
4656 | 2010 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2011 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2012 "AAA - in oscar_sendfile_prompt\n"); |
4617 | 2013 va_start(ap, fr); |
2014 conn = va_arg(ap, aim_conn_t *); | |
2015 cookie = va_arg(ap, fu8_t *); | |
2016 fh = va_arg(ap, struct aim_fileheader_t *); | |
2017 va_end(ap); | |
2018 | |
2019 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2020 return 1; | |
2021 | |
5146 | 2022 if (!(oft_info = xfer->data)) |
4617 | 2023 return 1; |
2024 | |
2025 /* We want to stop listening with a normal thingy */ | |
2026 gaim_input_remove(xfer->watcher); | |
2027 xfer->watcher = 0; | |
2028 | |
5146 | 2029 /* They sent us some information about the file they're sending */ |
2030 memcpy(&oft_info->fh, fh, sizeof(*fh)); | |
2031 | |
2032 /* Fill in the cookie */ | |
2033 memcpy(&oft_info->fh.bcookie, oft_info->cookie, 8); | |
2034 | |
4617 | 2035 /* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */ |
5146 | 2036 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info); |
4617 | 2037 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2038 | |
2039 return 0; | |
3630 | 2040 } |
2041 | |
3952 | 2042 /* |
4657 | 2043 * We are sending a file to someone else. They have just acknowledged our |
4617 | 2044 * prompt, so we want to start sending data like there's no tomorrow. |
3952 | 2045 */ |
4617 | 2046 static int oscar_sendfile_ack(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2047 GaimConnection *gc = sess->aux_data; |
7283 | 2048 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2049 GaimXfer *xfer; |
4617 | 2050 va_list ap; |
2051 aim_conn_t *conn; | |
2052 fu8_t *cookie; | |
2053 struct aim_fileheader_t *fh; | |
4656 | 2054 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2055 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_ack\n"); |
4617 | 2056 va_start(ap, fr); |
2057 conn = va_arg(ap, aim_conn_t *); | |
2058 cookie = va_arg(ap, fu8_t *); | |
2059 fh = va_arg(ap, struct aim_fileheader_t *); | |
2060 va_end(ap); | |
2061 | |
2062 if (!(xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) | |
2063 return 1; | |
2064 | |
4656 | 2065 /* We want to stop listening with a normal thingy */ |
2066 gaim_input_remove(xfer->watcher); | |
2067 xfer->watcher = 0; | |
2068 | |
4617 | 2069 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2070 | |
2071 return 0; | |
3630 | 2072 } |
4617 | 2073 |
2074 /* | |
2075 * We just sent a file to someone. They said they got it and everything, | |
2076 * so we can close our direct connection and what not. | |
2077 */ | |
2078 static int oscar_sendfile_done(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 2079 GaimConnection *gc = sess->aux_data; |
7283 | 2080 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2081 GaimXfer *xfer; |
4617 | 2082 va_list ap; |
2083 aim_conn_t *conn; | |
2084 fu8_t *cookie; | |
2085 struct aim_fileheader_t *fh; | |
4656 | 2086 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2087 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_done\n"); |
4617 | 2088 va_start(ap, fr); |
2089 conn = va_arg(ap, aim_conn_t *); | |
2090 cookie = va_arg(ap, fu8_t *); | |
2091 fh = va_arg(ap, struct aim_fileheader_t *); | |
2092 va_end(ap); | |
2093 | |
2094 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2095 return 1; | |
2096 | |
4656 | 2097 xfer->fd = conn->fd; |
4617 | 2098 gaim_xfer_end(xfer); |
2099 | |
2100 return 0; | |
2101 } | |
3630 | 2102 |
4244 | 2103 static void accept_direct_im(struct ask_direct *d) { |
5575 | 2104 GaimConnection *gc = d->gc; |
7283 | 2105 OscarData *od; |
2086 | 2106 struct direct_im *dim; |
2945 | 2107 char *host; int port = 4443; |
4366 | 2108 int i, rc; |
2086 | 2109 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2110 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2111 cancel_direct_im(d); |
2112 return; | |
2113 } | |
2114 | |
7283 | 2115 od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2116 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Accepted DirectIM.\n"); |
2086 | 2117 |
2118 dim = find_direct_im(od, d->sn); | |
2119 if (dim) { | |
3730 | 2120 cancel_direct_im(d); /* 40 */ |
4244 | 2121 return; |
2086 | 2122 } |
2123 dim = g_new0(struct direct_im, 1); | |
2124 dim->gc = d->gc; | |
2125 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
2126 | |
4617 | 2127 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
|
2128 if (!dim->conn) { |
2086 | 2129 g_free(dim); |
3730 | 2130 cancel_direct_im(d); |
4244 | 2131 return; |
2086 | 2132 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2133 |
2086 | 2134 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
4617 | 2135 gaim_odc_incoming, 0); |
2086 | 2136 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, |
4617 | 2137 gaim_odc_typing, 0); |
3033 | 2138 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
6982 | 2139 gaim_odc_update_ui, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2140 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2141 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2142 port = atoi(&(d->ip[i+1])); |
2086 | 2143 break; |
2144 } | |
2145 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2146 host = g_strndup(d->ip, i); |
2086 | 2147 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
2148 rc = gaim_proxy_connect(gc->account, host, port, oscar_odc_callback, dim); |
2086 | 2149 g_free(host); |
4366 | 2150 if (rc < 0) { |
2086 | 2151 aim_conn_kill(od->sess, &dim->conn); |
2152 g_free(dim); | |
3730 | 2153 cancel_direct_im(d); |
4244 | 2154 return; |
2086 | 2155 } |
2156 | |
3730 | 2157 cancel_direct_im(d); |
2086 | 2158 |
4244 | 2159 return; |
2086 | 2160 } |
2161 | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2162 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
5575 | 2163 GaimConnection *gc = sess->aux_data; |
7283 | 2164 OscarData *od = gc->proto_data; |
7475 | 2165 gchar *tmp; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2166 GaimConvImFlags flags = 0; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
2167 gsize convlen; |
3659 | 2168 GError *err = NULL; |
4738 | 2169 struct buddyinfo *bi; |
5575 | 2170 const char *iconfile; |
4738 | 2171 |
7261 | 2172 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, userinfo->sn)); |
4738 | 2173 if (!bi) { |
2174 bi = g_new0(struct buddyinfo, 1); | |
7261 | 2175 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, userinfo->sn)), bi); |
4738 | 2176 } |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2177 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2178 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2179 flags |= GAIM_CONV_IM_AUTO_RESP; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2180 |
4738 | 2181 if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) |
2182 bi->typingnot = TRUE; | |
2183 else | |
2184 bi->typingnot = FALSE; | |
2185 | |
4380 | 2186 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
|
2187 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2188 "%s has an icon\n", userinfo->sn); |
4738 | 2189 if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { |
2190 bi->ico_need = TRUE; | |
2191 bi->ico_len = args->iconlen; | |
2192 bi->ico_csum = args->iconsum; | |
2193 bi->ico_time = args->iconstamp; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2194 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2195 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2196 |
5575 | 2197 if ((iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc))) && |
7406 | 2198 (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
|
2199 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2200 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2201 |
5575 | 2202 if (!stat(iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2203 char *buf = g_malloc(st.st_size); |
5575 | 2204 file = fopen(iconfile, "rb"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2205 if (file) { |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
2206 int len = fread(buf, 1, st.st_size, file); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2207 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2208 "Sending buddy icon to %s (%d bytes, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2209 "%lu reported)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2210 userinfo->sn, len, st.st_size); |
4617 | 2211 aim_im_sendch2_icon(sess, userinfo->sn, buf, st.st_size, |
2212 st.st_mtime, aimutil_iconsum(buf, st.st_size)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2213 fclose(file); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2214 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2215 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2216 "Can't open buddy icon file!\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2217 g_free(buf); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2218 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2219 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2220 "Can't stat buddy icon file!\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2221 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2222 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2223 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2224 "Character set is %hu %hu\n", args->charset, args->charsubset); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2225 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
3722 | 2226 /* This message is marked as UNICODE, so we have to |
2227 * convert it to utf-8 before handing it to the gaim core. | |
2228 * This conversion should *never* fail, if it does it | |
2229 * means that either the incoming ICBM is corrupted or | |
4662 | 2230 * there is something we don't understand about it. |
2231 * For the record, AIM Unicode is big-endian UCS-2 */ | |
2232 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2233 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Received UNICODE IM\n"); |
4121 | 2234 |
2235 if (!args->msg || !args->msglen) | |
2236 return 1; | |
4641 | 2237 |
3659 | 2238 tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
2239 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2240 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2241 "Unicode IM conversion: %s\n", err->message); |
7475 | 2242 tmp = g_strdup(_("(There was an error receiving this message)")); |
4800 | 2243 g_error_free(err); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2244 } |
3722 | 2245 } else { |
3850 | 2246 /* This will get executed for both AIM_IMFLAGS_ISO_8859_1 and |
3722 | 2247 * unflagged messages, which are ASCII. That's OK because |
2248 * ASCII is a strict subset of ISO-8859-1; this should | |
2249 * help with compatibility with old, broken versions of | |
2250 * gaim (everything before 0.60) and other broken clients | |
2251 * that will happily send ISO-8859-1 without marking it as | |
2252 * such */ | |
4662 | 2253 if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2254 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2255 "Received ISO-8859-1 IM\n"); |
4121 | 2256 |
2257 if (!args->msg || !args->msglen) | |
2258 return 1; | |
2259 | |
3659 | 2260 tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
2261 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2262 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2263 "ISO-8859-1 IM conversion: %s\n", err->message); |
7475 | 2264 tmp = g_strdup(_("(There was an error receiving this message)")); |
4800 | 2265 g_error_free(err); |
3659 | 2266 } |
3642 | 2267 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2268 |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2269 /* gaim_str_strip_cr(tmp); */ |
6982 | 2270 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2271 g_free(tmp); |
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 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2274 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2275 |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2276 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
5575 | 2277 GaimConnection *gc = sess->aux_data; |
7283 | 2278 OscarData *od = gc->proto_data; |
5575 | 2279 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
|
2280 |
4121 | 2281 if (!args) |
2282 return 0; | |
4194 | 2283 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2284 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2285 "rendezvous with %s, status is %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2286 userinfo->sn, args->status); |
2869 | 2287 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2288 if (args->reqclass & AIM_CAPS_CHAT) { |
4121 | 2289 char *name; |
5234 | 2290 GHashTable *components; |
2291 | |
4121 | 2292 if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange || !args->msg) |
2293 return 1; | |
5234 | 2294 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
2295 g_free); | |
4121 | 2296 name = extract_name(args->info.chat.roominfo.name); |
5234 | 2297 g_hash_table_replace(components, g_strdup("room"), g_strdup(name ? name : args->info.chat.roominfo.name)); |
2298 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
|
2299 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2300 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2301 userinfo->sn, |
6059 | 2302 args->msg, |
5234 | 2303 components); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2304 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2305 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2306 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
4617 | 2307 /* BBB */ |
2308 if (args->status == AIM_RENDEZVOUS_PROPOSE) { | |
2309 /* Someone wants to send a file (or files) to us */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2310 GaimXfer *xfer; |
5146 | 2311 struct aim_oft_info *oft_info; |
2312 | |
2313 if (!args->cookie || !args->port || !args->verifiedip || | |
2314 !args->info.sendfile.filename || !args->info.sendfile.totsize || | |
4656 | 2315 !args->info.sendfile.totfiles || !args->reqclass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2316 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2317 "%s tried to send you a file with incomplete " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2318 "information.\n", userinfo->sn); |
5146 | 2319 if (args->proxyip) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2320 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2321 "IP for a proxy server was given. Gaim " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2322 "does not support this yet.\n"); |
4617 | 2323 return 1; |
4656 | 2324 } |
4617 | 2325 |
2326 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) { | |
2327 /* last char of the ft req is a star, they are sending us a | |
2328 * directory -- remove the star and trailing slash so we dont save | |
2329 * directories that look like 'dirname\*' -- arl */ | |
2330 char *tmp = strrchr(args->info.sendfile.filename, '\\'); | |
2331 if (tmp && (tmp[1] == '*')) { | |
2332 tmp[0] = '\0'; | |
2333 } | |
2334 } | |
2335 | |
2336 /* Build the file transfer handle */ | |
2337 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, userinfo->sn); | |
5163 | 2338 xfer->remote_ip = g_strdup(args->verifiedip); |
5146 | 2339 xfer->remote_port = args->port; |
4617 | 2340 gaim_xfer_set_filename(xfer, args->info.sendfile.filename); |
2341 gaim_xfer_set_size(xfer, args->info.sendfile.totsize); | |
5146 | 2342 |
2343 /* Create the oscar-specific data */ | |
5163 | 2344 oft_info = aim_oft_createinfo(od->sess, args->cookie, userinfo->sn, args->clientip, xfer->remote_port, 0, 0, NULL); |
4898 | 2345 if (args->proxyip) |
5146 | 2346 oft_info->proxyip = g_strdup(args->proxyip); |
4898 | 2347 if (args->verifiedip) |
5146 | 2348 oft_info->verifiedip = g_strdup(args->verifiedip); |
2349 xfer->data = oft_info; | |
4617 | 2350 |
2351 /* Setup our I/O op functions */ | |
2352 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
2353 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
2354 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2355 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2356 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4617 | 2357 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
2358 | |
2359 /* | |
2360 * XXX - Should do something with args->msg, args->encoding, and args->language | |
2361 * probably make it apply to all ch2 messages. | |
3752 | 2362 */ |
4617 | 2363 |
2364 /* Keep track of this transfer for later */ | |
2365 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
2366 | |
2367 /* Now perform the request */ | |
2368 gaim_xfer_request(xfer); | |
2369 } else if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
2370 /* The other user wants to cancel a file transfer */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2371 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2372 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2373 "AAA - File transfer canceled by remote user\n"); |
4617 | 2374 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
|
2375 gaim_xfer_cancel_remote(xfer); |
4617 | 2376 } else if (args->status == AIM_RENDEZVOUS_ACCEPT) { |
2377 /* | |
2378 * This gets sent by the receiver of a file | |
2379 * as they connect directly to us. If we don't | |
2380 * get this, then maybe a third party connected | |
2381 * to us, and we shouldn't send them anything. | |
2382 */ | |
2383 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2384 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2385 "unknown rendezvous status!\n"); |
3630 | 2386 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2387 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2388 } else if (args->reqclass & AIM_CAPS_VOICE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2389 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2390 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2391 userinfo->sn, args->info.icon.icon, |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2392 args->info.icon.length); |
6871 | 2393 } else if (args->reqclass & AIM_CAPS_DIRECTIM) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2394 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2395 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2396 |
4212 | 2397 if (!args->verifiedip) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2398 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2399 "directim kill blocked (%s)\n", userinfo->sn); |
4650 | 2400 return 1; |
4212 | 2401 } |
2402 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2403 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2404 "%s received direct im request from %s (%s)\n", |
5575 | 2405 username, userinfo->sn, args->verifiedip); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2406 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2407 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2408 d->sn = g_strdup(userinfo->sn); |
2869 | 2409 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2410 memcpy(d->cookie, args->cookie, 8); |
5575 | 2411 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
|
2412 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2413 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2414 _("This requires a direct connection between " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2415 "the two computers and is necessary for IM " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2416 "Images. Because your IP address will be " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2417 "revealed, this may be considered a privacy " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2418 "risk."), 0, d, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2419 _("Connect"), G_CALLBACK(accept_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2420 _("Cancel"), G_CALLBACK(cancel_direct_im)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2421 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2422 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2423 "Unknown reqclass %hu\n", args->reqclass); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2424 } |
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 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2427 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2428 |
3453 | 2429 /* |
4230 | 2430 * Authorization Functions |
2431 * Most of these are callbacks from dialogs. They're used by both | |
2432 * methods of authorization (SSI and old-school channel 4 ICBM) | |
3453 | 2433 */ |
4269 | 2434 /* When you ask other people for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2435 static void gaim_auth_request(struct name_data *data, char *msg) { |
5575 | 2436 GaimConnection *gc = data->gc; |
4244 | 2437 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2438 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2439 OscarData *od = gc->proto_data; |
6695 | 2440 GaimBuddy *buddy = gaim_find_buddy(gc->account, data->name); |
2441 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4244 | 2442 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2443 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2444 "ssi: adding buddy %s to group %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2445 buddy->name, group->name); |
4889 | 2446 aim_ssi_sendauthrequest(od->sess, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); |
4269 | 2447 if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) |
4889 | 2448 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); |
4244 | 2449 } |
4230 | 2450 } |
4337 | 2451 } |
2452 | |
2453 static void gaim_auth_request_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2454 gaim_request_input(data->gc, NULL, _("Authorization Request Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2455 NULL, _("Please authorize me!"), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2456 _("OK"), G_CALLBACK(gaim_auth_request), |
5836 | 2457 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2458 data); |
4230 | 2459 } |
2460 | |
2461 static void gaim_auth_dontrequest(struct name_data *data) { | |
5575 | 2462 GaimConnection *gc = data->gc; |
4244 | 2463 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2464 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2465 /* OscarData *od = gc->proto_data; */ |
4244 | 2466 /* XXX - Take the buddy out of our buddy list */ |
2467 } | |
2468 | |
5836 | 2469 oscar_free_name_data(data); |
4230 | 2470 } |
2471 | |
5575 | 2472 static void gaim_auth_sendrequest(GaimConnection *gc, const char *name) { |
4269 | 2473 struct name_data *data = g_new(struct name_data, 1); |
6695 | 2474 GaimBuddy *buddy; |
4269 | 2475 gchar *dialog_msg, *nombre; |
2476 | |
4687 | 2477 buddy = gaim_find_buddy(gc->account, name); |
2478 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
2479 nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); | |
4269 | 2480 else |
4830 | 2481 nombre = NULL; |
2482 | |
2483 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 | 2484 data->gc = gc; |
2485 data->name = g_strdup(name); | |
2486 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2487 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2488 gaim_request_action(gc, NULL, _("Request Authorization"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2489 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2490 _("Request Authorization"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2491 G_CALLBACK(gaim_auth_request_msgprompt), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2492 _("Cancel"), G_CALLBACK(gaim_auth_dontrequest)); |
4269 | 2493 |
2494 g_free(dialog_msg); | |
2495 g_free(nombre); | |
2496 } | |
2497 | |
4230 | 2498 /* When other people ask you for authorization */ |
2499 static void gaim_auth_grant(struct name_data *data) { | |
5575 | 2500 GaimConnection *gc = data->gc; |
4244 | 2501 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2502 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2503 OscarData *od = gc->proto_data; |
4236 | 2504 #ifdef NOSSI |
6695 | 2505 GaimBuddy *buddy; |
4244 | 2506 gchar message; |
2507 message = 0; | |
4687 | 2508 buddy = gaim_find_buddy(gc->account, data->name); |
4617 | 2509 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
|
2510 gaim_account_notify_added(gc->account, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 2511 #else |
4889 | 2512 aim_ssi_sendauthreply(od->sess, data->name, 0x01, NULL); |
4230 | 2513 #endif |
4244 | 2514 } |
2515 | |
5836 | 2516 oscar_free_name_data(data); |
3141 | 2517 } |
2518 | |
4230 | 2519 /* When other people ask you for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2520 static void gaim_auth_dontgrant(struct name_data *data, char *msg) { |
5575 | 2521 GaimConnection *gc = data->gc; |
4244 | 2522 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2523 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2524 OscarData *od = gc->proto_data; |
4230 | 2525 #ifdef NOSSI |
4617 | 2526 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHDENIED, msg ? msg : _("No reason given.")); |
4230 | 2527 #else |
4889 | 2528 aim_ssi_sendauthreply(od->sess, data->name, 0x00, msg ? msg : _("No reason given.")); |
4230 | 2529 #endif |
4244 | 2530 } |
4337 | 2531 } |
2532 | |
2533 static void gaim_auth_dontgrant_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2534 gaim_request_input(data->gc, NULL, _("Authorization Denied Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2535 NULL, _("No reason given."), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2536 _("OK"), G_CALLBACK(gaim_auth_dontgrant), |
5836 | 2537 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2538 data); |
3141 | 2539 } |
2540 | |
7023 | 2541 /* When someone sends you buddies */ |
2542 static void gaim_icq_buddyadd(struct name_data *data) { | |
5575 | 2543 GaimConnection *gc = data->gc; |
4244 | 2544 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2545 if (g_list_find(gaim_connections_get_all(), gc)) { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
2546 gaim_blist_request_add_buddy(gaim_connection_get_account(gc), data->name, NULL, data->nick); |
4244 | 2547 } |
2548 | |
5836 | 2549 oscar_free_name_data(data); |
3453 | 2550 } |
2551 | |
4075 | 2552 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 | 2553 GaimConnection *gc = sess->aux_data; |
4076 | 2554 gchar **msg1, **msg2; |
2555 GError *err = NULL; | |
6051 | 2556 int i, numtoks; |
4076 | 2557 |
4121 | 2558 if (!args->type || !args->msg || !args->uin) |
2559 return 1; | |
4194 | 2560 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2561 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2562 "Received a channel 4 message of type 0x%02hhx.\n", args->type); |
4076 | 2563 |
2564 /* Split up the message at the delimeter character, then convert each string to UTF-8 */ | |
4173 | 2565 msg1 = g_strsplit(args->msg, "\376", 0); |
6051 | 2566 for (numtoks=0; msg1[numtoks]; numtoks++); |
2567 msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *)); | |
4076 | 2568 for (i=0; msg1[i]; i++) { |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2569 gaim_str_strip_cr(msg1[i]); |
4076 | 2570 msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err); |
4800 | 2571 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2572 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2573 "Error converting a string from ISO-8859-1 to " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2574 "UTF-8 in oscar ICBM channel 4 parsing\n"); |
4800 | 2575 g_error_free(err); |
2576 } | |
4076 | 2577 } |
2578 msg2[i] = NULL; | |
2579 | |
3952 | 2580 switch (args->type) { |
4173 | 2581 case 0x01: { /* MacICQ message or basic offline message */ |
4076 | 2582 if (i >= 1) { |
5556 | 2583 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2584 if (t) { /* This is an offline message */ |
2585 /* I think this timestamp is in UTC, or something */ | |
6982 | 2586 serv_got_im(gc, uin, msg2[0], 0, t); |
4076 | 2587 } else { /* This is a message from MacICQ/Miranda */ |
6982 | 2588 serv_got_im(gc, uin, msg2[0], 0, time(NULL)); |
4076 | 2589 } |
2590 g_free(uin); | |
4075 | 2591 } |
3316 | 2592 } break; |
2593 | |
4173 | 2594 case 0x04: { /* Someone sent you a URL */ |
4076 | 2595 if (i >= 2) { |
7385 | 2596 if (msg2[1] != NULL) { |
2597 gchar *uin = g_strdup_printf("%u", args->uin); | |
2598 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", | |
2599 msg2[1], | |
2600 (msg2[0] && msg2[0][0]) ? msg2[0] : msg2[1]); | |
2601 serv_got_im(gc, uin, message, 0, time(NULL)); | |
2602 g_free(uin); | |
2603 g_free(message); | |
2604 } | |
3453 | 2605 } |
2606 } break; | |
2607 | |
4173 | 2608 case 0x06: { /* Someone requested authorization */ |
4076 | 2609 if (i >= 6) { |
4230 | 2610 struct name_data *data = g_new(struct name_data, 1); |
5556 | 2611 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
|
2612 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5556 | 2613 "Received an authorization request from UIN %u\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2614 args->uin); |
4076 | 2615 data->gc = gc; |
5556 | 2616 data->name = g_strdup_printf("%u", args->uin); |
4230 | 2617 data->nick = NULL; |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2618 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2619 gaim_request_action(gc, NULL, _("Authorization Request"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2620 dialog_msg, 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2621 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2622 G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2623 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2624 G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4076 | 2625 g_free(dialog_msg); |
2626 } | |
3141 | 2627 } break; |
2628 | |
4173 | 2629 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2630 if (i >= 1) { |
7023 | 2631 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
|
2632 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2633 dialog_msg); |
4076 | 2634 g_free(dialog_msg); |
2635 } | |
3141 | 2636 } break; |
2637 | |
4173 | 2638 case 0x08: { /* Someone has granted you authorization */ |
7023 | 2639 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
|
2640 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2641 dialog_msg); |
3141 | 2642 g_free(dialog_msg); |
2643 } break; | |
2644 | |
4333 | 2645 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2646 if (i >= 5) { | |
2647 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
|
2648 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2649 g_free(dialog_msg); |
2650 } | |
2651 } break; | |
2652 | |
4173 | 2653 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2654 if (i >= 6) { |
4194 | 2655 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
|
2656 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2657 g_free(dialog_msg); |
2658 } | |
4075 | 2659 } break; |
2660 | |
4173 | 2661 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2662 if (i >= 6) { |
4308 | 2663 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
|
2664 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2665 g_free(dialog_msg); |
2666 } | |
4075 | 2667 } break; |
2668 | |
4173 | 2669 case 0x12: { |
3141 | 2670 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
7023 | 2671 /* Someone added you to their buddy list? */ |
3141 | 2672 } break; |
2673 | |
7023 | 2674 case 0x13: { /* Someone has sent you some ICQ buddies */ |
7631 | 2675 guint i, num; |
3453 | 2676 gchar **text; |
4173 | 2677 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2678 if (text) { |
2679 num = 0; | |
2680 for (i=0; i<strlen(text[0]); i++) | |
2681 num = num*10 + text[0][i]-48; | |
2682 for (i=0; i<num; i++) { | |
4230 | 2683 struct name_data *data = g_new(struct name_data, 1); |
7023 | 2684 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 | 2685 data->gc = gc; |
4790 | 2686 data->name = g_strdup(text[i*2+1]); |
2687 data->nick = g_strdup(text[i*2+2]); | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2688 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2689 gaim_request_action(gc, NULL, message, |
7023 | 2690 _("Do you want to add this buddy " |
2691 "to your buddy list?"), | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2692 0, data, 2, |
7023 | 2693 _("Add"), G_CALLBACK(gaim_icq_buddyadd), |
5836 | 2694 _("Decline"), G_CALLBACK(oscar_free_name_data)); |
3453 | 2695 g_free(message); |
2696 } | |
2697 g_strfreev(text); | |
2698 } | |
2699 } break; | |
2700 | |
7023 | 2701 case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ |
3453 | 2702 /* This is boring and silly. */ |
2703 } break; | |
2704 | |
3141 | 2705 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2706 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2707 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2708 "(type 0x%02hhx).\n", args->type); |
3141 | 2709 } break; |
2710 } | |
2711 | |
4076 | 2712 g_strfreev(msg1); |
2713 g_strfreev(msg2); | |
2714 | |
3141 | 2715 return 1; |
2716 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2717 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2718 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2719 fu16_t channel; |
2720 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2721 aim_userinfo_t *userinfo; |
2086 | 2722 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2723 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2724 va_start(ap, fr); |
4200 | 2725 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2726 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2727 |
3141 | 2728 switch (channel) { |
2729 case 1: { /* standard message */ | |
2730 struct aim_incomingim_ch1_args *args; | |
2731 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2732 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2733 } break; | |
2734 | |
2735 case 2: { /* rendevous */ | |
2736 struct aim_incomingim_ch2_args *args; | |
2737 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2738 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2739 } break; | |
2740 | |
2741 case 4: { /* ICQ */ | |
2742 struct aim_incomingim_ch4_args *args; | |
2743 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2744 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2745 } break; |
2746 | |
2747 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2748 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2749 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2750 "0x%04hx).", channel); |
3141 | 2751 } break; |
2086 | 2752 } |
2753 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2754 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2755 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2756 return ret; |
2086 | 2757 } |
2758 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2759 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2760 char *buf; |
2086 | 2761 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2762 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2763 aim_userinfo_t *userinfo; |
2086 | 2764 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2765 va_start(ap, fr); |
4200 | 2766 chan = (fu16_t)va_arg(ap, unsigned int); |
2767 userinfo = va_arg(ap, aim_userinfo_t *); | |
2768 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2769 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2770 va_end(ap); |
2771 | |
2772 switch(reason) { | |
5420 | 2773 case 0: /* Invalid (0) */ |
2774 buf = g_strdup_printf( | |
2775 ngettext( | |
4276 | 2776 "You missed %hu message from %s because it was invalid.", |
2777 "You missed %hu messages from %s because they were invalid.", | |
2778 nummissed), | |
4282 | 2779 nummissed, |
2780 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2781 break; |
5420 | 2782 case 1: /* Message too large */ |
2783 buf = g_strdup_printf( | |
2784 ngettext( | |
4276 | 2785 "You missed %hu message from %s because it was too large.", |
2786 "You missed %hu messages from %s because they were too large.", | |
2787 nummissed), | |
4282 | 2788 nummissed, |
2789 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2790 break; |
5420 | 2791 case 2: /* Rate exceeded */ |
2792 buf = g_strdup_printf( | |
2793 ngettext( | |
4276 | 2794 "You missed %hu message from %s because the rate limit has been exceeded.", |
2795 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2796 nummissed), | |
4282 | 2797 nummissed, |
2798 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2799 break; |
5420 | 2800 case 3: /* Evil Sender */ |
2801 buf = g_strdup_printf( | |
2802 ngettext( | |
4276 | 2803 "You missed %hu message from %s because he/she was too evil.", |
2804 "You missed %hu messages from %s because he/she was too evil.", | |
2805 nummissed), | |
4282 | 2806 nummissed, |
2807 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2808 break; |
5420 | 2809 case 4: /* Evil Receiver */ |
2810 buf = g_strdup_printf( | |
2811 ngettext( | |
4276 | 2812 "You missed %hu message from %s because you are too evil.", |
2813 "You missed %hu messages from %s because you are too evil.", | |
2814 nummissed), | |
4282 | 2815 nummissed, |
2816 userinfo->sn); | |
2086 | 2817 break; |
2818 default: | |
5420 | 2819 buf = g_strdup_printf( |
2820 ngettext( | |
4276 | 2821 "You missed %hu message from %s for an unknown reason.", |
2822 "You missed %hu messages from %s for an unknown reason.", | |
2823 nummissed), | |
4282 | 2824 nummissed, |
2825 userinfo->sn); | |
2086 | 2826 break; |
2827 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2828 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2829 g_free(buf); |
2086 | 2830 |
2831 return 1; | |
2832 } | |
2833 | |
3212 | 2834 static char *gaim_icq_status(int state) { |
2835 /* Make a cute little string that shows the status of the dude or dudet */ | |
2836 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2837 return g_strdup_printf(_("Free For Chat")); |
3212 | 2838 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2839 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2840 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2841 return g_strdup_printf(_("Not Available")); |
3212 | 2842 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2843 return g_strdup_printf(_("Occupied")); |
3212 | 2844 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2845 return g_strdup_printf(_("Away")); |
3212 | 2846 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2847 return g_strdup_printf(_("Web Aware")); |
3212 | 2848 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2849 return g_strdup_printf(_("Invisible")); |
3212 | 2850 else |
4342 | 2851 return g_strdup_printf(_("Online")); |
3212 | 2852 } |
2853 | |
4194 | 2854 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
5575 | 2855 GaimConnection *gc = sess->aux_data; |
7283 | 2856 OscarData *od = gc->proto_data; |
4617 | 2857 |
2858 /* BBB */ | |
3630 | 2859 switch (reason) { |
4151 | 2860 case 3: { /* Decline sendfile. */ |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2861 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2862 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2863 "AAA - Other user declined file transfer\n"); |
4617 | 2864 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
|
2865 gaim_xfer_cancel_remote(xfer); |
4151 | 2866 } break; |
2867 | |
2868 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2869 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2870 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2871 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2872 } |
3630 | 2873 |
2874 } | |
2875 | |
2876 return 0; | |
2877 } | |
2878 | |
4194 | 2879 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
5575 | 2880 GaimConnection *gc = sess->aux_data; |
4151 | 2881 |
2882 switch(reason) { | |
2883 case 0x0003: { /* Reply from an ICQ status message request */ | |
2884 char *status_msg = gaim_icq_status(state); | |
2885 char *dialog_msg, **splitmsg; | |
2886 | |
2887 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2888 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2889 | |
7011 | 2890 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
7032 | 2891 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, dialog_msg, NULL, NULL); |
4151 | 2892 |
2893 g_free(status_msg); | |
2894 g_free(dialog_msg); | |
2895 g_strfreev(splitmsg); | |
2896 } break; | |
2897 | |
2898 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2899 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2900 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2901 "Type 0x%04hx\n", who, reason); |
4151 | 2902 } break; |
2903 } /* end of switch */ | |
2904 | |
2905 return 0; | |
2906 } | |
2907 | |
3212 | 2908 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2909 va_list ap; | |
2910 fu16_t chan, reason; | |
2911 char *who; | |
2912 | |
2913 va_start(ap, fr); | |
4200 | 2914 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2915 who = va_arg(ap, char *); |
4200 | 2916 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2917 |
3952 | 2918 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2919 char *cookie = va_arg(ap, char *); |
4151 | 2920 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2921 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2922 fu32_t state = 0; |
4151 | 2923 char *msg = NULL; |
2924 if (reason == 0x0003) { | |
4200 | 2925 state = va_arg(ap, fu32_t); |
4151 | 2926 msg = va_arg(ap, char *); |
2927 } | |
2928 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2929 } | |
3952 | 2930 |
3212 | 2931 va_end(ap); |
2932 | |
2933 return 1; | |
2934 } | |
2935 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2936 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2937 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2938 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2939 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2940 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2941 va_start(ap, fr); |
4199 | 2942 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2943 va_end(ap); |
2944 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2945 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2946 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2947 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2948 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2949 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2950 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2951 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2952 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2953 |
2086 | 2954 return 1; |
2955 } | |
2956 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2957 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2958 #if 0 |
5575 | 2959 GaimConnection *gc = sess->aux_data; |
7283 | 2960 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2961 GaimXfer *xfer; |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2962 #endif |
4617 | 2963 va_list ap; |
2964 fu16_t reason; | |
2965 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2966 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2967 va_start(ap, fr); |
4617 | 2968 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 2969 data = va_arg(ap, char *); |
2086 | 2970 va_end(ap); |
2971 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2972 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2973 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 2974 |
2975 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2976 #if 0 |
4617 | 2977 /* If this was a file transfer request, data is a cookie */ |
2978 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
|
2979 gaim_xfer_cancel_remote(xfer); |
3630 | 2980 return 1; |
2981 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2982 #endif |
3630 | 2983 |
4617 | 2984 /* Data is assumed to be the destination sn */ |
2985 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
|
2986 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2987 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 2988 g_free(buf); |
2086 | 2989 |
2990 return 1; | |
2991 } | |
2992 | |
3595 | 2993 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2994 GaimConnection *gc = sess->aux_data; |
3595 | 2995 va_list ap; |
2996 fu16_t type1, type2; | |
2997 char *sn; | |
2998 | |
2999 va_start(ap, fr); | |
4199 | 3000 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 3001 sn = va_arg(ap, char *); |
4199 | 3002 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 3003 va_end(ap); |
3004 | |
3005 switch (type2) { | |
3006 case 0x0000: { /* Text has been cleared */ | |
3007 serv_got_typing_stopped(gc, sn); | |
3008 } break; | |
3009 | |
3010 case 0x0001: { /* Paused typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3011 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
3595 | 3012 } break; |
3013 | |
3014 case 0x0002: { /* Typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3015 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
3595 | 3016 } break; |
3017 | |
3018 default: { | |
5435 | 3019 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 | 3020 } break; |
3021 } | |
3022 | |
3023 return 1; | |
3024 } | |
3025 | |
7141 | 3026 /* |
3027 * We get this error when there was an error in the locate family. This | |
7259 | 3028 * happens when you request info of someone who is offline. |
7141 | 3029 */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3030 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
7259 | 3031 gchar *buf; |
2086 | 3032 va_list ap; |
5420 | 3033 fu16_t reason; |
2086 | 3034 char *destn; |
3035 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3036 va_start(ap, fr); |
4199 | 3037 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3038 destn = va_arg(ap, char *); |
3039 va_end(ap); | |
3040 | |
7781 | 3041 if (destn == NULL) |
7793 | 3042 return 1; |
3043 | |
3044 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); | |
7781 | 3045 |
3046 gaim_notify_error(sess->aux_data, NULL, buf, | |
3047 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); | |
3048 g_free(buf); | |
2086 | 3049 |
3050 return 1; | |
3051 } | |
3052 | |
6982 | 3053 #if 0 |
2086 | 3054 static char *images(int flags) { |
3055 static char buf[1024]; | |
3101 | 3056 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3057 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3058 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3059 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3060 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3061 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3062 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3063 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3064 return buf; |
3065 } | |
6982 | 3066 #endif |
3101 | 3067 |
2920 | 3068 static char *caps_string(guint caps) |
3069 { | |
3070 static char buf[512], *tmp; | |
3071 int count = 0, i = 0; | |
3072 guint bit = 1; | |
4742 | 3073 |
3074 if (!caps) { | |
4744 | 3075 return NULL; |
6318 | 3076 } else while (bit <= AIM_CAPS_LAST) { |
2920 | 3077 if (bit & caps) { |
3078 switch (bit) { | |
6871 | 3079 case AIM_CAPS_BUDDYICON: |
2920 | 3080 tmp = _("Buddy Icon"); |
3081 break; | |
6871 | 3082 case AIM_CAPS_VOICE: |
2920 | 3083 tmp = _("Voice"); |
3084 break; | |
6871 | 3085 case AIM_CAPS_DIRECTIM: |
7141 | 3086 tmp = _("AIM Direct IM"); |
2920 | 3087 break; |
6871 | 3088 case AIM_CAPS_CHAT: |
2920 | 3089 tmp = _("Chat"); |
3090 break; | |
6871 | 3091 case AIM_CAPS_GETFILE: |
2920 | 3092 tmp = _("Get File"); |
3093 break; | |
6871 | 3094 case AIM_CAPS_SENDFILE: |
2920 | 3095 tmp = _("Send File"); |
3096 break; | |
6871 | 3097 case AIM_CAPS_GAMES: |
3098 case AIM_CAPS_GAMES2: | |
2920 | 3099 tmp = _("Games"); |
3100 break; | |
6871 | 3101 case AIM_CAPS_SAVESTOCKS: |
4898 | 3102 tmp = _("Add-Ins"); |
2920 | 3103 break; |
6871 | 3104 case AIM_CAPS_SENDBUDDYLIST: |
2920 | 3105 tmp = _("Send Buddy List"); |
3106 break; | |
7141 | 3107 case AIM_CAPS_ICQ_DIRECT: |
3108 tmp = _("ICQ Direct Connect"); | |
2920 | 3109 break; |
6871 | 3110 case AIM_CAPS_APINFO: |
2920 | 3111 tmp = _("AP User"); |
3112 break; | |
6871 | 3113 case AIM_CAPS_ICQRTF: |
2920 | 3114 tmp = _("ICQ RTF"); |
3115 break; | |
6871 | 3116 case AIM_CAPS_EMPTY: |
2920 | 3117 tmp = _("Nihilist"); |
3118 break; | |
6871 | 3119 case AIM_CAPS_ICQSERVERRELAY: |
2920 | 3120 tmp = _("ICQ Server Relay"); |
3121 break; | |
6871 | 3122 case AIM_CAPS_ICQUTF8OLD: |
3123 tmp = _("Old ICQ UTF8"); | |
2920 | 3124 break; |
6871 | 3125 case AIM_CAPS_TRILLIANCRYPT: |
2920 | 3126 tmp = _("Trillian Encryption"); |
3127 break; | |
6871 | 3128 case AIM_CAPS_ICQUTF8: |
4742 | 3129 tmp = _("ICQ UTF8"); |
3130 break; | |
6318 | 3131 case AIM_CAPS_HIPTOP: |
3132 tmp = _("Hiptop"); | |
3133 break; | |
6871 | 3134 case AIM_CAPS_SECUREIM: |
7334 | 3135 tmp = _("Security Enabled"); |
6871 | 3136 break; |
7582 | 3137 case AIM_CAPS_VIDEO: |
3138 tmp = _("Video Chat"); | |
3139 break; | |
2920 | 3140 default: |
3141 tmp = NULL; | |
3142 break; | |
3143 } | |
3144 if (tmp) | |
3145 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3146 tmp); | |
3147 count++; | |
3148 } | |
3149 bit <<= 1; | |
3150 } | |
4744 | 3151 return buf; |
2920 | 3152 } |
3153 | |
7011 | 3154 static int gaim_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3155 GaimConnection *gc = sess->aux_data; |
7011 | 3156 GString *text; |
7162 | 3157 gchar *info_utf8 = NULL, *away_utf8 = NULL; |
3158 const char *final = NULL; | |
4791 | 3159 va_list ap; |
7011 | 3160 aim_userinfo_t *userinfo; |
2086 | 3161 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3162 va_start(ap, fr); |
7011 | 3163 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3164 va_end(ap); |
3165 | |
7011 | 3166 text = g_string_new(""); |
3167 g_string_append_printf(text, _("Username: <b>%s</b><br>\n"), userinfo->sn); | |
3168 g_string_append_printf(text, _("Warning Level: <b>%d%%</b><br>\n"), (int)((userinfo->warnlevel/10.0) + 0.5)); | |
3169 | |
3170 if (userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) | |
3171 g_string_append_printf(text, _("Online Since: <b>%s</b><br>\n"), | |
3172 asctime(localtime((time_t *)&userinfo->onlinesince))); | |
3173 | |
3174 if (userinfo->present & AIM_USERINFO_PRESENT_MEMBERSINCE) | |
3175 g_string_append_printf(text, _("Member Since: <b>%s</b><br>\n"), | |
3176 asctime(localtime((time_t *)&userinfo->membersince))); | |
3177 | |
3178 if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3179 gchar *itime = gaim_str_seconds_to_string(userinfo->idletime*60); |
7011 | 3180 g_string_append_printf(text, _("Idle: <b>%s</b>"), itime); |
4426 | 3181 g_free(itime); |
2993 | 3182 } else |
7011 | 3183 g_string_append_printf(text, _("Idle: <b>Active</b>")); |
3184 | |
3185 if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
3186 away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
3187 if (away_utf8 != NULL) { | |
7129 | 3188 g_string_append_printf(text, "<hr>%s", away_utf8); |
7011 | 3189 g_free(away_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3190 } |
7011 | 3191 } |
3192 | |
3193 if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) { | |
3194 info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len); | |
3195 if (info_utf8 != NULL) { | |
7129 | 3196 g_string_append_printf(text, "<hr>%s", info_utf8); |
7011 | 3197 g_free(info_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3198 } |
7011 | 3199 } |
3200 | |
7164 | 3201 final = gaim_str_sub_away_formatters(text->str, gaim_account_get_username(gaim_connection_get_account(gc))); |
7011 | 3202 g_string_free(text, TRUE); |
7091 | 3203 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, final, NULL, NULL); |
4151 | 3204 |
2086 | 3205 return 1; |
3206 } | |
3207 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3208 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3209 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3210 fu16_t id; |
2086 | 3211 va_list ap; |
3212 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3213 va_start(ap, fr); |
4199 | 3214 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3215 msg = va_arg(ap, char *); |
3216 va_end(ap); | |
3217 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3218 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3219 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3220 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3221 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3222 _("Your AIM connection may be lost."), NULL); |
2086 | 3223 |
3224 return 1; | |
3225 } | |
3226 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3227 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3228 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3229 fu16_t type; |
5575 | 3230 GaimConnection *gc = sess->aux_data; |
7283 | 3231 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 3232 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3233 va_start(ap, fr); |
4199 | 3234 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3235 |
3236 switch(type) { | |
3237 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3238 fu8_t maxrooms; |
2086 | 3239 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3240 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3241 |
4199 | 3242 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3243 exchangecount = va_arg(ap, int); |
3244 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3245 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3246 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3247 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3248 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3249 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3250 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3251 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3252 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3253 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3254 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3255 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3256 while (od->create_rooms) { |
3257 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3258 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3259 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3260 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3261 g_free(cr->name); |
4617 | 3262 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3263 g_free(cr); |
2086 | 3264 } |
3265 } | |
3266 break; | |
3267 case 0x0008: { | |
3268 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3269 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3270 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3271 fu32_t createtime; |
2086 | 3272 |
3273 fqcn = va_arg(ap, char *); | |
4200 | 3274 instance = (fu16_t)va_arg(ap, unsigned int); |
3275 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3276 flags = (fu16_t)va_arg(ap, unsigned int); | |
3277 createtime = va_arg(ap, fu32_t); | |
3278 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3279 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3280 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3281 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3282 name = va_arg(ap, char *); | |
3283 ck = va_arg(ap, char *); | |
4194 | 3284 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3285 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3286 "created room: %s %hu %hu %hu %u %hu %hu %hhu %hu %s %s\n", |
2086 | 3287 fqcn, |
3288 exchange, instance, flags, | |
3289 createtime, | |
3290 maxmsglen, maxoccupancy, createperms, unknown, | |
3291 name, ck); | |
4617 | 3292 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3293 } |
3294 break; | |
3295 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3296 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3297 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3298 break; |
3299 } | |
4194 | 3300 |
3301 va_end(ap); | |
3302 | |
2086 | 3303 return 1; |
3304 } | |
3305 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3306 static int gaim_conv_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3307 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3308 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3309 aim_userinfo_t *info; |
5575 | 3310 GaimConnection *g = sess->aux_data; |
2086 | 3311 |
3312 struct chat_connection *c = NULL; | |
3313 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3314 va_start(ap, fr); |
2086 | 3315 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3316 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3317 va_end(ap); |
3318 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3319 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3320 if (!c) |
3321 return 1; | |
3322 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3323 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3324 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3325 |
3326 return 1; | |
3327 } | |
3328 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3329 static int gaim_conv_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3330 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3331 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3332 aim_userinfo_t *info; |
5575 | 3333 GaimConnection *g = sess->aux_data; |
2086 | 3334 |
3335 struct chat_connection *c = NULL; | |
3336 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3337 va_start(ap, fr); |
2086 | 3338 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3339 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3340 va_end(ap); |
3341 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3342 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3343 if (!c) |
3344 return 1; | |
3345 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3346 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3347 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3348 |
3349 return 1; | |
3350 } | |
3351 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3352 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
|
3353 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3354 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3355 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3356 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3357 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3358 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3359 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3360 fu32_t creationtime; |
5575 | 3361 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3362 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
|
3363 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3364 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3365 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3366 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3367 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3368 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3369 roomdesc = va_arg(ap, char *); |
4200 | 3370 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3371 creationtime = va_arg(ap, fu32_t); | |
3372 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3373 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3374 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3375 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3376 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3377 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3378 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3379 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3380 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3381 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3382 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3383 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3384 |
2086 | 3385 return 1; |
3386 } | |
3387 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3388 static int gaim_conv_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3389 GaimConnection *gc = sess->aux_data; |
2086 | 3390 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3391 aim_userinfo_t *info; |
2086 | 3392 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3393 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 3394 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3395 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3396 info = va_arg(ap, aim_userinfo_t *); |
4194 | 3397 msg = va_arg(ap, char *); |
3398 va_end(ap); | |
2086 | 3399 |
4269 | 3400 serv_got_chat_in(gc, ccon->id, info->sn, 0, msg, time((time_t)NULL)); |
2086 | 3401 |
3402 return 1; | |
3403 } | |
3404 | |
3694 | 3405 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3406 va_list ap; | |
5575 | 3407 GaimConnection *gc = sess->aux_data; |
3694 | 3408 struct aim_emailinfo *emailinfo; |
3725 | 3409 int havenewmail; |
7297 | 3410 char *alertitle, *alerturl; |
3694 | 3411 |
3412 va_start(ap, fr); | |
3413 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3414 havenewmail = va_arg(ap, int); |
7301 | 3415 alertitle = va_arg(ap, char *); |
3416 alerturl = va_arg(ap, char *); | |
3694 | 3417 va_end(ap); |
3418 | |
5628 | 3419 if (emailinfo && gaim_account_get_check_mail(gc->account)) { |
5575 | 3420 gchar *to = g_strdup_printf("%s@%s", gaim_account_get_username(gaim_connection_get_account(gc)), emailinfo->domain); |
5542 | 3421 if (emailinfo->unread && havenewmail) |
3422 gaim_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); | |
5537 | 3423 g_free(to); |
3694 | 3424 } |
7297 | 3425 |
7301 | 3426 if (alertitle) |
7313 | 3427 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Got an alert '%s' %s\n", alertitle, alerturl ? alerturl : ""); |
3694 | 3428 |
3429 return 1; | |
3430 } | |
3431 | |
4804 | 3432 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3433 GaimConnection *gc = sess->aux_data; |
7283 | 3434 OscarData *od = gc->proto_data; |
4804 | 3435 char *sn; |
3436 | |
3437 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3438 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3439 "removing %s from hash table\n", sn); |
4804 | 3440 od->requesticon = g_slist_remove(od->requesticon, sn); |
3441 free(sn); | |
3442 | |
3443 if (od->icontimer) | |
3444 g_source_remove(od->icontimer); | |
3445 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3446 | |
3447 return 1; | |
3448 } | |
3449 | |
3450 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 3451 GaimConnection *gc = sess->aux_data; |
7283 | 3452 OscarData *od = gc->proto_data; |
4804 | 3453 GSList *cur; |
3454 va_list ap; | |
3455 char *sn; | |
4853 | 3456 fu8_t *iconcsum, *icon; |
3457 fu16_t iconcsumlen, iconlen; | |
4804 | 3458 |
3459 va_start(ap, fr); | |
3460 sn = va_arg(ap, char *); | |
4853 | 3461 iconcsum = va_arg(ap, fu8_t *); |
3462 iconcsumlen = va_arg(ap, int); | |
4804 | 3463 icon = va_arg(ap, fu8_t *); |
3464 iconlen = va_arg(ap, int); | |
3465 va_end(ap); | |
3466 | |
4853 | 3467 if (iconlen > 0) { |
3468 char *b16; | |
6695 | 3469 GaimBuddy *b = gaim_find_buddy(gc->account, sn); |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3470 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3471 sn, icon, iconlen); |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
3472 b16 = gaim_base16_encode(iconcsum, iconcsumlen); |
5129 | 3473 if (b16) { |
7693 | 3474 gaim_blist_node_set_string((GaimBlistNode*)b, "icon_checksum", b16); |
5129 | 3475 gaim_blist_save(); |
7162 | 3476 g_free(b16); |
5129 | 3477 } |
4853 | 3478 } |
4804 | 3479 |
3480 cur = od->requesticon; | |
3481 while (cur) { | |
3482 char *cursn = cur->data; | |
3483 if (!aim_sncmp(cursn, sn)) { | |
3484 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3485 free(cursn); | |
3486 cur = od->requesticon; | |
3487 } else | |
3488 cur = cur->next; | |
3489 } | |
3490 | |
3491 if (od->icontimer) | |
3492 g_source_remove(od->icontimer); | |
3493 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3494 | |
3495 return 1; | |
3496 } | |
3497 | |
3498 static gboolean gaim_icon_timerfunc(gpointer data) { | |
5575 | 3499 GaimConnection *gc = data; |
7283 | 3500 OscarData *od = gc->proto_data; |
7011 | 3501 aim_userinfo_t *userinfo; |
4804 | 3502 aim_conn_t *conn; |
3503 | |
3504 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
5892 | 3505 if (!conn) { |
3506 if (!od->iconconnecting) { | |
3507 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
3508 od->iconconnecting = TRUE; | |
3509 } | |
4804 | 3510 return FALSE; |
3511 } | |
3512 | |
5842 | 3513 if (od->set_icon) { |
6039 | 3514 struct stat st; |
3515 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
3516 if (iconfile == NULL) { | |
3517 /* Set an empty icon, or something */ | |
3518 } else if (!stat(iconfile, &st)) { | |
3519 char *buf = g_malloc(st.st_size); | |
3520 FILE *file = fopen(iconfile, "rb"); | |
3521 if (file) { | |
3522 fread(buf, 1, st.st_size, file); | |
3523 fclose(file); | |
3524 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
3525 "Uploading icon to icon server\n"); | |
6879 | 3526 aim_bart_upload(od->sess, buf, st.st_size); |
5842 | 3527 } else |
3528 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 3529 "Can't open buddy icon file!\n"); |
3530 g_free(buf); | |
3531 } else { | |
3532 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
3533 "Can't stat buddy icon file!\n"); | |
5842 | 3534 } |
3535 od->set_icon = FALSE; | |
3536 } | |
3537 | |
3538 if (!od->requesticon) { | |
3539 gaim_debug(GAIM_DEBUG_MISC, "oscar", | |
3540 "no more icons to request\n"); | |
3541 return FALSE; | |
3542 } | |
3543 | |
7045 | 3544 userinfo = aim_locate_finduserinfo(od->sess, (char *)od->requesticon->data); |
7011 | 3545 if ((userinfo != NULL) && (userinfo->iconcsumlen > 0)) { |
3546 aim_bart_request(od->sess, od->requesticon->data, userinfo->iconcsum, userinfo->iconcsumlen); | |
4804 | 3547 return FALSE; |
3548 } else { | |
3549 char *sn = od->requesticon->data; | |
3550 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3551 free(sn); | |
3552 } | |
3553 | |
3554 return TRUE; | |
3555 } | |
3556 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3557 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3558 * 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
|
3559 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3560 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3561 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3562 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3563 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3564 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3565 va_start(ap, fr); |
4199 | 3566 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3567 sn = va_arg(ap, char *); |
3568 va_end(ap); | |
3569 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3570 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 3571 |
3572 return 1; | |
3573 } | |
3574 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3575 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
|
3576 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3577 "invalid", |
4194 | 3578 "change", |
3579 "warning", | |
3580 "limit", | |
3581 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3582 }; |
2086 | 3583 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3584 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3585 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3586 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3587 va_start(ap, fr); |
4200 | 3588 code = (fu16_t)va_arg(ap, unsigned int); |
3589 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3590 windowsize = va_arg(ap, fu32_t); | |
3591 clear = va_arg(ap, fu32_t); | |
3592 alert = va_arg(ap, fu32_t); | |
3593 limit = va_arg(ap, fu32_t); | |
3594 disconnect = va_arg(ap, fu32_t); | |
3595 currentavg = va_arg(ap, fu32_t); | |
3596 maxavg = va_arg(ap, fu32_t); | |
2086 | 3597 va_end(ap); |
3598 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3599 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3600 "rate %s (param ID 0x%04hx): curavg = %u, maxavg = %u, alert at %u, " |
3601 "clear warning at %u, limit at %u, disconnect at %u (window size = %u)\n", | |
2086 | 3602 (code < 5) ? codes[code] : codes[0], |
3603 rateclass, | |
3604 currentavg, maxavg, | |
3605 alert, clear, | |
3606 limit, disconnect, | |
3607 windowsize); | |
3608 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3609 /* XXX fix these values */ |
2086 | 3610 if (code == AIM_RATE_CODE_CHANGE) { |
3611 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3612 aim_conn_setlatency(fr->conn, 0); |
2086 | 3613 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3614 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3615 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3616 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
6040 | 3617 _("The last action you attempted could not be " |
3618 "performed because you are over the rate limit. " | |
3619 "Please wait 10 seconds and try again.")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3620 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3621 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3622 aim_conn_setlatency(fr->conn, 0); |
2086 | 3623 } |
3624 | |
3625 return 1; | |
3626 } | |
3627 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3628 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3629 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3630 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3631 aim_userinfo_t *userinfo; |
5575 | 3632 GaimConnection *gc = sess->aux_data; |
2086 | 3633 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3634 va_start(ap, fr); |
4199 | 3635 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3636 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3637 va_end(ap); |
3638 | |
7111 | 3639 serv_got_eviled(gc, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); |
2086 | 3640 |
3641 return 1; | |
3642 } | |
3643 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3644 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
|
3645 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3646 aim_userinfo_t *info; |
5575 | 3647 GaimConnection *gc = sess->aux_data; |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3648 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3649 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3650 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3651 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3652 |
5628 | 3653 gc->evil = (info->warnlevel/10.0) + 0.5; |
4841 | 3654 |
3655 if (info->onlinesince) | |
3656 gc->login_time_official = info->onlinesince; | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3657 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3658 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3659 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3660 |
4649 | 3661 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3662 GaimConnection *gc = sess->aux_data; |
7283 | 3663 OscarData *od = gc->proto_data; |
4649 | 3664 va_list ap; |
3665 fu16_t code; | |
3666 char *msg; | |
3667 | |
3668 va_start(ap, fr); | |
3669 code = (fu16_t)va_arg(ap, int); | |
3670 msg = va_arg(ap, char *); | |
3671 va_end(ap); | |
3672 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3673 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3674 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3675 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3676 if (code == 0x0001) { |
6113 | 3677 gc->wants_to_die = TRUE; |
5579 | 3678 gaim_connection_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3679 } else { |
5579 | 3680 gaim_connection_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3681 } |
4666 | 3682 od->killme = TRUE; |
4649 | 3683 } |
3684 | |
3685 return 1; | |
3686 } | |
3687 | |
2675 | 3688 static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
7283 | 3689 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3690 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3691 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3692 |
3693 #ifndef NOSSI | |
7334 | 3694 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting rights and list\n"); |
4889 | 3695 aim_ssi_reqrights(sess); |
6350 | 3696 aim_ssi_reqdata(sess); |
4230 | 3697 #endif |
3698 | |
7011 | 3699 aim_locate_reqrights(sess); |
7285 | 3700 aim_buddylist_reqrights(sess, fr->conn); |
4617 | 3701 aim_im_reqparams(sess); |
7334 | 3702 aim_bos_reqrights(sess, fr->conn); /* XXX - Don't call this with ssi */ |
4230 | 3703 |
3704 #ifdef NOSSI | |
7334 | 3705 gaim_debug(GAIM_DEBUG_INFO, "oscar", "bos: requesting rights\n"); |
3706 aim_bos_reqrights(sess, fr->conn); | |
4230 | 3707 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); |
3708 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3709 #endif | |
2086 | 3710 |
7283 | 3711 gaim_connection_update_progress(gc, _("Finalizing connection"), 5, OSCAR_CONNECT_STEPS); |
3712 | |
2086 | 3713 return 1; |
3714 } | |
3715 | |
2675 | 3716 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3717 GaimConnection *gc = sess->aux_data; |
7283 | 3718 OscarData *od = gc->proto_data; |
2647 | 3719 |
6905 | 3720 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0003, gaim_info_change, 0); |
3721 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0005, gaim_info_change, 0); | |
3722 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0007, gaim_account_confirm, 0); | |
3723 | |
2672 | 3724 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3725 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3726 |
2647 | 3727 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3728 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3729 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3730 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3731 od->oldp = NULL; |
2647 | 3732 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3733 od->newp = NULL; |
2647 | 3734 od->chpass = FALSE; |
3735 } | |
2979 | 3736 if (od->setnick) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3737 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screenname\n"); |
2979 | 3738 aim_admin_setnick(sess, fr->conn, od->newsn); |
3739 g_free(od->newsn); | |
3740 od->newsn = NULL; | |
3741 od->setnick = FALSE; | |
3742 } | |
2647 | 3743 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3744 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3745 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3746 od->conf = FALSE; |
3747 } | |
3748 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3749 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3750 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3751 od->reqemail = FALSE; |
3752 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3753 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3754 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3755 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3756 g_free(od->email); |
5497 | 3757 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3758 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3759 } |
2647 | 3760 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3761 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3762 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3763 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3764 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
|
3765 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3766 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3767 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3768 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3769 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3770 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3771 |
4194 | 3772 /* 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
|
3773 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
5556 | 3774 "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
|
3775 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3776 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3777 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3778 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3779 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3780 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3781 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3782 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3783 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3784 |
4617 | 3785 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3786 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3787 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3788 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3789 |
2993 | 3790 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3791 { | |
5575 | 3792 GaimConnection *gc = sess->aux_data; |
7283 | 3793 OscarData *od = (OscarData *)gc->proto_data; |
5306 | 3794 va_list ap; |
3795 fu16_t maxsiglen; | |
2993 | 3796 |
3797 va_start(ap, fr); | |
4199 | 3798 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3799 va_end(ap); |
3800 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3801 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3802 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3803 |
4617 | 3804 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3805 | |
3806 if (od->icq) | |
7334 | 3807 aim_locate_setcaps(od->sess, caps_icq); |
5301 | 3808 else |
7334 | 3809 aim_locate_setcaps(od->sess, caps_aim); |
3810 oscar_set_info(gc, gc->account->user_info); | |
2993 | 3811 |
3812 return 1; | |
3813 } | |
3814 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3815 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
|
3816 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3817 fu16_t maxbuddies, maxwatchers; |
5575 | 3818 GaimConnection *gc = sess->aux_data; |
7283 | 3819 OscarData *od = (OscarData *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3820 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3821 va_start(ap, fr); |
4199 | 3822 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3823 maxwatchers = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3824 va_end(ap); |
3825 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3826 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3827 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3828 |
4617 | 3829 od->rights.maxbuddies = (guint)maxbuddies; |
3830 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3831 |
2086 | 3832 return 1; |
3833 } | |
3834 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3835 static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3836 GaimConnection *gc = sess->aux_data; |
7283 | 3837 OscarData *od = (OscarData *)gc->proto_data; |
7334 | 3838 va_list ap; |
3839 fu16_t maxpermits, maxdenies; | |
2086 | 3840 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3841 va_start(ap, fr); |
4199 | 3842 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3843 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3844 va_end(ap); |
3845 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3846 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3847 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3848 |
4617 | 3849 od->rights.maxpermits = (guint)maxpermits; |
3850 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3851 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
3852 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2993 | 3853 serv_finish_login(gc); |
3854 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3855 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3856 |
2672 | 3857 aim_clientready(sess, fr->conn); |
5948 | 3858 aim_srv_setavailmsg(sess, NULL); |
7474 | 3859 aim_srv_setidle(sess, 0); |
4617 | 3860 |
4664 | 3861 if (od->icq) { |
3862 aim_icq_reqofflinemsgs(sess); | |
3863 aim_icq_hideip(sess); | |
3864 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3865 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3866 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3867 if (sess->authinfo->email) |
3868 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3869 |
3870 return 1; | |
3871 } | |
3872 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3873 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
|
3874 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3875 struct aim_icq_offlinemsg *msg; |
4075 | 3876 struct aim_incomingim_ch4_args args; |
3877 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3878 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3879 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3880 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3881 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3882 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3883 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3884 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3885 args.uin = msg->sender; |
3886 args.type = msg->type; | |
4173 | 3887 args.flags = msg->flags; |
4076 | 3888 args.msglen = msg->msglen; |
4075 | 3889 args.msg = msg->msg; |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3890 t = gaim_time_build(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
4075 | 3891 incomingim_chan4(sess, fr->conn, NULL, &args, t); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3892 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3893 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3894 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3895 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3896 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
|
3897 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3898 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3899 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3900 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3901 |
7388 | 3902 #if 0 |
3903 /* | |
7465 | 3904 * Update, 2003-11-09: |
3905 * Joseph S. Myers, a gcc dude, fixed this for gcc 3.4! Rock on! | |
3906 * | |
7388 | 3907 * It may not be my place to do this, but... |
3908 * I feel pretty strongly that the "last 2 digits" warning is ridiculously | |
3909 * stupid, and should not exist for % switches (%x in our case) that request | |
3910 * a year in the preferred representation for the current locale. For that | |
3911 * reason I've chosen to not use this workaround (n., see kluge). | |
3912 * | |
3913 * I have a date. I want to show it to the user in the "preferred" way. | |
3914 * Whether that displays a 2 digit year is perfectly fine--after all, it's | |
3915 * what the locale wanted. | |
3916 * | |
3917 * If I have a necessity for a full representation of the year in the current | |
3918 * locale, then I'll use a switch that returns a full representation of the | |
3919 * year. | |
3920 * | |
3921 * If you think the preferred locale should show 4 digits instead of 2 digits | |
3922 * (because you're anal, or whatever), then change the f***ing locale. | |
3923 * | |
3924 * I guess the bottom line is--I'm trying to show a date to the user how they | |
3925 * prefer to see it, why the hell does gcc want me to change that? | |
7389 | 3926 * |
3927 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3190 | |
3928 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8714 | |
7388 | 3929 */ |
3930 | |
3931 /* | |
3932 * This function was recommended by the STRFTIME(3) man page to remove the | |
7386 | 3933 * "last 2 digits" warning. |
3934 */ | |
3935 static size_t my_strftime(char *s, size_t max, const char *fmt, | |
3936 const struct tm *tm) | |
3937 { | |
3938 return strftime(s, max, fmt, tm); | |
3939 } | |
7388 | 3940 #endif |
7386 | 3941 |
4624 | 3942 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
|
3943 { |
5575 | 3944 GaimConnection *gc = sess->aux_data; |
4819 | 3945 gchar *buf, *tmp, *utf8; |
4624 | 3946 gchar who[16]; |
6873 | 3947 GaimBuddy *buddy; |
3948 gchar *primary; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3949 va_list ap; |
4151 | 3950 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3951 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3952 va_start(ap, fr); |
4151 | 3953 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3954 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
3955 |
4664 | 3956 if (!info->uin) |
3957 return 0; | |
3958 | |
5556 | 3959 g_snprintf(who, sizeof(who), "%u", info->uin); |
6623 | 3960 buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3961 if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
6623 | 3962 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3963 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3964 if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) { |
6623 | 3965 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3966 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3967 if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) { |
6623 | 3968 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 3969 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3970 if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) { |
6623 | 3971 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 | 3972 } |
3973 if (info->numaddresses && info->email2) { | |
3974 int i; | |
3975 for (i = 0; i < info->numaddresses; i++) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3976 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) { |
6623 | 3977 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 | 3978 } |
4625 | 3979 } |
4624 | 3980 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3981 if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) { |
6623 | 3982 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4625 | 3983 } |
3984 if (info->gender) { | |
6623 | 3985 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender"), ":</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 3986 } |
4624 | 3987 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 3988 char date[30]; |
3989 struct tm tm; | |
3990 tm.tm_mday = (int)info->birthday; | |
3991 tm.tm_mon = (int)info->birthmonth-1; | |
3992 tm.tm_year = (int)info->birthyear-1900; | |
7388 | 3993 strftime(date, sizeof(date), "%x", &tm); |
6623 | 3994 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday"), ":</b> ", date, NULL); g_free(tmp); |
4151 | 3995 } |
4624 | 3996 if (info->age) { |
3997 char age[5]; | |
3998 snprintf(age, sizeof(age), "%hhd", info->age); | |
6623 | 3999 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp); |
4819 | 4000 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4001 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) { |
6623 | 4002 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 | 4003 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4004 if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) { |
6623 | 4005 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4006 } |
4007 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 4008 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
6623 | 4009 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
|
4010 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) { |
6623 | 4011 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4012 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4013 if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) { |
6623 | 4014 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4015 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4016 if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) { |
6623 | 4017 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4018 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4019 if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) { |
6623 | 4020 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4021 } |
4022 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4023 } |
4641 | 4024 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
6623 | 4025 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
|
4026 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) { |
6623 | 4027 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</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->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) { |
6623 | 4030 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4031 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4032 if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) { |
6623 | 4033 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4034 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4035 if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) { |
6623 | 4036 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4037 } |
4038 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4039 } | |
4641 | 4040 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
6623 | 4041 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
|
4042 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) { |
6623 | 4043 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</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->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) { |
6623 | 4046 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4047 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4048 if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) { |
6623 | 4049 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4050 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4051 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) { |
6623 | 4052 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 | 4053 } |
4054 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4055 } |
4056 | |
6873 | 4057 buddy = gaim_find_buddy(gaim_connection_get_account(gc), who); |
4058 primary = g_strdup_printf(_("ICQ Info for %s"), gaim_get_buddy_alias(buddy)); | |
4059 gaim_notify_formatted(gc, NULL, primary, NULL, buf, NULL, NULL); | |
4060 g_free(primary); | |
4151 | 4061 g_free(buf); |
4062 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4063 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4064 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4065 |
4759 | 4066 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
4067 { | |
5575 | 4068 GaimConnection *gc = sess->aux_data; |
4820 | 4069 gchar who[16], *utf8; |
6695 | 4070 GaimBuddy *b; |
4759 | 4071 va_list ap; |
4072 struct aim_icq_info *info; | |
4073 | |
4074 va_start(ap, fr); | |
4075 info = va_arg(ap, struct aim_icq_info *); | |
4076 va_end(ap); | |
4077 | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4078 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
5556 | 4079 g_snprintf(who, sizeof(who), "%u", info->uin); |
4820 | 4080 serv_got_alias(gc, who, utf8); |
4759 | 4081 if ((b = gaim_find_buddy(gc->account, who))) { |
7693 | 4082 gaim_blist_node_set_string((GaimBlistNode*)b, "servernick", utf8); |
4759 | 4083 gaim_blist_save(); |
4084 } | |
4820 | 4085 g_free(utf8); |
4759 | 4086 } |
4087 | |
4088 return 1; | |
4089 } | |
4090 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4091 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
|
4092 { |
7032 | 4093 GaimConnection *gc = sess->aux_data; |
4094 gchar *text; | |
4095 va_list ap; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4096 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4097 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4098 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4099 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4100 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4101 url = va_arg(ap, char *); |
4199 | 4102 wid = (fu16_t) va_arg(ap, int); |
4103 hei = (fu16_t) va_arg(ap, int); | |
4104 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4105 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4106 |
7032 | 4107 text = g_strdup_printf("%s<br><a href=\"%s\">%s</a>", msg, url, url); |
4108 gaim_notify_formatted(gc, NULL, _("Pop-Up Message"), NULL, text, NULL, NULL); | |
4109 g_free(text); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4110 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4111 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4112 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4113 |
7032 | 4114 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) |
4115 { | |
6873 | 4116 GaimConnection *gc = sess->aux_data; |
4117 gchar *secondary; | |
4118 GString *text; | |
4119 int i, num; | |
2086 | 4120 va_list ap; |
6873 | 4121 char *email, *SNs; |
2086 | 4122 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4123 va_start(ap, fr); |
6873 | 4124 email = va_arg(ap, char *); |
2086 | 4125 num = va_arg(ap, int); |
4126 SNs = va_arg(ap, char *); | |
4127 va_end(ap); | |
4128 | |
6873 | 4129 secondary = g_strdup_printf(_("The following screennames are associated with %s"), email); |
4130 text = g_string_new(""); | |
2086 | 4131 for (i = 0; i < num; i++) |
6873 | 4132 g_string_append_printf(text, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4133 gaim_notify_formatted(gc, NULL, _("Search Results"), secondary, text->str, NULL, NULL); | |
4134 | |
4135 g_free(secondary); | |
4136 g_string_free(text, TRUE); | |
2086 | 4137 |
4138 return 1; | |
4139 } | |
4140 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4141 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4142 va_list ap; |
6873 | 4143 char *email; |
5420 | 4144 char *buf; |
2086 | 4145 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4146 va_start(ap, fr); |
6873 | 4147 email = va_arg(ap, char *); |
2086 | 4148 va_end(ap); |
4149 | |
6873 | 4150 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
|
4151 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4152 g_free(buf); |
2086 | 4153 |
4154 return 1; | |
4155 } | |
4156 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4157 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
6873 | 4158 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4159 fu16_t status; |
2086 | 4160 va_list ap; |
4161 char msg[256]; | |
4162 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4163 va_start(ap, fr); |
4199 | 4164 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4165 va_end(ap); |
4166 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4167 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4168 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4169 status ? "unknown" : "email sent"); |
4170 if (!status) { | |
5302 | 4171 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
5575 | 4172 gaim_account_get_username(gaim_connection_get_account(gc))); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4173 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4174 } |
4175 | |
4176 return 1; | |
4177 } | |
4178 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4179 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4180 GaimConnection *gc = sess->aux_data; |
2086 | 4181 va_list ap; |
3912 | 4182 fu16_t perms, err; |
4183 char *url, *sn, *email; | |
4184 int change; | |
2086 | 4185 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4186 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4187 change = va_arg(ap, int); |
4199 | 4188 perms = (fu16_t) va_arg(ap, unsigned int); |
4189 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4190 url = va_arg(ap, char *); |
4191 sn = va_arg(ap, char *); | |
4192 email = va_arg(ap, char *); | |
2086 | 4193 va_end(ap); |
4194 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4195 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4196 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4197 change ? "change" : "request", perms, err, url, sn, email); |
4198 | |
4199 if (err && url) { | |
4200 char *dialog_msg; | |
4201 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4202 switch (err) { | |
4203 case 0x0001: { | |
4204 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4205 } break; | |
4206 case 0x0006: { | |
4207 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4208 } break; | |
4209 case 0x000b: { | |
4210 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4211 } break; | |
4212 case 0x001d: { | |
4213 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); | |
4214 } break; | |
4215 case 0x0021: { | |
4216 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); | |
4217 } break; | |
4218 case 0x0023: { | |
4219 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4220 } break; | |
4221 default: { | |
4222 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4223 } break; | |
4224 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4225 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4226 g_free(dialog_top); |
4227 g_free(dialog_msg); | |
4228 return 1; | |
4229 } | |
4230 | |
4231 if (sn) { | |
4585 | 4232 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
|
4233 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4234 g_free(dialog_msg); |
4235 } | |
4236 | |
4237 if (email) { | |
5575 | 4238 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), |
4239 gaim_account_get_username(gaim_connection_get_account(gc)), email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4240 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4241 g_free(dialog_msg); |
2086 | 4242 } |
4243 | |
4244 return 1; | |
4245 } | |
4246 | |
5575 | 4247 static void oscar_keepalive(GaimConnection *gc) { |
7283 | 4248 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4249 aim_flap_nop(od->sess, od->conn); |
2086 | 4250 } |
4251 | |
6059 | 4252 static int oscar_send_typing(GaimConnection *gc, const char *name, int typing) { |
7283 | 4253 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4254 struct direct_im *dim = find_direct_im(od, name); |
3595 | 4255 if (dim) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4256 if (typing == GAIM_TYPING) |
4870 | 4257 aim_odc_send_typing(od->sess, dim->conn, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4258 else if (typing == GAIM_TYPED) |
4870 | 4259 aim_odc_send_typing(od->sess, dim->conn, 0x0001); |
4260 else | |
4261 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4262 else { |
5300 | 4263 /* Don't send if this turkey is in our deny list */ |
4264 GSList *list; | |
4265 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4266 if (!list) { | |
7261 | 4267 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
5300 | 4268 if (bi && bi->typingnot) { |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4269 if (typing == GAIM_TYPING) |
5300 | 4270 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4271 else if (typing == GAIM_TYPED) |
5300 | 4272 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); |
4273 else | |
4274 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4275 } | |
3595 | 4276 } |
4277 } | |
2993 | 4278 return 0; |
4279 } | |
5575 | 4280 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
|
4281 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
|
4282 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4283 static int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimConvImFlags imflags) { |
7283 | 4284 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4285 struct direct_im *dim = find_direct_im(od, name); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4286 int ret = 0; |
3659 | 4287 GError *err = NULL; |
5575 | 4288 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
|
4289 char *tmpmsg = NULL; |
3458 | 4290 |
4838 | 4291 if (dim && dim->connected) { |
4292 /* If we're directly connected, send a direct IM */ | |
6982 | 4293 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
|
4294 } else if (imflags & GAIM_CONV_IM_IMAGES) { |
3044 | 4295 /* Trying to send an IM image outside of a direct connection. */ |
4296 oscar_ask_direct_im(gc, name); | |
4838 | 4297 ret = -ENOTCONN; |
2086 | 4298 } else { |
4738 | 4299 struct buddyinfo *bi; |
3008 | 4300 struct aim_sendimext_args args; |
4301 struct stat st; | |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4302 gsize len; |
4269 | 4303 |
7261 | 4304 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
4738 | 4305 if (!bi) { |
4306 bi = g_new0(struct buddyinfo, 1); | |
7261 | 4307 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, name)), bi); |
4738 | 4308 } |
4309 | |
3008 | 4310 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4311 if (od->icq) { |
4312 args.features = features_icq; | |
4313 args.featureslen = sizeof(features_icq); | |
3008 | 4314 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4315 } else { |
4316 args.features = features_aim; | |
4317 args.featureslen = sizeof(features_aim); | |
4972 | 4318 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4319 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
4972 | 4320 args.flags |= AIM_IMFLAGS_AWAY; |
4665 | 4321 } |
4269 | 4322 |
4738 | 4323 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4324 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4325 "Sending buddy icon request with message\n"); |
3008 | 4326 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4327 bi->ico_need = FALSE; |
3008 | 4328 } |
4269 | 4329 |
5575 | 4330 if (iconfile && !stat(iconfile, &st)) { |
4331 FILE *file = fopen(iconfile, "r"); | |
3008 | 4332 if (file) { |
4333 char *buf = g_malloc(st.st_size); | |
4334 fread(buf, 1, st.st_size, file); | |
6039 | 4335 fclose(file); |
4269 | 4336 |
3008 | 4337 args.iconlen = st.st_size; |
4617 | 4338 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4339 args.iconstamp = st.st_mtime; |
4340 | |
7406 | 4341 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { |
4738 | 4342 bi->ico_informed = FALSE; |
7406 | 4343 bi->ico_sent = FALSE; |
4344 } | |
4738 | 4345 |
4346 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4347 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4348 "Claiming to have a buddy icon\n"); |
4738 | 4349 args.flags |= AIM_IMFLAGS_HASICON; |
4350 bi->ico_me_len = args.iconlen; | |
4351 bi->ico_me_csum = args.iconsum; | |
4352 bi->ico_me_time = args.iconstamp; | |
4353 bi->ico_informed = TRUE; | |
4354 } | |
4355 | |
3008 | 4356 g_free(buf); |
2086 | 4357 } |
4358 } | |
4269 | 4359 |
3008 | 4360 args.destsn = name; |
4269 | 4361 |
6310 | 4362 /* For ICQ send newlines as CR/LF, for AIM send newlines as <BR> */ |
4363 if (isdigit(name[0])) | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4364 tmpmsg = gaim_str_add_cr(message); |
6310 | 4365 else |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4366 tmpmsg = gaim_strdup_withhtml(message); |
6310 | 4367 len = strlen(tmpmsg); |
4368 | |
4369 args.flags |= oscar_encoding_check(tmpmsg); | |
3642 | 4370 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4371 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4372 args.charset = 0x0002; |
4665 | 4373 args.charsubset = 0x0000; |
6310 | 4374 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
3659 | 4375 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4376 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4377 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4378 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4379 "This really shouldn't happen!\n"); |
3659 | 4380 /* We really shouldn't try to send the |
4381 * IM now, but I'm not sure what to do */ | |
4800 | 4382 g_error_free(err); |
3659 | 4383 } |
3850 | 4384 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4385 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4386 "Sending ISO-8859-1 IM\n"); |
4662 | 4387 args.charset = 0x0003; |
4665 | 4388 args.charsubset = 0x0000; |
6310 | 4389 args.msg = g_convert(tmpmsg, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
3659 | 4390 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4391 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4392 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4393 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4394 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4395 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
6310 | 4396 len = strlen(tmpmsg); |
4800 | 4397 g_error_free(err); |
6310 | 4398 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
3659 | 4399 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4400 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4401 "Error in unicode fallback: %s\n", err->message); |
4800 | 4402 g_error_free(err); |
3659 | 4403 } |
3642 | 4404 } |
4405 } else { | |
4662 | 4406 args.charset = 0x0000; |
4407 args.charsubset = 0x0000; | |
6310 | 4408 args.msg = tmpmsg; |
3642 | 4409 } |
4410 args.msglen = len; | |
4269 | 4411 |
4617 | 4412 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4413 } |
4838 | 4414 |
6310 | 4415 g_free(tmpmsg); |
4416 | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4417 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4418 return 1; |
6310 | 4419 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4420 return ret; |
2086 | 4421 } |
4422 | |
7011 | 4423 static void oscar_get_info(GaimConnection *gc, const char *name) { |
7283 | 4424 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4425 |
7173 | 4426 if (od->icq && isdigit(name[0])) |
4624 | 4427 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4428 else |
7235 | 4429 aim_locate_getinfoshort(od->sess, name, 0x00000003); |
7011 | 4430 } |
4431 | |
4432 static void oscar_get_away(GaimConnection *gc, const char *who) { | |
7283 | 4433 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4434 if (od->icq) { |
7011 | 4435 GaimBuddy *budlight = gaim_find_buddy(gc->account, who); |
3212 | 4436 if (budlight) |
3595 | 4437 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4438 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4439 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4440 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4441 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4442 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4443 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
7023 | 4444 "Error: Could not find %s in local buddy list, therefore unable to request status message.\n", who); |
3212 | 4445 } else |
7011 | 4446 aim_locate_getinfoshort(od->sess, who, 0x00000002); |
4447 } | |
4448 | |
4449 static void oscar_set_dir(GaimConnection *gc, const char *first, const char *middle, const char *last, | |
3466 | 4450 const char *maiden, const char *city, const char *state, const char *country, int web) { |
4617 | 4451 /* XXX - some of these things are wrong, but i'm lazy */ |
7283 | 4452 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4453 aim_locate_setdirinfo(od->sess, first, middle, last, |
2086 | 4454 maiden, NULL, NULL, city, state, NULL, 0, web); |
4455 } | |
4456 | |
5575 | 4457 static void oscar_set_idle(GaimConnection *gc, int time) { |
7283 | 4458 OscarData *od = (OscarData *)gc->proto_data; |
7474 | 4459 aim_srv_setidle(od->sess, time); |
2086 | 4460 } |
4461 | |
5954 | 4462 static void oscar_set_info(GaimConnection *gc, const char *text) { |
7283 | 4463 OscarData *od = (OscarData *)gc->proto_data; |
5129 | 4464 fu32_t flags = 0; |
6019 | 4465 char *text_html = NULL; |
5129 | 4466 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4467 gsize msglen = 0; |
2993 | 4468 |
4617 | 4469 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4470 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4471 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4472 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4473 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4474 "again when you are fully connected.")); |
4617 | 4475 |
7334 | 4476 if (!text) { |
4477 aim_locate_setprofile(od->sess, NULL, "", 0, NULL, NULL, 0); | |
4478 return; | |
4479 } | |
6019 | 4480 |
7334 | 4481 text_html = gaim_strdup_withhtml(text); |
4482 flags = oscar_encoding_check(text_html); | |
4483 if (flags & AIM_IMFLAGS_UNICODE) { | |
4484 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); | |
4485 aim_locate_setprofile(od->sess, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4486 g_free(msg); | |
4487 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
4488 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); | |
4489 aim_locate_setprofile(od->sess, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4490 g_free(msg); | |
4491 } else { | |
4492 msglen = strlen(text_html); | |
4493 aim_locate_setprofile(od->sess, "us-ascii", text_html, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4494 } | |
4495 | |
4496 if (msglen > od->rights.maxsiglen) { | |
4497 gchar *errstr; | |
4498 errstr = g_strdup_printf(ngettext("The maximum profile length of %d byte " | |
4499 "has been exceeded. Gaim has truncated it for you.", | |
4500 "The maximum profile length of %d bytes " | |
4501 "has been exceeded. Gaim has truncated it for you.", | |
4502 od->rights.maxsiglen), od->rights.maxsiglen); | |
4503 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); | |
4504 g_free(errstr); | |
4505 } | |
4506 | |
4507 g_free(text_html); | |
2993 | 4508 |
4509 return; | |
2086 | 4510 } |
4511 | |
7283 | 4512 static void oscar_set_away_aim(GaimConnection *gc, OscarData *od, const char *text) |
2993 | 4513 { |
5129 | 4514 fu32_t flags = 0; |
6019 | 4515 gchar *text_html = NULL; |
5129 | 4516 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4517 gsize msglen = 0; |
2993 | 4518 |
4519 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4520 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4521 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4522 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4523 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4524 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4525 "fully connected.")); |
5129 | 4526 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4527 if (gc->away) { |
2993 | 4528 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4529 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4530 } |
2993 | 4531 |
5129 | 4532 if (!text) { |
7334 | 4533 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4534 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4535 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4536 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4537 text_html = gaim_strdup_withhtml(text); |
6019 | 4538 flags = oscar_encoding_check(text_html); |
5129 | 4539 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4540 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4541 aim_locate_setprofile(od->sess, NULL, NULL, 0, "unicode-2-0", msg, |
7334 | 4542 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4543 g_free(msg); |
4544 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4545 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4546 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4547 aim_locate_setprofile(od->sess, NULL, NULL, 0, "iso-8859-1", msg, |
7334 | 4548 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4549 g_free(msg); |
6019 | 4550 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4551 } else { |
6019 | 4552 msglen = strlen(text_html); |
7011 | 4553 aim_locate_setprofile(od->sess, NULL, NULL, 0, "us-ascii", text_html, |
7334 | 4554 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
6019 | 4555 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4556 } |
4557 | |
4558 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4559 gchar *errstr; |
4560 | |
6308 | 4561 errstr = g_strdup_printf(ngettext("The maximum away message length of %d byte " |
4562 "has been exceeded. Gaim has truncated it for you.", | |
4563 "The maximum away message length of %d bytes " | |
4564 "has been exceeded. Gaim has truncated it for you.", | |
4565 od->rights.maxawaymsglen), od->rights.maxawaymsglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4566 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4567 g_free(errstr); |
4568 } | |
6019 | 4569 |
4570 g_free(text_html); | |
2993 | 4571 return; |
4572 } | |
4573 | |
7283 | 4574 static void oscar_set_away_icq(GaimConnection *gc, OscarData *od, const char *state, const char *message) |
2993 | 4575 { |
5575 | 4576 GaimAccount *account = gaim_connection_get_account(gc); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4577 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4578 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4579 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4580 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4581 |
4342 | 4582 if (strcmp(state, _("Invisible"))) { |
5575 | 4583 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != account->perm_deny)) |
4584 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); | |
4585 account->perm_deny = 4; | |
4342 | 4586 } else { |
5542 | 4587 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03)) |
4889 | 4588 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
5575 | 4589 account->perm_deny = 3; |
4342 | 4590 } |
4591 | |
4592 if (!strcmp(state, _("Online"))) | |
4901 | 4593 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4594 else if (!strcmp(state, _("Away"))) { |
4901 | 4595 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4596 gc->away = g_strdup(""); |
4342 | 4597 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4598 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
|
4599 gc->away = g_strdup(""); |
4342 | 4600 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4601 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
|
4602 gc->away = g_strdup(""); |
4342 | 4603 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4604 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
|
4605 gc->away = g_strdup(""); |
4342 | 4606 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4607 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4608 gc->away = g_strdup(""); |
4342 | 4609 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4610 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4611 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4612 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4613 if (message) { |
4901 | 4614 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
|
4615 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4616 } else { |
4901 | 4617 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4618 } |
2086 | 4619 } |
2993 | 4620 |
4621 return; | |
4622 } | |
4623 | |
6059 | 4624 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message) |
2993 | 4625 { |
7283 | 4626 OscarData *od = (OscarData *)gc->proto_data; |
2993 | 4627 |
4628 if (od->icq) | |
4629 oscar_set_away_icq(gc, od, state, message); | |
4630 else | |
4631 oscar_set_away_aim(gc, od, message); | |
4632 | |
4633 return; | |
2086 | 4634 } |
4635 | |
6059 | 4636 static void oscar_warn(GaimConnection *gc, const char *name, int anon) { |
7283 | 4637 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4638 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); |
2086 | 4639 } |
4640 | |
5575 | 4641 static void oscar_dir_search(GaimConnection *gc, const char *first, const char *middle, const char *last, |
3466 | 4642 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
7283 | 4643 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 4644 if (strlen(email)) |
6879 | 4645 aim_search_address(od->sess, od->conn, email); |
2086 | 4646 } |
4647 | |
6787
faa491042c66
[gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4648 static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { |
7283 | 4649 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4650 #ifdef NOSSI |
4651 aim_add_buddy(od->sess, od->conn, name); | |
4652 #else | |
4653 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
6695 | 4654 GaimBuddy *buddy = gaim_find_buddy(gc->account, name); |
4655 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4230 | 4656 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4657 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4658 "ssi: adding buddy %s to group %s\n", name, group->name); |
4889 | 4659 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); |
4230 | 4660 } |
4661 } | |
4662 #endif | |
4759 | 4663 if (od->icq) |
4664 aim_icq_getalias(od->sess, name); | |
4230 | 4665 } |
4666 | |
5575 | 4667 static void oscar_add_buddies(GaimConnection *gc, GList *buddies) { |
7283 | 4668 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4669 #ifdef NOSSI |
4670 char buf[MSG_LEN]; | |
4671 int n=0; | |
4672 while (buddies) { | |
4673 if (n > MSG_LEN - 18) { | |
7285 | 4674 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4675 n = 0; |
3092 | 4676 } |
4230 | 4677 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); |
4678 buddies = buddies->next; | |
4679 } | |
7285 | 4680 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4681 #else |
4682 if (od->sess->ssi.received_data) { | |
4683 while (buddies) { | |
7334 | 4684 oscar_add_buddy(gc, (const char *)buddies->data, NULL); |
4230 | 4685 buddies = buddies->next; |
4686 } | |
4687 } | |
4688 #endif | |
4689 } | |
4690 | |
6059 | 4691 static void oscar_remove_buddy(GaimConnection *gc, const char *name, const char *group) { |
7283 | 4692 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4693 #ifdef NOSSI |
4694 aim_remove_buddy(od->sess, od->conn, name); | |
4695 #else | |
4696 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4697 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4698 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4699 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4700 } |
4701 #endif | |
4702 } | |
4703 | |
5575 | 4704 static void oscar_remove_buddies(GaimConnection *gc, GList *buddies, const char *group) { |
7283 | 4705 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4706 #ifdef NOSSI |
4707 GList *cur; | |
4708 for (cur=buddies; cur; cur=cur->next) | |
4709 aim_remove_buddy(od->sess, od->conn, cur->data); | |
4710 #else | |
4711 if (od->sess->ssi.received_data) { | |
3092 | 4712 while (buddies) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4713 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4714 "ssi: deleting buddy %s from group %s\n", (char *)buddies->data, group); |
4889 | 4715 aim_ssi_delbuddy(od->sess, buddies->data, group); |
3092 | 4716 buddies = buddies->next; |
4717 } | |
4230 | 4718 } |
4719 #endif | |
4720 } | |
4721 | |
4722 #ifndef NOSSI | |
5575 | 4723 static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { |
7283 | 4724 OscarData *od = (OscarData *)gc->proto_data; |
4303 | 4725 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
|
4726 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4727 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4728 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4729 } |
4730 } | |
4731 | |
5575 | 4732 static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { |
7283 | 4733 OscarData *od = (OscarData *)gc->proto_data; |
4269 | 4734 if (od->sess->ssi.received_data) { |
4735 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4736 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4737 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4738 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4739 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4740 } |
4741 } | |
4742 } | |
4743 | |
5575 | 4744 static void oscar_rename_group(GaimConnection *g, const char *old_group, const char *new_group, GList *members) { |
7283 | 4745 OscarData *od = (OscarData *)g->proto_data; |
4230 | 4746 |
4747 if (od->sess->ssi.received_data) { | |
4748 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4749 oscar_remove_buddies(g, members, old_group); | |
4750 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4751 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4752 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4753 } else { |
4889 | 4754 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4755 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4756 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4757 } |
4758 } | |
4759 } | |
4760 | |
5968 | 4761 static gboolean gaim_ssi_rerequestdata(gpointer data) { |
4762 aim_session_t *sess = data; | |
6350 | 4763 aim_ssi_reqdata(sess); |
5968 | 4764 return FALSE; |
4765 } | |
4766 | |
4642 | 4767 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4768 GaimConnection *gc = sess->aux_data; |
7283 | 4769 OscarData *od = gc->proto_data; |
4642 | 4770 va_list ap; |
4771 fu16_t reason; | |
4772 | |
4773 va_start(ap, fr); | |
4774 reason = (fu16_t)va_arg(ap, unsigned int); | |
4775 va_end(ap); | |
4776 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4777 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4778 |
4779 if (reason == 0x0005) { | |
5892 | 4780 gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), |
5828 | 4781 _("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 | 4782 od->getblisttimer = g_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); |
4642 | 4783 } |
4784 | |
4785 /* Activate SSI */ | |
4786 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4787 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5968 | 4788 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: activating server-stored buddy list\n"); |
4642 | 4789 aim_ssi_enable(od->sess); |
4790 | |
4791 return 1; | |
4792 } | |
4793 | |
2991 | 4794 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4795 GaimConnection *gc = sess->aux_data; |
7283 | 4796 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4797 int numtypes, i; |
4798 fu16_t *maxitems; | |
2991 | 4799 va_list ap; |
4800 | |
4801 va_start(ap, fr); | |
4230 | 4802 numtypes = va_arg(ap, int); |
4803 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4804 va_end(ap); |
4805 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4806 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4807 |
4230 | 4808 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4809 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4810 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4811 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4812 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4813 |
4814 if (numtypes >= 0) | |
4815 od->rights.maxbuddies = maxitems[0]; | |
4816 if (numtypes >= 1) | |
4817 od->rights.maxgroups = maxitems[1]; | |
4818 if (numtypes >= 2) | |
4819 od->rights.maxpermits = maxitems[2]; | |
4820 if (numtypes >= 3) | |
4821 od->rights.maxdenies = maxitems[3]; | |
2991 | 4822 |
4823 return 1; | |
4824 } | |
4825 | |
4826 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4827 GaimConnection *gc = sess->aux_data; |
4828 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 4829 OscarData *od = (OscarData *)gc->proto_data; |
2995 | 4830 struct aim_ssi_item *curitem; |
2991 | 4831 int tmp; |
4778 | 4832 gboolean export = FALSE; |
4617 | 4833 /* XXX - use these? |
4230 | 4834 va_list ap; |
4835 | |
4836 va_start(ap, fr); | |
4837 fmtver = (fu16_t)va_arg(ap, int); | |
4838 numitems = (fu16_t)va_arg(ap, int); | |
4839 items = va_arg(ap, struct aim_ssi_item); | |
4840 timestamp = va_arg(ap, fu32_t); | |
4841 va_end(ap); */ | |
2991 | 4842 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4843 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4844 "ssi: syncing local list and server list\n"); |
2991 | 4845 |
4846 /* Clean the buddy list */ | |
4889 | 4847 aim_ssi_cleanlist(sess); |
2991 | 4848 |
4849 /* Add from server list to local list */ | |
4230 | 4850 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
7328 | 4851 if ((curitem->name == NULL) || (g_utf8_validate(curitem->name, -1, NULL))) |
2991 | 4852 switch (curitem->type) { |
4230 | 4853 case 0x0000: { /* Buddy */ |
4251 | 4854 if (curitem->name) { |
4292 | 4855 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
7166 | 4856 char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; |
4282 | 4857 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
7166 | 4858 char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; |
6695 | 4859 GaimBuddy *buddy = gaim_find_buddy(gc->account, curitem->name); |
4458 | 4860 /* Should gname be freed here? -- elb */ |
4754 | 4861 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 4862 free(alias); |
4282 | 4863 if (buddy) { |
4292 | 4864 /* Get server stored alias */ |
4705 | 4865 if (alias_utf8) { |
4866 g_free(buddy->alias); | |
4867 buddy->alias = g_strdup(alias_utf8); | |
4868 } | |
4282 | 4869 } else { |
6695 | 4870 GaimGroup *g; |
4687 | 4871 buddy = gaim_buddy_new(gc->account, curitem->name, alias_utf8); |
5146 | 4872 |
4754 | 4873 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 4874 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 4875 gaim_blist_add_group(g, NULL); |
4876 } | |
5146 | 4877 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4878 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4879 "ssi: adding buddy %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
6695 | 4880 gaim_blist_add_buddy(buddy, NULL, g, NULL); |
4778 | 4881 export = TRUE; |
4251 | 4882 } |
7162 | 4883 g_free(gname_utf8); |
4884 g_free(alias_utf8); | |
2991 | 4885 } |
4230 | 4886 } break; |
4887 | |
4888 case 0x0001: { /* Group */ | |
4282 | 4889 /* Shouldn't add empty groups */ |
4230 | 4890 } break; |
4891 | |
4892 case 0x0002: { /* Permit buddy */ | |
2991 | 4893 if (curitem->name) { |
4230 | 4894 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 4895 GSList *list; |
5575 | 4896 for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4897 if (!list) { |
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 permit buddy %s to local list\n", curitem->name); |
6400
588e88bcdac5
[gaim-migrate @ 6905]
Christian Hammond <chipx86@chipx86.com>
parents:
6378
diff
changeset
|
4900 gaim_privacy_permit_add(account, curitem->name, TRUE); |
4778 | 4901 export = TRUE; |
2991 | 4902 } |
4903 } | |
4230 | 4904 } break; |
4905 | |
4906 case 0x0003: { /* Deny buddy */ | |
2991 | 4907 if (curitem->name) { |
4908 GSList *list; | |
5575 | 4909 for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 4910 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4911 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4912 "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
|
4913 gaim_privacy_deny_add(account, curitem->name, TRUE); |
4778 | 4914 export = TRUE; |
2991 | 4915 } |
4916 } | |
4230 | 4917 } break; |
4918 | |
4919 case 0x0004: { /* Permit/deny setting */ | |
2991 | 4920 if (curitem->data) { |
4921 fu8_t permdeny; | |
5575 | 4922 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
|
4923 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5575 | 4924 "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); |
4925 account->perm_deny = permdeny; | |
4926 if (od->icq && account->perm_deny == 0x03) { | |
4342 | 4927 serv_set_away(gc, "Invisible", ""); |
4928 } | |
4778 | 4929 export = TRUE; |
2991 | 4930 } |
4931 } | |
4230 | 4932 } break; |
4933 | |
4934 case 0x0005: { /* Presence setting */ | |
3109 | 4935 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 4936 } break; |
2991 | 4937 } /* End of switch on curitem->type */ |
4938 } /* End of for loop */ | |
4230 | 4939 |
4940 /* If changes were made, then flush buddy list to file */ | |
4778 | 4941 if (export) |
4349 | 4942 gaim_blist_save(); |
2991 | 4943 |
4759 | 4944 { /* Add from local list to server list */ |
6695 | 4945 GaimBlistNode *gnode, *cnode, *bnode; |
4946 GaimGroup *group; | |
4947 GaimBuddy *buddy; | |
7098
770233dad86c
[gaim-migrate @ 7663]
Christian Hammond <chipx86@chipx86.com>
parents:
7095
diff
changeset
|
4948 GaimBuddyList *blist; |
3017 | 4949 GSList *cur; |
4950 | |
2991 | 4951 /* Buddies */ |
4759 | 4952 if ((blist = gaim_get_blist())) |
4953 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
5234 | 4954 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
4955 continue; | |
6695 | 4956 group = (GaimGroup *)gnode; |
4957 for (cnode = gnode->child; cnode; cnode = cnode->next) { | |
4958 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
5234 | 4959 continue; |
6695 | 4960 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
4961 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
4962 continue; | |
4963 buddy = (GaimBuddy *)bnode; | |
4964 if (buddy->account == gc->account) { | |
7693 | 4965 const char *servernick = gaim_blist_node_get_string((GaimBlistNode*)buddy, "servernick"); |
7125 | 4966 if (servernick) |
6695 | 4967 serv_got_alias(gc, buddy->name, servernick); |
7125 | 4968 |
6695 | 4969 if (aim_ssi_itemlist_exists(sess->ssi.local, buddy->name)) { |
4970 /* Store local alias on server */ | |
4971 char *alias = aim_ssi_getalias(sess->ssi.local, group->name, buddy->name); | |
4972 if (!alias && buddy->alias && strlen(buddy->alias)) | |
4973 aim_ssi_aliasbuddy(sess, group->name, buddy->name, buddy->alias); | |
4974 free(alias); | |
4975 } else { | |
4976 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4977 "ssi: adding buddy %s from local list to server list\n", buddy->name); | |
4978 aim_ssi_addbuddy(sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 0); | |
4979 } | |
4759 | 4980 } |
4349 | 4981 } |
4230 | 4982 } |
4292 | 4983 } |
6695 | 4984 |
2991 | 4985 /* Permit list */ |
4491 | 4986 if (gc->account->permit) { |
4987 for (cur=gc->account->permit; cur; cur=cur->next) | |
4230 | 4988 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
|
4989 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 4990 "ssi: adding permit %s from local list to server list\n", (char *)cur->data); |
4889 | 4991 aim_ssi_addpermit(sess, cur->data); |
4230 | 4992 } |
2991 | 4993 } |
4994 | |
4995 /* Deny list */ | |
4491 | 4996 if (gc->account->deny) { |
4997 for (cur=gc->account->deny; cur; cur=cur->next) | |
4230 | 4998 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
|
4999 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
6695 | 5000 "ssi: adding deny %s from local list to server list\n", (char *)cur->data); |
4889 | 5001 aim_ssi_adddeny(sess, cur->data); |
4230 | 5002 } |
2991 | 5003 } |
3109 | 5004 /* Presence settings (idle time visibility) */ |
4230 | 5005 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) |
5631 | 5006 if (!(tmp & 0x400)) |
4889 | 5007 aim_ssi_setpresence(sess, tmp | 0x400); |
4778 | 5008 } /* end adding buddies from local list to server list */ |
5009 | |
4901 | 5010 /* Set our ICQ status */ |
5011 if (od->icq && !gc->away) { | |
5012 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
5013 } | |
5014 | |
4342 | 5015 /* Activate SSI */ |
5016 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
5017 /* 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
|
5018 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5019 "ssi: activating server-stored buddy list\n"); |
4642 | 5020 aim_ssi_enable(sess); |
4342 | 5021 |
2991 | 5022 return 1; |
2086 | 5023 } |
4230 | 5024 |
5025 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5026 GaimConnection *gc = sess->aux_data; |
4230 | 5027 va_list ap; |
5028 struct aim_ssi_tmp *retval; | |
5029 | |
5030 va_start(ap, fr); | |
5031 retval = va_arg(ap, struct aim_ssi_tmp *); | |
5032 va_end(ap); | |
5033 | |
5034 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5035 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5036 "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 | 5037 |
5038 if (retval->ack != 0xffff) | |
5039 switch (retval->ack) { | |
5040 case 0x0000: { /* added successfully */ | |
5041 } break; | |
5042 | |
4829 | 5043 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
5044 gchar *buf; | |
5045 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
|
5046 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 5047 g_free(buf); |
5048 } | |
5049 | |
7023 | 5050 case 0x000e: { /* buddy requires authorization */ |
4828 | 5051 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 5052 gaim_auth_sendrequest(gc, retval->name); |
4230 | 5053 } break; |
5054 | |
5055 default: { /* La la la */ | |
5197 | 5056 gchar *buf; |
5402 | 5057 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
5058 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
|
5059 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 5060 g_free(buf); |
5402 | 5061 /* XXX - Should remove buddy from local list */ |
4230 | 5062 } break; |
5063 } | |
5064 | |
5065 retval = retval->next; | |
5066 } | |
5067 | |
5068 return 1; | |
5069 } | |
5070 | |
5071 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5072 GaimConnection *gc = sess->aux_data; |
4230 | 5073 va_list ap; |
5074 char *sn, *msg; | |
4236 | 5075 gchar *dialog_msg, *nombre; |
4230 | 5076 struct name_data *data; |
6695 | 5077 GaimBuddy *buddy; |
4230 | 5078 |
5079 va_start(ap, fr); | |
5080 sn = va_arg(ap, char *); | |
5081 msg = va_arg(ap, char *); | |
5082 va_end(ap); | |
5083 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5084 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5085 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 5086 |
4687 | 5087 buddy = gaim_find_buddy(gc->account, sn); |
5088 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5089 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5090 else |
5091 nombre = g_strdup(sn); | |
5092 | |
5093 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 | 5094 data = g_new(struct name_data, 1); |
5095 data->gc = gc; | |
5096 data->name = g_strdup(sn); | |
5097 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5098 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5099 gaim_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5100 0, data, |
7023 | 5101 G_CALLBACK(gaim_icq_buddyadd), |
5836 | 5102 G_CALLBACK(oscar_free_name_data)); |
4236 | 5103 |
4230 | 5104 g_free(dialog_msg); |
4236 | 5105 g_free(nombre); |
4230 | 5106 |
5107 return 1; | |
5108 } | |
5109 | |
5110 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5111 GaimConnection *gc = sess->aux_data; |
4230 | 5112 va_list ap; |
5113 char *sn, *msg; | |
4236 | 5114 gchar *dialog_msg, *nombre; |
4230 | 5115 struct name_data *data; |
6695 | 5116 GaimBuddy *buddy; |
4230 | 5117 |
5118 va_start(ap, fr); | |
5119 sn = va_arg(ap, char *); | |
5120 msg = va_arg(ap, char *); | |
5121 va_end(ap); | |
5122 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5123 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5124 "ssi: received authorization request from %s\n", sn); |
4230 | 5125 |
4687 | 5126 buddy = gaim_find_buddy(gc->account, sn); |
5127 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5128 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5129 else |
5130 nombre = g_strdup(sn); | |
5131 | |
4337 | 5132 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 | 5133 data = g_new(struct name_data, 1); |
5134 data->gc = gc; | |
5135 data->name = g_strdup(sn); | |
5136 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5137 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5138 gaim_request_action(gc, NULL, _("Authorization Request"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5139 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5140 _("Authorize"), G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5141 _("Deny"), G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4236 | 5142 |
4230 | 5143 g_free(dialog_msg); |
4236 | 5144 g_free(nombre); |
4230 | 5145 |
5146 return 1; | |
5147 } | |
5148 | |
5149 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5150 GaimConnection *gc = sess->aux_data; |
4230 | 5151 va_list ap; |
5152 char *sn, *msg; | |
4236 | 5153 gchar *dialog_msg, *nombre; |
4230 | 5154 fu8_t reply; |
6695 | 5155 GaimBuddy *buddy; |
4230 | 5156 |
5157 va_start(ap, fr); | |
5158 sn = va_arg(ap, char *); | |
5159 reply = (fu8_t)va_arg(ap, int); | |
5160 msg = va_arg(ap, char *); | |
5161 va_end(ap); | |
5162 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5163 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5164 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5165 |
4687 | 5166 buddy = gaim_find_buddy(gc->account, sn); |
5167 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5168 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5169 else |
5170 nombre = g_strdup(sn); | |
5171 | |
4230 | 5172 if (reply) { |
5173 /* Granted */ | |
7023 | 5174 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
|
5175 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5176 } else { |
5177 /* Denied */ | |
7023 | 5178 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
|
5179 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5180 } |
5181 g_free(dialog_msg); | |
4236 | 5182 g_free(nombre); |
4230 | 5183 |
5184 return 1; | |
5185 } | |
5186 | |
5187 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5188 GaimConnection *gc = sess->aux_data; |
4230 | 5189 va_list ap; |
5190 char *sn; | |
6695 | 5191 GaimBuddy *buddy; |
4230 | 5192 |
5193 va_start(ap, fr); | |
5194 sn = va_arg(ap, char *); | |
5195 va_end(ap); | |
5196 | |
4687 | 5197 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5198 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5199 "ssi: %s added you to their buddy list\n", sn); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
5200 gaim_account_notify_added(gc->account, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5201 |
5202 return 1; | |
5203 } | |
4269 | 5204 #endif |
2086 | 5205 |
5575 | 5206 static GList *oscar_chat_info(GaimConnection *gc) { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5207 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5208 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5209 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5210 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5211 pce->label = _("Join what group:"); |
5234 | 5212 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5213 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5214 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5215 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5216 pce->label = _("Exchange:"); |
5234 | 5217 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5218 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5219 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5220 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5221 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5222 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5223 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5224 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5225 |
5575 | 5226 static void oscar_join_chat(GaimConnection *g, GHashTable *data) { |
7283 | 5227 OscarData *od = (OscarData *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5228 aim_conn_t *cur; |
5234 | 5229 char *name, *exchange; |
5230 | |
5231 name = g_hash_table_lookup(data, "room"); | |
5232 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5233 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5234 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5235 "Attempting to join chat room %s.\n", name); |
4617 | 5236 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
|
5237 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5238 "chatnav exists, creating room\n"); |
5234 | 5239 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5240 } else { |
5241 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5242 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5243 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5244 "chatnav does not exist, opening chatnav\n"); |
5234 | 5245 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5246 cr->name = g_strdup(name); |
4617 | 5247 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5248 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5249 } |
5250 } | |
5251 | |
5575 | 5252 static void oscar_chat_invite(GaimConnection *g, int id, const char *message, const char *name) { |
7283 | 5253 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5254 struct chat_connection *ccon = find_oscar_chat(g, id); |
5255 | |
5256 if (!ccon) | |
5257 return; | |
5258 | |
4617 | 5259 aim_chat_invite(od->sess, od->conn, name, message ? message : "", |
2086 | 5260 ccon->exchange, ccon->name, 0x0); |
5261 } | |
5262 | |
5575 | 5263 static void oscar_chat_leave(GaimConnection *g, int id) { |
7283 | 5264 OscarData *od = g ? (OscarData *)g->proto_data : NULL; |
2086 | 5265 GSList *bcs = g->buddy_chats; |
5679 | 5266 GaimConversation *b = NULL; |
2086 | 5267 struct chat_connection *c = NULL; |
5268 int count = 0; | |
5269 | |
5270 while (bcs) { | |
5271 count++; | |
5679 | 5272 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5273 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5274 break; |
5275 bcs = bcs->next; | |
5276 b = NULL; | |
5277 } | |
5278 | |
5279 if (!b) | |
5280 return; | |
5281 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5282 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5283 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5284 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5285 c = find_oscar_chat(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5286 if (c != NULL) { |
4617 | 5287 if (od) |
5288 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5289 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5290 gaim_input_remove(c->inpa); |
4617 | 5291 if (g && od->sess) |
5292 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5293 g_free(c->name); |
5294 g_free(c->show); | |
5295 g_free(c); | |
5296 } | |
5297 /* 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
|
5298 serv_got_chat_left(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5299 } |
5300 | |
6059 | 5301 static int oscar_chat_send(GaimConnection *g, int id, const char *message) { |
7283 | 5302 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5303 GSList *bcs = g->buddy_chats; |
5679 | 5304 GaimConversation *b = NULL; |
2086 | 5305 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5306 char *buf, *buf2; |
7631 | 5307 guint i, j; |
2086 | 5308 |
5309 while (bcs) { | |
5679 | 5310 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5311 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5312 break; |
5313 bcs = bcs->next; | |
5314 b = NULL; | |
5315 } | |
5316 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5317 return -EINVAL; |
2086 | 5318 |
4617 | 5319 bcs = od->oscar_chats; |
2086 | 5320 while (bcs) { |
5321 c = (struct chat_connection *)bcs->data; | |
5322 if (b == c->cnv) | |
5323 break; | |
5324 bcs = bcs->next; | |
5325 c = NULL; | |
5326 } | |
5327 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5328 return -EINVAL; |
2086 | 5329 |
5330 buf = g_malloc(strlen(message) * 4 + 1); | |
5331 for (i = 0, j = 0; i < strlen(message); i++) { | |
5332 if (message[i] == '\n') { | |
5333 buf[j++] = '<'; | |
5334 buf[j++] = 'B'; | |
5335 buf[j++] = 'R'; | |
5336 buf[j++] = '>'; | |
5337 } else { | |
5338 buf[j++] = message[i]; | |
5339 } | |
5340 } | |
5341 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5342 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5343 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5344 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5345 |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5346 buf2 = gaim_markup_strip_html(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5347 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5348 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5349 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5350 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5351 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5352 |
4617 | 5353 aim_chat_send_im(od->sess, c->conn, 0, buf, strlen(buf)); |
2086 | 5354 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5355 return 0; |
2086 | 5356 } |
5357 | |
6695 | 5358 static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) { |
4766 | 5359 if (!b || (b && b->name && b->name[0] == '+')) { |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5360 if (a != NULL && isdigit(*gaim_account_get_username(a))) |
4687 | 5361 return "icq"; |
5362 else | |
5363 return "aim"; | |
5364 } | |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5365 |
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5366 if (b != NULL && isdigit(b->name[0])) |
4687 | 5367 return "icq"; |
5368 return "aim"; | |
5369 } | |
5370 | |
6695 | 5371 static void oscar_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5372 { |
7334 | 5373 GaimAccount *account = NULL; |
5374 GaimConnection *gc = NULL; | |
5375 OscarData *od = NULL; | |
4687 | 5376 char *emblems[4] = {NULL,NULL,NULL,NULL}; |
5377 int i = 0; | |
7334 | 5378 aim_userinfo_t *userinfo = NULL; |
5379 | |
5380 if (b != NULL) | |
5381 account = b->account; | |
5382 if (account != NULL) | |
5383 gc = account->gc; | |
5384 if (gc != NULL) | |
5385 od = gc->proto_data; | |
4687 | 5386 |
5131 | 5387 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5388 char *gname; | |
7334 | 5389 if ((b->name) && (od) && (od->sess->ssi.received_data) && |
5131 | 5390 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && |
5391 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5392 emblems[i++] = "notauthorized"; | |
5393 } else { | |
5394 emblems[i++] = "offline"; | |
5395 } | |
5396 } | |
4916 | 5397 |
4766 | 5398 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5399 int uc = b->uc >> 16; |
4766 | 5400 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5401 emblems[i++] = "invisible"; |
4766 | 5402 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5403 emblems[i++] = "freeforchat"; |
4766 | 5404 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5405 emblems[i++] = "dnd"; |
4766 | 5406 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5407 emblems[i++] = "na"; |
4766 | 5408 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5409 emblems[i++] = "occupied"; |
4766 | 5410 else if (uc & AIM_ICQ_STATE_AWAY) |
5411 emblems[i++] = "away"; | |
5412 } else { | |
5413 if (b->uc & UC_UNAVAILABLE) | |
5414 emblems[i++] = "away"; | |
5415 } | |
4687 | 5416 if (b->uc & UC_WIRELESS) |
5417 emblems[i++] = "wireless"; | |
5418 if (b->uc & UC_AOL) | |
5419 emblems[i++] = "aol"; | |
5420 if (b->uc & UC_ADMIN) | |
5421 emblems[i++] = "admin"; | |
5422 if (b->uc & UC_AB && i < 4) | |
5423 emblems[i++] = "activebuddy"; | |
6318 | 5424 if (b->uc & UC_HIPTOP && i < 4) |
5425 emblems[i++] = "hiptop"; | |
4766 | 5426 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5427 emblems[i++] = "unconfirmed"; */ | |
7334 | 5428 |
5429 if ((i < 4) && (od != NULL)) { | |
5430 userinfo = aim_locate_finduserinfo(od->sess, b->name); | |
5431 if ((userinfo != NULL) && (userinfo->capabilities & AIM_CAPS_SECUREIM)) | |
5432 emblems[i++] = "secure"; | |
5433 } | |
5434 | |
4687 | 5435 *se = emblems[0]; |
5436 *sw = emblems[1]; | |
5437 *nw = emblems[2]; | |
5438 *ne = emblems[3]; | |
5439 } | |
5440 | |
6695 | 5441 static char *oscar_tooltip_text(GaimBuddy *b) { |
5575 | 5442 GaimConnection *gc = b->account->gc; |
7283 | 5443 OscarData *od = gc->proto_data; |
7692 | 5444 GaimGroup *g = gaim_find_buddys_group(b); |
7261 | 5445 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
7045 | 5446 aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 5447 gchar *tmp = NULL, *ret = g_strdup(""); |
5131 | 5448 |
5449 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5450 if (isdigit(b->name[0])) { | |
7011 | 5451 char *status; |
5131 | 5452 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); |
7011 | 5453 tmp = ret; |
5454 ret = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5131 | 5455 g_free(tmp); |
5456 g_free(status); | |
5457 } | |
5458 | |
7011 | 5459 if (userinfo != NULL) { |
7162 | 5460 char *tstr = gaim_str_seconds_to_string(time(NULL) - userinfo->onlinesince + |
5131 | 5461 (gc->login_time_official ? gc->login_time_official - gc->login_time : 0)); |
7011 | 5462 tmp = ret; |
5463 ret = g_strconcat(tmp, _("<b>Logged In:</b> "), tstr, "\n", NULL); | |
7162 | 5464 g_free(tmp); |
5465 g_free(tstr); | |
7011 | 5466 } |
5467 | |
5468 if ((bi != NULL) && (bi->ipaddr)) { | |
7283 | 5469 char *tstr = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", |
7011 | 5470 (bi->ipaddr & 0xff000000) >> 24, |
5471 (bi->ipaddr & 0x00ff0000) >> 16, | |
5472 (bi->ipaddr & 0x0000ff00) >> 8, | |
5473 (bi->ipaddr & 0x000000ff)); | |
5474 tmp = ret; | |
5475 ret = g_strconcat(tmp, _("<b>IP Address:</b> "), tstr, "\n", NULL); | |
7162 | 5476 g_free(tmp); |
5477 g_free(tstr); | |
7011 | 5478 } |
5479 | |
5480 if ((userinfo != NULL) && (userinfo->capabilities)) { | |
5481 char *caps = caps_string(userinfo->capabilities); | |
5482 tmp = ret; | |
5483 ret = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
7162 | 5484 g_free(tmp); |
7011 | 5485 } |
5486 | |
7692 | 5487 if (g && g->name) { |
5488 char *comment = NULL; | |
5489 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, b->name); | |
5490 if (comment != NULL) { | |
5491 tmp = ret; | |
5492 ret = g_strconcat(tmp, _("<b>Buddy Comment:</b> "), comment, "\n", NULL); | |
5493 free(tmp); | |
5494 free(comment); | |
5495 } | |
5496 } | |
5497 | |
7011 | 5498 if ((bi != NULL) && (bi->availmsg != NULL) && !(b->uc & UC_UNAVAILABLE)) { |
5499 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5500 tmp = ret; | |
5501 ret = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); | |
7162 | 5502 g_free(tmp); |
7011 | 5503 g_free(escaped); |
5504 } | |
5505 | |
5506 if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
5507 gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); | |
5508 if (away_utf8 != NULL) { | |
7091 | 5509 gchar *tmp1, *tmp2; |
7162 | 5510 const char *tmp3; |
7091 | 5511 tmp1 = gaim_strreplace(away_utf8, "<BR>", "\n"); |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5512 tmp2 = gaim_markup_strip_html(tmp1); |
7091 | 5513 g_free(tmp1); |
7235 | 5514 tmp1 = g_markup_escape_text(tmp2, strlen(tmp2)); |
7091 | 5515 g_free(tmp2); |
7235 | 5516 tmp3 = gaim_str_sub_away_formatters(tmp1, gaim_account_get_username(gaim_connection_get_account(gc))); |
5517 g_free(tmp1); | |
7011 | 5518 tmp = ret; |
7162 | 5519 ret = g_strconcat(tmp, _("<b>Away Message:</b> "), tmp3, "\n", NULL); |
5520 g_free(tmp); | |
7011 | 5521 g_free(away_utf8); |
5836 | 5522 } |
5131 | 5523 } |
5524 } else { | |
5525 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5526 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
7011 | 5527 tmp = ret; |
5528 ret = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5131 | 5529 g_free(tmp); |
5530 } else { | |
7011 | 5531 tmp = ret; |
5532 ret = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5131 | 5533 g_free(tmp); |
5534 } | |
5535 } | |
5536 | |
5537 /* remove the trailing newline character */ | |
7011 | 5538 if (ret) |
5539 ret[strlen(ret)-1] = '\0'; | |
5540 return ret; | |
5131 | 5541 } |
5542 | |
6695 | 5543 static char *oscar_status_text(GaimBuddy *b) { |
5575 | 5544 GaimConnection *gc = b->account->gc; |
7283 | 5545 OscarData *od = gc->proto_data; |
5167 | 5546 gchar *ret = NULL; |
5547 | |
5548 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5549 if (isdigit(b->name[0])) | |
5550 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
7038 | 5551 else |
5552 ret = g_strdup(_("Away")); | |
5836 | 5553 } else if (GAIM_BUDDY_IS_ONLINE(b)) { |
7261 | 5554 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
6292 | 5555 if (bi->availmsg) |
5556 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5836 | 5557 } else { |
5167 | 5558 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); |
5559 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5560 ret = g_strdup(_("Not Authorized")); | |
5561 else | |
5562 ret = g_strdup(_("Offline")); | |
5563 } | |
5564 | |
5565 return ret; | |
5566 } | |
5567 | |
5842 | 5568 |
5844 | 5569 static int oscar_icon_req(aim_session_t *sess, aim_frame_t *fr, ...) { |
5842 | 5570 GaimConnection *gc = sess->aux_data; |
7283 | 5571 OscarData *od = gc->proto_data; |
5892 | 5572 va_list ap; |
5842 | 5573 fu16_t type; |
5892 | 5574 fu8_t flags = 0, length = 0; |
5575 char *md5 = NULL; | |
5576 | |
7334 | 5577 |
5842 | 5578 va_start(ap, fr); |
5579 type = va_arg(ap, int); | |
5892 | 5580 |
5581 switch(type) { | |
5582 case 0x0000: | |
5583 case 0x0001: { | |
5584 flags = va_arg(ap, int); | |
5585 length = va_arg(ap, int); | |
5586 md5 = va_arg(ap, char *); | |
5587 | |
5588 if (flags == 0x41) { | |
5589 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON) && !od->iconconnecting) { | |
5590 od->iconconnecting = TRUE; | |
5591 od->set_icon = TRUE; | |
5592 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
5593 } else { | |
6039 | 5594 struct stat st; |
5595 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
5596 if (iconfile == NULL) { | |
5597 /* Set an empty icon, or something */ | |
5598 } else if (!stat(iconfile, &st)) { | |
5599 char *buf = g_malloc(st.st_size); | |
5600 FILE *file = fopen(iconfile, "rb"); | |
5601 if (file) { | |
5602 fread(buf, 1, st.st_size, file); | |
5603 fclose(file); | |
5604 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5605 "Uploading icon to icon server\n"); | |
6879 | 5606 aim_bart_upload(od->sess, buf, st.st_size); |
5892 | 5607 } else |
5608 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 5609 "Can't open buddy icon file!\n"); |
5610 g_free(buf); | |
5611 } else { | |
5612 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5613 "Can't stat buddy icon file!\n"); | |
5892 | 5614 } |
5615 } | |
5893 | 5616 } else if (flags == 0x81) |
5617 aim_ssi_seticon(od->sess, md5, length); | |
5892 | 5618 } break; |
5619 | |
5620 case 0x0002: { /* We just set an "available" message? */ | |
5621 } break; | |
5622 } | |
5623 | |
5842 | 5624 va_end(ap); |
5844 | 5625 |
5626 return 0; | |
5842 | 5627 } |
5892 | 5628 |
3952 | 5629 /* |
4617 | 5630 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5631 */ |
4617 | 5632 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5633 GaimConnection *gc = sess->aux_data; |
7283 | 5634 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5635 GaimConversation *cnv; |
2086 | 5636 struct direct_im *dim; |
5637 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5638 char *sn; |
4617 | 5639 va_list ap; |
5640 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5641 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5642 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5643 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5644 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5645 va_end(ap); |
5646 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5647 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5648 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5649 |
4617 | 5650 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5651 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5652 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5653 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5654 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5655 |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5656 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
|
5657 gaim_input_remove(dim->watcher); |
2086 | 5658 dim->conn = newconn; |
4617 | 5659 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5660 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5661 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5662 g_free(sn); |
6982 | 5663 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
2086 | 5664 |
4617 | 5665 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5666 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
6982 | 5667 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_odc_update_ui, 0); |
4617 | 5668 |
2993 | 5669 return 1; |
5670 } | |
5671 | |
6982 | 5672 /* |
5673 * This is called when each chunk of an image is received. It can be used to | |
5674 * update a progress bar, or to eat lots of dry cat food. Wet cat food is | |
5675 * nasty, you sicko. | |
5676 */ | |
5677 static int gaim_odc_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2993 | 5678 va_list ap; |
5679 char *sn; | |
5680 double percent; | |
5575 | 5681 GaimConnection *gc = sess->aux_data; |
7283 | 5682 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5683 GaimConversation *c; |
2993 | 5684 struct direct_im *dim; |
5685 | |
5686 va_start(ap, fr); | |
5687 sn = va_arg(ap, char *); | |
5688 percent = va_arg(ap, double); | |
5689 va_end(ap); | |
6873 | 5690 |
2994 | 5691 if (!(dim = find_direct_im(od, sn))) |
5692 return 1; | |
3059 | 5693 if (dim->watcher) { |
5694 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5695 dim->watcher = 0; | |
5696 } | |
6982 | 5697 /* XXX is this really necessary? */ |
7082
25a616f16b6c
[gaim-migrate @ 7647]
Christian Hammond <chipx86@chipx86.com>
parents:
7080
diff
changeset
|
5698 gaim_core_mainloop_finish_events(); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5699 |
6982 | 5700 c = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
6873 | 5701 if (c != NULL) |
5702 gaim_conversation_update_progress(c, percent); | |
2993 | 5703 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5704 oscar_callback, dim->conn); | |
2086 | 5705 |
5706 return 1; | |
5707 } | |
5708 | |
6982 | 5709 /* |
5710 * This is called after a direct IM has been received in its entirety. This | |
5711 * function is passed a long chunk of data which contains the IM with any | |
5712 * data chunks (images) appended to it. | |
5713 * | |
5714 * This function rips out all the data chunks and creates an imgstore for | |
5715 * each one. In order to do this, it first goes through the IM and takes | |
5716 * out all the IMG tags. When doing so, it rewrites the original IMG tag | |
5717 * with one compatable with the imgstore Gaim core code. For each one, we | |
5718 * then read in chunks of data from the end of the message and actually | |
5719 * create the img store using the given data. | |
5720 * | |
5721 * For somewhat easy reference, here's a sample message | |
5722 * (without the whitespace and asterisks): | |
5723 * | |
5724 * <HTML><BODY BGCOLOR="#ffffff"> | |
5725 * <FONT LANG="0"> | |
5726 * This is a really stupid picture:<BR> | |
5727 * <IMG SRC="Sample.jpg" ID="1" WIDTH="283" HEIGHT="212" DATASIZE="9894"><BR> | |
5728 * Yeah it is<BR> | |
5729 * Here is another one:<BR> | |
5730 * <IMG SRC="Soap Bubbles.bmp" ID="2" WIDTH="256" HEIGHT="256" DATASIZE="65978"> | |
5731 * </FONT> | |
5732 * </BODY></HTML> | |
5733 * <BINARY> | |
5734 * <DATA ID="1" SIZE="9894">datadatadatadata</DATA> | |
5735 * <DATA ID="2" SIZE="65978">datadatadatadata</DATA> | |
5736 * </BINARY> | |
5737 */ | |
4617 | 5738 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5739 GaimConnection *gc = sess->aux_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5740 GaimConvImFlags imflags = 0; |
6982 | 5741 GString *newmsg = g_string_new(""); |
5742 GSList *images = NULL; | |
2086 | 5743 va_list ap; |
6982 | 5744 const char *sn, *msg, *msgend, *binary; |
5745 size_t len; | |
5746 int encoding, isawaymsg; | |
2086 | 5747 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5748 va_start(ap, fr); |
6982 | 5749 sn = va_arg(ap, const char *); |
5750 msg = va_arg(ap, const char *); | |
5751 len = va_arg(ap, size_t); | |
3952 | 5752 encoding = va_arg(ap, int); |
4870 | 5753 isawaymsg = va_arg(ap, int); |
2086 | 5754 va_end(ap); |
6982 | 5755 msgend = msg + len; |
2086 | 5756 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5757 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5758 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5759 |
4870 | 5760 if (isawaymsg) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5761 imflags |= GAIM_CONV_IM_AUTO_RESP; |
4870 | 5762 |
6982 | 5763 /* message has a binary trailer */ |
5764 if ((binary = gaim_strcasestr(msg, "<binary>"))) { | |
5765 GData *attribs; | |
5766 const char *tmp, *start, *end, *last = NULL; | |
5767 | |
5768 tmp = msg; | |
5769 | |
5770 /* for each valid image tag... */ | |
5771 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5772 const char *id, *src, *datasize; | |
5773 const char *tag = NULL, *data = NULL; | |
5774 size_t size; | |
5775 int imgid = 0; | |
5776 | |
5777 /* update the location of the last img tag */ | |
5778 last = end; | |
5779 | |
5780 /* grab attributes */ | |
5781 id = g_datalist_get_data(&attribs, "id"); | |
5782 src = g_datalist_get_data(&attribs, "src"); | |
5783 datasize = g_datalist_get_data(&attribs, "datasize"); | |
5784 | |
5785 /* if we have id & datasize, build the data tag */ | |
5786 if (id && datasize) | |
5787 tag = g_strdup_printf("<data id=\"%s\" size=\"%s\">", id, datasize); | |
5788 | |
5789 /* if we have a tag, find the start of the data */ | |
5790 if (tag && (data = gaim_strcasestr(binary, tag))) | |
5791 data += strlen(tag); | |
5792 | |
5793 /* check the data is here and store it */ | |
5794 if (data + (size = atoi(datasize)) <= msgend) | |
5795 imgid = gaim_imgstore_add(data, size, src); | |
5796 | |
5797 /* if we have a stored image... */ | |
5798 if (imgid) { | |
5799 /* append the message up to the tag */ | |
5800 newmsg = g_string_append_len(newmsg, tmp, start - tmp); | |
5801 | |
5802 /* write the new image tag */ | |
5803 g_string_append_printf(newmsg, "<IMG ID=\"%d\">", imgid); | |
5804 | |
5805 /* and record the image number */ | |
5806 images = g_slist_append(images, GINT_TO_POINTER(imgid)); | |
5807 } else { | |
5808 /* otherwise, copy up to the end of the tag */ | |
5809 newmsg = g_string_append_len(newmsg, tmp, (end + 1) - tmp); | |
5810 } | |
5811 | |
5812 /* clear the attribute list */ | |
5813 g_datalist_clear(&attribs); | |
5814 | |
5815 /* continue from the end of the tag */ | |
5816 tmp = end + 1; | |
5817 } | |
5818 | |
5819 /* append any remaining message data (without the > :-) */ | |
5820 if (last++ && (last < binary)) | |
5821 newmsg = g_string_append_len(newmsg, last, binary - last); | |
5822 | |
5823 /* set the flag if we caught any images */ | |
5824 if (images) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5825 imflags |= GAIM_CONV_IM_IMAGES; |
6982 | 5826 } else { |
5827 g_string_append_len(newmsg, msg, len); | |
5828 } | |
5829 | |
4617 | 5830 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
6982 | 5831 serv_got_im(gc, sn, newmsg->str, imflags, time(NULL)); |
5832 | |
5833 /* free up the message */ | |
5834 g_string_free(newmsg, TRUE); | |
5835 | |
5836 /* unref any images we allocated */ | |
5837 if (images) { | |
5838 GSList *tmp; | |
5839 int id; | |
5840 | |
5841 for (tmp = images; tmp != NULL; tmp = tmp->next) { | |
5842 id = GPOINTER_TO_INT(tmp->data); | |
5843 gaim_imgstore_unref(id); | |
5844 } | |
5845 | |
5846 g_slist_free(images); | |
5847 } | |
2086 | 5848 |
5849 return 1; | |
5850 } | |
5851 | |
4617 | 5852 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5853 va_list ap; |
5854 char *sn; | |
2993 | 5855 int typing; |
5575 | 5856 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5857 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5858 va_start(ap, fr); |
2086 | 5859 sn = va_arg(ap, char *); |
2993 | 5860 typing = va_arg(ap, int); |
2086 | 5861 va_end(ap); |
5862 | |
4870 | 5863 if (typing == 0x0002) { |
2993 | 5864 /* 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
|
5865 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5866 "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
|
5867 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
4870 | 5868 } else if (typing == 0x0001) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
5869 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
4870 | 5870 else |
4342 | 5871 serv_got_typing_stopped(gc, sn); |
2086 | 5872 return 1; |
5873 } | |
5874 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5875 static int gaim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *message, GaimConvImFlags imflags) { |
6982 | 5876 char *buf; |
5877 size_t len; | |
5878 int ret; | |
5879 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5880 if (imflags & GAIM_CONV_IM_IMAGES) { |
6982 | 5881 GString *msg = g_string_new(""); |
5882 GString *data = g_string_new("<BINARY>"); | |
5883 GData *attribs; | |
5884 const char *tmp, *start, *end, *last = NULL; | |
5885 int oscar_id = 0; | |
5886 | |
5887 tmp = message; | |
5888 | |
5889 /* for each valid IMG tag... */ | |
5890 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5891 GaimStoredImage *image = NULL; | |
5892 const char *id; | |
5893 | |
5894 last = end; | |
5895 id = g_datalist_get_data(&attribs, "id"); | |
5896 | |
5897 /* ... if it refers to a valid gaim image ... */ | |
5898 if (id && (image = gaim_imgstore_get(atoi(id)))) { | |
5899 /* ... append the message from start to the tag ... */ | |
5900 msg = g_string_append_len(msg, tmp, start - tmp); | |
5901 oscar_id++; | |
5902 | |
5903 /* ... insert a new img tag with the oscar id ... */ | |
5904 if (image->filename) | |
5905 g_string_append_printf(msg, | |
5906 "<IMG SRC=\"file://%s\" ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 5907 image->filename, oscar_id, (int)image->size); |
6982 | 5908 else |
5909 g_string_append_printf(msg, | |
5910 "<IMG ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 5911 oscar_id, (int)image->size); |
6982 | 5912 |
5913 /* ... and append the data to the binary section ... */ | |
5914 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%d\">", | |
7386 | 5915 oscar_id, (int)image->size); |
6982 | 5916 data = g_string_append_len(data, image->data, image->size); |
5917 data = g_string_append(data, "</DATA>"); | |
5918 } else { | |
5919 /* ... otherwise, allow the possibly invalid img tag through. */ | |
5920 /* should we do something else? */ | |
5921 msg = g_string_append_len(msg, tmp, (end + 1) - tmp); | |
5922 } | |
5923 | |
5924 g_datalist_clear(&attribs); | |
5925 | |
5926 /* continue from the end of the tag */ | |
5927 tmp = end + 1; | |
5928 } | |
5929 | |
5930 /* append any remaining message data (without the > :-) */ | |
5931 if (last++ && *last) | |
5932 msg = g_string_append(msg, last); | |
5933 | |
5934 /* if we inserted any images in the binary section, append it */ | |
5935 if (oscar_id) { | |
5936 msg = g_string_append_len(msg, data->str, data->len); | |
5937 msg = g_string_append(msg, "</BINARY>"); | |
5938 } | |
5939 | |
5940 len = msg->len; | |
5941 buf = msg->str; | |
5942 g_string_free(msg, FALSE); | |
5943 g_string_free(data, TRUE); | |
5944 } else { | |
5945 len = strlen(message); | |
5946 buf = g_memdup(message, len+1); | |
5947 } | |
5948 | |
5949 /* 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
|
5950 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
6982 | 5951 ret = aim_odc_send_im(sess, conn, buf, len, 0, 1); |
5952 else | |
5953 ret = aim_odc_send_im(sess, conn, buf, len, 0, 0); | |
5954 | |
5955 g_free(buf); | |
5956 | |
5957 return ret; | |
5958 } | |
5959 | |
2086 | 5960 struct ask_do_dir_im { |
5961 char *who; | |
5575 | 5962 GaimConnection *gc; |
2086 | 5963 }; |
5964 | |
3730 | 5965 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 5966 g_free(data->who); |
2086 | 5967 g_free(data); |
5968 } | |
5969 | |
3730 | 5970 static void oscar_direct_im(struct ask_do_dir_im *data) { |
5575 | 5971 GaimConnection *gc = data->gc; |
7283 | 5972 OscarData *od; |
2086 | 5973 struct direct_im *dim; |
5974 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
5975 if (!g_list_find(gaim_connections_get_all(), gc)) { |
5136 | 5976 g_free(data->who); |
4244 | 5977 g_free(data); |
5978 return; | |
5979 } | |
5980 | |
7283 | 5981 od = (OscarData *)gc->proto_data; |
4244 | 5982 |
2086 | 5983 dim = find_direct_im(od, data->who); |
5984 if (dim) { | |
3008 | 5985 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
5986 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
5987 gaim_input_remove(dim->watcher); | |
5988 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5989 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5990 "Gave up on old direct IM, trying again\n"); |
3008 | 5991 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
5992 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 5993 g_free(data->who); |
4244 | 5994 g_free(data); |
3008 | 5995 return; |
5996 } | |
2086 | 5997 } |
5998 dim = g_new0(struct direct_im, 1); | |
5999 dim->gc = gc; | |
6000 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
6001 | |
4617 | 6002 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 6003 if (dim->conn != NULL) { |
6004 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
6005 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 6006 oscar_callback, dim->conn); |
4617 | 6007 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
6008 gaim_odc_initiate, 0); | |
2086 | 6009 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6010 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 6011 g_free(dim); |
6012 } | |
4244 | 6013 |
5136 | 6014 g_free(data->who); |
4244 | 6015 g_free(data); |
2086 | 6016 } |
6017 | |
5575 | 6018 static void oscar_ask_direct_im(GaimConnection *gc, const char *who) { |
5420 | 6019 gchar *buf; |
2086 | 6020 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 6021 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
6022 data->gc = gc; |
5420 | 6023 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
|
6024 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6025 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6026 _("Because this reveals your IP address, it " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6027 "may be considered a privacy risk. Do you " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6028 "wish to continue?"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6029 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6030 _("Connect"), G_CALLBACK(oscar_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6031 _("Cancel"), G_CALLBACK(oscar_cancel_direct_im)); |
5420 | 6032 g_free(buf); |
2086 | 6033 } |
6034 | |
5575 | 6035 static void oscar_set_permit_deny(GaimConnection *gc) { |
6036 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 6037 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 6038 #ifdef NOSSI |
4770 | 6039 GSList *list, *g = gaim_blist_groups(), *g1; |
4230 | 6040 char buf[MAXMSGLEN]; |
6041 int at; | |
6042 | |
5575 | 6043 switch(account->perm_deny) { |
4687 | 6044 case 1: |
5575 | 6045 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gaim_account_get_username(account)); |
4230 | 6046 break; |
6047 case 2: | |
5575 | 6048 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gaim_account_get_username(account)); |
4230 | 6049 break; |
6050 case 3: | |
5575 | 6051 list = account->permit; |
4230 | 6052 at = 0; |
6053 while (list) { | |
6054 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6055 list = list->next; | |
6056 } | |
6057 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
6058 break; | |
6059 case 4: | |
5575 | 6060 list = account->deny; |
4230 | 6061 at = 0; |
6062 while (list) { | |
6063 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6064 list = list->next; | |
6065 } | |
6066 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
6067 break; | |
6068 case 5: | |
4770 | 6069 g1 = g; |
4230 | 6070 at = 0; |
4770 | 6071 while (g1) { |
6072 list = gaim_blist_members((struct group *)g->data); | |
6073 GSList list1 = list; | |
6074 while (list1) { | |
6075 struct buddy *b = list1->data; | |
5575 | 6076 if(b->account == account) |
4349 | 6077 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", b->name); |
4770 | 6078 list1 = list1->next; |
2995 | 6079 } |
4770 | 6080 g_slist_free(list); |
6081 g1 = g1->next; | |
4349 | 6082 } |
4770 | 6083 g_slist_free(g); |
4230 | 6084 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); |
6085 break; | |
6086 default: | |
6087 break; | |
2086 | 6088 } |
4230 | 6089 signoff_blocked(gc); |
6090 #else | |
6091 if (od->sess->ssi.received_data) | |
5575 | 6092 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); |
4230 | 6093 #endif |
2086 | 6094 } |
6095 | |
5575 | 6096 static void oscar_add_permit(GaimConnection *gc, const char *who) { |
4269 | 6097 #ifdef NOSSI |
4491 | 6098 if (gc->account->permdeny == 3) |
4269 | 6099 oscar_set_permit_deny(gc); |
6100 #else | |
7283 | 6101 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6102 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 6103 if (od->sess->ssi.received_data) |
4889 | 6104 aim_ssi_addpermit(od->sess, who); |
4230 | 6105 #endif |
2086 | 6106 } |
6107 | |
5575 | 6108 static void oscar_add_deny(GaimConnection *gc, const char *who) { |
4269 | 6109 #ifdef NOSSI |
4491 | 6110 if (gc->account->permdeny == 4) |
4269 | 6111 oscar_set_permit_deny(gc); |
6112 #else | |
7283 | 6113 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6114 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 6115 if (od->sess->ssi.received_data) |
4889 | 6116 aim_ssi_adddeny(od->sess, who); |
4230 | 6117 #endif |
2086 | 6118 } |
6119 | |
5575 | 6120 static void oscar_rem_permit(GaimConnection *gc, const char *who) { |
4269 | 6121 #ifdef NOSSI |
4491 | 6122 if (gc->account->permdeny == 3) |
4269 | 6123 oscar_set_permit_deny(gc); |
6124 #else | |
7283 | 6125 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6126 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 6127 if (od->sess->ssi.received_data) |
4889 | 6128 aim_ssi_delpermit(od->sess, who); |
4230 | 6129 #endif |
2086 | 6130 } |
6131 | |
5575 | 6132 static void oscar_rem_deny(GaimConnection *gc, const char *who) { |
4269 | 6133 #ifdef NOSSI |
4491 | 6134 if (gc->account->permdeny == 4) |
4269 | 6135 oscar_set_permit_deny(gc); |
6136 #else | |
7283 | 6137 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6138 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 6139 if (od->sess->ssi.received_data) |
4889 | 6140 aim_ssi_deldeny(od->sess, who); |
4230 | 6141 #endif |
2086 | 6142 } |
6143 | |
5575 | 6144 static GList *oscar_away_states(GaimConnection *gc) |
2086 | 6145 { |
7283 | 6146 OscarData *od = gc->proto_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6147 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6148 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6149 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6150 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6151 |
4333 | 6152 m = g_list_append(m, _("Online")); |
6153 m = g_list_append(m, _("Away")); | |
6154 m = g_list_append(m, _("Do Not Disturb")); | |
6155 m = g_list_append(m, _("Not Available")); | |
6156 m = g_list_append(m, _("Occupied")); | |
6157 m = g_list_append(m, _("Free For Chat")); | |
6158 m = g_list_append(m, _("Invisible")); | |
6159 | |
6160 return m; | |
6161 } | |
6162 | |
7172 | 6163 static void oscar_ssi_editcomment(struct name_data *data, const char *text) { |
7283 | 6164 OscarData *od = data->gc->proto_data; |
7172 | 6165 GaimBuddy *b; |
6166 GaimGroup *g; | |
6167 | |
6168 if (!(b = gaim_find_buddy(gaim_connection_get_account(data->gc), data->name))) { | |
6169 oscar_free_name_data(data); | |
6170 return; | |
6171 } | |
6172 | |
6173 if (!(g = gaim_find_buddys_group(b))) { | |
6174 oscar_free_name_data(data); | |
6175 return; | |
6176 } | |
6177 | |
6178 aim_ssi_editcomment(od->sess, g->name, data->name, text); | |
6179 oscar_free_name_data(data); | |
6180 } | |
6181 | |
6182 static void oscar_buddycb_edit_comment(GaimConnection *gc, const char *name) { | |
7283 | 6183 OscarData *od = gc->proto_data; |
7172 | 6184 struct name_data *data = g_new(struct name_data, 1); |
6185 GaimBuddy *b; | |
6186 GaimGroup *g; | |
6187 char *comment; | |
6188 gchar *comment_utf8; | |
6189 | |
6190 if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name))) | |
6191 return; | |
6192 if (!(g = gaim_find_buddys_group(b))) | |
6193 return; | |
6194 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name); | |
6195 comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL; | |
6196 | |
6197 data->gc = gc; | |
6198 data->name = g_strdup(name); | |
6199 data->nick = NULL; | |
6200 | |
6201 gaim_request_input(gc, NULL, _("Buddy Comment:"), NULL, | |
6202 comment_utf8, TRUE, FALSE, | |
6203 _("OK"), G_CALLBACK(oscar_ssi_editcomment), | |
6204 _("Cancel"), G_CALLBACK(oscar_free_name_data), | |
6205 data); | |
6206 | |
6207 free(comment); | |
6208 g_free(comment_utf8); | |
6209 } | |
6210 | |
5575 | 6211 static GList *oscar_buddy_menu(GaimConnection *gc, const char *who) { |
7283 | 6212 OscarData *od = gc->proto_data; |
4333 | 6213 GList *m = NULL; |
6214 struct proto_buddy_menu *pbm; | |
6215 | |
7172 | 6216 pbm = g_new0(struct proto_buddy_menu, 1); |
6217 pbm->label = _("Edit Buddy Comment"); | |
6218 pbm->callback = oscar_buddycb_edit_comment; | |
6219 pbm->gc = gc; | |
6220 m = g_list_append(m, pbm); | |
6221 | |
4333 | 6222 if (od->icq) { |
4624 | 6223 #if 0 |
4333 | 6224 pbm = g_new0(struct proto_buddy_menu, 1); |
6225 pbm->label = _("Get Status Msg"); | |
4969 | 6226 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 6227 pbm->gc = gc; |
6228 m = g_list_append(m, pbm); | |
4624 | 6229 #endif |
4333 | 6230 } else { |
6695 | 6231 GaimBuddy *b = gaim_find_buddy(gc->account, who); |
7011 | 6232 aim_userinfo_t *userinfo; |
5975 | 6233 |
6234 if (b) | |
7045 | 6235 userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 6236 |
6237 if (b && userinfo && aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), who) && GAIM_BUDDY_IS_ONLINE(b)) { | |
6238 if (userinfo->capabilities & AIM_CAPS_DIRECTIM) { | |
5917 | 6239 pbm = g_new0(struct proto_buddy_menu, 1); |
6240 pbm->label = _("Direct IM"); | |
6241 pbm->callback = oscar_ask_direct_im; | |
6242 pbm->gc = gc; | |
6243 m = g_list_append(m, pbm); | |
6244 } | |
7650 | 6245 |
6246 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { | |
6247 pbm = g_new0(struct proto_buddy_menu, 1); | |
6248 pbm->label = _("Send File"); | |
6249 pbm->callback = oscar_ask_sendfile; | |
6250 pbm->gc = gc; | |
6251 m = g_list_append(m, pbm); | |
6252 } | |
4826 | 6253 #if 0 |
7011 | 6254 if (userinfo->capabilities & AIM_CAPS_GETFILE) { |
5917 | 6255 pbm = g_new0(struct proto_buddy_menu, 1); |
6256 pbm->label = _("Get File"); | |
6257 pbm->callback = oscar_ask_getfile; | |
6258 pbm->gc = gc; | |
6259 m = g_list_append(m, pbm); | |
6260 } | |
4826 | 6261 #endif |
4333 | 6262 } |
5131 | 6263 } |
5197 | 6264 |
5131 | 6265 if (od->sess->ssi.received_data) { |
6266 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
6267 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
6268 pbm = g_new0(struct proto_buddy_menu, 1); | |
6873 | 6269 pbm->label = _("Re-request Authorization"); |
5131 | 6270 pbm->callback = gaim_auth_sendrequest; |
6271 pbm->gc = gc; | |
6272 m = g_list_append(m, pbm); | |
4333 | 6273 } |
4916 | 6274 } |
6275 | |
4333 | 6276 return m; |
6277 } | |
6278 | |
5575 | 6279 static void oscar_format_screenname(GaimConnection *gc, const char *nick) { |
7283 | 6280 OscarData *od = gc->proto_data; |
5575 | 6281 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), nick)) { |
4333 | 6282 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
6283 od->setnick = TRUE; | |
6284 od->newsn = g_strdup(nick); | |
6285 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6286 } else { | |
6287 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
6288 } | |
6289 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6290 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6291 _("Screenname formatting can change only capitalization and whitespace.")); |
4333 | 6292 } |
6293 } | |
6294 | |
5575 | 6295 static void oscar_show_format_screenname(GaimConnection *gc) |
4333 | 6296 { |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6297 gaim_request_input(gc, NULL, _("New screenname formatting:"), NULL, |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6298 gaim_connection_get_display_name(gc), FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6299 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6300 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6301 gc); |
4333 | 6302 } |
6303 | |
5575 | 6304 static void oscar_confirm_account(GaimConnection *gc) |
4333 | 6305 { |
7283 | 6306 OscarData *od = gc->proto_data; |
4333 | 6307 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6308 | |
6309 if (conn) { | |
6310 aim_admin_reqconfirm(od->sess, conn); | |
6311 } else { | |
6312 od->conf = TRUE; | |
6313 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6314 } | |
6315 } | |
6316 | |
5575 | 6317 static void oscar_show_email(GaimConnection *gc) |
4333 | 6318 { |
7283 | 6319 OscarData *od = gc->proto_data; |
4333 | 6320 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6321 | |
6322 if (conn) { | |
6323 aim_admin_getinfo(od->sess, conn, 0x11); | |
6324 } else { | |
6325 od->reqemail = TRUE; | |
6326 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6327 } | |
6328 } | |
6329 | |
5575 | 6330 static void oscar_change_email(GaimConnection *gc, const char *email) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6331 { |
7283 | 6332 OscarData *od = gc->proto_data; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6333 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
|
6334 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6335 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6336 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6337 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6338 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6339 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6340 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6341 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6342 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6343 |
5575 | 6344 static void oscar_show_change_email(GaimConnection *gc) |
4333 | 6345 { |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6346 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, |
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6347 FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6348 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6349 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6350 gc); |
4333 | 6351 } |
6352 | |
5575 | 6353 static void oscar_show_awaitingauth(GaimConnection *gc) |
4333 | 6354 { |
7283 | 6355 OscarData *od = gc->proto_data; |
4333 | 6356 gchar *nombre, *text, *tmp; |
6695 | 6357 GaimBlistNode *gnode, *cnode, *bnode; |
4333 | 6358 int num=0; |
6359 | |
6873 | 6360 text = g_strdup(""); |
4333 | 6361 |
4785 | 6362 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
6695 | 6363 GaimGroup *group = (GaimGroup *)gnode; |
4785 | 6364 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
6365 continue; | |
6695 | 6366 for (cnode = gnode->child; cnode; cnode = cnode->next) { |
6367 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 6368 continue; |
6695 | 6369 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
6370 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
6371 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
6372 continue; | |
6373 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { | |
6374 if (gaim_get_buddy_alias_only(buddy)) | |
6375 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
6376 else | |
6377 nombre = g_strdup_printf(" %s", buddy->name); | |
6873 | 6378 tmp = g_strdup_printf("%s%s<br>", text, nombre); |
6695 | 6379 g_free(text); |
6380 text = tmp; | |
6381 g_free(nombre); | |
6382 num++; | |
6383 } | |
4333 | 6384 } |
2979 | 6385 } |
4333 | 6386 } |
6387 | |
6388 if (!num) { | |
6389 g_free(text); | |
6873 | 6390 text = g_strdup(_("<i>you are not waiting for authorization</i>")); |
6391 } | |
6392 | |
6393 gaim_notify_formatted(gc, NULL, _("You are awaiting authorization from " | |
6394 "the following buddies"), _("You can re-request " | |
6395 "authorization from these buddies by " | |
6396 "right-clicking on them and selecting " | |
6397 "\"Re-request Authorization.\""), text, NULL, NULL); | |
4333 | 6398 g_free(text); |
2979 | 6399 } |
6400 | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6401 static void search_by_email_cb(GaimConnection *gc, const char *email) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6402 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6403 serv_dir_search(gc, "", "", "", "", "", "", "", email); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6404 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6405 |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6406 static void oscar_show_find_email(GaimConnection *gc) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6407 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6408 gaim_request_input(gc, _("Find Buddy by E-mail"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6409 _("Search for a buddy by e-mail address"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6410 _("Type the e-mail address of the buddy you are " |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6411 "searching for."), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6412 NULL, FALSE, FALSE, |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6413 _("Search"), G_CALLBACK(search_by_email_cb), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6414 _("Cancel"), NULL, gc); |
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 |
7366 | 6417 #if 0 |
5917 | 6418 static void oscar_setavailmsg(GaimConnection *gc, char *text) { |
7283 | 6419 OscarData *od = (OscarData *)gc->proto_data; |
5917 | 6420 |
7334 | 6421 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
5917 | 6422 aim_srv_setavailmsg(od->sess, text); |
6423 } | |
6424 | |
6425 static void oscar_show_setavailmsg(GaimConnection *gc) | |
6426 { | |
7313 | 6427 gaim_request_input(gc, NULL, _("Available Message:"), NULL, |
6428 _("I'm doing work and hoping for a distraction--IM me!"), | |
6429 TRUE, FALSE, | |
5917 | 6430 _("OK"), G_CALLBACK(oscar_setavailmsg), |
6431 _("Cancel"), NULL, | |
6432 gc); | |
6433 } | |
7366 | 6434 #endif |
5917 | 6435 |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6436 static void oscar_show_set_info(GaimConnection *gc) |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6437 { |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6438 gaim_account_request_change_user_info(gaim_connection_get_account(gc)); |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6439 } |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6440 |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6441 static void oscar_change_pass(GaimConnection *gc) |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6442 { |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6443 gaim_account_request_change_password(gaim_connection_get_account(gc)); |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6444 } |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6445 |
5575 | 6446 static void oscar_show_chpassurl(GaimConnection *gc) |
4333 | 6447 { |
7283 | 6448 OscarData *od = gc->proto_data; |
5575 | 6449 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
|
6450 gaim_notify_uri(gc, substituted); |
5517 | 6451 g_free(substituted); |
4333 | 6452 } |
6453 | |
7026 | 6454 static void oscar_show_imforwardingurl(GaimConnection *gc) |
6455 { | |
6456 gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); | |
6457 } | |
6458 | |
5842 | 6459 static void oscar_set_icon(GaimConnection *gc, const char *iconfile) |
6460 { | |
7283 | 6461 OscarData *od = gc->proto_data; |
5844 | 6462 aim_session_t *sess = od->sess; |
5842 | 6463 FILE *file; |
6464 struct stat st; | |
5844 | 6465 |
6039 | 6466 if (iconfile == NULL) { |
6467 /* Set an empty icon, or something */ | |
6468 } else if (!stat(iconfile, &st)) { | |
5842 | 6469 char *buf = g_malloc(st.st_size); |
6470 file = fopen(iconfile, "rb"); | |
6471 if (file) { | |
6052 | 6472 md5_state_t *state; |
6039 | 6473 char md5[16]; |
5842 | 6474 int len = fread(buf, 1, st.st_size, file); |
6039 | 6475 fclose(file); |
6052 | 6476 state = g_malloc(sizeof(md5_state_t)); |
5842 | 6477 md5_init(state); |
6478 md5_append(state, buf, len); | |
6479 md5_finish(state, md5); | |
6480 g_free(state); | |
6481 aim_ssi_seticon(sess, md5, 16); | |
6482 } else | |
6483 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6484 "Can't open buddy icon file!\n"); | |
6485 g_free(buf); | |
6486 } else | |
6487 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6488 "Can't stat buddy icon file!\n"); | |
6489 } | |
6490 | |
6491 | |
5575 | 6492 static GList *oscar_actions(GaimConnection *gc) |
2086 | 6493 { |
7283 | 6494 OscarData *od = gc->proto_data; |
4333 | 6495 struct proto_actions_menu *pam; |
6496 GList *m = NULL; | |
6497 | |
6498 pam = g_new0(struct proto_actions_menu, 1); | |
6499 pam->label = _("Set User Info"); | |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6500 pam->callback = oscar_show_set_info; |
4333 | 6501 pam->gc = gc; |
6502 m = g_list_append(m, pam); | |
6503 | |
7366 | 6504 #if 0 |
5917 | 6505 pam = g_new0(struct proto_actions_menu, 1); |
6506 pam->label = _("Set Available Message"); | |
6507 pam->callback = oscar_show_setavailmsg; | |
6508 pam->gc = gc; | |
6509 m = g_list_append(m, pam); | |
7366 | 6510 #endif |
5917 | 6511 |
5238 | 6512 pam = g_new0(struct proto_actions_menu, 1); |
6513 pam->label = _("Change Password"); | |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6514 pam->callback = oscar_change_pass; |
5238 | 6515 pam->gc = gc; |
6516 m = g_list_append(m, pam); | |
4617 | 6517 |
6518 if (od->sess->authinfo->chpassurl) { | |
6519 pam = g_new0(struct proto_actions_menu, 1); | |
6520 pam->label = _("Change Password (URL)"); | |
6521 pam->callback = oscar_show_chpassurl; | |
6522 pam->gc = gc; | |
6523 m = g_list_append(m, pam); | |
6524 } | |
6525 | |
7026 | 6526 if (od->sess->authinfo->chpassurl) { |
6527 pam = g_new0(struct proto_actions_menu, 1); | |
6528 pam->label = _("Configure IM Forwarding (URL)"); | |
6529 pam->callback = oscar_show_imforwardingurl; | |
6530 pam->gc = gc; | |
6531 m = g_list_append(m, pam); | |
6532 } | |
6533 | |
5238 | 6534 if (!od->icq) { |
4617 | 6535 /* AIM actions */ |
6536 m = g_list_append(m, NULL); | |
4333 | 6537 |
5917 | 6538 pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6539 pam->label = _("Format Screenname"); |
5844 | 6540 pam->callback = oscar_show_format_screenname; |
4333 | 6541 pam->gc = gc; |
6542 m = g_list_append(m, pam); | |
6543 | |
6544 pam = g_new0(struct proto_actions_menu, 1); | |
6545 pam->label = _("Confirm Account"); | |
6546 pam->callback = oscar_confirm_account; | |
6547 pam->gc = gc; | |
6548 m = g_list_append(m, pam); | |
6549 | |
6550 pam = g_new0(struct proto_actions_menu, 1); | |
6551 pam->label = _("Display Current Registered Address"); | |
6552 pam->callback = oscar_show_email; | |
6553 pam->gc = gc; | |
6554 m = g_list_append(m, pam); | |
6555 | |
6556 pam = g_new0(struct proto_actions_menu, 1); | |
6557 pam->label = _("Change Current Registered Address"); | |
6558 pam->callback = oscar_show_change_email; | |
6559 pam->gc = gc; | |
6560 m = g_list_append(m, pam); | |
2086 | 6561 } |
4333 | 6562 |
6563 m = g_list_append(m, NULL); | |
6564 | |
6565 pam = g_new0(struct proto_actions_menu, 1); | |
6566 pam->label = _("Show Buddies Awaiting Authorization"); | |
6567 pam->callback = oscar_show_awaitingauth; | |
6568 pam->gc = gc; | |
6569 m = g_list_append(m, pam); | |
6570 | |
2086 | 6571 m = g_list_append(m, NULL); |
4333 | 6572 |
6573 pam = g_new0(struct proto_actions_menu, 1); | |
6574 pam->label = _("Search for Buddy by Email"); | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6575 pam->callback = oscar_show_find_email; |
4333 | 6576 pam->gc = gc; |
6577 m = g_list_append(m, pam); | |
6578 | |
4336 | 6579 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6580 pam->label = _("Search for Buddy by Information"); |
6581 pam->callback = show_find_info; | |
6582 pam->gc = gc; | |
4336 | 6583 m = g_list_append(m, pam); */ |
2086 | 6584 |
6585 return m; | |
6586 } | |
6587 | |
5575 | 6588 static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) |
2086 | 6589 { |
7283 | 6590 OscarData *od = gc->proto_data; |
4617 | 6591 |
6592 if (od->icq) { | |
6593 aim_icq_changepasswd(od->sess, new); | |
2086 | 6594 } else { |
4617 | 6595 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6596 if (conn) { | |
6597 aim_admin_changepasswd(od->sess, conn, new, old); | |
6598 } else { | |
6599 od->chpass = TRUE; | |
6600 od->oldp = g_strdup(old); | |
6601 od->newp = g_strdup(new); | |
6602 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6603 } | |
2086 | 6604 } |
6605 } | |
6606 | |
6059 | 6607 static void oscar_convo_closed(GaimConnection *gc, const char *who) |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6608 { |
7283 | 6609 OscarData *od = gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6610 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6611 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6612 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6613 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6614 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6615 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6616 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6617 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6618 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6619 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6620 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6621 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6622 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6623 GAIM_PROTO_OSCAR, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6624 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
|
6625 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6626 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6627 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6628 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6629 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6630 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6631 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6632 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6633 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6634 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6635 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6636 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6637 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6638 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6639 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6640 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6641 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6642 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6643 oscar_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6644 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6645 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6646 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6647 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6648 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6649 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6650 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6651 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6652 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6653 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6654 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6655 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6656 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6657 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6658 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6659 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6660 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6661 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6662 oscar_chat_send, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6663 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6664 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6665 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6666 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6667 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6668 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6669 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6670 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6671 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6672 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6673 NULL, |
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 #endif |
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 oscar_convo_closed, |
5842 | 6678 NULL, |
7650 | 6679 oscar_set_icon |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6680 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6681 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6682 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6683 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6684 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6685 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6686 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6687 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6688 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6689 GAIM_PRIORITY_DEFAULT, /**< priority */ |
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 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6692 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6693 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6694 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6695 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6696 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6697 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6698 NULL, /**< author */ |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
6699 GAIM_WEBSITE, /**< homepage */ |
5205
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 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6702 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6703 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6704 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6705 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6706 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6707 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6708 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6709 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6710 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6711 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6712 GaimAccountOption *option; |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6713 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6714 option = gaim_account_option_string_new(_("Auth host"), "server", |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6715 "login.oscar.aol.com"); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6716 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6717 option); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6718 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6719 option = gaim_account_option_int_new(_("Auth port"), "port", 5190); |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6720 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6721 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6722 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6723 my_protocol = plugin; |
2086 | 6724 } |
6725 | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6726 GAIM_INIT_PLUGIN(oscar, init_plugin, info); |