Mercurial > pidgin
annotate src/protocols/oscar/oscar.c @ 8231:f50c059b6384
[gaim-migrate @ 8954]
This is Tim Ringenbach's patch to move some IP-related functions into the
new gaim_network namespace, improve the local IP checking functionality by
opening a socket, change some prefs, and add the ability to modify these
prefs in the UI. Some ft.c bugs were fixed, and OSCAR, Jabber and Yahoo
were updated to reflect the changes. The DCC SEND portion of this patch was
not committed, as per his request (unless I misunderstood? :)
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Thu, 12 Feb 2004 00:36:55 +0000 |
parents | b01822d23da3 |
children | 4f70e8b3e05e |
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 | |
8151 | 7 * Some code copyright (C) 2001-2004, Mark Doliner <thekingant@users.sourceforge.net> |
6302 | 8 * |
9 * Most libfaim code copyright (C) 1998-2001 Adam Fritzler <afritz@auk.cx> | |
8151 | 10 * Some libfaim code copyright (C) 2001-2004 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" |
8231
f50c059b6384
[gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents:
8227
diff
changeset
|
38 #include "network.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
39 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
40 #include "privacy.h" |
2086 | 41 #include "prpl.h" |
4889 | 42 #include "proxy.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
43 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
44 #include "util.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
45 |
2086 | 46 #include "aim.h" |
5842 | 47 #include "md5.h" |
2086 | 48 |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
49 #define UC_AOL 0x02 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
50 #define UC_ADMIN 0x04 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
51 #define UC_UNCONFIRMED 0x08 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
52 #define UC_NORMAL 0x10 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
53 #define UC_AB 0x20 |
3079 | 54 #define UC_WIRELESS 0x40 |
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 *, ...); | |
8227 | 261 static int gaim_ssi_parseadd (aim_session_t *, aim_frame_t *, ...); |
5129 | 262 static int gaim_ssi_authgiven (aim_session_t *, aim_frame_t *, ...); |
263 static int gaim_ssi_authrequest (aim_session_t *, aim_frame_t *, ...); | |
264 static int gaim_ssi_authreply (aim_session_t *, aim_frame_t *, ...); | |
265 static int gaim_ssi_gotadded (aim_session_t *, aim_frame_t *, ...); | |
266 #endif | |
267 | |
268 /* for DirectIM/image transfer */ | |
269 static int gaim_odc_initiate (aim_session_t *, aim_frame_t *, ...); | |
270 static int gaim_odc_incoming (aim_session_t *, aim_frame_t *, ...); | |
271 static int gaim_odc_typing (aim_session_t *, aim_frame_t *, ...); | |
6982 | 272 static int gaim_odc_update_ui (aim_session_t *, aim_frame_t *, ...); |
5129 | 273 |
274 /* for file transfer */ | |
275 static int oscar_sendfile_estblsh(aim_session_t *, aim_frame_t *, ...); | |
276 static int oscar_sendfile_prompt (aim_session_t *, aim_frame_t *, ...); | |
277 static int oscar_sendfile_ack (aim_session_t *, aim_frame_t *, ...); | |
278 static int oscar_sendfile_done (aim_session_t *, aim_frame_t *, ...); | |
279 | |
280 /* for icons */ | |
281 static gboolean gaim_icon_timerfunc(gpointer data); | |
282 | |
8076 | 283 /* remove these at some point? */ |
7282 | 284 /* Because I don't like forward declarations? I think that was why... */ |
5954 | 285 static void oscar_set_info(GaimConnection *gc, const char *text); |
8076 | 286 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message); |
5306 | 287 |
5836 | 288 static void oscar_free_name_data(struct name_data *data) { |
4230 | 289 g_free(data->name); |
290 g_free(data->nick); | |
291 g_free(data); | |
292 } | |
293 | |
5836 | 294 static void oscar_free_buddyinfo(void *data) { |
295 struct buddyinfo *bi = data; | |
6292 | 296 g_free(bi->availmsg); |
5836 | 297 g_free(bi); |
298 } | |
299 | |
5129 | 300 static fu32_t oscar_encoding_check(const char *utf8) |
301 { | |
302 int i = 0; | |
303 fu32_t encodingflag = 0; | |
304 | |
305 /* Determine how we can send this message. Per the warnings elsewhere | |
306 * in this file, these little checks determine the simplest encoding | |
307 * we can use for a given message send using it. */ | |
308 while (utf8[i]) { | |
309 if ((unsigned char)utf8[i] > 0x7f) { | |
310 /* not ASCII! */ | |
311 encodingflag = AIM_IMFLAGS_ISO_8859_1; | |
312 break; | |
313 } | |
314 i++; | |
315 } | |
316 while (utf8[i]) { | |
317 /* ISO-8859-1 is 0x00-0xbf in the first byte | |
318 * followed by 0xc0-0xc3 in the second */ | |
319 if ((unsigned char)utf8[i] < 0x80) { | |
320 i++; | |
321 continue; | |
322 } else if (((unsigned char)utf8[i] & 0xfc) == 0xc0 && | |
323 ((unsigned char)utf8[i + 1] & 0xc0) == 0x80) { | |
324 i += 2; | |
325 continue; | |
326 } | |
327 encodingflag = AIM_IMFLAGS_UNICODE; | |
328 break; | |
329 } | |
330 | |
331 return encodingflag; | |
332 } | |
333 | |
8225 | 334 /* |
335 * Take a string of the form charset="bleh" where bleh is | |
336 * one of us-ascii, utf-8, iso-8859-1, or unicode-2-0, and | |
337 * return a newly allocated string containing bleh. | |
338 */ | |
339 static gchar *oscar_encoding_extract(const char *encoding) | |
5129 | 340 { |
8225 | 341 gchar *ret = NULL; |
342 char *begin, *end; | |
343 | |
344 /* Make sure encoding begings with charset= */ | |
345 if (strncmp(encoding, "text/aolrtf; charset=", 21)) | |
346 return NULL; | |
347 | |
348 begin = strchr(encoding, '"'); | |
349 end = strrchr(encoding, '"'); | |
350 | |
351 if ((begin == NULL) || (end == NULL) || (begin >= end)) | |
352 return NULL; | |
353 | |
354 ret = g_strndup(begin+1, (end-1) - begin); | |
355 | |
356 return ret; | |
357 } | |
358 | |
359 /* | |
360 * Return the flag specifying the given encoding. | |
361 */ | |
362 static fu32_t oscar_encoding_parse(const char *encoding) | |
363 { | |
364 if ((encoding == NULL) || encoding[0] == '\0') { | |
365 gaim_debug(GAIM_DEBUG_WARNING, "oscar", "Empty encoding, assuming ASCII\n"); | |
5129 | 366 return 0; |
367 } | |
8225 | 368 |
369 if (!strcmp(encoding, "us-ascii") || !strcmp(encoding, "utf-8")) { | |
370 /* UTF-8 is our native encoding, ASCII is a proper subset */ | |
5129 | 371 return 0; |
8225 | 372 } else if (!strcmp(encoding, "iso-8859-1")) { |
5129 | 373 return AIM_IMFLAGS_ISO_8859_1; |
8225 | 374 } else if (!strcmp(encoding, "unicode-2-0")) { |
5129 | 375 return AIM_IMFLAGS_UNICODE; |
376 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
377 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
8225 | 378 "Unrecognized character encoding '%s', falling back to ASCII\n", encoding); |
5129 | 379 return 0; |
380 } | |
381 } | |
382 | |
383 gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen) | |
384 { | |
385 gchar *utf8 = NULL; | |
386 int flags = oscar_encoding_parse(encoding); | |
387 | |
388 switch (flags) { | |
389 case 0: | |
390 utf8 = g_strndup(text, textlen); | |
391 break; | |
392 case AIM_IMFLAGS_ISO_8859_1: | |
393 utf8 = g_convert(text, textlen, "UTF-8", "ISO-8859-1", NULL, NULL, NULL); | |
394 break; | |
395 case AIM_IMFLAGS_UNICODE: | |
396 utf8 = g_convert(text, textlen, "UTF-8", "UCS-2BE", NULL, NULL, NULL); | |
397 break; | |
398 } | |
399 | |
400 return utf8; | |
401 } | |
402 | |
7283 | 403 static struct direct_im *find_direct_im(OscarData *od, const char *who) { |
2086 | 404 GSList *d = od->direct_ims; |
405 struct direct_im *m = NULL; | |
406 | |
407 while (d) { | |
408 m = (struct direct_im *)d->data; | |
4355 | 409 if (!aim_sncmp(who, m->name)) |
4269 | 410 return m; |
2086 | 411 d = d->next; |
412 } | |
413 | |
4269 | 414 return NULL; |
2086 | 415 } |
416 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
417 static char *extract_name(const char *name) { |
4121 | 418 char *tmp, *x; |
2086 | 419 int i, j; |
4120 | 420 |
421 if (!name) | |
4121 | 422 return NULL; |
423 | |
4120 | 424 x = strchr(name, '-'); |
4121 | 425 |
2086 | 426 if (!x) return NULL; |
427 x = strchr(++x, '-'); | |
428 if (!x) return NULL; | |
429 tmp = g_strdup(++x); | |
430 | |
431 for (i = 0, j = 0; x[i]; i++) { | |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
432 char hex[3]; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
433 if (x[i] != '%') { |
2086 | 434 tmp[j++] = x[i]; |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
435 continue; |
2086 | 436 } |
2361
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
437 strncpy(hex, x + ++i, 2); hex[2] = 0; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
438 i++; |
554b001d7d98
[gaim-migrate @ 2374]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2357
diff
changeset
|
439 tmp[j++] = strtol(hex, NULL, 16); |
2086 | 440 } |
441 | |
442 tmp[j] = 0; | |
443 return tmp; | |
444 } | |
445 | |
5575 | 446 static struct chat_connection *find_oscar_chat(GaimConnection *gc, int id) { |
7283 | 447 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 448 struct chat_connection *c = NULL; |
449 | |
450 while (g) { | |
451 c = (struct chat_connection *)g->data; | |
452 if (c->id == id) | |
453 break; | |
454 g = g->next; | |
455 c = NULL; | |
456 } | |
457 | |
458 return c; | |
459 } | |
460 | |
5575 | 461 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
|
462 aim_conn_t *conn) { |
7283 | 463 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; |
2086 | 464 struct chat_connection *c = NULL; |
465 | |
466 while (g) { | |
467 c = (struct chat_connection *)g->data; | |
468 if (c->conn == conn) | |
469 break; | |
470 g = g->next; | |
471 c = NULL; | |
472 } | |
473 | |
474 return c; | |
475 } | |
476 | |
8219 | 477 static struct chat_connection *find_oscar_chat_by_conv(GaimConnection *gc, |
478 GaimConversation *conv) { | |
479 GSList *g = ((OscarData *)gc->proto_data)->oscar_chats; | |
480 struct chat_connection *c = NULL; | |
481 | |
482 while (g) { | |
483 c = (struct chat_connection *)g->data; | |
484 if (c->cnv == conv) | |
485 break; | |
486 g = g->next; | |
487 c = NULL; | |
488 } | |
489 | |
490 return c; | |
491 } | |
492 | |
4617 | 493 static void gaim_odc_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
5575 | 494 GaimConnection *gc = sess->aux_data; |
7283 | 495 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 496 GaimConversation *cnv; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
497 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
498 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
499 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
500 |
4617 | 501 sn = g_strdup(aim_odc_getsn(conn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
502 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
503 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
504 "%s disconnected Direct IM.\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
505 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
506 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
507 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
508 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
509 |
3008 | 510 if (dim->connected) |
511 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); | |
512 else | |
513 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
|
514 |
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
515 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
|
516 if (cnv) |
6982 | 517 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
|
518 |
5579 | 519 gaim_conversation_update_progress(cnv, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
520 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
521 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
|
522 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
523 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
524 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
525 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
526 |
4617 | 527 static void oscar_callback(gpointer data, gint source, GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
528 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
529 aim_session_t *sess = aim_conn_getsess(conn); |
5575 | 530 GaimConnection *gc = sess ? sess->aux_data : NULL; |
7283 | 531 OscarData *od; |
2086 | 532 |
533 if (!gc) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
534 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
535 "oscar callback for closed connection (1).\n"); |
2086 | 536 return; |
537 } | |
538 | |
7283 | 539 od = (OscarData *)gc->proto_data; |
2086 | 540 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
541 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 542 /* oh boy. this is probably bad. i guess the only thing we |
543 * can really do is return? */ | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
544 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
545 "oscar callback for closed connection (2).\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
546 gaim_debug(GAIM_DEBUG_MISC, "oscar", "gc = %p\n", gc); |
2086 | 547 return; |
548 } | |
549 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
550 if (condition & GAIM_INPUT_READ) { |
4617 | 551 if (conn->type == AIM_CONN_TYPE_LISTENER) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
552 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
553 "got information on rendezvous listener\n"); |
4617 | 554 if (aim_handlerendconnect(od->sess, conn) < 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
555 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
556 "connection error (rendezvous listener)\n"); |
4617 | 557 aim_conn_kill(od->sess, &conn); |
2086 | 558 } |
559 } else { | |
4617 | 560 if (aim_get_command(od->sess, conn) >= 0) { |
561 aim_rxdispatch(od->sess); | |
6029 | 562 if (od->killme) { |
563 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "Waiting to be destroyed\n"); | |
564 return; | |
565 } | |
2086 | 566 } else { |
567 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
4617 | 568 !(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
569 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
570 "major connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
571 gaim_connection_error(gc, _("Disconnected.")); |
2086 | 572 } else if (conn->type == AIM_CONN_TYPE_CHAT) { |
573 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
5420 | 574 char *buf; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
575 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
576 "disconnected from chat room %s\n", c->name); |
2086 | 577 c->conn = NULL; |
578 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
579 gaim_input_remove(c->inpa); |
2086 | 580 c->inpa = 0; |
581 c->fd = -1; | |
4617 | 582 aim_conn_kill(od->sess, &conn); |
5420 | 583 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
|
584 gaim_notify_error(gc, NULL, buf, NULL); |
5420 | 585 g_free(buf); |
2086 | 586 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { |
4617 | 587 if (od->cnpa > 0) |
588 gaim_input_remove(od->cnpa); | |
589 od->cnpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
590 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
591 "removing chatnav input watcher\n"); |
4617 | 592 while (od->create_rooms) { |
593 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
594 g_free(cr->name); |
4617 | 595 od->create_rooms = |
596 g_slist_remove(od->create_rooms, cr); | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
597 g_free(cr); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
598 gaim_notify_error(gc, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
599 _("Chat is currently unavailable"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
600 NULL); |
2086 | 601 } |
4617 | 602 aim_conn_kill(od->sess, &conn); |
2086 | 603 } else if (conn->type == AIM_CONN_TYPE_AUTH) { |
4617 | 604 if (od->paspa > 0) |
605 gaim_input_remove(od->paspa); | |
606 od->paspa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
607 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
608 "removing authconn input watcher\n"); |
4617 | 609 aim_conn_kill(od->sess, &conn); |
3694 | 610 } else if (conn->type == AIM_CONN_TYPE_EMAIL) { |
4617 | 611 if (od->emlpa > 0) |
612 gaim_input_remove(od->emlpa); | |
613 od->emlpa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
614 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
615 "removing email input watcher\n"); |
4617 | 616 aim_conn_kill(od->sess, &conn); |
4804 | 617 } else if (conn->type == AIM_CONN_TYPE_ICON) { |
618 if (od->icopa > 0) | |
619 gaim_input_remove(od->icopa); | |
620 od->icopa = 0; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
621 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
622 "removing icon input watcher\n"); |
4804 | 623 aim_conn_kill(od->sess, &conn); |
2086 | 624 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
625 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
4617 | 626 gaim_odc_disconnect(od->sess, conn); |
627 aim_conn_kill(od->sess, &conn); | |
2086 | 628 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
629 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
630 "holy crap! generic connection error! %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
631 conn->type); |
4617 | 632 aim_conn_kill(od->sess, &conn); |
2086 | 633 } |
634 } | |
635 } | |
636 } | |
637 } | |
638 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
639 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
5575 | 640 GaimConnection *gc = sess->aux_data; |
7285 | 641 gchar *s = g_strdup_vprintf(format, va); |
642 gchar *buf; | |
643 | |
644 buf = g_strdup_printf("%s %d: %s", gaim_account_get_username(gaim_connection_get_account(gc)), level, s); | |
645 gaim_debug(GAIM_DEBUG_INFO, "oscar", buf); | |
646 if (buf[strlen(buf)-1] != '\n') | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
647 gaim_debug(GAIM_DEBUG_INFO, NULL, "\n"); |
7285 | 648 g_free(buf); |
2086 | 649 g_free(s); |
650 } | |
651 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
652 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 653 { |
5575 | 654 GaimConnection *gc = data; |
7283 | 655 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
656 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
657 aim_conn_t *conn; |
2086 | 658 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
659 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 660 close(source); |
661 return; | |
662 } | |
663 | |
4617 | 664 od = gc->proto_data; |
665 sess = od->sess; | |
2086 | 666 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 667 conn->fd = source; |
2086 | 668 |
669 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
670 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 671 return; |
672 } | |
673 | |
674 aim_conn_completeconnect(sess, conn); | |
4617 | 675 gc->inpa = gaim_input_add(conn->fd, GAIM_INPUT_READ, oscar_callback, conn); |
7282 | 676 aim_request_login(sess, conn, gaim_account_get_username(gaim_connection_get_account(gc))); |
677 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
678 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
7282 | 679 "Screen name sent, waiting for response\n"); |
7283 | 680 gaim_connection_update_progress(gc, _("Screen name sent"), 1, OSCAR_CONNECT_STEPS); |
2086 | 681 } |
682 | |
5575 | 683 static void oscar_login(GaimAccount *account) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
684 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
685 aim_conn_t *conn; |
5575 | 686 GaimConnection *gc = gaim_account_get_connection(account); |
7283 | 687 OscarData *od = gc->proto_data = g_new0(OscarData, 1); |
2086 | 688 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
689 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
|
690 |
5575 | 691 if (isdigit(*(gaim_account_get_username(account)))) { |
4617 | 692 od->icq = TRUE; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
693 } else { |
6622 | 694 gc->flags |= GAIM_CONNECTION_HTML; |
695 gc->flags |= GAIM_CONNECTION_AUTO_RESP; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
696 } |
5836 | 697 od->buddyinfo = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, oscar_free_buddyinfo); |
2086 | 698 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
699 sess = g_new0(aim_session_t, 1); |
7285 | 700 aim_session_init(sess, TRUE, 0); |
2086 | 701 aim_setdebuggingcb(sess, oscar_debug); |
7282 | 702 /* |
703 * We need an immediate queue because we don't use a while-loop | |
704 * to see if things need to be sent. | |
705 */ | |
2086 | 706 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); |
4617 | 707 od->sess = sess; |
2086 | 708 sess->aux_data = gc; |
709 | |
710 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
711 if (conn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
712 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
713 "internal connection error\n"); |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
714 gaim_connection_error(gc, _("Unable to login to AIM")); |
2086 | 715 return; |
716 } | |
717 | |
4649 | 718 aim_conn_addhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2086 | 719 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); |
720 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
721 | |
722 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
723 if (gaim_proxy_connect(account, gaim_account_get_string(account, "server", FAIM_LOGIN_SERVER), |
5575 | 724 gaim_account_get_int(account, "port", FAIM_LOGIN_PORT), |
725 oscar_login_connect, gc) < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
726 gaim_connection_error(gc, _("Couldn't connect to host")); |
2086 | 727 return; |
728 } | |
7282 | 729 |
7283 | 730 gaim_connection_update_progress(gc, _("Connecting"), 0, OSCAR_CONNECT_STEPS); |
5575 | 731 } |
732 | |
733 static void oscar_close(GaimConnection *gc) { | |
7283 | 734 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 735 |
736 while (od->oscar_chats) { | |
737 struct chat_connection *n = od->oscar_chats->data; | |
2086 | 738 if (n->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
739 gaim_input_remove(n->inpa); |
2086 | 740 g_free(n->name); |
741 g_free(n->show); | |
4617 | 742 od->oscar_chats = g_slist_remove(od->oscar_chats, n); |
2086 | 743 g_free(n); |
744 } | |
4617 | 745 while (od->direct_ims) { |
746 struct direct_im *n = od->direct_ims->data; | |
2086 | 747 if (n->watcher > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
748 gaim_input_remove(n->watcher); |
4617 | 749 od->direct_ims = g_slist_remove(od->direct_ims, n); |
2086 | 750 g_free(n); |
751 } | |
4617 | 752 /* BBB */ |
753 while (od->file_transfers) { | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
754 GaimXfer *xfer; |
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
755 xfer = (GaimXfer *)od->file_transfers->data; |
7805 | 756 gaim_xfer_cancel_local(xfer); |
3630 | 757 } |
4804 | 758 while (od->requesticon) { |
759 char *sn = od->requesticon->data; | |
760 od->requesticon = g_slist_remove(od->requesticon, sn); | |
761 free(sn); | |
762 } | |
4738 | 763 g_hash_table_destroy(od->buddyinfo); |
4617 | 764 while (od->create_rooms) { |
765 struct create_room *cr = od->create_rooms->data; | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
766 g_free(cr->name); |
4617 | 767 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
768 g_free(cr); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
769 } |
4617 | 770 if (od->email) |
771 g_free(od->email); | |
772 if (od->newp) | |
773 g_free(od->newp); | |
774 if (od->oldp) | |
775 g_free(od->oldp); | |
2086 | 776 if (gc->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
777 gaim_input_remove(gc->inpa); |
4617 | 778 if (od->cnpa > 0) |
779 gaim_input_remove(od->cnpa); | |
780 if (od->paspa > 0) | |
781 gaim_input_remove(od->paspa); | |
782 if (od->emlpa > 0) | |
783 gaim_input_remove(od->emlpa); | |
4804 | 784 if (od->icopa > 0) |
785 gaim_input_remove(od->icopa); | |
6907 | 786 if (od->icontimer > 0) |
4832 | 787 g_source_remove(od->icontimer); |
5968 | 788 if (od->getblisttimer) |
789 g_source_remove(od->getblisttimer); | |
4617 | 790 aim_session_kill(od->sess); |
791 g_free(od->sess); | |
792 od->sess = NULL; | |
2086 | 793 g_free(gc->proto_data); |
794 gc->proto_data = NULL; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
795 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Signed off.\n"); |
2086 | 796 } |
797 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
798 static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 799 GaimConnection *gc = data; |
7283 | 800 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
801 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
802 aim_conn_t *bosconn; |
2086 | 803 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
804 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 805 close(source); |
806 return; | |
807 } | |
808 | |
4617 | 809 od = gc->proto_data; |
810 sess = od->sess; | |
811 bosconn = od->conn; | |
4366 | 812 bosconn->fd = source; |
2086 | 813 |
814 if (source < 0) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
815 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 816 return; |
817 } | |
818 | |
819 aim_conn_completeconnect(sess, bosconn); | |
4617 | 820 gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, oscar_callback, bosconn); |
7283 | 821 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
822 gaim_connection_update_progress(gc, |
7283 | 823 _("Connection established, cookie sent"), 4, OSCAR_CONNECT_STEPS); |
2086 | 824 } |
825 | |
4617 | 826 /* BBB */ |
4656 | 827 /* |
828 * This little area in oscar.c is the nexus of file transfer code, | |
829 * so I wrote a little explanation of what happens. I am such a | |
830 * ninja. | |
831 * | |
832 * The series of events for a file send is: | |
833 * -Create xfer and call gaim_xfer_request (this happens in oscar_ask_sendfile) | |
834 * -User chooses a file and oscar_xfer_init is called. It establishs a | |
835 * listening socket, then asks the remote user to connect to us (and | |
836 * gives them the file name, port, IP, etc.) | |
837 * -They connect to us and we send them an AIM_CB_OFT_PROMPT (this happens | |
838 * in oscar_sendfile_estblsh) | |
839 * -They send us an AIM_CB_OFT_ACK and then we start sending data | |
840 * -When we finish, they send us an AIM_CB_OFT_DONE and they close the | |
841 * connection. | |
842 * -We get drunk because file transfer kicks ass. | |
843 * | |
844 * The series of events for a file receive is: | |
845 * -Create xfer and call gaim_xfer request (this happens in incomingim_chan2) | |
846 * -Gaim user selects file to name and location to save file to and | |
847 * oscar_xfer_init is called | |
848 * -It connects to the remote user using the IP they gave us earlier | |
849 * -After connecting, they send us an AIM_CB_OFT_PROMPT. In reply, we send | |
850 * them an AIM_CB_OFT_ACK. | |
851 * -They begin to send us lots of raw data. | |
852 * -When they finish sending data we send an AIM_CB_OFT_DONE and then close | |
853 * the connectionn. | |
854 */ | |
855 static void oscar_sendfile_connected(gpointer data, gint source, GaimInputCondition condition); | |
856 | |
857 /* XXX - This function is pretty ugly */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
858 static void oscar_xfer_init(GaimXfer *xfer) |
4656 | 859 { |
5146 | 860 struct aim_oft_info *oft_info = xfer->data; |
5575 | 861 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 862 OscarData *od = gc->proto_data; |
4656 | 863 |
864 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
865 int i; | |
866 | |
867 xfer->filename = g_path_get_basename(xfer->local_filename); | |
5146 | 868 strncpy(oft_info->fh.name, xfer->filename, 64); |
869 oft_info->fh.totsize = gaim_xfer_get_size(xfer); | |
870 oft_info->fh.size = gaim_xfer_get_size(xfer); | |
871 oft_info->fh.checksum = aim_oft_checksum_file(xfer->local_filename); | |
4656 | 872 |
873 /* | |
5146 | 874 * First try the port specified earlier (5190). If that fails, |
875 * increment by 1 and try again. | |
4656 | 876 */ |
5146 | 877 aim_sendfile_listen(od->sess, oft_info); |
878 for (i=0; (i<5 && !oft_info->conn); i++) { | |
879 xfer->local_port = oft_info->port = oft_info->port + 1; | |
880 aim_sendfile_listen(od->sess, oft_info); | |
4656 | 881 } |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
882 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
883 "port is %d, ip is %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
884 xfer->local_port, oft_info->clientip); |
5146 | 885 if (oft_info->conn) { |
886 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
887 aim_im_sendch2_sendfile_ask(od->sess, oft_info); | |
888 aim_conn_addhandler(od->sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ESTABLISHED, oscar_sendfile_estblsh, 0); | |
4656 | 889 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
890 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
891 _("Unable to establish listener socket.")); |
4656 | 892 /* 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
|
893 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 894 } |
895 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 896 oft_info->conn = aim_newconn(od->sess, AIM_CONN_TYPE_RENDEZVOUS, NULL); |
897 if (oft_info->conn) { | |
898 oft_info->conn->subtype = AIM_CONN_SUBTYPE_OFT_SENDFILE; | |
899 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
|
900 oft_info->conn->fd = xfer->fd = gaim_proxy_connect(gaim_connection_get_account(gc), xfer->remote_ip, xfer->remote_port, |
5575 | 901 oscar_sendfile_connected, xfer); |
4656 | 902 if (xfer->fd == -1) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
903 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
904 _("Unable to establish file descriptor.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
905 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 906 } |
907 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
908 gaim_notify_error(gc, NULL, _("File Transfer Aborted"), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
909 _("Unable to create new connection.")); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
910 /* gaim_xfer_cancel_remote(xfer); */ |
4656 | 911 /* Try a different port? Ask them to connect to us? */ |
912 } | |
913 | |
914 } | |
915 } | |
916 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
917 static void oscar_xfer_start(GaimXfer *xfer) |
4656 | 918 { |
5146 | 919 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
920 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_xfer_start\n"); |
4656 | 921 /* I'm pretty sure we don't need to do jack here. Nor Jill. */ |
922 } | |
923 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
924 static void oscar_xfer_end(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", "AAA - in oscar_xfer_end\n"); |
5146 | 931 |
932 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
933 oft_info->fh.nrecvd = gaim_xfer_get_bytes_sent(xfer); | |
934 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_DONE, oft_info); | |
935 } | |
936 | |
937 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
938 aim_oft_destroyinfo(oft_info); | |
4656 | 939 xfer->data = NULL; |
5146 | 940 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 941 } |
942 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
943 static void oscar_xfer_cancel_send(GaimXfer *xfer) |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
944 { |
5146 | 945 struct aim_oft_info *oft_info = xfer->data; |
5575 | 946 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 947 OscarData *od = gc->proto_data; |
4763 | 948 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
949 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
950 "AAA - in oscar_xfer_cancel_send\n"); |
5146 | 951 |
952 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
953 | |
954 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
955 aim_oft_destroyinfo(oft_info); | |
4763 | 956 xfer->data = NULL; |
5146 | 957 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
958 } |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
959 |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
960 static void oscar_xfer_cancel_recv(GaimXfer *xfer) |
4656 | 961 { |
5146 | 962 struct aim_oft_info *oft_info = xfer->data; |
5575 | 963 GaimConnection *gc = oft_info->sess->aux_data; |
7283 | 964 OscarData *od = gc->proto_data; |
4656 | 965 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
966 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
967 "AAA - in oscar_xfer_cancel_recv\n"); |
5146 | 968 |
969 aim_im_sendch2_sendfile_cancel(oft_info->sess, oft_info); | |
970 | |
971 aim_conn_kill(oft_info->sess, &oft_info->conn); | |
972 aim_oft_destroyinfo(oft_info); | |
4656 | 973 xfer->data = NULL; |
5146 | 974 od->file_transfers = g_slist_remove(od->file_transfers, xfer); |
4656 | 975 } |
976 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
977 static void oscar_xfer_ack(GaimXfer *xfer, const char *buffer, size_t size) |
4656 | 978 { |
5146 | 979 struct aim_oft_info *oft_info = xfer->data; |
4656 | 980 |
981 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) { | |
982 /* | |
983 * If we're done sending, intercept the socket from the core ft code | |
984 * and wait for the other guy to send the "done" OFT packet. | |
985 */ | |
986 if (gaim_xfer_get_bytes_remaining(xfer) <= 0) { | |
987 gaim_input_remove(xfer->watcher); | |
5146 | 988 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); |
4656 | 989 xfer->fd = 0; |
990 gaim_xfer_set_completed(xfer, TRUE); | |
991 } | |
992 } else if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) { | |
5146 | 993 /* Update our rolling checksum. Like Walmart, yo. */ |
994 oft_info->fh.recvcsum = aim_oft_checksum_chunk(buffer, size, oft_info->fh.recvcsum); | |
4656 | 995 } |
996 } | |
997 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
998 static GaimXfer *oscar_find_xfer_by_cookie(GSList *fts, const char *ck) |
4656 | 999 { |
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; |
4656 | 1002 |
1003 while (fts) { | |
1004 xfer = fts->data; | |
5146 | 1005 oft_info = xfer->data; |
1006 | |
1007 if (oft_info && !strcmp(ck, oft_info->cookie)) | |
4656 | 1008 return xfer; |
1009 | |
1010 fts = g_slist_next(fts); | |
1011 } | |
1012 | |
1013 return NULL; | |
1014 } | |
1015 | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1016 static GaimXfer *oscar_find_xfer_by_conn(GSList *fts, aim_conn_t *conn) |
4656 | 1017 { |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1018 GaimXfer *xfer; |
5146 | 1019 struct aim_oft_info *oft_info; |
4656 | 1020 |
1021 while (fts) { | |
1022 xfer = fts->data; | |
5146 | 1023 oft_info = xfer->data; |
1024 | |
1025 if (oft_info && (conn == oft_info->conn)) | |
4656 | 1026 return xfer; |
1027 | |
1028 fts = g_slist_next(fts); | |
1029 } | |
1030 | |
1031 return NULL; | |
1032 } | |
1033 | |
5575 | 1034 static void oscar_ask_sendfile(GaimConnection *gc, const char *destsn) { |
7283 | 1035 OscarData *od = (OscarData *)gc->proto_data; |
8231
f50c059b6384
[gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents:
8227
diff
changeset
|
1036 GaimAccount *account = gaim_connection_get_account(gc); |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1037 GaimXfer *xfer; |
5146 | 1038 struct aim_oft_info *oft_info; |
8231
f50c059b6384
[gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents:
8227
diff
changeset
|
1039 const char *ip; |
3752 | 1040 |
4617 | 1041 /* You want to send a file to someone else, you're so generous */ |
1042 | |
1043 /* Build the file transfer handle */ | |
5575 | 1044 xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, destsn); |
4617 | 1045 xfer->local_port = 5190; |
1046 | |
5146 | 1047 /* Create the oscar-specific data */ |
8231
f50c059b6384
[gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents:
8227
diff
changeset
|
1048 ip = gaim_network_get_ip_for_account(account, od->conn?od->conn->fd:-1); |
f50c059b6384
[gaim-migrate @ 8954]
Christian Hammond <chipx86@chipx86.com>
parents:
8227
diff
changeset
|
1049 oft_info = aim_oft_createinfo(od->sess, NULL, destsn, ip, xfer->local_port, 0, 0, NULL); |
5146 | 1050 xfer->data = oft_info; |
1051 | |
4617 | 1052 /* Setup our I/O op functions */ |
1053 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
1054 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
1055 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1056 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
1057 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4656 | 1058 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
4617 | 1059 |
1060 /* Keep track of this transfer for later */ | |
1061 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
1062 | |
1063 /* Now perform the request */ | |
1064 gaim_xfer_request(xfer); | |
3630 | 1065 } |
1066 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1067 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
6029 | 1068 GaimConnection *gc = sess->aux_data; |
7283 | 1069 OscarData *od = gc->proto_data; |
6029 | 1070 GaimAccount *account = gc->account; |
1071 aim_conn_t *bosconn; | |
1072 char *host; int port; | |
1073 int i, rc; | |
2086 | 1074 va_list ap; |
2704 | 1075 struct aim_authresp_info *info; |
6029 | 1076 |
5575 | 1077 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1078 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1079 va_start(ap, fr); |
2704 | 1080 info = va_arg(ap, struct aim_authresp_info *); |
2086 | 1081 va_end(ap); |
1082 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1083 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1084 "inside auth_resp (Screen name: %s)\n", info->sn); |
2704 | 1085 |
4293 | 1086 if (info->errorcode || !info->bosip || !info->cookielen || !info->cookie) { |
4056 | 1087 char buf[256]; |
2704 | 1088 switch (info->errorcode) { |
2086 | 1089 case 0x05: |
1090 /* Incorrect nick/password */ | |
6498 | 1091 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1092 gaim_connection_error(gc, _("Incorrect nickname or password.")); |
2086 | 1093 break; |
1094 case 0x11: | |
1095 /* Suspended account */ | |
6498 | 1096 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1097 gaim_connection_error(gc, _("Your account is currently suspended.")); |
2086 | 1098 break; |
3498 | 1099 case 0x14: |
1100 /* service temporarily unavailable */ | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1101 gaim_connection_error(gc, _("The AOL Instant Messenger service is temporarily unavailable.")); |
3498 | 1102 break; |
2086 | 1103 case 0x18: |
1104 /* connecting too frequently */ | |
6498 | 1105 gc->wants_to_die = TRUE; |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1106 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 | 1107 break; |
1108 case 0x1c: | |
1109 /* client too old */ | |
6498 | 1110 gc->wants_to_die = TRUE; |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
1111 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
|
1112 gaim_connection_error(gc, buf); |
2086 | 1113 break; |
1114 default: | |
6623 | 1115 gaim_connection_error(gc, _("Authentication failed")); |
2086 | 1116 break; |
1117 } | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1118 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1119 "Login Error Code 0x%04hx\n", info->errorcode); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1120 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1121 "Error URL: %s\n", info->errorurl); |
2086 | 1122 od->killme = TRUE; |
1123 return 1; | |
1124 } | |
1125 | |
1126 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1127 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1128 "Reg status: %hu\n", info->regstatus); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1129 |
2704 | 1130 if (info->email) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1131 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email: %s\n", info->email); |
2086 | 1132 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1133 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Email is NULL\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1134 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1135 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1136 gaim_debug(GAIM_DEBUG_MISC, "oscar", "BOSIP: %s\n", info->bosip); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1137 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1138 "Closing auth connection...\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1139 aim_conn_kill(sess, &fr->conn); |
2086 | 1140 |
1141 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
1142 if (bosconn == NULL) { | |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1143 gaim_connection_error(gc, _("Internal Error")); |
2086 | 1144 od->killme = TRUE; |
1145 return 0; | |
1146 } | |
1147 | |
4649 | 1148 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1149 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_bos, 0); |
2086 | 1150 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); |
1151 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); | |
1152 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
2993 | 1153 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_RIGHTSINFO, gaim_parse_locaterights, 0); |
2086 | 1154 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); |
1155 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
1156 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
1157 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
1158 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
1159 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
3212 | 1160 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_CLIENTAUTORESP, gaim_parse_clientauto, 0); |
2086 | 1161 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); |
1162 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
1163 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
1164 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
1165 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
3595 | 1166 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MTN, gaim_parse_mtn, 0); |
7011 | 1167 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_userinfo, 0); |
2086 | 1168 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); |
1169 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
|
1170 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 1171 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
1172 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
1173 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
1174 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1175 aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); |
5844 | 1176 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
|
1177 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
|
1178 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
|
1179 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_POP, 0x0002, gaim_popup, 0); |
4759 | 1180 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS, gaim_icqalias, 0); |
4624 | 1181 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO, gaim_icqinfo, 0); |
4230 | 1182 #ifndef NOSSI |
4642 | 1183 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ERROR, gaim_ssi_parseerr, 0); |
2991 | 1184 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RIGHTSINFO, gaim_ssi_parserights, 0); |
1185 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_LIST, gaim_ssi_parselist, 0); | |
1186 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_NOLIST, gaim_ssi_parselist, 0); | |
4230 | 1187 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_SRVACK, gaim_ssi_parseack, 0); |
8227 | 1188 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADD, gaim_ssi_parseadd, 0); |
4230 | 1189 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTH, gaim_ssi_authgiven, 0); |
1190 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREQ, gaim_ssi_authrequest, 0); | |
1191 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_RECVAUTHREP, gaim_ssi_authreply, 0); | |
1192 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_SSI, AIM_CB_SSI_ADDED, gaim_ssi_gotadded, 0); | |
1193 #endif | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1194 |
7283 | 1195 od->conn = bosconn; |
2704 | 1196 for (i = 0; i < (int)strlen(info->bosip); i++) { |
1197 if (info->bosip[i] == ':') { | |
1198 port = atoi(&(info->bosip[i+1])); | |
2086 | 1199 break; |
1200 } | |
1201 } | |
2704 | 1202 host = g_strndup(info->bosip, i); |
2086 | 1203 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1204 rc = gaim_proxy_connect(gc->account, host, port, oscar_bos_connect, gc); |
2086 | 1205 g_free(host); |
4366 | 1206 if (rc < 0) { |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
1207 gaim_connection_error(gc, _("Could Not Connect")); |
2086 | 1208 od->killme = TRUE; |
1209 return 0; | |
1210 } | |
4293 | 1211 aim_sendcookie(sess, bosconn, info->cookielen, info->cookie); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1212 gaim_input_remove(gc->inpa); |
2704 | 1213 |
7283 | 1214 gaim_connection_update_progress(gc, _("Received authorization"), 3, OSCAR_CONNECT_STEPS); |
7282 | 1215 |
2086 | 1216 return 1; |
1217 } | |
1218 | |
7285 | 1219 /* XXX - Should use gaim_url_fetch for the below stuff */ |
2086 | 1220 struct pieceofcrap { |
5575 | 1221 GaimConnection *gc; |
2086 | 1222 unsigned long offset; |
1223 unsigned long len; | |
1224 char *modname; | |
1225 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1226 aim_conn_t *conn; |
2086 | 1227 unsigned int inpa; |
1228 }; | |
1229 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1230 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 1231 { |
1232 struct pieceofcrap *pos = data; | |
7283 | 1233 OscarData *od = pos->gc->proto_data; |
2086 | 1234 char in = '\0'; |
1235 int x = 0; | |
1236 unsigned char m[17]; | |
1237 | |
1238 while (read(pos->fd, &in, 1) == 1) { | |
1239 if (in == '\n') | |
1240 x++; | |
1241 else if (in != '\r') | |
1242 x = 0; | |
1243 if (x == 2) | |
1244 break; | |
1245 in = '\0'; | |
1246 } | |
1247 if (in != '\n') { | |
4056 | 1248 char buf[256]; |
1249 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
|
1250 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1251 gaim_notify_warning(pos->gc, NULL, |
7422 | 1252 _("Gaim was unable to get a valid AIM login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1253 buf); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1254 gaim_input_remove(pos->inpa); |
2086 | 1255 close(pos->fd); |
1256 g_free(pos); | |
1257 return; | |
1258 } | |
1259 read(pos->fd, m, 16); | |
1260 m[16] = '\0'; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1261 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Sending hash: "); |
2086 | 1262 for (x = 0; x < 16; x++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1263 gaim_debug(GAIM_DEBUG_MISC, NULL, "%02hhx ", (unsigned char)m[x]); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1264 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1265 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1266 gaim_input_remove(pos->inpa); |
2086 | 1267 close(pos->fd); |
1268 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
1269 g_free(pos); | |
1270 } | |
1271 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1272 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 1273 struct pieceofcrap *pos = data; |
5420 | 1274 gchar *buf; |
2086 | 1275 |
4366 | 1276 pos->fd = source; |
1277 | |
2086 | 1278 if (source < 0) { |
5420 | 1279 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
|
1280 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1281 gaim_notify_warning(pos->gc, NULL, |
7422 | 1282 _("Gaim was unable to get a valid AIM login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1283 buf); |
5420 | 1284 g_free(buf); |
2086 | 1285 if (pos->modname) |
1286 g_free(pos->modname); | |
1287 g_free(pos); | |
1288 return; | |
1289 } | |
1290 | |
5420 | 1291 buf = g_strdup_printf("GET " AIMHASHDATA "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", |
2086 | 1292 pos->offset, pos->len, pos->modname ? pos->modname : ""); |
1293 write(pos->fd, buf, strlen(buf)); | |
5420 | 1294 g_free(buf); |
2086 | 1295 if (pos->modname) |
1296 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1297 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 1298 return; |
1299 } | |
1300 | |
1301 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
1302 #define AIM_MAX_FILE_SIZE 98304 | |
1303 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1304 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1305 va_list ap; |
1306 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1307 fu32_t offset, len; |
2086 | 1308 char *modname; |
1309 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1310 va_start(ap, fr); |
4200 | 1311 offset = va_arg(ap, fu32_t); |
1312 len = va_arg(ap, fu32_t); | |
2086 | 1313 modname = va_arg(ap, char *); |
1314 va_end(ap); | |
1315 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1316 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 1317 "offset: %u, len: %u, file: %s\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1318 offset, len, (modname ? modname : "aim.exe")); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1319 |
2086 | 1320 if (len == 0) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1321 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
|
1322 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 1323 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1324 return 1; | |
1325 } | |
1326 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
1327 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
1328 char *buf; | |
1329 int i = 8; | |
1330 if (modname) | |
1331 i += strlen(modname); | |
1332 buf = g_malloc(i); | |
1333 i = 0; | |
1334 if (modname) { | |
1335 memcpy(buf, modname, strlen(modname)); | |
1336 i += strlen(modname); | |
1337 } | |
1338 buf[i++] = offset & 0xff; | |
1339 buf[i++] = (offset >> 8) & 0xff; | |
1340 buf[i++] = (offset >> 16) & 0xff; | |
1341 buf[i++] = (offset >> 24) & 0xff; | |
1342 buf[i++] = len & 0xff; | |
1343 buf[i++] = (len >> 8) & 0xff; | |
1344 buf[i++] = (len >> 16) & 0xff; | |
1345 buf[i++] = (len >> 24) & 0xff; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1346 gaim_debug(GAIM_DEBUG_MISC, "oscar", "len + offset is invalid, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1347 "hashing request\n"); |
2086 | 1348 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
1349 g_free(buf); | |
1350 return 1; | |
1351 } | |
1352 */ | |
1353 | |
1354 pos = g_new0(struct pieceofcrap, 1); | |
1355 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1356 pos->conn = fr->conn; |
2086 | 1357 |
1358 pos->offset = offset; | |
1359 pos->len = len; | |
1360 pos->modname = modname ? g_strdup(modname) : NULL; | |
1361 | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1362 if (gaim_proxy_connect(pos->gc->account, "gaim.sourceforge.net", 80, straight_to_hell, pos) != 0) { |
4056 | 1363 char buf[256]; |
2086 | 1364 if (pos->modname) |
1365 g_free(pos->modname); | |
1366 g_free(pos); | |
4056 | 1367 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
|
1368 "this is fixed. Check %s for updates."), GAIM_WEBSITE); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1369 gaim_notify_warning(pos->gc, NULL, |
7422 | 1370 _("Gaim was unable to get a valid login hash."), |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
1371 buf); |
2086 | 1372 } |
1373 | |
1374 return 1; | |
1375 } | |
1376 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1377 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1378 GaimConnection *gc = sess->aux_data; |
7283 | 1379 OscarData *od = gc->proto_data; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1380 GaimAccount *account = gaim_connection_get_account(gc); |
5575 | 1381 GaimAccount *ac = gaim_connection_get_account(gc); |
7282 | 1382 #if 0 |
1383 struct client_info_s info = {"gaim", 7, 3, 2003, "us", "en", 0x0004, 0x0000, 0x04b}; | |
1384 #endif | |
7011 | 1385 va_list ap; |
1386 char *key; | |
2086 | 1387 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1388 va_start(ap, fr); |
2086 | 1389 key = va_arg(ap, char *); |
1390 va_end(ap); | |
1391 | |
4617 | 1392 if (od->icq) { |
3458 | 1393 struct client_info_s info = CLIENTINFO_ICQ_KNOWNGOOD; |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1394 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1395 gaim_account_get_password(account), &info, key); |
3458 | 1396 } else { |
1397 struct client_info_s info = CLIENTINFO_AIM_KNOWNGOOD; | |
5591
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1398 aim_send_login(sess, fr->conn, gaim_account_get_username(ac), |
74a0e79ad627
[gaim-migrate @ 5995]
Christian Hammond <chipx86@chipx86.com>
parents:
5580
diff
changeset
|
1399 gaim_account_get_password(account), &info, key); |
3458 | 1400 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1401 |
7283 | 1402 gaim_connection_update_progress(gc, _("Password sent"), 2, OSCAR_CONNECT_STEPS); |
7282 | 1403 |
2086 | 1404 return 1; |
1405 } | |
1406 | |
2675 | 1407 static int conninitdone_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1408 GaimConnection *gc = sess->aux_data; |
2647 | 1409 struct chat_connection *chatcon; |
1410 static int id = 1; | |
1411 | |
6905 | 1412 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
|
1413 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
|
1414 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
|
1415 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
|
1416 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_conv_chat_incoming_msg, 0); |
2675 | 1417 |
2672 | 1418 aim_clientready(sess, fr->conn); |
2675 | 1419 |
2647 | 1420 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
1421 chatcon->id = id; | |
1422 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); | |
1423 | |
1424 return 1; | |
1425 } | |
1426 | |
2675 | 1427 static int conninitdone_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
1428 | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1429 aim_conn_addhandler(sess, fr->conn, 0x000d, 0x0001, gaim_parse_genericerr, 0); |
2647 | 1430 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
2675 | 1431 |
1432 aim_clientready(sess, fr->conn); | |
1433 | |
1434 aim_chatnav_reqrights(sess, fr->conn); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1435 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1436 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1437 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1438 |
3694 | 1439 static int conninitdone_email(aim_session_t *sess, aim_frame_t *fr, ...) { |
1440 | |
1441 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1442 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_EML, AIM_CB_EML_MAILSTATUS, gaim_email_parseupdate, 0); | |
1443 | |
7282 | 1444 aim_email_sendcookies(sess); |
1445 aim_email_activate(sess); | |
3694 | 1446 aim_clientready(sess, fr->conn); |
1447 | |
1448 return 1; | |
1449 } | |
1450 | |
4804 | 1451 static int conninitdone_icon(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1452 GaimConnection *gc = sess->aux_data; |
7283 | 1453 OscarData *od = gc->proto_data; |
4804 | 1454 |
1455 aim_conn_addhandler(sess, fr->conn, 0x0018, 0x0001, gaim_parse_genericerr, 0); | |
1456 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_ERROR, gaim_icon_error, 0); | |
1457 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ICO, AIM_CB_ICO_RESPONSE, gaim_icon_parseicon, 0); | |
1458 | |
1459 aim_clientready(sess, fr->conn); | |
1460 | |
4823 | 1461 od->iconconnecting = FALSE; |
1462 | |
4804 | 1463 if (od->icontimer) |
1464 g_source_remove(od->icontimer); | |
1465 od->icontimer = g_timeout_add(100, gaim_icon_timerfunc, gc); | |
1466 | |
1467 return 1; | |
1468 } | |
1469 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1470 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1471 GaimConnection *gc = data; |
7283 | 1472 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1473 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1474 aim_conn_t *tstconn; |
2086 | 1475 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1476 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1477 close(source); |
1478 return; | |
1479 } | |
1480 | |
4617 | 1481 od = gc->proto_data; |
1482 sess = od->sess; | |
2086 | 1483 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); |
4366 | 1484 tstconn->fd = source; |
2086 | 1485 |
1486 if (source < 0) { | |
1487 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1488 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1489 "unable to connect to chatnav server\n"); |
2086 | 1490 return; |
1491 } | |
1492 | |
1493 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1494 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
|
1495 gaim_debug(GAIM_DEBUG_INFO, "oscar", "chatnav: connected\n"); |
2086 | 1496 } |
1497 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1498 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1499 { |
5575 | 1500 GaimConnection *gc = data; |
7283 | 1501 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1502 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1503 aim_conn_t *tstconn; |
2086 | 1504 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1505 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1506 close(source); |
1507 return; | |
1508 } | |
1509 | |
4617 | 1510 od = gc->proto_data; |
1511 sess = od->sess; | |
2086 | 1512 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); |
4366 | 1513 tstconn->fd = source; |
2086 | 1514 |
1515 if (source < 0) { | |
1516 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1517 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1518 "unable to connect to authorizer\n"); |
2086 | 1519 return; |
1520 } | |
1521 | |
1522 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1523 od->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
6905 | 1524 gaim_debug(GAIM_DEBUG_INFO, "oscar", "admin: connected\n"); |
2086 | 1525 } |
1526 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1527 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 1528 { |
1529 struct chat_connection *ccon = data; | |
5575 | 1530 GaimConnection *gc = ccon->gc; |
7283 | 1531 OscarData *od; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1532 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1533 aim_conn_t *tstconn; |
2086 | 1534 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1535 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1536 close(source); |
1537 g_free(ccon->show); | |
1538 g_free(ccon->name); | |
1539 g_free(ccon); | |
1540 return; | |
1541 } | |
1542 | |
4617 | 1543 od = gc->proto_data; |
1544 sess = od->sess; | |
2086 | 1545 tstconn = ccon->conn; |
4366 | 1546 tstconn->fd = source; |
2086 | 1547 |
1548 if (source < 0) { | |
1549 aim_conn_kill(sess, &tstconn); | |
1550 g_free(ccon->show); | |
1551 g_free(ccon->name); | |
1552 g_free(ccon); | |
1553 return; | |
1554 } | |
1555 | |
1556 aim_conn_completeconnect(sess, ccon->conn); | |
4617 | 1557 ccon->inpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, oscar_callback, tstconn); |
1558 od->oscar_chats = g_slist_append(od->oscar_chats, ccon); | |
2086 | 1559 } |
1560 | |
3694 | 1561 static void oscar_email_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1562 GaimConnection *gc = data; |
7283 | 1563 OscarData *od; |
3694 | 1564 aim_session_t *sess; |
1565 aim_conn_t *tstconn; | |
1566 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1567 if (!g_list_find(gaim_connections_get_all(), gc)) { |
3694 | 1568 close(source); |
1569 return; | |
1570 } | |
1571 | |
4617 | 1572 od = gc->proto_data; |
1573 sess = od->sess; | |
3694 | 1574 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_EMAIL); |
4366 | 1575 tstconn->fd = source; |
3694 | 1576 |
1577 if (source < 0) { | |
1578 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1579 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1580 "unable to connect to email server\n"); |
3694 | 1581 return; |
1582 } | |
1583 | |
1584 aim_conn_completeconnect(sess, tstconn); | |
4617 | 1585 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
|
1586 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1587 "email: connected\n"); |
3694 | 1588 } |
1589 | |
4804 | 1590 static void oscar_icon_connect(gpointer data, gint source, GaimInputCondition cond) { |
5575 | 1591 GaimConnection *gc = data; |
7283 | 1592 OscarData *od; |
4804 | 1593 aim_session_t *sess; |
1594 aim_conn_t *tstconn; | |
1595 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1596 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4804 | 1597 close(source); |
1598 return; | |
1599 } | |
1600 | |
1601 od = gc->proto_data; | |
1602 sess = od->sess; | |
1603 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_ICON); | |
1604 tstconn->fd = source; | |
1605 | |
1606 if (source < 0) { | |
1607 aim_conn_kill(sess, &tstconn); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1608 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1609 "unable to connect to icon server\n"); |
4804 | 1610 return; |
1611 } | |
1612 | |
1613 aim_conn_completeconnect(sess, tstconn); | |
1614 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
|
1615 gaim_debug(GAIM_DEBUG_INFO, "oscar", "icon: connected\n"); |
4804 | 1616 } |
1617 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1618 /* 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
|
1619 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1620 GaimConnection *gc = sess->aux_data; |
1621 GaimAccount *account = gaim_connection_get_account(gc); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1622 aim_conn_t *tstconn; |
4452 | 1623 int i; |
2086 | 1624 char *host; |
1625 int port; | |
4821 | 1626 va_list ap; |
1627 struct aim_redirect_data *redir; | |
2086 | 1628 |
5575 | 1629 port = gaim_account_get_int(account, "port", FAIM_LOGIN_PORT); |
2086 | 1630 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1631 va_start(ap, fr); |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1632 redir = va_arg(ap, struct aim_redirect_data *); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1633 va_end(ap); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1634 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1635 for (i = 0; i < (int)strlen(redir->ip); i++) { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1636 if (redir->ip[i] == ':') { |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1637 port = atoi(&(redir->ip[i+1])); |
2086 | 1638 break; |
1639 } | |
1640 } | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1641 host = g_strndup(redir->ip, i); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1642 |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1643 switch(redir->group) { |
2086 | 1644 case 0x7: /* Authorizer */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1645 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1646 "Reconnecting with authorizor...\n"); |
2086 | 1647 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); |
1648 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1649 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1650 "unable to reconnect with authorizer\n"); |
2086 | 1651 g_free(host); |
1652 return 1; | |
1653 } | |
4649 | 1654 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1655 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_admin, 0); |
2086 | 1656 |
1657 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1658 if (gaim_proxy_connect(account, host, port, oscar_auth_connect, gc) != 0) { |
2086 | 1659 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1660 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1661 "unable to reconnect with authorizer\n"); |
2086 | 1662 g_free(host); |
1663 return 1; | |
1664 } | |
4293 | 1665 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1666 break; |
1667 | |
2086 | 1668 case 0xd: /* ChatNav */ |
1669 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1670 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1671 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1672 "unable to connect to chatnav server\n"); |
2086 | 1673 g_free(host); |
1674 return 1; | |
1675 } | |
4649 | 1676 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1677 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chatnav, 0); |
2086 | 1678 |
1679 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1680 if (gaim_proxy_connect(account, host, port, oscar_chatnav_connect, gc) != 0) { |
2086 | 1681 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1682 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1683 "unable to connect to chatnav server\n"); |
2086 | 1684 g_free(host); |
1685 return 1; | |
1686 } | |
4293 | 1687 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
4194 | 1688 break; |
1689 | |
1690 case 0xe: { /* Chat */ | |
2086 | 1691 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1692 |
2086 | 1693 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1694 if (tstconn == NULL) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1695 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1696 "unable to connect to chat server\n"); |
2086 | 1697 g_free(host); |
1698 return 1; | |
1699 } | |
1700 | |
4649 | 1701 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
2675 | 1702 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_chat, 0); |
1703 | |
2086 | 1704 ccon = g_new0(struct chat_connection, 1); |
1705 ccon->conn = tstconn; | |
1706 ccon->gc = gc; | |
1707 ccon->fd = -1; | |
2821
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1708 ccon->name = g_strdup(redir->chat.room); |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1709 ccon->exchange = redir->chat.exchange; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1710 ccon->instance = redir->chat.instance; |
9467e4ee81be
[gaim-migrate @ 2834]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1711 ccon->show = extract_name(redir->chat.room); |
4634 | 1712 |
2086 | 1713 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1714 if (gaim_proxy_connect(account, host, port, oscar_chat_connect, ccon) != 0) { |
2086 | 1715 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1716 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1717 "unable to connect to chat server\n"); |
2086 | 1718 g_free(host); |
1719 g_free(ccon->show); | |
1720 g_free(ccon->name); | |
1721 g_free(ccon); | |
1722 return 1; | |
1723 } | |
4293 | 1724 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1725 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1726 "Connected to chat room %s exchange %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1727 ccon->name, ccon->exchange); |
4194 | 1728 } break; |
3694 | 1729 |
4804 | 1730 case 0x0010: { /* icon */ |
1731 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_ICON, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1732 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1733 "unable to connect to icon server\n"); |
4804 | 1734 g_free(host); |
1735 return 1; | |
1736 } | |
1737 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); | |
1738 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_icon, 0); | |
1739 | |
1740 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1741 if (gaim_proxy_connect(account, host, port, oscar_icon_connect, gc) != 0) { |
4804 | 1742 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1743 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1744 "unable to connect to icon server\n"); |
4804 | 1745 g_free(host); |
1746 return 1; | |
1747 } | |
1748 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); | |
1749 } break; | |
1750 | |
3694 | 1751 case 0x0018: { /* email */ |
1752 if (!(tstconn = aim_newconn(sess, AIM_CONN_TYPE_EMAIL, NULL))) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1753 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1754 "unable to connect to email server\n"); |
3694 | 1755 g_free(host); |
1756 return 1; | |
1757 } | |
4649 | 1758 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR, gaim_connerr, 0); |
3694 | 1759 aim_conn_addhandler(sess, tstconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE, conninitdone_email, 0); |
1760 | |
1761 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1762 if (gaim_proxy_connect(account, host, port, oscar_email_connect, gc) != 0) { |
3694 | 1763 aim_conn_kill(sess, &tstconn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1764 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1765 "unable to connect to email server\n"); |
3694 | 1766 g_free(host); |
1767 return 1; | |
1768 } | |
4293 | 1769 aim_sendcookie(sess, tstconn, redir->cookielen, redir->cookie); |
3694 | 1770 } break; |
1771 | |
2086 | 1772 default: /* huh? */ |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1773 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1774 "got redirect for unknown service 0x%04hx\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1775 redir->group); |
2086 | 1776 break; |
1777 } | |
1778 | |
1779 g_free(host); | |
1780 return 1; | |
1781 } | |
1782 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1783 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1784 GaimConnection *gc = sess->aux_data; |
7283 | 1785 OscarData *od = gc->proto_data; |
4738 | 1786 struct buddyinfo *bi; |
2993 | 1787 time_t time_idle = 0, signon = 0; |
1788 int type = 0; | |
1789 int caps = 0; | |
2086 | 1790 va_list ap; |
4738 | 1791 aim_userinfo_t *info; |
4194 | 1792 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1793 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1794 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1795 va_end(ap); |
1796 | |
2993 | 1797 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES) |
1798 caps = info->capabilities; | |
3267 | 1799 if (info->flags & AIM_FLAG_ACTIVEBUDDY) |
1800 type |= UC_AB; | |
1801 | |
4766 | 1802 if (info->present & AIM_USERINFO_PRESENT_FLAGS) { |
1803 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1804 type |= UC_UNCONFIRMED; | |
1805 if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1806 type |= UC_ADMIN; | |
1807 if (info->flags & AIM_FLAG_AOL) | |
1808 type |= UC_AOL; | |
1809 if (info->flags & AIM_FLAG_FREE) | |
1810 type |= UC_NORMAL; | |
1811 if (info->flags & AIM_FLAG_AWAY) | |
1812 type |= UC_UNAVAILABLE; | |
1813 if (info->flags & AIM_FLAG_WIRELESS) | |
1814 type |= UC_WIRELESS; | |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
1815 } |
2993 | 1816 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS) { |
3595 | 1817 type = (info->icqinfo.status << 16); |
3013 | 1818 if (!(info->icqinfo.status & AIM_ICQ_STATE_CHAT) && |
1819 (info->icqinfo.status != AIM_ICQ_STATE_NORMAL)) { | |
2993 | 1820 type |= UC_UNAVAILABLE; |
3013 | 1821 } |
2993 | 1822 } |
1823 | |
7141 | 1824 if (caps & AIM_CAPS_ICQ_DIRECT) |
1825 caps ^= AIM_CAPS_ICQ_DIRECT; | |
2993 | 1826 |
1827 if (info->present & AIM_USERINFO_PRESENT_IDLE) { | |
2086 | 1828 time(&time_idle); |
1829 time_idle -= info->idletime*60; | |
2993 | 1830 } |
1831 | |
5836 | 1832 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
1833 signon = info->onlinesince; | |
1834 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) | |
2993 | 1835 signon = time(NULL) - info->sessionlen; |
2086 | 1836 |
5575 | 1837 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), info->sn)) |
1838 gaim_connection_set_display_name(gc, info->sn); | |
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
1839 |
7261 | 1840 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
4738 | 1841 if (!bi) { |
1842 bi = g_new0(struct buddyinfo, 1); | |
7261 | 1843 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, info->sn)), bi); |
4738 | 1844 } |
4739 | 1845 bi->typingnot = FALSE; |
1846 bi->ico_informed = FALSE; | |
6857 | 1847 bi->ipaddr = info->icqinfo.ipaddr; |
1848 | |
1849 /* Available message stuff */ | |
6292 | 1850 free(bi->availmsg); |
7011 | 1851 if (info->avail != NULL) |
8225 | 1852 bi->availmsg = oscar_encoding_to_utf8(info->avail_encoding, info->avail, info->avail_len); |
5837 | 1853 else |
6292 | 1854 bi->availmsg = NULL; |
4732 | 1855 |
4804 | 1856 /* Server stored icon stuff */ |
4853 | 1857 if (info->iconcsumlen) { |
7125 | 1858 const char *filename = NULL, *saved_b16 = NULL; |
1859 char *b16 = NULL; | |
7093 | 1860 GaimBuddy *b = NULL; |
4853 | 1861 |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
1862 b16 = gaim_base16_encode(info->iconcsum, info->iconcsumlen); |
4853 | 1863 b = gaim_find_buddy(gc->account, info->sn); |
7093 | 1864 /* |
1865 * If for some reason the checksum is valid, but cached file is not.. | |
1866 * we want to know. | |
1867 */ | |
7693 | 1868 filename = gaim_blist_node_get_string((GaimBlistNode*)b, "buddy_icon"); |
7093 | 1869 if (filename != NULL) { |
1870 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
7693 | 1871 saved_b16 = gaim_blist_node_get_string((GaimBlistNode*)b, |
1872 "icon_checksum"); | |
7093 | 1873 } else |
1874 saved_b16 = NULL; | |
7054
7c04a0775918
[gaim-migrate @ 7617]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7045
diff
changeset
|
1875 |
4853 | 1876 if (!b16 || !saved_b16 || strcmp(b16, saved_b16)) { |
1877 GSList *cur = od->requesticon; | |
1878 while (cur && aim_sncmp((char *)cur->data, info->sn)) | |
1879 cur = cur->next; | |
1880 if (!cur) { | |
7475 | 1881 od->requesticon = g_slist_append(od->requesticon, g_strdup(gaim_normalize(gc->account, info->sn))); |
4853 | 1882 if (od->icontimer) |
1883 g_source_remove(od->icontimer); | |
1884 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
1885 } | |
1886 } | |
6053 | 1887 g_free(b16); |
4853 | 1888 } |
1889 | |
5628 | 1890 serv_got_update(gc, info->sn, 1, (info->warnlevel/10.0) + 0.5, signon, time_idle, type); |
2086 | 1891 |
1892 return 1; | |
1893 } | |
1894 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1895 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1896 GaimConnection *gc = sess->aux_data; |
7283 | 1897 OscarData *od = gc->proto_data; |
2086 | 1898 va_list ap; |
4739 | 1899 aim_userinfo_t *info; |
2086 | 1900 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1901 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
1902 info = va_arg(ap, aim_userinfo_t *); |
2086 | 1903 va_end(ap); |
1904 | |
4732 | 1905 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0); |
2086 | 1906 |
7261 | 1907 g_hash_table_remove(od->buddyinfo, gaim_normalize(gc->account, info->sn)); |
5837 | 1908 |
2086 | 1909 return 1; |
1910 } | |
1911 | |
3730 | 1912 static void cancel_direct_im(struct ask_direct *d) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1913 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Freeing DirectIM prompts.\n"); |
2086 | 1914 |
1915 g_free(d->sn); | |
1916 g_free(d); | |
1917 } | |
1918 | |
4617 | 1919 static void oscar_odc_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1920 struct direct_im *dim = data; |
5575 | 1921 GaimConnection *gc = dim->gc; |
7283 | 1922 OscarData *od = gc->proto_data; |
5679 | 1923 GaimConversation *cnv; |
2086 | 1924 char buf[256]; |
3008 | 1925 struct sockaddr name; |
1926 socklen_t name_len = 1; | |
1927 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
1928 if (!g_list_find(gaim_connections_get_all(), gc)) { |
2086 | 1929 g_free(dim); |
1930 return; | |
1931 } | |
1932 | |
1933 if (source < 0) { | |
1934 g_free(dim); | |
1935 return; | |
1936 } | |
1937 | |
4366 | 1938 dim->conn->fd = source; |
2086 | 1939 aim_conn_completeconnect(od->sess, dim->conn); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
1940 cnv = gaim_conversation_new(GAIM_CONV_IM, dim->gc->account, dim->name); |
3008 | 1941 |
1942 /* This is the best way to see if we're connected or not */ | |
1943 if (getpeername(source, &name, &name_len) == 0) { | |
1944 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); | |
1945 dim->connected = TRUE; | |
6982 | 1946 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
3008 | 1947 } |
2086 | 1948 od->direct_ims = g_slist_append(od->direct_ims, dim); |
3008 | 1949 |
4617 | 1950 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
2086 | 1951 } |
1952 | |
4617 | 1953 /* BBB */ |
3952 | 1954 /* |
4617 | 1955 * This is called after a remote AIM user has connected to us. We |
1956 * want to do some voodoo with the socket file descriptors, add a | |
1957 * callback or two, and then send the AIM_CB_OFT_PROMPT. | |
3952 | 1958 */ |
4656 | 1959 static int oscar_sendfile_estblsh(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 1960 GaimConnection *gc = sess->aux_data; |
7283 | 1961 OscarData *od = (OscarData *)gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
1962 GaimXfer *xfer; |
5146 | 1963 struct aim_oft_info *oft_info; |
3630 | 1964 va_list ap; |
1965 aim_conn_t *conn, *listenerconn; | |
4656 | 1966 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1967 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1968 "AAA - in oscar_sendfile_estblsh\n"); |
3630 | 1969 va_start(ap, fr); |
1970 conn = va_arg(ap, aim_conn_t *); | |
1971 listenerconn = va_arg(ap, aim_conn_t *); | |
1972 va_end(ap); | |
1973 | |
4617 | 1974 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, listenerconn))) |
1975 return 1; | |
1976 | |
5146 | 1977 if (!(oft_info = xfer->data)) |
4617 | 1978 return 1; |
1979 | |
3630 | 1980 /* Stop watching listener conn; watch transfer conn instead */ |
4617 | 1981 gaim_input_remove(xfer->watcher); |
3630 | 1982 aim_conn_kill(sess, &listenerconn); |
1983 | |
5146 | 1984 oft_info->conn = conn; |
1985 xfer->fd = oft_info->conn->fd; | |
1986 | |
1987 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_ACK, oscar_sendfile_ack, 0); | |
1988 aim_conn_addhandler(sess, oft_info->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DONE, oscar_sendfile_done, 0); | |
1989 xfer->watcher = gaim_input_add(oft_info->conn->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 1990 |
1991 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 1992 aim_oft_sendheader(sess, AIM_CB_OFT_PROMPT, oft_info); |
3630 | 1993 |
1994 return 0; | |
1995 } | |
1996 | |
3952 | 1997 /* |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
1998 * This is the gaim callback passed to gaim_proxy_connect when connecting to another AIM |
4617 | 1999 * user in order to transfer a file. |
3952 | 2000 */ |
4617 | 2001 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
|
2002 GaimXfer *xfer; |
5146 | 2003 struct aim_oft_info *oft_info; |
4656 | 2004 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2005 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2006 "AAA - in oscar_sendfile_connected\n"); |
4617 | 2007 if (!(xfer = data)) |
2008 return; | |
5146 | 2009 if (!(oft_info = xfer->data)) |
3630 | 2010 return; |
4617 | 2011 if (source < 0) |
2012 return; | |
2013 | |
2014 xfer->fd = source; | |
5146 | 2015 oft_info->conn->fd = source; |
2016 | |
2017 aim_conn_completeconnect(oft_info->sess, oft_info->conn); | |
2018 xfer->watcher = gaim_input_add(xfer->fd, GAIM_INPUT_READ, oscar_callback, oft_info->conn); | |
4617 | 2019 |
2020 /* Inform the other user that we are connected and ready to transfer */ | |
5146 | 2021 aim_im_sendch2_sendfile_accept(oft_info->sess, oft_info); |
4617 | 2022 |
2023 return; | |
3630 | 2024 } |
2025 | |
3952 | 2026 /* |
4617 | 2027 * This is called when a buddy sends us some file info. This happens when they |
2028 * are sending a file to you, and you have just established a connection to them. | |
4650 | 2029 * You should send them the exact same info except use the real cookie. We also |
4617 | 2030 * get like totally ready to like, receive the file, kay? |
3952 | 2031 */ |
4617 | 2032 static int oscar_sendfile_prompt(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2033 GaimConnection *gc = sess->aux_data; |
7283 | 2034 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2035 GaimXfer *xfer; |
5146 | 2036 struct aim_oft_info *oft_info; |
4617 | 2037 va_list ap; |
2038 aim_conn_t *conn; | |
2039 fu8_t *cookie; | |
2040 struct aim_fileheader_t *fh; | |
4656 | 2041 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2042 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2043 "AAA - in oscar_sendfile_prompt\n"); |
4617 | 2044 va_start(ap, fr); |
2045 conn = va_arg(ap, aim_conn_t *); | |
2046 cookie = va_arg(ap, fu8_t *); | |
2047 fh = va_arg(ap, struct aim_fileheader_t *); | |
2048 va_end(ap); | |
2049 | |
2050 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2051 return 1; | |
2052 | |
5146 | 2053 if (!(oft_info = xfer->data)) |
4617 | 2054 return 1; |
2055 | |
2056 /* We want to stop listening with a normal thingy */ | |
2057 gaim_input_remove(xfer->watcher); | |
2058 xfer->watcher = 0; | |
2059 | |
5146 | 2060 /* They sent us some information about the file they're sending */ |
2061 memcpy(&oft_info->fh, fh, sizeof(*fh)); | |
2062 | |
2063 /* Fill in the cookie */ | |
2064 memcpy(&oft_info->fh.bcookie, oft_info->cookie, 8); | |
2065 | |
4617 | 2066 /* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */ |
5146 | 2067 aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info); |
4617 | 2068 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2069 | |
2070 return 0; | |
3630 | 2071 } |
2072 | |
3952 | 2073 /* |
4657 | 2074 * We are sending a file to someone else. They have just acknowledged our |
4617 | 2075 * prompt, so we want to start sending data like there's no tomorrow. |
3952 | 2076 */ |
4617 | 2077 static int oscar_sendfile_ack(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 2078 GaimConnection *gc = sess->aux_data; |
7283 | 2079 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2080 GaimXfer *xfer; |
4617 | 2081 va_list ap; |
2082 aim_conn_t *conn; | |
2083 fu8_t *cookie; | |
2084 struct aim_fileheader_t *fh; | |
4656 | 2085 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2086 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_ack\n"); |
4617 | 2087 va_start(ap, fr); |
2088 conn = va_arg(ap, aim_conn_t *); | |
2089 cookie = va_arg(ap, fu8_t *); | |
2090 fh = va_arg(ap, struct aim_fileheader_t *); | |
2091 va_end(ap); | |
2092 | |
2093 if (!(xfer = oscar_find_xfer_by_cookie(od->file_transfers, cookie))) | |
2094 return 1; | |
2095 | |
4656 | 2096 /* We want to stop listening with a normal thingy */ |
2097 gaim_input_remove(xfer->watcher); | |
2098 xfer->watcher = 0; | |
2099 | |
4617 | 2100 gaim_xfer_start(xfer, xfer->fd, NULL, 0); |
2101 | |
2102 return 0; | |
3630 | 2103 } |
4617 | 2104 |
2105 /* | |
2106 * We just sent a file to someone. They said they got it and everything, | |
2107 * so we can close our direct connection and what not. | |
2108 */ | |
2109 static int oscar_sendfile_done(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 2110 GaimConnection *gc = sess->aux_data; |
7283 | 2111 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2112 GaimXfer *xfer; |
4617 | 2113 va_list ap; |
2114 aim_conn_t *conn; | |
2115 fu8_t *cookie; | |
2116 struct aim_fileheader_t *fh; | |
4656 | 2117 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2118 gaim_debug(GAIM_DEBUG_INFO, "oscar", "AAA - in oscar_sendfile_done\n"); |
4617 | 2119 va_start(ap, fr); |
2120 conn = va_arg(ap, aim_conn_t *); | |
2121 cookie = va_arg(ap, fu8_t *); | |
2122 fh = va_arg(ap, struct aim_fileheader_t *); | |
2123 va_end(ap); | |
2124 | |
2125 if (!(xfer = oscar_find_xfer_by_conn(od->file_transfers, conn))) | |
2126 return 1; | |
2127 | |
4656 | 2128 xfer->fd = conn->fd; |
4617 | 2129 gaim_xfer_end(xfer); |
2130 | |
2131 return 0; | |
2132 } | |
3630 | 2133 |
4244 | 2134 static void accept_direct_im(struct ask_direct *d) { |
5575 | 2135 GaimConnection *gc = d->gc; |
7283 | 2136 OscarData *od; |
2086 | 2137 struct direct_im *dim; |
2945 | 2138 char *host; int port = 4443; |
4366 | 2139 int i, rc; |
2086 | 2140 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2141 if (!g_list_find(gaim_connections_get_all(), gc)) { |
4244 | 2142 cancel_direct_im(d); |
2143 return; | |
2144 } | |
2145 | |
7283 | 2146 od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2147 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Accepted DirectIM.\n"); |
2086 | 2148 |
2149 dim = find_direct_im(od, d->sn); | |
2150 if (dim) { | |
3730 | 2151 cancel_direct_im(d); /* 40 */ |
4244 | 2152 return; |
2086 | 2153 } |
2154 dim = g_new0(struct direct_im, 1); | |
2155 dim->gc = d->gc; | |
2156 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
2157 | |
4617 | 2158 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
|
2159 if (!dim->conn) { |
2086 | 2160 g_free(dim); |
3730 | 2161 cancel_direct_im(d); |
4244 | 2162 return; |
2086 | 2163 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2164 |
2086 | 2165 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
4617 | 2166 gaim_odc_incoming, 0); |
2086 | 2167 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, |
4617 | 2168 gaim_odc_typing, 0); |
3033 | 2169 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, |
6982 | 2170 gaim_odc_update_ui, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2171 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2172 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2173 port = atoi(&(d->ip[i+1])); |
2086 | 2174 break; |
2175 } | |
2176 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2177 host = g_strndup(d->ip, i); |
2086 | 2178 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5679
diff
changeset
|
2179 rc = gaim_proxy_connect(gc->account, host, port, oscar_odc_callback, dim); |
2086 | 2180 g_free(host); |
4366 | 2181 if (rc < 0) { |
2086 | 2182 aim_conn_kill(od->sess, &dim->conn); |
2183 g_free(dim); | |
3730 | 2184 cancel_direct_im(d); |
4244 | 2185 return; |
2086 | 2186 } |
2187 | |
3730 | 2188 cancel_direct_im(d); |
2086 | 2189 |
4244 | 2190 return; |
2086 | 2191 } |
2192 | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2193 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch1_args *args) { |
5575 | 2194 GaimConnection *gc = sess->aux_data; |
7283 | 2195 OscarData *od = gc->proto_data; |
7475 | 2196 gchar *tmp; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2197 GaimConvImFlags flags = 0; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
2198 gsize convlen; |
3659 | 2199 GError *err = NULL; |
4738 | 2200 struct buddyinfo *bi; |
5575 | 2201 const char *iconfile; |
4738 | 2202 |
7261 | 2203 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, userinfo->sn)); |
4738 | 2204 if (!bi) { |
2205 bi = g_new0(struct buddyinfo, 1); | |
7261 | 2206 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, userinfo->sn)), bi); |
4738 | 2207 } |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2208 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2209 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
2210 flags |= GAIM_CONV_IM_AUTO_RESP; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2211 |
4738 | 2212 if (args->icbmflags & AIM_IMFLAGS_TYPINGNOT) |
2213 bi->typingnot = TRUE; | |
2214 else | |
2215 bi->typingnot = FALSE; | |
2216 | |
4380 | 2217 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
|
2218 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2219 "%s has an icon\n", userinfo->sn); |
4738 | 2220 if ((args->iconlen != bi->ico_len) || (args->iconsum != bi->ico_csum) || (args->iconstamp != bi->ico_time)) { |
2221 bi->ico_need = TRUE; | |
2222 bi->ico_len = args->iconlen; | |
2223 bi->ico_csum = args->iconsum; | |
2224 bi->ico_time = args->iconstamp; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2225 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2226 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2227 |
5575 | 2228 if ((iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc))) && |
7406 | 2229 (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
|
2230 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2231 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2232 |
5575 | 2233 if (!stat(iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2234 char *buf = g_malloc(st.st_size); |
5575 | 2235 file = fopen(iconfile, "rb"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2236 if (file) { |
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
2237 int len = fread(buf, 1, st.st_size, file); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2238 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2239 "Sending buddy icon to %s (%d bytes, " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2240 "%lu reported)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2241 userinfo->sn, len, st.st_size); |
4617 | 2242 aim_im_sendch2_icon(sess, userinfo->sn, buf, st.st_size, |
2243 st.st_mtime, aimutil_iconsum(buf, st.st_size)); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2244 fclose(file); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2245 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2246 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2247 "Can't open buddy icon file!\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2248 g_free(buf); |
2336
c6c5eaf69188
[gaim-migrate @ 2349]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2315
diff
changeset
|
2249 } else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2250 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2251 "Can't stat buddy icon file!\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2252 } |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2253 |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2254 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2255 "Character set is %hu %hu\n", args->charset, args->charsubset); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2256 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
3722 | 2257 /* This message is marked as UNICODE, so we have to |
2258 * convert it to utf-8 before handing it to the gaim core. | |
2259 * This conversion should *never* fail, if it does it | |
2260 * means that either the incoming ICBM is corrupted or | |
4662 | 2261 * there is something we don't understand about it. |
2262 * For the record, AIM Unicode is big-endian UCS-2 */ | |
2263 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2264 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Received UNICODE IM\n"); |
4121 | 2265 |
2266 if (!args->msg || !args->msglen) | |
2267 return 1; | |
4641 | 2268 |
3659 | 2269 tmp = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE", NULL, &convlen, &err); |
2270 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2271 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2272 "Unicode IM conversion: %s\n", err->message); |
7475 | 2273 tmp = g_strdup(_("(There was an error receiving this message)")); |
4800 | 2274 g_error_free(err); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2275 } |
3722 | 2276 } else { |
3850 | 2277 /* This will get executed for both AIM_IMFLAGS_ISO_8859_1 and |
3722 | 2278 * unflagged messages, which are ASCII. That's OK because |
2279 * ASCII is a strict subset of ISO-8859-1; this should | |
2280 * help with compatibility with old, broken versions of | |
2281 * gaim (everything before 0.60) and other broken clients | |
2282 * that will happily send ISO-8859-1 without marking it as | |
2283 * such */ | |
4662 | 2284 if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2285 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2286 "Received ISO-8859-1 IM\n"); |
4121 | 2287 |
2288 if (!args->msg || !args->msglen) | |
2289 return 1; | |
2290 | |
3659 | 2291 tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err); |
2292 if (err) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2293 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2294 "ISO-8859-1 IM conversion: %s\n", err->message); |
7475 | 2295 tmp = g_strdup(_("(There was an error receiving this message)")); |
4800 | 2296 g_error_free(err); |
3659 | 2297 } |
3642 | 2298 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2299 |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2300 /* gaim_str_strip_cr(tmp); */ |
6982 | 2301 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2302 g_free(tmp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2303 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2304 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2305 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2306 |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2307 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args) { |
5575 | 2308 GaimConnection *gc = sess->aux_data; |
7283 | 2309 OscarData *od = gc->proto_data; |
5575 | 2310 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
|
2311 |
4121 | 2312 if (!args) |
2313 return 0; | |
4194 | 2314 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2315 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2316 "rendezvous with %s, status is %hu\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2317 userinfo->sn, args->status); |
2869 | 2318 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2319 if (args->reqclass & AIM_CAPS_CHAT) { |
4121 | 2320 char *name; |
5234 | 2321 GHashTable *components; |
2322 | |
4121 | 2323 if (!args->info.chat.roominfo.name || !args->info.chat.roominfo.exchange || !args->msg) |
2324 return 1; | |
5234 | 2325 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, |
2326 g_free); | |
4121 | 2327 name = extract_name(args->info.chat.roominfo.name); |
5234 | 2328 g_hash_table_replace(components, g_strdup("room"), g_strdup(name ? name : args->info.chat.roominfo.name)); |
2329 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
|
2330 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2331 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2332 userinfo->sn, |
6059 | 2333 args->msg, |
5234 | 2334 components); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2335 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2336 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2337 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
4617 | 2338 /* BBB */ |
2339 if (args->status == AIM_RENDEZVOUS_PROPOSE) { | |
2340 /* Someone wants to send a file (or files) to us */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2341 GaimXfer *xfer; |
5146 | 2342 struct aim_oft_info *oft_info; |
2343 | |
2344 if (!args->cookie || !args->port || !args->verifiedip || | |
2345 !args->info.sendfile.filename || !args->info.sendfile.totsize || | |
4656 | 2346 !args->info.sendfile.totfiles || !args->reqclass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2347 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2348 "%s tried to send you a file with incomplete " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2349 "information.\n", userinfo->sn); |
5146 | 2350 if (args->proxyip) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2351 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2352 "IP for a proxy server was given. Gaim " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2353 "does not support this yet.\n"); |
4617 | 2354 return 1; |
4656 | 2355 } |
4617 | 2356 |
2357 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) { | |
2358 /* last char of the ft req is a star, they are sending us a | |
2359 * directory -- remove the star and trailing slash so we dont save | |
2360 * directories that look like 'dirname\*' -- arl */ | |
2361 char *tmp = strrchr(args->info.sendfile.filename, '\\'); | |
2362 if (tmp && (tmp[1] == '*')) { | |
2363 tmp[0] = '\0'; | |
2364 } | |
2365 } | |
2366 | |
2367 /* Build the file transfer handle */ | |
2368 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, userinfo->sn); | |
5163 | 2369 xfer->remote_ip = g_strdup(args->verifiedip); |
5146 | 2370 xfer->remote_port = args->port; |
4617 | 2371 gaim_xfer_set_filename(xfer, args->info.sendfile.filename); |
2372 gaim_xfer_set_size(xfer, args->info.sendfile.totsize); | |
5146 | 2373 |
2374 /* Create the oscar-specific data */ | |
5163 | 2375 oft_info = aim_oft_createinfo(od->sess, args->cookie, userinfo->sn, args->clientip, xfer->remote_port, 0, 0, NULL); |
4898 | 2376 if (args->proxyip) |
5146 | 2377 oft_info->proxyip = g_strdup(args->proxyip); |
4898 | 2378 if (args->verifiedip) |
5146 | 2379 oft_info->verifiedip = g_strdup(args->verifiedip); |
2380 xfer->data = oft_info; | |
4617 | 2381 |
2382 /* Setup our I/O op functions */ | |
2383 gaim_xfer_set_init_fnc(xfer, oscar_xfer_init); | |
2384 gaim_xfer_set_start_fnc(xfer, oscar_xfer_start); | |
2385 gaim_xfer_set_end_fnc(xfer, oscar_xfer_end); | |
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2386 gaim_xfer_set_cancel_send_fnc(xfer, oscar_xfer_cancel_send); |
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4666
diff
changeset
|
2387 gaim_xfer_set_cancel_recv_fnc(xfer, oscar_xfer_cancel_recv); |
4617 | 2388 gaim_xfer_set_ack_fnc(xfer, oscar_xfer_ack); |
2389 | |
2390 /* | |
2391 * XXX - Should do something with args->msg, args->encoding, and args->language | |
2392 * probably make it apply to all ch2 messages. | |
3752 | 2393 */ |
4617 | 2394 |
2395 /* Keep track of this transfer for later */ | |
2396 od->file_transfers = g_slist_append(od->file_transfers, xfer); | |
2397 | |
2398 /* Now perform the request */ | |
2399 gaim_xfer_request(xfer); | |
2400 } else if (args->status == AIM_RENDEZVOUS_CANCEL) { | |
2401 /* The other user wants to cancel a file transfer */ | |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2402 GaimXfer *xfer; |
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 "AAA - File transfer canceled by remote user\n"); |
4617 | 2405 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
|
2406 gaim_xfer_cancel_remote(xfer); |
4617 | 2407 } else if (args->status == AIM_RENDEZVOUS_ACCEPT) { |
2408 /* | |
2409 * This gets sent by the receiver of a file | |
2410 * as they connect directly to us. If we don't | |
2411 * get this, then maybe a third party connected | |
2412 * to us, and we shouldn't send them anything. | |
2413 */ | |
2414 } else { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2415 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2416 "unknown rendezvous status!\n"); |
3630 | 2417 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2418 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
8092 | 2419 } else if (args->reqclass & AIM_CAPS_TALK) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2420 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2421 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2422 userinfo->sn, args->info.icon.icon, |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
2423 args->info.icon.length); |
6871 | 2424 } else if (args->reqclass & AIM_CAPS_DIRECTIM) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2425 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2426 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2427 |
4212 | 2428 if (!args->verifiedip) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2429 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2430 "directim kill blocked (%s)\n", userinfo->sn); |
4650 | 2431 return 1; |
4212 | 2432 } |
2433 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2434 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2435 "%s received direct im request from %s (%s)\n", |
5575 | 2436 username, userinfo->sn, args->verifiedip); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2437 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2438 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2439 d->sn = g_strdup(userinfo->sn); |
2869 | 2440 strncpy(d->ip, args->verifiedip, sizeof(d->ip)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2441 memcpy(d->cookie, args->cookie, 8); |
5575 | 2442 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
|
2443 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2444 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2445 _("This requires a direct connection between " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2446 "the two computers and is necessary for IM " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2447 "Images. Because your IP address will be " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2448 "revealed, this may be considered a privacy " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2449 "risk."), 0, d, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2450 _("Connect"), G_CALLBACK(accept_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2451 _("Cancel"), G_CALLBACK(cancel_direct_im)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2452 } else { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2453 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2454 "Unknown reqclass %hu\n", args->reqclass); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2455 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2456 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2457 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2458 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2459 |
3453 | 2460 /* |
4230 | 2461 * Authorization Functions |
2462 * Most of these are callbacks from dialogs. They're used by both | |
2463 * methods of authorization (SSI and old-school channel 4 ICBM) | |
3453 | 2464 */ |
4269 | 2465 /* When you ask other people for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2466 static void gaim_auth_request(struct name_data *data, char *msg) { |
5575 | 2467 GaimConnection *gc = data->gc; |
4244 | 2468 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2469 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2470 OscarData *od = gc->proto_data; |
6695 | 2471 GaimBuddy *buddy = gaim_find_buddy(gc->account, data->name); |
2472 GaimGroup *group = gaim_find_buddys_group(buddy); | |
4244 | 2473 if (buddy && group) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2474 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2475 "ssi: adding buddy %s to group %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2476 buddy->name, group->name); |
4889 | 2477 aim_ssi_sendauthrequest(od->sess, data->name, msg ? msg : _("Please authorize me so I can add you to my buddy list.")); |
4269 | 2478 if (!aim_ssi_itemlist_finditem(od->sess->ssi.local, group->name, buddy->name, AIM_SSI_TYPE_BUDDY)) |
4889 | 2479 aim_ssi_addbuddy(od->sess, buddy->name, group->name, gaim_get_buddy_alias_only(buddy), NULL, NULL, 1); |
4244 | 2480 } |
4230 | 2481 } |
4337 | 2482 } |
2483 | |
2484 static void gaim_auth_request_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2485 gaim_request_input(data->gc, NULL, _("Authorization Request Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2486 NULL, _("Please authorize me!"), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2487 _("OK"), G_CALLBACK(gaim_auth_request), |
5836 | 2488 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2489 data); |
4230 | 2490 } |
2491 | |
2492 static void gaim_auth_dontrequest(struct name_data *data) { | |
5575 | 2493 GaimConnection *gc = data->gc; |
4244 | 2494 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2495 if (g_list_find(gaim_connections_get_all(), gc)) { |
8151 | 2496 /* Remove from local list */ |
2497 GaimBuddy *b = gaim_find_buddy(gaim_connection_get_account(gc), data->name); | |
2498 gaim_blist_remove_buddy(b); | |
4244 | 2499 } |
2500 | |
5836 | 2501 oscar_free_name_data(data); |
4230 | 2502 } |
2503 | |
5575 | 2504 static void gaim_auth_sendrequest(GaimConnection *gc, const char *name) { |
4269 | 2505 struct name_data *data = g_new(struct name_data, 1); |
6695 | 2506 GaimBuddy *buddy; |
4269 | 2507 gchar *dialog_msg, *nombre; |
2508 | |
4687 | 2509 buddy = gaim_find_buddy(gc->account, name); |
2510 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
2511 nombre = g_strdup_printf("%s (%s)", name, gaim_get_buddy_alias_only(buddy)); | |
4269 | 2512 else |
4830 | 2513 nombre = NULL; |
2514 | |
2515 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 | 2516 data->gc = gc; |
2517 data->name = g_strdup(name); | |
2518 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2519 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2520 gaim_request_action(gc, NULL, _("Request Authorization"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2521 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2522 _("Request Authorization"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2523 G_CALLBACK(gaim_auth_request_msgprompt), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2524 _("Cancel"), G_CALLBACK(gaim_auth_dontrequest)); |
4269 | 2525 |
2526 g_free(dialog_msg); | |
2527 g_free(nombre); | |
2528 } | |
2529 | |
4230 | 2530 /* When other people ask you for authorization */ |
2531 static void gaim_auth_grant(struct name_data *data) { | |
5575 | 2532 GaimConnection *gc = data->gc; |
4244 | 2533 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2534 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2535 OscarData *od = gc->proto_data; |
4236 | 2536 #ifdef NOSSI |
6695 | 2537 GaimBuddy *buddy; |
4244 | 2538 gchar message; |
2539 message = 0; | |
4687 | 2540 buddy = gaim_find_buddy(gc->account, data->name); |
4617 | 2541 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
|
2542 gaim_account_notify_added(gc->account, NULL, data->name, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 2543 #else |
4889 | 2544 aim_ssi_sendauthreply(od->sess, data->name, 0x01, NULL); |
4230 | 2545 #endif |
4244 | 2546 } |
2547 | |
5836 | 2548 oscar_free_name_data(data); |
3141 | 2549 } |
2550 | |
4230 | 2551 /* When other people ask you for authorization */ |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2552 static void gaim_auth_dontgrant(struct name_data *data, char *msg) { |
5575 | 2553 GaimConnection *gc = data->gc; |
4244 | 2554 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2555 if (g_list_find(gaim_connections_get_all(), gc)) { |
7283 | 2556 OscarData *od = gc->proto_data; |
4230 | 2557 #ifdef NOSSI |
4617 | 2558 aim_im_sendch4(od->sess, data->name, AIM_ICQMSG_AUTHDENIED, msg ? msg : _("No reason given.")); |
4230 | 2559 #else |
4889 | 2560 aim_ssi_sendauthreply(od->sess, data->name, 0x00, msg ? msg : _("No reason given.")); |
4230 | 2561 #endif |
4244 | 2562 } |
4337 | 2563 } |
2564 | |
2565 static void gaim_auth_dontgrant_msgprompt(struct name_data *data) { | |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2566 gaim_request_input(data->gc, NULL, _("Authorization Denied Message:"), |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
2567 NULL, _("No reason given."), TRUE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2568 _("OK"), G_CALLBACK(gaim_auth_dontgrant), |
5836 | 2569 _("Cancel"), G_CALLBACK(oscar_free_name_data), |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
2570 data); |
3141 | 2571 } |
2572 | |
7023 | 2573 /* When someone sends you buddies */ |
2574 static void gaim_icq_buddyadd(struct name_data *data) { | |
5575 | 2575 GaimConnection *gc = data->gc; |
4244 | 2576 |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
2577 if (g_list_find(gaim_connections_get_all(), gc)) { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7054
diff
changeset
|
2578 gaim_blist_request_add_buddy(gaim_connection_get_account(gc), data->name, NULL, data->nick); |
4244 | 2579 } |
2580 | |
5836 | 2581 oscar_free_name_data(data); |
3453 | 2582 } |
2583 | |
4075 | 2584 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 | 2585 GaimConnection *gc = sess->aux_data; |
4076 | 2586 gchar **msg1, **msg2; |
2587 GError *err = NULL; | |
6051 | 2588 int i, numtoks; |
4076 | 2589 |
4121 | 2590 if (!args->type || !args->msg || !args->uin) |
2591 return 1; | |
4194 | 2592 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2593 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2594 "Received a channel 4 message of type 0x%02hhx.\n", args->type); |
4076 | 2595 |
2596 /* Split up the message at the delimeter character, then convert each string to UTF-8 */ | |
4173 | 2597 msg1 = g_strsplit(args->msg, "\376", 0); |
6051 | 2598 for (numtoks=0; msg1[numtoks]; numtoks++); |
2599 msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *)); | |
4076 | 2600 for (i=0; msg1[i]; i++) { |
7478
3c21f3084ff0
[gaim-migrate @ 8091]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
7475
diff
changeset
|
2601 gaim_str_strip_cr(msg1[i]); |
4076 | 2602 msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err); |
4800 | 2603 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2604 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2605 "Error converting a string from ISO-8859-1 to " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2606 "UTF-8 in oscar ICBM channel 4 parsing\n"); |
4800 | 2607 g_error_free(err); |
2608 } | |
4076 | 2609 } |
2610 msg2[i] = NULL; | |
2611 | |
3952 | 2612 switch (args->type) { |
4173 | 2613 case 0x01: { /* MacICQ message or basic offline message */ |
4076 | 2614 if (i >= 1) { |
5556 | 2615 gchar *uin = g_strdup_printf("%u", args->uin); |
4076 | 2616 if (t) { /* This is an offline message */ |
2617 /* I think this timestamp is in UTC, or something */ | |
6982 | 2618 serv_got_im(gc, uin, msg2[0], 0, t); |
4076 | 2619 } else { /* This is a message from MacICQ/Miranda */ |
6982 | 2620 serv_got_im(gc, uin, msg2[0], 0, time(NULL)); |
4076 | 2621 } |
2622 g_free(uin); | |
4075 | 2623 } |
3316 | 2624 } break; |
2625 | |
4173 | 2626 case 0x04: { /* Someone sent you a URL */ |
4076 | 2627 if (i >= 2) { |
7385 | 2628 if (msg2[1] != NULL) { |
2629 gchar *uin = g_strdup_printf("%u", args->uin); | |
2630 gchar *message = g_strdup_printf("<A HREF=\"%s\">%s</A>", | |
2631 msg2[1], | |
2632 (msg2[0] && msg2[0][0]) ? msg2[0] : msg2[1]); | |
2633 serv_got_im(gc, uin, message, 0, time(NULL)); | |
2634 g_free(uin); | |
2635 g_free(message); | |
2636 } | |
3453 | 2637 } |
2638 } break; | |
2639 | |
4173 | 2640 case 0x06: { /* Someone requested authorization */ |
4076 | 2641 if (i >= 6) { |
4230 | 2642 struct name_data *data = g_new(struct name_data, 1); |
5556 | 2643 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
|
2644 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5556 | 2645 "Received an authorization request from UIN %u\n", |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2646 args->uin); |
4076 | 2647 data->gc = gc; |
5556 | 2648 data->name = g_strdup_printf("%u", args->uin); |
4230 | 2649 data->nick = NULL; |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2650 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2651 gaim_request_action(gc, NULL, _("Authorization Request"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2652 dialog_msg, 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2653 _("Authorize"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2654 G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2655 _("Deny"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2656 G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4076 | 2657 g_free(dialog_msg); |
2658 } | |
3141 | 2659 } break; |
2660 | |
4173 | 2661 case 0x07: { /* Someone has denied you authorization */ |
4076 | 2662 if (i >= 1) { |
7023 | 2663 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
|
2664 gaim_notify_info(gc, NULL, _("ICQ authorization denied."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2665 dialog_msg); |
4076 | 2666 g_free(dialog_msg); |
2667 } | |
3141 | 2668 } break; |
2669 | |
4173 | 2670 case 0x08: { /* Someone has granted you authorization */ |
7023 | 2671 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
|
2672 gaim_notify_info(gc, NULL, "ICQ authorization accepted.", |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2673 dialog_msg); |
3141 | 2674 g_free(dialog_msg); |
2675 } break; | |
2676 | |
4333 | 2677 case 0x09: { /* Message from the Godly ICQ server itself, I think */ |
2678 if (i >= 5) { | |
2679 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
|
2680 gaim_notify_info(gc, NULL, "ICQ Server Message", dialog_msg); |
4333 | 2681 g_free(dialog_msg); |
2682 } | |
2683 } break; | |
2684 | |
4173 | 2685 case 0x0d: { /* Someone has sent you a pager message from http://www.icq.com/your_uin */ |
4076 | 2686 if (i >= 6) { |
4194 | 2687 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
|
2688 gaim_notify_info(gc, NULL, "ICQ Page", dialog_msg); |
4076 | 2689 g_free(dialog_msg); |
2690 } | |
4075 | 2691 } break; |
2692 | |
4173 | 2693 case 0x0e: { /* Someone has emailed you at your_uin@pager.icq.com */ |
4076 | 2694 if (i >= 6) { |
4308 | 2695 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
|
2696 gaim_notify_info(gc, NULL, "ICQ Email", dialog_msg); |
4076 | 2697 g_free(dialog_msg); |
2698 } | |
4075 | 2699 } break; |
2700 | |
4173 | 2701 case 0x12: { |
3141 | 2702 /* Ack for authorizing/denying someone. Or possibly an ack for sending any system notice */ |
7023 | 2703 /* Someone added you to their buddy list? */ |
3141 | 2704 } break; |
2705 | |
7023 | 2706 case 0x13: { /* Someone has sent you some ICQ buddies */ |
7631 | 2707 guint i, num; |
3453 | 2708 gchar **text; |
4173 | 2709 text = g_strsplit(args->msg, "\376", 0); |
3453 | 2710 if (text) { |
2711 num = 0; | |
2712 for (i=0; i<strlen(text[0]); i++) | |
2713 num = num*10 + text[0][i]-48; | |
2714 for (i=0; i<num; i++) { | |
4230 | 2715 struct name_data *data = g_new(struct name_data, 1); |
7023 | 2716 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 | 2717 data->gc = gc; |
4790 | 2718 data->name = g_strdup(text[i*2+1]); |
2719 data->nick = g_strdup(text[i*2+2]); | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2720 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2721 gaim_request_action(gc, NULL, message, |
7023 | 2722 _("Do you want to add this buddy " |
2723 "to your buddy list?"), | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
2724 0, data, 2, |
7023 | 2725 _("Add"), G_CALLBACK(gaim_icq_buddyadd), |
5836 | 2726 _("Decline"), G_CALLBACK(oscar_free_name_data)); |
3453 | 2727 g_free(message); |
2728 } | |
2729 g_strfreev(text); | |
2730 } | |
2731 } break; | |
2732 | |
7023 | 2733 case 0x1a: { /* Someone has sent you a greeting card or requested buddies? */ |
3453 | 2734 /* This is boring and silly. */ |
2735 } break; | |
2736 | |
3141 | 2737 default: { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2738 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2739 "Received a channel 4 message of unknown type " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2740 "(type 0x%02hhx).\n", args->type); |
3141 | 2741 } break; |
2742 } | |
2743 | |
4076 | 2744 g_strfreev(msg1); |
2745 g_strfreev(msg2); | |
2746 | |
3141 | 2747 return 1; |
2748 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2749 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2750 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
4200 | 2751 fu16_t channel; |
2752 int ret = 0; | |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2753 aim_userinfo_t *userinfo; |
2086 | 2754 va_list ap; |
2246
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 va_start(ap, fr); |
4200 | 2757 channel = (fu16_t)va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2758 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 2759 |
3141 | 2760 switch (channel) { |
2761 case 1: { /* standard message */ | |
2762 struct aim_incomingim_ch1_args *args; | |
2763 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2764 ret = incomingim_chan1(sess, fr->conn, userinfo, args); | |
2765 } break; | |
2766 | |
2767 case 2: { /* rendevous */ | |
2768 struct aim_incomingim_ch2_args *args; | |
2769 args = va_arg(ap, struct aim_incomingim_ch2_args *); | |
2770 ret = incomingim_chan2(sess, fr->conn, userinfo, args); | |
2771 } break; | |
2772 | |
2773 case 4: { /* ICQ */ | |
2774 struct aim_incomingim_ch4_args *args; | |
2775 args = va_arg(ap, struct aim_incomingim_ch4_args *); | |
4075 | 2776 ret = incomingim_chan4(sess, fr->conn, userinfo, args, 0); |
3141 | 2777 } break; |
2778 | |
2779 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2780 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2781 "ICBM received on unsupported channel (channel " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2782 "0x%04hx).", channel); |
3141 | 2783 } break; |
2086 | 2784 } |
2785 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2786 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2787 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2788 return ret; |
2086 | 2789 } |
2790 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2791 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
5420 | 2792 char *buf; |
2086 | 2793 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2794 fu16_t chan, nummissed, reason; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
2795 aim_userinfo_t *userinfo; |
2086 | 2796 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2797 va_start(ap, fr); |
4200 | 2798 chan = (fu16_t)va_arg(ap, unsigned int); |
2799 userinfo = va_arg(ap, aim_userinfo_t *); | |
2800 nummissed = (fu16_t)va_arg(ap, unsigned int); | |
2801 reason = (fu16_t)va_arg(ap, unsigned int); | |
2086 | 2802 va_end(ap); |
2803 | |
2804 switch(reason) { | |
5420 | 2805 case 0: /* Invalid (0) */ |
2806 buf = g_strdup_printf( | |
2807 ngettext( | |
4276 | 2808 "You missed %hu message from %s because it was invalid.", |
2809 "You missed %hu messages from %s because they were invalid.", | |
2810 nummissed), | |
4282 | 2811 nummissed, |
2812 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2813 break; |
5420 | 2814 case 1: /* Message too large */ |
2815 buf = g_strdup_printf( | |
2816 ngettext( | |
4276 | 2817 "You missed %hu message from %s because it was too large.", |
2818 "You missed %hu messages from %s because they were too large.", | |
2819 nummissed), | |
4282 | 2820 nummissed, |
2821 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2822 break; |
5420 | 2823 case 2: /* Rate exceeded */ |
2824 buf = g_strdup_printf( | |
2825 ngettext( | |
4276 | 2826 "You missed %hu message from %s because the rate limit has been exceeded.", |
2827 "You missed %hu messages from %s because the rate limit has been exceeded.", | |
2828 nummissed), | |
4282 | 2829 nummissed, |
2830 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2831 break; |
5420 | 2832 case 3: /* Evil Sender */ |
2833 buf = g_strdup_printf( | |
2834 ngettext( | |
4276 | 2835 "You missed %hu message from %s because he/she was too evil.", |
2836 "You missed %hu messages from %s because he/she was too evil.", | |
2837 nummissed), | |
4282 | 2838 nummissed, |
2839 userinfo->sn); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2840 break; |
5420 | 2841 case 4: /* Evil Receiver */ |
2842 buf = g_strdup_printf( | |
2843 ngettext( | |
4276 | 2844 "You missed %hu message from %s because you are too evil.", |
2845 "You missed %hu messages from %s because you are too evil.", | |
2846 nummissed), | |
4282 | 2847 nummissed, |
2848 userinfo->sn); | |
2086 | 2849 break; |
2850 default: | |
5420 | 2851 buf = g_strdup_printf( |
2852 ngettext( | |
4276 | 2853 "You missed %hu message from %s for an unknown reason.", |
2854 "You missed %hu messages from %s for an unknown reason.", | |
2855 nummissed), | |
4282 | 2856 nummissed, |
2857 userinfo->sn); | |
2086 | 2858 break; |
2859 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2860 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 2861 g_free(buf); |
2086 | 2862 |
2863 return 1; | |
2864 } | |
2865 | |
3212 | 2866 static char *gaim_icq_status(int state) { |
2867 /* Make a cute little string that shows the status of the dude or dudet */ | |
2868 if (state & AIM_ICQ_STATE_CHAT) | |
4342 | 2869 return g_strdup_printf(_("Free For Chat")); |
3212 | 2870 else if (state & AIM_ICQ_STATE_DND) |
4342 | 2871 return g_strdup_printf(_("Do Not Disturb")); |
3212 | 2872 else if (state & AIM_ICQ_STATE_OUT) |
4342 | 2873 return g_strdup_printf(_("Not Available")); |
3212 | 2874 else if (state & AIM_ICQ_STATE_BUSY) |
4342 | 2875 return g_strdup_printf(_("Occupied")); |
3212 | 2876 else if (state & AIM_ICQ_STATE_AWAY) |
4342 | 2877 return g_strdup_printf(_("Away")); |
3212 | 2878 else if (state & AIM_ICQ_STATE_WEBAWARE) |
4342 | 2879 return g_strdup_printf(_("Web Aware")); |
3212 | 2880 else if (state & AIM_ICQ_STATE_INVISIBLE) |
4342 | 2881 return g_strdup_printf(_("Invisible")); |
3212 | 2882 else |
4342 | 2883 return g_strdup_printf(_("Online")); |
3212 | 2884 } |
2885 | |
4194 | 2886 static int gaim_parse_clientauto_ch2(aim_session_t *sess, const char *who, fu16_t reason, const char *cookie) { |
5575 | 2887 GaimConnection *gc = sess->aux_data; |
7283 | 2888 OscarData *od = gc->proto_data; |
4617 | 2889 |
2890 /* BBB */ | |
3630 | 2891 switch (reason) { |
4151 | 2892 case 3: { /* Decline sendfile. */ |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2893 GaimXfer *xfer; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2894 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2895 "AAA - Other user declined file transfer\n"); |
4617 | 2896 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
|
2897 gaim_xfer_cancel_remote(xfer); |
4151 | 2898 } break; |
2899 | |
2900 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2901 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2902 "Received an unknown rendezvous client auto-response " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2903 "from %s. Type 0x%04hx\n", who, reason); |
4151 | 2904 } |
3630 | 2905 |
2906 } | |
2907 | |
2908 return 0; | |
2909 } | |
2910 | |
4194 | 2911 static int gaim_parse_clientauto_ch4(aim_session_t *sess, char *who, fu16_t reason, fu32_t state, char *msg) { |
5575 | 2912 GaimConnection *gc = sess->aux_data; |
4151 | 2913 |
2914 switch(reason) { | |
2915 case 0x0003: { /* Reply from an ICQ status message request */ | |
2916 char *status_msg = gaim_icq_status(state); | |
2917 char *dialog_msg, **splitmsg; | |
2918 | |
2919 /* Split at (carriage return/newline)'s, then rejoin later with BRs between. */ | |
2920 splitmsg = g_strsplit(msg, "\r\n", 0); | |
2921 | |
7011 | 2922 dialog_msg = g_strdup_printf(_("<B>UIN:</B> %s<BR><B>Status:</B> %s<HR>%s"), who, status_msg, g_strjoinv("<BR>", splitmsg)); |
7032 | 2923 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, dialog_msg, NULL, NULL); |
4151 | 2924 |
2925 g_free(status_msg); | |
2926 g_free(dialog_msg); | |
2927 g_strfreev(splitmsg); | |
2928 } break; | |
2929 | |
2930 default: { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2931 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2932 "Received an unknown client auto-response from %s. " |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2933 "Type 0x%04hx\n", who, reason); |
4151 | 2934 } break; |
2935 } /* end of switch */ | |
2936 | |
2937 return 0; | |
2938 } | |
2939 | |
3212 | 2940 static int gaim_parse_clientauto(aim_session_t *sess, aim_frame_t *fr, ...) { |
2941 va_list ap; | |
2942 fu16_t chan, reason; | |
2943 char *who; | |
2944 | |
2945 va_start(ap, fr); | |
4200 | 2946 chan = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2947 who = va_arg(ap, char *); |
4200 | 2948 reason = (fu16_t)va_arg(ap, unsigned int); |
3212 | 2949 |
3952 | 2950 if (chan == 0x0002) { /* File transfer declined */ |
3630 | 2951 char *cookie = va_arg(ap, char *); |
4151 | 2952 return gaim_parse_clientauto_ch2(sess, who, reason, cookie); |
3952 | 2953 } else if (chan == 0x0004) { /* ICQ message */ |
4200 | 2954 fu32_t state = 0; |
4151 | 2955 char *msg = NULL; |
2956 if (reason == 0x0003) { | |
4200 | 2957 state = va_arg(ap, fu32_t); |
4151 | 2958 msg = va_arg(ap, char *); |
2959 } | |
2960 return gaim_parse_clientauto_ch4(sess, who, reason, state, msg); | |
2961 } | |
3952 | 2962 |
3212 | 2963 va_end(ap); |
2964 | |
2965 return 1; | |
2966 } | |
2967 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2968 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2969 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2970 fu16_t reason; |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2971 char *m; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2972 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2973 va_start(ap, fr); |
4199 | 2974 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 2975 va_end(ap); |
2976 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2977 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2978 "snac threw error (reason 0x%04hx: %s)\n", reason, |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2979 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); |
2086 | 2980 |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2981 m = g_strdup_printf(_("SNAC threw error: %s\n"), |
5411 | 2982 reason < msgerrreasonlen ? _(msgerrreason[reason]) : _("Unknown error")); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
2983 gaim_notify_error(sess->aux_data, NULL, m, NULL); |
2865
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2984 g_free(m); |
88dc3623a2ae
[gaim-migrate @ 2878]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2864
diff
changeset
|
2985 |
2086 | 2986 return 1; |
2987 } | |
2988 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2989 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
4617 | 2990 #if 0 |
5575 | 2991 GaimConnection *gc = sess->aux_data; |
7283 | 2992 OscarData *od = gc->proto_data; |
6240
ac191233b816
[gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents:
6173
diff
changeset
|
2993 GaimXfer *xfer; |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2994 #endif |
4617 | 2995 va_list ap; |
2996 fu16_t reason; | |
2997 char *data, *buf; | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
2998 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2999 va_start(ap, fr); |
4617 | 3000 reason = (fu16_t)va_arg(ap, unsigned int); |
3752 | 3001 data = va_arg(ap, char *); |
2086 | 3002 va_end(ap); |
3003 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3004 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3005 "Message error with data %s and reason %hu\n", data, reason); |
4617 | 3006 |
3007 /* BBB */ | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
3008 #if 0 |
4617 | 3009 /* If this was a file transfer request, data is a cookie */ |
3010 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
|
3011 gaim_xfer_cancel_remote(xfer); |
3630 | 3012 return 1; |
3013 } | |
4508
4c40fccbd7c9
[gaim-migrate @ 4784]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
3014 #endif |
3630 | 3015 |
4617 | 3016 /* Data is assumed to be the destination sn */ |
3017 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
|
3018 gaim_notify_error(sess->aux_data, NULL, buf, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3019 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); |
4617 | 3020 g_free(buf); |
2086 | 3021 |
3022 return 1; | |
3023 } | |
3024 | |
3595 | 3025 static int gaim_parse_mtn(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3026 GaimConnection *gc = sess->aux_data; |
3595 | 3027 va_list ap; |
3028 fu16_t type1, type2; | |
3029 char *sn; | |
3030 | |
3031 va_start(ap, fr); | |
4199 | 3032 type1 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 3033 sn = va_arg(ap, char *); |
4199 | 3034 type2 = (fu16_t) va_arg(ap, unsigned int); |
3595 | 3035 va_end(ap); |
3036 | |
3037 switch (type2) { | |
3038 case 0x0000: { /* Text has been cleared */ | |
3039 serv_got_typing_stopped(gc, sn); | |
3040 } break; | |
3041 | |
3042 case 0x0001: { /* Paused typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3043 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
3595 | 3044 } break; |
3045 | |
3046 case 0x0002: { /* Typing */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
3047 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
3595 | 3048 } break; |
3049 | |
3050 default: { | |
5435 | 3051 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 | 3052 } break; |
3053 } | |
3054 | |
3055 return 1; | |
3056 } | |
3057 | |
7141 | 3058 /* |
3059 * We get this error when there was an error in the locate family. This | |
7259 | 3060 * happens when you request info of someone who is offline. |
7141 | 3061 */ |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3062 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
7259 | 3063 gchar *buf; |
2086 | 3064 va_list ap; |
5420 | 3065 fu16_t reason; |
2086 | 3066 char *destn; |
3067 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3068 va_start(ap, fr); |
4199 | 3069 reason = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3070 destn = va_arg(ap, char *); |
3071 va_end(ap); | |
3072 | |
7781 | 3073 if (destn == NULL) |
7793 | 3074 return 1; |
3075 | |
3076 buf = g_strdup_printf(_("User information for %s unavailable:"), destn); | |
7781 | 3077 |
3078 gaim_notify_error(sess->aux_data, NULL, buf, | |
3079 (reason < msgerrreasonlen) ? _(msgerrreason[reason]) : _("No reason given.")); | |
3080 g_free(buf); | |
2086 | 3081 |
3082 return 1; | |
3083 } | |
3084 | |
6982 | 3085 #if 0 |
2086 | 3086 static char *images(int flags) { |
3087 static char buf[1024]; | |
3101 | 3088 g_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s", |
2679 | 3089 (flags & AIM_FLAG_ACTIVEBUDDY) ? "<IMG SRC=\"ab_icon.gif\">" : "", |
2086 | 3090 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", |
3091 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
3101 | 3092 (flags & AIM_FLAG_ICQ) ? "<IMG SRC=\"icq_icon.gif\">" : "", |
2086 | 3093 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", |
3079 | 3094 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : "", |
3095 (flags & AIM_FLAG_WIRELESS) ? "<IMG SRC=\"wireless_icon.gif\">" : ""); | |
2086 | 3096 return buf; |
3097 } | |
6982 | 3098 #endif |
3101 | 3099 |
2920 | 3100 static char *caps_string(guint caps) |
3101 { | |
3102 static char buf[512], *tmp; | |
3103 int count = 0, i = 0; | |
3104 guint bit = 1; | |
4742 | 3105 |
3106 if (!caps) { | |
4744 | 3107 return NULL; |
6318 | 3108 } else while (bit <= AIM_CAPS_LAST) { |
2920 | 3109 if (bit & caps) { |
3110 switch (bit) { | |
6871 | 3111 case AIM_CAPS_BUDDYICON: |
2920 | 3112 tmp = _("Buddy Icon"); |
3113 break; | |
8092 | 3114 case AIM_CAPS_TALK: |
2920 | 3115 tmp = _("Voice"); |
3116 break; | |
6871 | 3117 case AIM_CAPS_DIRECTIM: |
7141 | 3118 tmp = _("AIM Direct IM"); |
2920 | 3119 break; |
6871 | 3120 case AIM_CAPS_CHAT: |
2920 | 3121 tmp = _("Chat"); |
3122 break; | |
6871 | 3123 case AIM_CAPS_GETFILE: |
2920 | 3124 tmp = _("Get File"); |
3125 break; | |
6871 | 3126 case AIM_CAPS_SENDFILE: |
2920 | 3127 tmp = _("Send File"); |
3128 break; | |
6871 | 3129 case AIM_CAPS_GAMES: |
3130 case AIM_CAPS_GAMES2: | |
2920 | 3131 tmp = _("Games"); |
3132 break; | |
8092 | 3133 case AIM_CAPS_ADDINS: |
4898 | 3134 tmp = _("Add-Ins"); |
2920 | 3135 break; |
6871 | 3136 case AIM_CAPS_SENDBUDDYLIST: |
2920 | 3137 tmp = _("Send Buddy List"); |
3138 break; | |
7141 | 3139 case AIM_CAPS_ICQ_DIRECT: |
3140 tmp = _("ICQ Direct Connect"); | |
2920 | 3141 break; |
6871 | 3142 case AIM_CAPS_APINFO: |
2920 | 3143 tmp = _("AP User"); |
3144 break; | |
6871 | 3145 case AIM_CAPS_ICQRTF: |
2920 | 3146 tmp = _("ICQ RTF"); |
3147 break; | |
6871 | 3148 case AIM_CAPS_EMPTY: |
2920 | 3149 tmp = _("Nihilist"); |
3150 break; | |
6871 | 3151 case AIM_CAPS_ICQSERVERRELAY: |
2920 | 3152 tmp = _("ICQ Server Relay"); |
3153 break; | |
6871 | 3154 case AIM_CAPS_ICQUTF8OLD: |
3155 tmp = _("Old ICQ UTF8"); | |
2920 | 3156 break; |
6871 | 3157 case AIM_CAPS_TRILLIANCRYPT: |
2920 | 3158 tmp = _("Trillian Encryption"); |
3159 break; | |
6871 | 3160 case AIM_CAPS_ICQUTF8: |
4742 | 3161 tmp = _("ICQ UTF8"); |
3162 break; | |
6318 | 3163 case AIM_CAPS_HIPTOP: |
3164 tmp = _("Hiptop"); | |
3165 break; | |
6871 | 3166 case AIM_CAPS_SECUREIM: |
7334 | 3167 tmp = _("Security Enabled"); |
6871 | 3168 break; |
7582 | 3169 case AIM_CAPS_VIDEO: |
3170 tmp = _("Video Chat"); | |
3171 break; | |
8092 | 3172 /* Not actually sure about this one... WinAIM doesn't show anything */ |
7945 | 3173 case AIM_CAPS_ICHATAV: |
3174 tmp = _("iChat AV"); | |
3175 break; | |
8092 | 3176 case AIM_CAPS_LIVEVIDEO: |
3177 tmp = _("Live Video"); | |
3178 break; | |
3179 case AIM_CAPS_CAMERA: | |
3180 tmp = _("Camera"); | |
3181 break; | |
2920 | 3182 default: |
3183 tmp = NULL; | |
3184 break; | |
3185 } | |
3186 if (tmp) | |
3187 i += g_snprintf(buf + i, sizeof(buf) - i, "%s%s", (count ? ", " : ""), | |
3188 tmp); | |
3189 count++; | |
3190 } | |
3191 bit <<= 1; | |
3192 } | |
4744 | 3193 return buf; |
2920 | 3194 } |
3195 | |
7011 | 3196 static int gaim_parse_userinfo(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3197 GaimConnection *gc = sess->aux_data; |
7011 | 3198 GString *text; |
7162 | 3199 gchar *info_utf8 = NULL, *away_utf8 = NULL; |
3200 const char *final = NULL; | |
4791 | 3201 va_list ap; |
7011 | 3202 aim_userinfo_t *userinfo; |
2086 | 3203 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3204 va_start(ap, fr); |
7011 | 3205 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3206 va_end(ap); |
3207 | |
7011 | 3208 text = g_string_new(""); |
3209 g_string_append_printf(text, _("Username: <b>%s</b><br>\n"), userinfo->sn); | |
3210 g_string_append_printf(text, _("Warning Level: <b>%d%%</b><br>\n"), (int)((userinfo->warnlevel/10.0) + 0.5)); | |
3211 | |
3212 if (userinfo->present & AIM_USERINFO_PRESENT_ONLINESINCE) | |
3213 g_string_append_printf(text, _("Online Since: <b>%s</b><br>\n"), | |
3214 asctime(localtime((time_t *)&userinfo->onlinesince))); | |
3215 | |
3216 if (userinfo->present & AIM_USERINFO_PRESENT_MEMBERSINCE) | |
3217 g_string_append_printf(text, _("Member Since: <b>%s</b><br>\n"), | |
3218 asctime(localtime((time_t *)&userinfo->membersince))); | |
3219 | |
3220 if (userinfo->present & AIM_USERINFO_PRESENT_IDLE) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3221 gchar *itime = gaim_str_seconds_to_string(userinfo->idletime*60); |
7011 | 3222 g_string_append_printf(text, _("Idle: <b>%s</b>"), itime); |
4426 | 3223 g_free(itime); |
2993 | 3224 } else |
7011 | 3225 g_string_append_printf(text, _("Idle: <b>Active</b>")); |
3226 | |
3227 if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
8225 | 3228 gchar *charset = oscar_encoding_extract(userinfo->away_encoding); |
3229 away_utf8 = oscar_encoding_to_utf8(charset, userinfo->away, userinfo->away_len); | |
3230 g_free(charset); | |
7011 | 3231 if (away_utf8 != NULL) { |
7129 | 3232 g_string_append_printf(text, "<hr>%s", away_utf8); |
7011 | 3233 g_free(away_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3234 } |
7011 | 3235 } |
3236 | |
3237 if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) { | |
8225 | 3238 gchar *charset = oscar_encoding_extract(userinfo->info_encoding); |
3239 info_utf8 = oscar_encoding_to_utf8(charset, userinfo->info, userinfo->info_len); | |
3240 g_free(charset); | |
7011 | 3241 if (info_utf8 != NULL) { |
7129 | 3242 g_string_append_printf(text, "<hr>%s", info_utf8); |
7011 | 3243 g_free(info_utf8); |
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2789
diff
changeset
|
3244 } |
7011 | 3245 } |
3246 | |
7164 | 3247 final = gaim_str_sub_away_formatters(text->str, gaim_account_get_username(gaim_connection_get_account(gc))); |
7011 | 3248 g_string_free(text, TRUE); |
7091 | 3249 gaim_notify_formatted(gc, NULL, _("Buddy Information"), NULL, final, NULL, NULL); |
4151 | 3250 |
2086 | 3251 return 1; |
3252 } | |
3253 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3254 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3255 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3256 fu16_t id; |
2086 | 3257 va_list ap; |
3258 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3259 va_start(ap, fr); |
4199 | 3260 id = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3261 msg = va_arg(ap, char *); |
3262 va_end(ap); | |
3263 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3264 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3265 "MOTD: %s (%hu)\n", msg ? msg : "Unknown", id); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
3266 if (id < 4) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3267 gaim_notify_warning(sess->aux_data, NULL, |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3268 _("Your AIM connection may be lost."), NULL); |
2086 | 3269 |
3270 return 1; | |
3271 } | |
3272 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3273 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3274 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3275 fu16_t type; |
5575 | 3276 GaimConnection *gc = sess->aux_data; |
7283 | 3277 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 3278 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3279 va_start(ap, fr); |
4199 | 3280 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3281 |
3282 switch(type) { | |
3283 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3284 fu8_t maxrooms; |
2086 | 3285 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3286 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3287 |
4199 | 3288 maxrooms = (fu8_t) va_arg(ap, unsigned int); |
2086 | 3289 exchangecount = va_arg(ap, int); |
3290 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
3291 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3292 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3293 "chat info: Chat Rights:\n"); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3294 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3295 "chat info: \tMax Concurrent Rooms: %hhd\n", maxrooms); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3296 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3297 "chat info: \tExchange List: (%d total)\n", exchangecount); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3298 for (i = 0; i < exchangecount; i++) |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3299 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3300 "chat info: \t\t%hu %s\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3301 exchanges[i].number, exchanges[i].name ? exchanges[i].name : ""); |
4617 | 3302 while (od->create_rooms) { |
3303 struct create_room *cr = od->create_rooms->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3304 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3305 "creating room %s\n", cr->name); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3306 aim_chatnav_createroom(sess, fr->conn, cr->name, cr->exchange); |
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3307 g_free(cr->name); |
4617 | 3308 od->create_rooms = g_slist_remove(od->create_rooms, cr); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
3309 g_free(cr); |
2086 | 3310 } |
3311 } | |
3312 break; | |
3313 case 0x0008: { | |
3314 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3315 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3316 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3317 fu32_t createtime; |
2086 | 3318 |
3319 fqcn = va_arg(ap, char *); | |
4200 | 3320 instance = (fu16_t)va_arg(ap, unsigned int); |
3321 exchange = (fu16_t)va_arg(ap, unsigned int); | |
3322 flags = (fu16_t)va_arg(ap, unsigned int); | |
3323 createtime = va_arg(ap, fu32_t); | |
3324 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3325 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); | |
3326 createperms = (fu8_t)va_arg(ap, unsigned int); | |
3327 unknown = (fu16_t)va_arg(ap, unsigned int); | |
3328 name = va_arg(ap, char *); | |
3329 ck = va_arg(ap, char *); | |
4194 | 3330 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3331 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3332 "created room: %s %hu %hu %hu %u %hu %hu %hhu %hu %s %s\n", |
2086 | 3333 fqcn, |
3334 exchange, instance, flags, | |
3335 createtime, | |
3336 maxmsglen, maxoccupancy, createperms, unknown, | |
3337 name, ck); | |
4617 | 3338 aim_chat_join(od->sess, od->conn, exchange, ck, instance); |
2086 | 3339 } |
3340 break; | |
3341 default: | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3342 gaim_debug(GAIM_DEBUG_WARNING, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3343 "chatnav info: unknown type (%04hx)\n", type); |
2086 | 3344 break; |
3345 } | |
4194 | 3346 |
3347 va_end(ap); | |
3348 | |
2086 | 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_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3353 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3354 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3355 aim_userinfo_t *info; |
5575 | 3356 GaimConnection *g = sess->aux_data; |
2086 | 3357 |
3358 struct chat_connection *c = NULL; | |
3359 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3360 va_start(ap, fr); |
2086 | 3361 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3362 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3363 va_end(ap); |
3364 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3365 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3366 if (!c) |
3367 return 1; | |
3368 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3369 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3370 gaim_conv_chat_add_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3371 |
3372 return 1; | |
3373 } | |
3374 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3375 static int gaim_conv_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3376 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3377 int count, i; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3378 aim_userinfo_t *info; |
5575 | 3379 GaimConnection *g = sess->aux_data; |
2086 | 3380 |
3381 struct chat_connection *c = NULL; | |
3382 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3383 va_start(ap, fr); |
2086 | 3384 count = va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3385 info = va_arg(ap, aim_userinfo_t *); |
2086 | 3386 va_end(ap); |
3387 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3388 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 3389 if (!c) |
3390 return 1; | |
3391 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3392 for (i = 0; i < count; i++) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3393 gaim_conv_chat_remove_user(GAIM_CONV_CHAT(c->cnv), info[i].sn, NULL); |
2086 | 3394 |
3395 return 1; | |
3396 } | |
3397 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3398 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
|
3399 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3400 aim_userinfo_t *userinfo; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3401 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3402 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3403 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3404 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3405 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3406 fu32_t creationtime; |
5575 | 3407 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3408 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
|
3409 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3410 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3411 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3412 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3413 usercount= va_arg(ap, int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3414 userinfo = va_arg(ap, aim_userinfo_t *); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3415 roomdesc = va_arg(ap, char *); |
4200 | 3416 unknown_c9 = (fu16_t)va_arg(ap, unsigned int); |
3417 creationtime = va_arg(ap, fu32_t); | |
3418 maxmsglen = (fu16_t)va_arg(ap, unsigned int); | |
3419 unknown_d2 = (fu16_t)va_arg(ap, unsigned int); | |
3420 unknown_d5 = (fu16_t)va_arg(ap, unsigned int); | |
3421 maxvisiblemsglen = (fu16_t)va_arg(ap, unsigned int); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3422 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3423 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3424 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3425 "inside chat_info_update (maxmsglen = %hu, maxvislen = %hu)\n", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3426 maxmsglen, maxvisiblemsglen); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3427 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3428 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3429 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3430 |
2086 | 3431 return 1; |
3432 } | |
3433 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
3434 static int gaim_conv_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3435 GaimConnection *gc = sess->aux_data; |
8225 | 3436 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
3437 gchar *utf8; | |
2086 | 3438 va_list ap; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3439 aim_userinfo_t *info; |
8225 | 3440 int len; |
2086 | 3441 char *msg; |
8219 | 3442 char *charset; |
2086 | 3443 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3444 va_start(ap, fr); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3445 info = va_arg(ap, aim_userinfo_t *); |
8219 | 3446 len = va_arg(ap, int); |
4194 | 3447 msg = va_arg(ap, char *); |
8219 | 3448 charset = va_arg(ap, char *); |
4194 | 3449 va_end(ap); |
2086 | 3450 |
8225 | 3451 utf8 = oscar_encoding_to_utf8(charset, msg, len); |
3452 serv_got_chat_in(gc, ccon->id, info->sn, 0, utf8, time((time_t)NULL)); | |
3453 g_free(utf8); | |
2086 | 3454 |
3455 return 1; | |
3456 } | |
3457 | |
3694 | 3458 static int gaim_email_parseupdate(aim_session_t *sess, aim_frame_t *fr, ...) { |
3459 va_list ap; | |
5575 | 3460 GaimConnection *gc = sess->aux_data; |
3694 | 3461 struct aim_emailinfo *emailinfo; |
3725 | 3462 int havenewmail; |
7297 | 3463 char *alertitle, *alerturl; |
3694 | 3464 |
3465 va_start(ap, fr); | |
3466 emailinfo = va_arg(ap, struct aim_emailinfo *); | |
3725 | 3467 havenewmail = va_arg(ap, int); |
7301 | 3468 alertitle = va_arg(ap, char *); |
3469 alerturl = va_arg(ap, char *); | |
3694 | 3470 va_end(ap); |
3471 | |
5628 | 3472 if (emailinfo && gaim_account_get_check_mail(gc->account)) { |
5575 | 3473 gchar *to = g_strdup_printf("%s@%s", gaim_account_get_username(gaim_connection_get_account(gc)), emailinfo->domain); |
5542 | 3474 if (emailinfo->unread && havenewmail) |
3475 gaim_notify_emails(gc, emailinfo->nummsgs, FALSE, NULL, NULL, (const char **)&to, (const char **)&emailinfo->url, NULL, NULL); | |
5537 | 3476 g_free(to); |
3694 | 3477 } |
7297 | 3478 |
7301 | 3479 if (alertitle) |
7313 | 3480 gaim_debug(GAIM_DEBUG_MISC, "oscar", "Got an alert '%s' %s\n", alertitle, alerturl ? alerturl : ""); |
3694 | 3481 |
3482 return 1; | |
3483 } | |
3484 | |
4804 | 3485 static int gaim_icon_error(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3486 GaimConnection *gc = sess->aux_data; |
7283 | 3487 OscarData *od = gc->proto_data; |
4804 | 3488 char *sn; |
3489 | |
3490 sn = od->requesticon->data; | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3491 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3492 "removing %s from hash table\n", sn); |
4804 | 3493 od->requesticon = g_slist_remove(od->requesticon, sn); |
3494 free(sn); | |
3495 | |
3496 if (od->icontimer) | |
3497 g_source_remove(od->icontimer); | |
3498 od->icontimer = g_timeout_add(500, gaim_icon_timerfunc, gc); | |
3499 | |
3500 return 1; | |
3501 } | |
3502 | |
3503 static int gaim_icon_parseicon(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 3504 GaimConnection *gc = sess->aux_data; |
7283 | 3505 OscarData *od = gc->proto_data; |
4804 | 3506 GSList *cur; |
3507 va_list ap; | |
3508 char *sn; | |
4853 | 3509 fu8_t *iconcsum, *icon; |
3510 fu16_t iconcsumlen, iconlen; | |
4804 | 3511 |
3512 va_start(ap, fr); | |
3513 sn = va_arg(ap, char *); | |
4853 | 3514 iconcsum = va_arg(ap, fu8_t *); |
3515 iconcsumlen = va_arg(ap, int); | |
4804 | 3516 icon = va_arg(ap, fu8_t *); |
3517 iconlen = va_arg(ap, int); | |
3518 va_end(ap); | |
3519 | |
4853 | 3520 if (iconlen > 0) { |
3521 char *b16; | |
6695 | 3522 GaimBuddy *b = gaim_find_buddy(gc->account, sn); |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3523 gaim_buddy_icons_set_for_user(gaim_connection_get_account(gc), |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6787
diff
changeset
|
3524 sn, icon, iconlen); |
7106
db6bd3e794d8
[gaim-migrate @ 7671]
Christian Hammond <chipx86@chipx86.com>
parents:
7098
diff
changeset
|
3525 b16 = gaim_base16_encode(iconcsum, iconcsumlen); |
5129 | 3526 if (b16) { |
7693 | 3527 gaim_blist_node_set_string((GaimBlistNode*)b, "icon_checksum", b16); |
5129 | 3528 gaim_blist_save(); |
7162 | 3529 g_free(b16); |
5129 | 3530 } |
4853 | 3531 } |
4804 | 3532 |
3533 cur = od->requesticon; | |
3534 while (cur) { | |
3535 char *cursn = cur->data; | |
3536 if (!aim_sncmp(cursn, sn)) { | |
3537 od->requesticon = g_slist_remove(od->requesticon, cursn); | |
3538 free(cursn); | |
3539 cur = od->requesticon; | |
3540 } else | |
3541 cur = cur->next; | |
3542 } | |
3543 | |
3544 if (od->icontimer) | |
3545 g_source_remove(od->icontimer); | |
3546 od->icontimer = g_timeout_add(250, gaim_icon_timerfunc, gc); | |
3547 | |
3548 return 1; | |
3549 } | |
3550 | |
3551 static gboolean gaim_icon_timerfunc(gpointer data) { | |
5575 | 3552 GaimConnection *gc = data; |
7283 | 3553 OscarData *od = gc->proto_data; |
7011 | 3554 aim_userinfo_t *userinfo; |
4804 | 3555 aim_conn_t *conn; |
3556 | |
3557 conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON); | |
5892 | 3558 if (!conn) { |
3559 if (!od->iconconnecting) { | |
3560 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
3561 od->iconconnecting = TRUE; | |
3562 } | |
4804 | 3563 return FALSE; |
3564 } | |
3565 | |
5842 | 3566 if (od->set_icon) { |
6039 | 3567 struct stat st; |
3568 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
3569 if (iconfile == NULL) { | |
3570 /* Set an empty icon, or something */ | |
3571 } else if (!stat(iconfile, &st)) { | |
3572 char *buf = g_malloc(st.st_size); | |
3573 FILE *file = fopen(iconfile, "rb"); | |
3574 if (file) { | |
3575 fread(buf, 1, st.st_size, file); | |
3576 fclose(file); | |
3577 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
3578 "Uploading icon to icon server\n"); | |
6879 | 3579 aim_bart_upload(od->sess, buf, st.st_size); |
5842 | 3580 } else |
3581 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 3582 "Can't open buddy icon file!\n"); |
3583 g_free(buf); | |
3584 } else { | |
3585 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
3586 "Can't stat buddy icon file!\n"); | |
5842 | 3587 } |
3588 od->set_icon = FALSE; | |
3589 } | |
3590 | |
3591 if (!od->requesticon) { | |
3592 gaim_debug(GAIM_DEBUG_MISC, "oscar", | |
3593 "no more icons to request\n"); | |
3594 return FALSE; | |
3595 } | |
3596 | |
7045 | 3597 userinfo = aim_locate_finduserinfo(od->sess, (char *)od->requesticon->data); |
7011 | 3598 if ((userinfo != NULL) && (userinfo->iconcsumlen > 0)) { |
3599 aim_bart_request(od->sess, od->requesticon->data, userinfo->iconcsum, userinfo->iconcsumlen); | |
4804 | 3600 return FALSE; |
3601 } else { | |
3602 char *sn = od->requesticon->data; | |
3603 od->requesticon = g_slist_remove(od->requesticon, sn); | |
3604 free(sn); | |
3605 } | |
3606 | |
3607 return TRUE; | |
3608 } | |
3609 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3610 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3611 * 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
|
3612 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3613 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3614 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3615 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3616 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3617 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3618 va_start(ap, fr); |
4199 | 3619 type = (fu16_t) va_arg(ap, unsigned int); |
2086 | 3620 sn = va_arg(ap, char *); |
3621 va_end(ap); | |
3622 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3623 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sent message to %s.\n", sn); |
2086 | 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_ratechange(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3629 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3630 "invalid", |
4194 | 3631 "change", |
3632 "warning", | |
3633 "limit", | |
3634 "limit cleared", | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3635 }; |
2086 | 3636 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3637 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3638 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3639 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3640 va_start(ap, fr); |
4200 | 3641 code = (fu16_t)va_arg(ap, unsigned int); |
3642 rateclass= (fu16_t)va_arg(ap, unsigned int); | |
3643 windowsize = va_arg(ap, fu32_t); | |
3644 clear = va_arg(ap, fu32_t); | |
3645 alert = va_arg(ap, fu32_t); | |
3646 limit = va_arg(ap, fu32_t); | |
3647 disconnect = va_arg(ap, fu32_t); | |
3648 currentavg = va_arg(ap, fu32_t); | |
3649 maxavg = va_arg(ap, fu32_t); | |
2086 | 3650 va_end(ap); |
3651 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3652 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
5556 | 3653 "rate %s (param ID 0x%04hx): curavg = %u, maxavg = %u, alert at %u, " |
3654 "clear warning at %u, limit at %u, disconnect at %u (window size = %u)\n", | |
2086 | 3655 (code < 5) ? codes[code] : codes[0], |
3656 rateclass, | |
3657 currentavg, maxavg, | |
3658 alert, clear, | |
3659 limit, disconnect, | |
3660 windowsize); | |
3661 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3662 /* XXX fix these values */ |
2086 | 3663 if (code == AIM_RATE_CODE_CHANGE) { |
3664 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3665 aim_conn_setlatency(fr->conn, 0); |
2086 | 3666 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3667 aim_conn_setlatency(fr->conn, windowsize/4); |
2909
48ec70928d7f
[gaim-migrate @ 2922]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2906
diff
changeset
|
3668 } else if (code == AIM_RATE_CODE_LIMIT) { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
3669 gaim_notify_error(sess->aux_data, NULL, _("Rate limiting error."), |
6040 | 3670 _("The last action you attempted could not be " |
3671 "performed because you are over the rate limit. " | |
3672 "Please wait 10 seconds and try again.")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3673 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 3674 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3675 aim_conn_setlatency(fr->conn, 0); |
2086 | 3676 } |
3677 | |
3678 return 1; | |
3679 } | |
3680 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3681 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 3682 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3683 fu16_t newevil; |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3684 aim_userinfo_t *userinfo; |
5575 | 3685 GaimConnection *gc = sess->aux_data; |
2086 | 3686 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3687 va_start(ap, fr); |
4199 | 3688 newevil = (fu16_t) va_arg(ap, unsigned int); |
2421
95b4ec08abec
[gaim-migrate @ 2434]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2411
diff
changeset
|
3689 userinfo = va_arg(ap, aim_userinfo_t *); |
2086 | 3690 va_end(ap); |
3691 | |
7111 | 3692 serv_got_eviled(gc, (userinfo && userinfo->sn) ? userinfo->sn : NULL, (newevil/10.0) + 0.5); |
2086 | 3693 |
3694 return 1; | |
3695 } | |
3696 | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3697 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
|
3698 va_list ap; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3699 aim_userinfo_t *info; |
5575 | 3700 GaimConnection *gc = sess->aux_data; |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3701 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3702 va_start(ap, fr); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3703 info = va_arg(ap, aim_userinfo_t *); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3704 va_end(ap); |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3705 |
5628 | 3706 gc->evil = (info->warnlevel/10.0) + 0.5; |
4841 | 3707 |
7872 | 3708 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE) |
4841 | 3709 gc->login_time_official = info->onlinesince; |
7872 | 3710 else if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN) |
3711 gc->login_time_official = time(NULL) - info->sessionlen; | |
2507
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3712 |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3713 return 1; |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3714 } |
1069b0940237
[gaim-migrate @ 2520]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
3715 |
4649 | 3716 static int gaim_connerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3717 GaimConnection *gc = sess->aux_data; |
7283 | 3718 OscarData *od = gc->proto_data; |
4649 | 3719 va_list ap; |
3720 fu16_t code; | |
3721 char *msg; | |
3722 | |
3723 va_start(ap, fr); | |
3724 code = (fu16_t)va_arg(ap, int); | |
3725 msg = va_arg(ap, char *); | |
3726 va_end(ap); | |
3727 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3728 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3729 "Disconnected. Code is 0x%04x and msg is %s\n", code, msg); |
4649 | 3730 if ((fr) && (fr->conn) && (fr->conn->type == AIM_CONN_TYPE_BOS)) { |
4651 | 3731 if (code == 0x0001) { |
6113 | 3732 gc->wants_to_die = TRUE; |
5579 | 3733 gaim_connection_error(gc, _("You have been disconnected because you have signed on with this screen name at another location.")); |
4651 | 3734 } else { |
5579 | 3735 gaim_connection_error(gc, _("You have been signed off for an unknown reason.")); |
4651 | 3736 } |
4666 | 3737 od->killme = TRUE; |
4649 | 3738 } |
3739 | |
3740 return 1; | |
3741 } | |
3742 | |
2675 | 3743 static int conninitdone_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
7283 | 3744 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3745 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3746 aim_reqpersonalinfo(sess, fr->conn); |
4230 | 3747 |
3748 #ifndef NOSSI | |
7334 | 3749 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: requesting rights and list\n"); |
4889 | 3750 aim_ssi_reqrights(sess); |
6350 | 3751 aim_ssi_reqdata(sess); |
4230 | 3752 #endif |
3753 | |
7011 | 3754 aim_locate_reqrights(sess); |
7285 | 3755 aim_buddylist_reqrights(sess, fr->conn); |
4617 | 3756 aim_im_reqparams(sess); |
7334 | 3757 aim_bos_reqrights(sess, fr->conn); /* XXX - Don't call this with ssi */ |
4230 | 3758 |
3759 #ifdef NOSSI | |
7334 | 3760 gaim_debug(GAIM_DEBUG_INFO, "oscar", "bos: requesting rights\n"); |
3761 aim_bos_reqrights(sess, fr->conn); | |
4230 | 3762 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); |
3763 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | AIM_PRIVFLAGS_ALLOWMEMBERSINCE); | |
3764 #endif | |
2086 | 3765 |
7283 | 3766 gaim_connection_update_progress(gc, _("Finalizing connection"), 5, OSCAR_CONNECT_STEPS); |
3767 | |
2086 | 3768 return 1; |
3769 } | |
3770 | |
2675 | 3771 static int conninitdone_admin(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3772 GaimConnection *gc = sess->aux_data; |
7283 | 3773 OscarData *od = gc->proto_data; |
2647 | 3774 |
6905 | 3775 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0003, gaim_info_change, 0); |
3776 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0005, gaim_info_change, 0); | |
3777 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_ADM, 0x0007, gaim_account_confirm, 0); | |
3778 | |
2672 | 3779 aim_clientready(sess, fr->conn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3780 gaim_debug(GAIM_DEBUG_INFO, "oscar", "connected to admin\n"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3781 |
2647 | 3782 if (od->chpass) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3783 gaim_debug(GAIM_DEBUG_INFO, "oscar", "changing password\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3784 aim_admin_changepasswd(sess, fr->conn, od->newp, od->oldp); |
2647 | 3785 g_free(od->oldp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3786 od->oldp = NULL; |
2647 | 3787 g_free(od->newp); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3788 od->newp = NULL; |
2647 | 3789 od->chpass = FALSE; |
3790 } | |
2979 | 3791 if (od->setnick) { |
8152 | 3792 gaim_debug(GAIM_DEBUG_INFO, "oscar", "formatting screen name\n"); |
2979 | 3793 aim_admin_setnick(sess, fr->conn, od->newsn); |
3794 g_free(od->newsn); | |
3795 od->newsn = NULL; | |
3796 od->setnick = FALSE; | |
3797 } | |
2647 | 3798 if (od->conf) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3799 gaim_debug(GAIM_DEBUG_INFO, "oscar", "confirming account\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3800 aim_admin_reqconfirm(sess, fr->conn); |
2647 | 3801 od->conf = FALSE; |
3802 } | |
3803 if (od->reqemail) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3804 gaim_debug(GAIM_DEBUG_INFO, "oscar", "requesting email\n"); |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3805 aim_admin_getinfo(sess, fr->conn, 0x0011); |
2647 | 3806 od->reqemail = FALSE; |
3807 } | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3808 if (od->setemail) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3809 gaim_debug(GAIM_DEBUG_INFO, "oscar", "setting email\n"); |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3810 aim_admin_setemail(sess, fr->conn, od->email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3811 g_free(od->email); |
5497 | 3812 od->email = NULL; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3813 od->setemail = FALSE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
3814 } |
2647 | 3815 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3816 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3817 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3818 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3819 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
|
3820 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3821 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3822 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3823 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3824 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3825 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3826 |
4194 | 3827 /* 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
|
3828 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ICBM Parameters: maxchannel = %hu, default flags = 0x%08lx, max msg len = %hu, " |
5556 | 3829 "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
|
3830 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3831 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3832 params->minmsginterval); |
2427
5bc3b39fc0a5
[gaim-migrate @ 2440]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2421
diff
changeset
|
3833 */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3834 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3835 /* Maybe senderwarn and recverwarn should be user preferences... */ |
3595 | 3836 params->flags = 0x0000000b; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3837 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3838 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3839 |
4617 | 3840 aim_im_setparams(sess, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3841 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3842 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3843 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
3844 |
2993 | 3845 static int gaim_parse_locaterights(aim_session_t *sess, aim_frame_t *fr, ...) |
3846 { | |
5575 | 3847 GaimConnection *gc = sess->aux_data; |
7283 | 3848 OscarData *od = (OscarData *)gc->proto_data; |
5306 | 3849 va_list ap; |
3850 fu16_t maxsiglen; | |
2993 | 3851 |
3852 va_start(ap, fr); | |
4199 | 3853 maxsiglen = (fu16_t) va_arg(ap, int); |
2993 | 3854 va_end(ap); |
3855 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3856 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3857 "locate rights: max sig len = %d\n", maxsiglen); |
2993 | 3858 |
4617 | 3859 od->rights.maxsiglen = od->rights.maxawaymsglen = (guint)maxsiglen; |
3860 | |
3861 if (od->icq) | |
7334 | 3862 aim_locate_setcaps(od->sess, caps_icq); |
5301 | 3863 else |
7334 | 3864 aim_locate_setcaps(od->sess, caps_aim); |
3865 oscar_set_info(gc, gc->account->user_info); | |
2993 | 3866 |
3867 return 1; | |
3868 } | |
3869 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3870 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
|
3871 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3872 fu16_t maxbuddies, maxwatchers; |
5575 | 3873 GaimConnection *gc = sess->aux_data; |
7283 | 3874 OscarData *od = (OscarData *)gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3875 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3876 va_start(ap, fr); |
4199 | 3877 maxbuddies = (fu16_t) va_arg(ap, unsigned int); |
3878 maxwatchers = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3879 va_end(ap); |
3880 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3881 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3882 "buddy list rights: Max buddies = %hu / Max watchers = %hu\n", maxbuddies, maxwatchers); |
2086 | 3883 |
4617 | 3884 od->rights.maxbuddies = (guint)maxbuddies; |
3885 od->rights.maxwatchers = (guint)maxwatchers; | |
2993 | 3886 |
2086 | 3887 return 1; |
3888 } | |
3889 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3890 static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 3891 GaimConnection *gc = sess->aux_data; |
7283 | 3892 OscarData *od = (OscarData *)gc->proto_data; |
7334 | 3893 va_list ap; |
3894 fu16_t maxpermits, maxdenies; | |
2086 | 3895 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
3896 va_start(ap, fr); |
4199 | 3897 maxpermits = (fu16_t) va_arg(ap, unsigned int); |
3898 maxdenies = (fu16_t) va_arg(ap, unsigned int); | |
2086 | 3899 va_end(ap); |
3900 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3901 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3902 "BOS rights: Max permit = %hu / Max deny = %hu\n", maxpermits, maxdenies); |
2086 | 3903 |
4617 | 3904 od->rights.maxpermits = (guint)maxpermits; |
3905 od->rights.maxdenies = (guint)maxdenies; | |
2993 | 3906 |
5576
8c398efc88f2
[gaim-migrate @ 5980]
Christian Hammond <chipx86@chipx86.com>
parents:
5575
diff
changeset
|
3907 gaim_connection_set_state(gc, GAIM_CONNECTED); |
2993 | 3908 serv_finish_login(gc); |
3909 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3910 gaim_debug(GAIM_DEBUG_INFO, "oscar", "buddy list loaded\n"); |
2993 | 3911 |
2672 | 3912 aim_clientready(sess, fr->conn); |
5948 | 3913 aim_srv_setavailmsg(sess, NULL); |
7474 | 3914 aim_srv_setidle(sess, 0); |
4617 | 3915 |
4664 | 3916 if (od->icq) { |
3917 aim_icq_reqofflinemsgs(sess); | |
3918 aim_icq_hideip(sess); | |
3919 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3920 |
2703
441b84ab7f4e
[gaim-migrate @ 2716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2698
diff
changeset
|
3921 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
4102 | 3922 if (sess->authinfo->email) |
3923 aim_reqservice(sess, fr->conn, AIM_CONN_TYPE_EMAIL); | |
2086 | 3924 |
3925 return 1; | |
3926 } | |
3927 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3928 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
|
3929 va_list ap; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3930 struct aim_icq_offlinemsg *msg; |
4075 | 3931 struct aim_incomingim_ch4_args args; |
3932 time_t t; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3933 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3934 va_start(ap, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3935 msg = va_arg(ap, struct aim_icq_offlinemsg *); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3936 va_end(ap); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3937 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3938 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
3939 "Received offline message. Converting to channel 4 ICBM...\n"); |
4075 | 3940 args.uin = msg->sender; |
3941 args.type = msg->type; | |
4173 | 3942 args.flags = msg->flags; |
4076 | 3943 args.msglen = msg->msglen; |
4075 | 3944 args.msg = msg->msg; |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3945 t = gaim_time_build(msg->year, msg->month, msg->day, msg->hour, msg->minute, 0); |
4075 | 3946 incomingim_chan4(sess, fr->conn, NULL, &args, t); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3947 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3948 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3949 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3950 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3951 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
|
3952 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3953 aim_icq_ackofflinemsgs(sess); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3954 return 1; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3955 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2704
diff
changeset
|
3956 |
7388 | 3957 #if 0 |
3958 /* | |
7465 | 3959 * Update, 2003-11-09: |
3960 * Joseph S. Myers, a gcc dude, fixed this for gcc 3.4! Rock on! | |
3961 * | |
7388 | 3962 * It may not be my place to do this, but... |
3963 * I feel pretty strongly that the "last 2 digits" warning is ridiculously | |
3964 * stupid, and should not exist for % switches (%x in our case) that request | |
3965 * a year in the preferred representation for the current locale. For that | |
3966 * reason I've chosen to not use this workaround (n., see kluge). | |
3967 * | |
3968 * I have a date. I want to show it to the user in the "preferred" way. | |
3969 * Whether that displays a 2 digit year is perfectly fine--after all, it's | |
3970 * what the locale wanted. | |
3971 * | |
3972 * If I have a necessity for a full representation of the year in the current | |
3973 * locale, then I'll use a switch that returns a full representation of the | |
3974 * year. | |
3975 * | |
3976 * If you think the preferred locale should show 4 digits instead of 2 digits | |
3977 * (because you're anal, or whatever), then change the f***ing locale. | |
3978 * | |
3979 * I guess the bottom line is--I'm trying to show a date to the user how they | |
3980 * prefer to see it, why the hell does gcc want me to change that? | |
7389 | 3981 * |
3982 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=3190 | |
3983 * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=8714 | |
7388 | 3984 */ |
3985 | |
3986 /* | |
3987 * This function was recommended by the STRFTIME(3) man page to remove the | |
7386 | 3988 * "last 2 digits" warning. |
3989 */ | |
3990 static size_t my_strftime(char *s, size_t max, const char *fmt, | |
3991 const struct tm *tm) | |
3992 { | |
3993 return strftime(s, max, fmt, tm); | |
3994 } | |
7388 | 3995 #endif |
7386 | 3996 |
4624 | 3997 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
|
3998 { |
5575 | 3999 GaimConnection *gc = sess->aux_data; |
4819 | 4000 gchar *buf, *tmp, *utf8; |
4624 | 4001 gchar who[16]; |
6873 | 4002 GaimBuddy *buddy; |
4003 gchar *primary; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4004 va_list ap; |
4151 | 4005 struct aim_icq_info *info; |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4006 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4007 va_start(ap, fr); |
4151 | 4008 info = va_arg(ap, struct aim_icq_info *); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4009 va_end(ap); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4010 |
4664 | 4011 if (!info->uin) |
4012 return 0; | |
4013 | |
5556 | 4014 g_snprintf(who, sizeof(who), "%u", info->uin); |
6623 | 4015 buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who); |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4016 if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
6623 | 4017 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 4018 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4019 if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) { |
6623 | 4020 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 4021 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4022 if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) { |
6623 | 4023 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4819 | 4024 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4025 if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) { |
6623 | 4026 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 | 4027 } |
4028 if (info->numaddresses && info->email2) { | |
4029 int i; | |
4030 for (i = 0; i < info->numaddresses; i++) { | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4031 if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) { |
6623 | 4032 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 | 4033 } |
4625 | 4034 } |
4624 | 4035 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4036 if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) { |
6623 | 4037 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4625 | 4038 } |
4039 if (info->gender) { | |
6623 | 4040 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Gender"), ":</b> ", info->gender==1 ? _("Female") : _("Male"), NULL); g_free(tmp); |
4151 | 4041 } |
4624 | 4042 if (info->birthyear || info->birthmonth || info->birthday) { |
4627 | 4043 char date[30]; |
4044 struct tm tm; | |
4045 tm.tm_mday = (int)info->birthday; | |
4046 tm.tm_mon = (int)info->birthmonth-1; | |
4047 tm.tm_year = (int)info->birthyear-1900; | |
7388 | 4048 strftime(date, sizeof(date), "%x", &tm); |
6623 | 4049 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Birthday"), ":</b> ", date, NULL); g_free(tmp); |
4151 | 4050 } |
4624 | 4051 if (info->age) { |
4052 char age[5]; | |
4053 snprintf(age, sizeof(age), "%hhd", info->age); | |
6623 | 4054 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp); |
4819 | 4055 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4056 if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) { |
6623 | 4057 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 | 4058 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4059 if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) { |
6623 | 4060 tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4061 } |
4062 tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp); | |
4641 | 4063 if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) { |
6623 | 4064 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
|
4065 if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) { |
6623 | 4066 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4067 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4068 if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) { |
6623 | 4069 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4070 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4071 if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) { |
6623 | 4072 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4073 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4074 if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) { |
6623 | 4075 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4076 } |
4077 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4078 } |
4641 | 4079 if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) { |
6623 | 4080 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
|
4081 if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) { |
6623 | 4082 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4083 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4084 if (info->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) { |
6623 | 4085 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4086 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4087 if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) { |
6623 | 4088 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4089 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4090 if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) { |
6623 | 4091 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4092 } |
4093 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4094 } | |
4641 | 4095 if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) { |
6623 | 4096 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
|
4097 if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) { |
6623 | 4098 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4099 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4100 if (info->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) { |
6623 | 4101 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4102 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4103 if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) { |
6623 | 4104 tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8); |
4624 | 4105 } |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4106 if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) { |
6623 | 4107 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 | 4108 } |
4109 tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp); | |
4151 | 4110 } |
4111 | |
6873 | 4112 buddy = gaim_find_buddy(gaim_connection_get_account(gc), who); |
4113 primary = g_strdup_printf(_("ICQ Info for %s"), gaim_get_buddy_alias(buddy)); | |
4114 gaim_notify_formatted(gc, NULL, primary, NULL, buf, NULL, NULL); | |
4115 g_free(primary); | |
4151 | 4116 g_free(buf); |
4117 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4118 return 1; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4119 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4120 |
4759 | 4121 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...) |
4122 { | |
5575 | 4123 GaimConnection *gc = sess->aux_data; |
4820 | 4124 gchar who[16], *utf8; |
6695 | 4125 GaimBuddy *b; |
4759 | 4126 va_list ap; |
4127 struct aim_icq_info *info; | |
4128 | |
4129 va_start(ap, fr); | |
4130 info = va_arg(ap, struct aim_icq_info *); | |
4131 va_end(ap); | |
4132 | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4133 if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) { |
5556 | 4134 g_snprintf(who, sizeof(who), "%u", info->uin); |
4820 | 4135 serv_got_alias(gc, who, utf8); |
4759 | 4136 if ((b = gaim_find_buddy(gc->account, who))) { |
7693 | 4137 gaim_blist_node_set_string((GaimBlistNode*)b, "servernick", utf8); |
4759 | 4138 gaim_blist_save(); |
4139 } | |
4820 | 4140 g_free(utf8); |
4759 | 4141 } |
4142 | |
4143 return 1; | |
4144 } | |
4145 | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4146 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
|
4147 { |
7032 | 4148 GaimConnection *gc = sess->aux_data; |
4149 gchar *text; | |
4150 va_list ap; | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4151 char *msg, *url; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4152 fu16_t wid, hei, delay; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4153 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4154 va_start(ap, fr); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4155 msg = va_arg(ap, char *); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4156 url = va_arg(ap, char *); |
4199 | 4157 wid = (fu16_t) va_arg(ap, int); |
4158 hei = (fu16_t) va_arg(ap, int); | |
4159 delay = (fu16_t) va_arg(ap, int); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4160 va_end(ap); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4161 |
7032 | 4162 text = g_strdup_printf("%s<br><a href=\"%s\">%s</a>", msg, url, url); |
4163 gaim_notify_formatted(gc, NULL, _("Pop-Up Message"), NULL, text, NULL, NULL); | |
4164 g_free(text); | |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4165 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4166 return 1; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4167 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
4168 |
7032 | 4169 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) |
4170 { | |
6873 | 4171 GaimConnection *gc = sess->aux_data; |
4172 gchar *secondary; | |
4173 GString *text; | |
4174 int i, num; | |
2086 | 4175 va_list ap; |
6873 | 4176 char *email, *SNs; |
2086 | 4177 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4178 va_start(ap, fr); |
6873 | 4179 email = va_arg(ap, char *); |
2086 | 4180 num = va_arg(ap, int); |
4181 SNs = va_arg(ap, char *); | |
4182 va_end(ap); | |
4183 | |
8152 | 4184 secondary = g_strdup_printf(_("The following screen names are associated with %s"), email); |
6873 | 4185 text = g_string_new(""); |
2086 | 4186 for (i = 0; i < num; i++) |
6873 | 4187 g_string_append_printf(text, "%s<br>", &SNs[i * (MAXSNLEN + 1)]); |
4188 gaim_notify_formatted(gc, NULL, _("Search Results"), secondary, text->str, NULL, NULL); | |
4189 | |
4190 g_free(secondary); | |
4191 g_string_free(text, TRUE); | |
2086 | 4192 |
4193 return 1; | |
4194 } | |
4195 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4196 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 4197 va_list ap; |
6873 | 4198 char *email; |
5420 | 4199 char *buf; |
2086 | 4200 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4201 va_start(ap, fr); |
6873 | 4202 email = va_arg(ap, char *); |
2086 | 4203 va_end(ap); |
4204 | |
6873 | 4205 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
|
4206 gaim_notify_error(sess->aux_data, NULL, buf, NULL); |
5420 | 4207 g_free(buf); |
2086 | 4208 |
4209 return 1; | |
4210 } | |
4211 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4212 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
6873 | 4213 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4214 fu16_t status; |
2086 | 4215 va_list ap; |
4216 char msg[256]; | |
4217 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4218 va_start(ap, fr); |
4199 | 4219 status = (fu16_t) va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 4220 va_end(ap); |
4221 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4222 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4223 "account confirmation returned status 0x%04x (%s)\n", status, |
3912 | 4224 status ? "unknown" : "email sent"); |
4225 if (!status) { | |
5302 | 4226 g_snprintf(msg, sizeof(msg), _("You should receive an email asking to confirm %s."), |
5575 | 4227 gaim_account_get_username(gaim_connection_get_account(gc))); |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4228 gaim_notify_info(gc, NULL, _("Account Confirmation Requested"), msg); |
2086 | 4229 } |
4230 | |
4231 return 1; | |
4232 } | |
4233 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4234 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4235 GaimConnection *gc = sess->aux_data; |
2086 | 4236 va_list ap; |
3912 | 4237 fu16_t perms, err; |
4238 char *url, *sn, *email; | |
4239 int change; | |
2086 | 4240 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4241 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
4242 change = va_arg(ap, int); |
4199 | 4243 perms = (fu16_t) va_arg(ap, unsigned int); |
4244 err = (fu16_t) va_arg(ap, unsigned int); | |
3912 | 4245 url = va_arg(ap, char *); |
4246 sn = va_arg(ap, char *); | |
4247 email = va_arg(ap, char *); | |
2086 | 4248 va_end(ap); |
4249 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4250 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4251 "account info: because of %s, perms=0x%04x, err=0x%04x, url=%s, sn=%s, email=%s\n", |
3912 | 4252 change ? "change" : "request", perms, err, url, sn, email); |
4253 | |
4254 if (err && url) { | |
4255 char *dialog_msg; | |
4256 char *dialog_top = g_strdup_printf(_("Error Changing Account Info")); | |
4257 switch (err) { | |
4258 case 0x0001: { | |
4259 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name differs from the original."), err); | |
4260 } break; | |
4261 case 0x0006: { | |
4262 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name ends in a space."), err); | |
4263 } break; | |
4264 case 0x000b: { | |
4265 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to format screen name because the requested screen name is too long."), err); | |
4266 } break; | |
4267 case 0x001d: { | |
4268 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); | |
4269 } break; | |
4270 case 0x0021: { | |
4271 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); | |
4272 } break; | |
4273 case 0x0023: { | |
4274 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unable to change email address because the given address is invalid."), err); | |
4275 } break; | |
4276 default: { | |
4277 dialog_msg = g_strdup_printf(_("Error 0x%04x: Unknown error."), err); | |
4278 } break; | |
4279 } | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4280 gaim_notify_error(gc, NULL, dialog_top, dialog_msg); |
3912 | 4281 g_free(dialog_top); |
4282 g_free(dialog_msg); | |
4283 return 1; | |
4284 } | |
4285 | |
4286 if (sn) { | |
4585 | 4287 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
|
4288 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4289 g_free(dialog_msg); |
4290 } | |
4291 | |
4292 if (email) { | |
5575 | 4293 char *dialog_msg = g_strdup_printf(_("The email address for %s is %s"), |
4294 gaim_account_get_username(gaim_connection_get_account(gc)), email); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4295 gaim_notify_info(gc, NULL, _("Account Info"), dialog_msg); |
3912 | 4296 g_free(dialog_msg); |
2086 | 4297 } |
4298 | |
4299 return 1; | |
4300 } | |
4301 | |
5575 | 4302 static void oscar_keepalive(GaimConnection *gc) { |
7283 | 4303 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4304 aim_flap_nop(od->sess, od->conn); |
2086 | 4305 } |
4306 | |
6059 | 4307 static int oscar_send_typing(GaimConnection *gc, const char *name, int typing) { |
7283 | 4308 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4309 struct direct_im *dim = find_direct_im(od, name); |
3595 | 4310 if (dim) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4311 if (typing == GAIM_TYPING) |
4870 | 4312 aim_odc_send_typing(od->sess, dim->conn, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4313 else if (typing == GAIM_TYPED) |
4870 | 4314 aim_odc_send_typing(od->sess, dim->conn, 0x0001); |
4315 else | |
4316 aim_odc_send_typing(od->sess, dim->conn, 0x0000); | |
3595 | 4317 else { |
5300 | 4318 /* Don't send if this turkey is in our deny list */ |
4319 GSList *list; | |
4320 for (list=gc->account->deny; (list && aim_sncmp(name, list->data)); list=list->next); | |
4321 if (!list) { | |
7261 | 4322 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
5300 | 4323 if (bi && bi->typingnot) { |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4324 if (typing == GAIM_TYPING) |
5300 | 4325 aim_im_sendmtn(od->sess, 0x0001, name, 0x0002); |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
4326 else if (typing == GAIM_TYPED) |
5300 | 4327 aim_im_sendmtn(od->sess, 0x0001, name, 0x0001); |
4328 else | |
4329 aim_im_sendmtn(od->sess, 0x0001, name, 0x0000); | |
4330 } | |
3595 | 4331 } |
4332 } | |
2993 | 4333 return 0; |
4334 } | |
5575 | 4335 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
|
4336 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
|
4337 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4338 static int oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimConvImFlags imflags) { |
7283 | 4339 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4340 struct direct_im *dim = find_direct_im(od, name); |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4341 int ret = 0; |
3659 | 4342 GError *err = NULL; |
5575 | 4343 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
|
4344 char *tmpmsg = NULL; |
3458 | 4345 |
4838 | 4346 if (dim && dim->connected) { |
4347 /* If we're directly connected, send a direct IM */ | |
6982 | 4348 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
|
4349 } else if (imflags & GAIM_CONV_IM_IMAGES) { |
3044 | 4350 /* Trying to send an IM image outside of a direct connection. */ |
4351 oscar_ask_direct_im(gc, name); | |
4838 | 4352 ret = -ENOTCONN; |
2086 | 4353 } else { |
4738 | 4354 struct buddyinfo *bi; |
3008 | 4355 struct aim_sendimext_args args; |
4356 struct stat st; | |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4357 gsize len; |
4269 | 4358 |
7261 | 4359 bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, name)); |
4738 | 4360 if (!bi) { |
4361 bi = g_new0(struct buddyinfo, 1); | |
7261 | 4362 g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, name)), bi); |
4738 | 4363 } |
4364 | |
3008 | 4365 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
4665 | 4366 if (od->icq) { |
4367 args.features = features_icq; | |
4368 args.featureslen = sizeof(features_icq); | |
3008 | 4369 args.flags |= AIM_IMFLAGS_OFFLINE; |
4665 | 4370 } else { |
4371 args.features = features_aim; | |
4372 args.featureslen = sizeof(features_aim); | |
4972 | 4373 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
4374 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
4972 | 4375 args.flags |= AIM_IMFLAGS_AWAY; |
4665 | 4376 } |
4269 | 4377 |
4738 | 4378 if (bi->ico_need) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4379 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4380 "Sending buddy icon request with message\n"); |
3008 | 4381 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
4738 | 4382 bi->ico_need = FALSE; |
3008 | 4383 } |
4269 | 4384 |
5575 | 4385 if (iconfile && !stat(iconfile, &st)) { |
4386 FILE *file = fopen(iconfile, "r"); | |
3008 | 4387 if (file) { |
4388 char *buf = g_malloc(st.st_size); | |
4389 fread(buf, 1, st.st_size, file); | |
6039 | 4390 fclose(file); |
4269 | 4391 |
3008 | 4392 args.iconlen = st.st_size; |
4617 | 4393 args.iconsum = aimutil_iconsum(buf, st.st_size); |
3008 | 4394 args.iconstamp = st.st_mtime; |
4395 | |
7406 | 4396 if ((args.iconlen != bi->ico_me_len) || (args.iconsum != bi->ico_me_csum) || (args.iconstamp != bi->ico_me_time)) { |
4738 | 4397 bi->ico_informed = FALSE; |
7406 | 4398 bi->ico_sent = FALSE; |
4399 } | |
4738 | 4400 |
4401 if (!bi->ico_informed) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4402 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4403 "Claiming to have a buddy icon\n"); |
4738 | 4404 args.flags |= AIM_IMFLAGS_HASICON; |
4405 bi->ico_me_len = args.iconlen; | |
4406 bi->ico_me_csum = args.iconsum; | |
4407 bi->ico_me_time = args.iconstamp; | |
4408 bi->ico_informed = TRUE; | |
4409 } | |
4410 | |
3008 | 4411 g_free(buf); |
2086 | 4412 } |
4413 } | |
4269 | 4414 |
3008 | 4415 args.destsn = name; |
4269 | 4416 |
6310 | 4417 /* For ICQ send newlines as CR/LF, for AIM send newlines as <BR> */ |
4418 if (isdigit(name[0])) | |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4419 tmpmsg = gaim_str_add_cr(message); |
6310 | 4420 else |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4421 tmpmsg = gaim_strdup_withhtml(message); |
6310 | 4422 len = strlen(tmpmsg); |
4423 | |
4424 args.flags |= oscar_encoding_check(tmpmsg); | |
3642 | 4425 if (args.flags & AIM_IMFLAGS_UNICODE) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4426 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n"); |
4662 | 4427 args.charset = 0x0002; |
4665 | 4428 args.charsubset = 0x0000; |
6310 | 4429 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF-8", NULL, &len, &err); |
3659 | 4430 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4431 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4432 "Error converting a unicode message: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4433 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4434 "This really shouldn't happen!\n"); |
3659 | 4435 /* We really shouldn't try to send the |
4436 * IM now, but I'm not sure what to do */ | |
4800 | 4437 g_error_free(err); |
3659 | 4438 } |
3850 | 4439 } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4440 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4441 "Sending ISO-8859-1 IM\n"); |
4662 | 4442 args.charset = 0x0003; |
4665 | 4443 args.charsubset = 0x0000; |
6310 | 4444 args.msg = g_convert(tmpmsg, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); |
3659 | 4445 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4446 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4447 "conversion error: %s\n", err->message); |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4448 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4449 "Someone tell Ethan his 8859-1 detection is wrong\n"); |
3642 | 4450 args.flags ^= AIM_IMFLAGS_ISO_8859_1 | AIM_IMFLAGS_UNICODE; |
6310 | 4451 len = strlen(tmpmsg); |
4800 | 4452 g_error_free(err); |
6310 | 4453 args.msg = g_convert(tmpmsg, len, "UCS-2BE", "UTF8", NULL, &len, &err); |
3659 | 4454 if (err) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4455 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4456 "Error in unicode fallback: %s\n", err->message); |
4800 | 4457 g_error_free(err); |
3659 | 4458 } |
3642 | 4459 } |
4460 } else { | |
4662 | 4461 args.charset = 0x0000; |
4462 args.charsubset = 0x0000; | |
6310 | 4463 args.msg = tmpmsg; |
3642 | 4464 } |
4465 args.msglen = len; | |
4269 | 4466 |
4617 | 4467 ret = aim_im_sendch1_ext(od->sess, &args); |
2086 | 4468 } |
4838 | 4469 |
6310 | 4470 g_free(tmpmsg); |
4471 | |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4472 if (ret >= 0) |
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4473 return 1; |
6310 | 4474 |
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2297
diff
changeset
|
4475 return ret; |
2086 | 4476 } |
4477 | |
7011 | 4478 static void oscar_get_info(GaimConnection *gc, const char *name) { |
7283 | 4479 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4480 |
7173 | 4481 if (od->icq && isdigit(name[0])) |
4624 | 4482 aim_icq_getallinfo(od->sess, name); |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2734
diff
changeset
|
4483 else |
7235 | 4484 aim_locate_getinfoshort(od->sess, name, 0x00000003); |
7011 | 4485 } |
4486 | |
4487 static void oscar_get_away(GaimConnection *gc, const char *who) { | |
7283 | 4488 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4489 if (od->icq) { |
7011 | 4490 GaimBuddy *budlight = gaim_find_buddy(gc->account, who); |
3212 | 4491 if (budlight) |
3595 | 4492 if ((budlight->uc & 0xffff0000) >> 16) |
4687 | 4493 aim_im_sendch2_geticqaway(od->sess, who, (budlight->uc & 0xffff0000) >> 16); |
3212 | 4494 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4495 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4496 "Error: The user %s has no status message, therefore not requesting.\n", who); |
3212 | 4497 else |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4498 gaim_debug(GAIM_DEBUG_ERROR, "oscar", |
7023 | 4499 "Error: Could not find %s in local buddy list, therefore unable to request status message.\n", who); |
3212 | 4500 } else |
7011 | 4501 aim_locate_getinfoshort(od->sess, who, 0x00000002); |
4502 } | |
4503 | |
4504 static void oscar_set_dir(GaimConnection *gc, const char *first, const char *middle, const char *last, | |
3466 | 4505 const char *maiden, const char *city, const char *state, const char *country, int web) { |
4617 | 4506 /* XXX - some of these things are wrong, but i'm lazy */ |
7283 | 4507 OscarData *od = (OscarData *)gc->proto_data; |
7011 | 4508 aim_locate_setdirinfo(od->sess, first, middle, last, |
2086 | 4509 maiden, NULL, NULL, city, state, NULL, 0, web); |
4510 } | |
4511 | |
5575 | 4512 static void oscar_set_idle(GaimConnection *gc, int time) { |
7283 | 4513 OscarData *od = (OscarData *)gc->proto_data; |
7474 | 4514 aim_srv_setidle(od->sess, time); |
2086 | 4515 } |
4516 | |
5954 | 4517 static void oscar_set_info(GaimConnection *gc, const char *text) { |
7283 | 4518 OscarData *od = (OscarData *)gc->proto_data; |
5129 | 4519 fu32_t flags = 0; |
6019 | 4520 char *text_html = NULL; |
5129 | 4521 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4522 gsize msglen = 0; |
2993 | 4523 |
4617 | 4524 if (od->rights.maxsiglen == 0) |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4525 gaim_notify_warning(gc, NULL, _("Unable to set AIM profile."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4526 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4527 "profile before the login procedure completed. " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4528 "Your profile remains unset; try setting it " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4529 "again when you are fully connected.")); |
4617 | 4530 |
7334 | 4531 if (!text) { |
4532 aim_locate_setprofile(od->sess, NULL, "", 0, NULL, NULL, 0); | |
4533 return; | |
4534 } | |
6019 | 4535 |
7334 | 4536 text_html = gaim_strdup_withhtml(text); |
4537 flags = oscar_encoding_check(text_html); | |
4538 if (flags & AIM_IMFLAGS_UNICODE) { | |
4539 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); | |
4540 aim_locate_setprofile(od->sess, "unicode-2-0", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4541 g_free(msg); | |
4542 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
4543 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); | |
4544 aim_locate_setprofile(od->sess, "iso-8859-1", msg, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4545 g_free(msg); | |
4546 } else { | |
4547 msglen = strlen(text_html); | |
4548 aim_locate_setprofile(od->sess, "us-ascii", text_html, (msglen > od->rights.maxsiglen ? od->rights.maxsiglen : msglen), NULL, NULL, 0); | |
4549 } | |
4550 | |
4551 if (msglen > od->rights.maxsiglen) { | |
4552 gchar *errstr; | |
4553 errstr = g_strdup_printf(ngettext("The maximum profile length of %d byte " | |
4554 "has been exceeded. Gaim has truncated it for you.", | |
4555 "The maximum profile length of %d bytes " | |
4556 "has been exceeded. Gaim has truncated it for you.", | |
4557 od->rights.maxsiglen), od->rights.maxsiglen); | |
4558 gaim_notify_warning(gc, NULL, _("Profile too long."), errstr); | |
4559 g_free(errstr); | |
4560 } | |
4561 | |
4562 g_free(text_html); | |
2993 | 4563 |
4564 return; | |
2086 | 4565 } |
4566 | |
7283 | 4567 static void oscar_set_away_aim(GaimConnection *gc, OscarData *od, const char *text) |
2993 | 4568 { |
5129 | 4569 fu32_t flags = 0; |
6019 | 4570 gchar *text_html = NULL; |
5129 | 4571 char *msg = NULL; |
6478
338147ea6896
[gaim-migrate @ 6991]
Christian Hammond <chipx86@chipx86.com>
parents:
6465
diff
changeset
|
4572 gsize msglen = 0; |
2993 | 4573 |
4574 if (od->rights.maxawaymsglen == 0) | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4575 gaim_notify_warning(gc, NULL, _("Unable to set AIM away message."), |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4576 _("You have probably requested to set your " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4577 "away message before the login procedure " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4578 "completed. You remain in a \"present\" " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4579 "state; try setting it again when you are " |
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4580 "fully connected.")); |
5129 | 4581 |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4582 if (gc->away) { |
2993 | 4583 g_free(gc->away); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4584 gc->away = NULL; |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4585 } |
2993 | 4586 |
5129 | 4587 if (!text) { |
7334 | 4588 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4589 return; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4590 } |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4591 |
7108
6faeeecab0dc
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4592 text_html = gaim_strdup_withhtml(text); |
6019 | 4593 flags = oscar_encoding_check(text_html); |
5129 | 4594 if (flags & AIM_IMFLAGS_UNICODE) { |
6019 | 4595 msg = g_convert(text_html, strlen(text_html), "UCS-2BE", "UTF-8", NULL, &msglen, NULL); |
7011 | 4596 aim_locate_setprofile(od->sess, NULL, NULL, 0, "unicode-2-0", msg, |
7334 | 4597 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4598 g_free(msg); |
4599 gc->away = g_strndup(text, od->rights.maxawaymsglen/2); | |
4600 } else if (flags & AIM_IMFLAGS_ISO_8859_1) { | |
6019 | 4601 msg = g_convert(text_html, strlen(text_html), "ISO-8859-1", "UTF-8", NULL, &msglen, NULL); |
7011 | 4602 aim_locate_setprofile(od->sess, NULL, NULL, 0, "iso-8859-1", msg, |
7334 | 4603 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
5129 | 4604 g_free(msg); |
6019 | 4605 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4606 } else { |
6019 | 4607 msglen = strlen(text_html); |
7011 | 4608 aim_locate_setprofile(od->sess, NULL, NULL, 0, "us-ascii", text_html, |
7334 | 4609 (msglen > od->rights.maxawaymsglen ? od->rights.maxawaymsglen : msglen)); |
6019 | 4610 gc->away = g_strndup(text_html, od->rights.maxawaymsglen); |
5129 | 4611 } |
4612 | |
4613 if (msglen > od->rights.maxawaymsglen) { | |
2993 | 4614 gchar *errstr; |
4615 | |
6308 | 4616 errstr = g_strdup_printf(ngettext("The maximum away message length of %d byte " |
4617 "has been exceeded. Gaim has truncated it for you.", | |
4618 "The maximum away message length of %d bytes " | |
4619 "has been exceeded. Gaim has truncated it for you.", | |
4620 od->rights.maxawaymsglen), od->rights.maxawaymsglen); | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
4621 gaim_notify_warning(gc, NULL, _("Away message too long."), errstr); |
2993 | 4622 g_free(errstr); |
4623 } | |
6019 | 4624 |
4625 g_free(text_html); | |
2993 | 4626 return; |
4627 } | |
4628 | |
7283 | 4629 static void oscar_set_away_icq(GaimConnection *gc, OscarData *od, const char *state, const char *message) |
2993 | 4630 { |
5575 | 4631 GaimAccount *account = gaim_connection_get_account(gc); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4632 if (gc->away) { |
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4633 g_free(gc->away); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4634 gc->away = NULL; |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4635 } |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4636 |
4342 | 4637 if (strcmp(state, _("Invisible"))) { |
5575 | 4638 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != account->perm_deny)) |
4639 aim_ssi_setpermdeny(od->sess, account->perm_deny, 0xffffffff); | |
4640 account->perm_deny = 4; | |
4342 | 4641 } else { |
5542 | 4642 if ((od->sess->ssi.received_data) && (aim_ssi_getpermdeny(od->sess->ssi.local) != 0x03)) |
4889 | 4643 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); |
5575 | 4644 account->perm_deny = 3; |
4342 | 4645 } |
4646 | |
4647 if (!strcmp(state, _("Online"))) | |
4901 | 4648 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
4342 | 4649 else if (!strcmp(state, _("Away"))) { |
4901 | 4650 aim_setextstatus(od->sess, AIM_ICQ_STATE_AWAY); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4651 gc->away = g_strdup(""); |
4342 | 4652 } else if (!strcmp(state, _("Do Not Disturb"))) { |
4901 | 4653 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
|
4654 gc->away = g_strdup(""); |
4342 | 4655 } else if (!strcmp(state, _("Not Available"))) { |
4901 | 4656 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
|
4657 gc->away = g_strdup(""); |
4342 | 4658 } else if (!strcmp(state, _("Occupied"))) { |
4901 | 4659 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
|
4660 gc->away = g_strdup(""); |
4342 | 4661 } else if (!strcmp(state, _("Free For Chat"))) { |
4901 | 4662 aim_setextstatus(od->sess, AIM_ICQ_STATE_CHAT); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4663 gc->away = g_strdup(""); |
4342 | 4664 } else if (!strcmp(state, _("Invisible"))) { |
4901 | 4665 aim_setextstatus(od->sess, AIM_ICQ_STATE_INVISIBLE); |
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4102
diff
changeset
|
4666 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4667 } else if (!strcmp(state, GAIM_AWAY_CUSTOM)) { |
2998 | 4668 if (message) { |
4901 | 4669 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
|
4670 gc->away = g_strdup(""); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4671 } else { |
4901 | 4672 aim_setextstatus(od->sess, AIM_ICQ_STATE_NORMAL); |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
4673 } |
2086 | 4674 } |
2993 | 4675 |
4676 return; | |
4677 } | |
4678 | |
6059 | 4679 static void oscar_set_away(GaimConnection *gc, const char *state, const char *message) |
2993 | 4680 { |
7283 | 4681 OscarData *od = (OscarData *)gc->proto_data; |
2993 | 4682 |
4683 if (od->icq) | |
4684 oscar_set_away_icq(gc, od, state, message); | |
4685 else | |
4686 oscar_set_away_aim(gc, od, message); | |
4687 | |
4688 return; | |
2086 | 4689 } |
4690 | |
6059 | 4691 static void oscar_warn(GaimConnection *gc, const char *name, int anon) { |
7283 | 4692 OscarData *od = (OscarData *)gc->proto_data; |
4617 | 4693 aim_im_warn(od->sess, od->conn, name, anon ? AIM_WARN_ANON : 0); |
2086 | 4694 } |
4695 | |
5575 | 4696 static void oscar_dir_search(GaimConnection *gc, const char *first, const char *middle, const char *last, |
3466 | 4697 const char *maiden, const char *city, const char *state, const char *country, const char *email) { |
7283 | 4698 OscarData *od = (OscarData *)gc->proto_data; |
2086 | 4699 if (strlen(email)) |
6879 | 4700 aim_search_address(od->sess, od->conn, email); |
2086 | 4701 } |
4702 | |
6787
faa491042c66
[gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4703 static void oscar_add_buddy(GaimConnection *gc, const char *name, GaimGroup *g) { |
7283 | 4704 OscarData *od = (OscarData *)gc->proto_data; |
8150 | 4705 GaimBuddy *b; |
4706 | |
4707 if (g == NULL) { | |
4708 /* If we were called from oscar_add_buddies... */ | |
4709 b = gaim_find_buddy(gaim_connection_get_account(gc), name); | |
4710 g = gaim_find_buddys_group(b); | |
4711 } else | |
4712 b = gaim_find_buddy_in_group(gaim_connection_get_account(gc), name, g); | |
8092 | 4713 |
4714 if (!aim_snvalid(name)) { | |
4715 gchar *buf; | |
8150 | 4716 buf = g_strdup_printf(_("Could not add the buddy %s because the screen name is invalid. Screen names must either start with a letter and contain only letters, numbers and spaces, or contain only numbers."), name); |
8092 | 4717 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4718 g_free(buf); | |
8150 | 4719 |
4720 /* Remove from local list */ | |
4721 gaim_blist_remove_buddy(b); | |
4722 | |
8092 | 4723 return; |
4724 } | |
4725 | |
4230 | 4726 #ifdef NOSSI |
8143 | 4727 aim_buddylist_addbuddy(od->sess, od->conn, name); |
4230 | 4728 #else |
4729 if ((od->sess->ssi.received_data) && !(aim_ssi_itemlist_exists(od->sess->ssi.local, name))) { | |
8150 | 4730 if (b && g) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4731 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
8150 | 4732 "ssi: adding buddy %s to group %s\n", name, g->name); |
4733 aim_ssi_addbuddy(od->sess, b->name, g->name, gaim_get_buddy_alias_only(b), NULL, NULL, 0); | |
4230 | 4734 } |
4735 } | |
4736 #endif | |
8150 | 4737 |
4759 | 4738 if (od->icq) |
4739 aim_icq_getalias(od->sess, name); | |
4230 | 4740 } |
4741 | |
5575 | 4742 static void oscar_add_buddies(GaimConnection *gc, GList *buddies) { |
7283 | 4743 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4744 #ifdef NOSSI |
4745 char buf[MSG_LEN]; | |
4746 int n=0; | |
4747 while (buddies) { | |
4748 if (n > MSG_LEN - 18) { | |
7285 | 4749 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4750 n = 0; |
3092 | 4751 } |
8150 | 4752 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (const char *)buddies->data); |
4230 | 4753 buddies = buddies->next; |
4754 } | |
7285 | 4755 aim_buddylist_set(od->sess, od->conn, buf); |
4230 | 4756 #else |
4757 if (od->sess->ssi.received_data) { | |
4758 while (buddies) { | |
8092 | 4759 oscar_add_buddy(gc, buddies->data, NULL); |
4230 | 4760 buddies = buddies->next; |
4761 } | |
4762 } | |
4763 #endif | |
4764 } | |
4765 | |
6059 | 4766 static void oscar_remove_buddy(GaimConnection *gc, const char *name, const char *group) { |
7283 | 4767 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4768 #ifdef NOSSI |
8143 | 4769 aim_buddylist_removebuddy(od->sess, od->conn, name); |
4230 | 4770 #else |
4771 if (od->sess->ssi.received_data) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4772 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4773 "ssi: deleting buddy %s from group %s\n", name, group); |
4889 | 4774 aim_ssi_delbuddy(od->sess, name, group); |
4230 | 4775 } |
4776 #endif | |
4777 } | |
4778 | |
5575 | 4779 static void oscar_remove_buddies(GaimConnection *gc, GList *buddies, const char *group) { |
7283 | 4780 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4781 #ifdef NOSSI |
4782 GList *cur; | |
4783 for (cur=buddies; cur; cur=cur->next) | |
8143 | 4784 aim_buddylist_removebuddy(od->sess, od->conn, cur->data); |
4230 | 4785 #else |
4786 if (od->sess->ssi.received_data) { | |
3092 | 4787 while (buddies) { |
8150 | 4788 oscar_remove_buddy(gc, buddies->data, group); |
3092 | 4789 buddies = buddies->next; |
4790 } | |
4230 | 4791 } |
4792 #endif | |
4793 } | |
4794 | |
4795 #ifndef NOSSI | |
5575 | 4796 static void oscar_move_buddy(GaimConnection *gc, const char *name, const char *old_group, const char *new_group) { |
7283 | 4797 OscarData *od = (OscarData *)gc->proto_data; |
4303 | 4798 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
|
4799 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4800 "ssi: moving buddy %s from group %s to group %s\n", name, old_group, new_group); |
4889 | 4801 aim_ssi_movebuddy(od->sess, old_group, new_group, name); |
4269 | 4802 } |
4803 } | |
4804 | |
5575 | 4805 static void oscar_alias_buddy(GaimConnection *gc, const char *name, const char *alias) { |
7283 | 4806 OscarData *od = (OscarData *)gc->proto_data; |
4269 | 4807 if (od->sess->ssi.received_data) { |
4808 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, name); | |
4809 if (gname) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4810 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4811 "ssi: changing the alias for buddy %s to %s\n", name, alias); |
4889 | 4812 aim_ssi_aliasbuddy(od->sess, gname, name, alias); |
4269 | 4813 } |
4814 } | |
4815 } | |
4816 | |
5575 | 4817 static void oscar_rename_group(GaimConnection *g, const char *old_group, const char *new_group, GList *members) { |
7283 | 4818 OscarData *od = (OscarData *)g->proto_data; |
4230 | 4819 |
4820 if (od->sess->ssi.received_data) { | |
4821 if (aim_ssi_itemlist_finditem(od->sess->ssi.local, new_group, NULL, AIM_SSI_TYPE_GROUP)) { | |
4822 oscar_remove_buddies(g, members, old_group); | |
4823 oscar_add_buddies(g, members); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4824 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4825 "ssi: moved all buddies from group %s to %s\n", old_group, new_group); |
4230 | 4826 } else { |
4889 | 4827 aim_ssi_rename_group(od->sess, old_group, new_group); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4828 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4829 "ssi: renamed group %s to %s\n", old_group, new_group); |
2995 | 4830 } |
4831 } | |
4832 } | |
4833 | |
5968 | 4834 static gboolean gaim_ssi_rerequestdata(gpointer data) { |
4835 aim_session_t *sess = data; | |
6350 | 4836 aim_ssi_reqdata(sess); |
5968 | 4837 return FALSE; |
4838 } | |
4839 | |
4642 | 4840 static int gaim_ssi_parseerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4841 GaimConnection *gc = sess->aux_data; |
7283 | 4842 OscarData *od = gc->proto_data; |
4642 | 4843 va_list ap; |
4844 fu16_t reason; | |
4845 | |
4846 va_start(ap, fr); | |
4847 reason = (fu16_t)va_arg(ap, unsigned int); | |
4848 va_end(ap); | |
4849 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4850 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: SNAC error %hu\n", reason); |
4642 | 4851 |
4852 if (reason == 0x0005) { | |
5892 | 4853 gaim_notify_error(gc, NULL, _("Unable To Retrieve Buddy List"), |
5828 | 4854 _("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 | 4855 od->getblisttimer = g_timeout_add(300000, gaim_ssi_rerequestdata, od->sess); |
4642 | 4856 } |
4857 | |
4858 /* Activate SSI */ | |
4859 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
4860 /* Make sure your privacy setting/invisibility is set how you want it before this! */ | |
5968 | 4861 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: activating server-stored buddy list\n"); |
4642 | 4862 aim_ssi_enable(od->sess); |
4863 | |
4864 return 1; | |
4865 } | |
4866 | |
2991 | 4867 static int gaim_ssi_parserights(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 4868 GaimConnection *gc = sess->aux_data; |
7283 | 4869 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 4870 int numtypes, i; |
4871 fu16_t *maxitems; | |
2991 | 4872 va_list ap; |
4873 | |
4874 va_start(ap, fr); | |
4230 | 4875 numtypes = va_arg(ap, int); |
4876 maxitems = va_arg(ap, fu16_t *); | |
2991 | 4877 va_end(ap); |
4878 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4879 gaim_debug(GAIM_DEBUG_MISC, "oscar", "ssi rights:"); |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4880 |
4230 | 4881 for (i=0; i<numtypes; i++) |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4882 gaim_debug(GAIM_DEBUG_MISC, NULL, " max type 0x%04x=%hd,", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4883 i, maxitems[i]); |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4884 |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5208
diff
changeset
|
4885 gaim_debug(GAIM_DEBUG_MISC, NULL, "\n"); |
4230 | 4886 |
4887 if (numtypes >= 0) | |
4888 od->rights.maxbuddies = maxitems[0]; | |
4889 if (numtypes >= 1) | |
4890 od->rights.maxgroups = maxitems[1]; | |
4891 if (numtypes >= 2) | |
4892 od->rights.maxpermits = maxitems[2]; | |
4893 if (numtypes >= 3) | |
4894 od->rights.maxdenies = maxitems[3]; | |
2991 | 4895 |
4896 return 1; | |
4897 } | |
4898 | |
4899 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 4900 GaimConnection *gc = sess->aux_data; |
4901 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 4902 OscarData *od = (OscarData *)gc->proto_data; |
8150 | 4903 GaimGroup *g; |
4904 GaimBuddy *b; | |
2995 | 4905 struct aim_ssi_item *curitem; |
2991 | 4906 int tmp; |
4230 | 4907 va_list ap; |
8219 | 4908 fu16_t fmtver, numitems; |
4909 struct aim_ssi_item *items; | |
4910 fu32_t timestamp; | |
4230 | 4911 |
4912 va_start(ap, fr); | |
4913 fmtver = (fu16_t)va_arg(ap, int); | |
4914 numitems = (fu16_t)va_arg(ap, int); | |
8219 | 4915 items = va_arg(ap, struct aim_ssi_item *); |
4230 | 4916 timestamp = va_arg(ap, fu32_t); |
8219 | 4917 va_end(ap); |
2991 | 4918 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4919 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
4920 "ssi: syncing local list and server list\n"); |
2991 | 4921 |
8219 | 4922 if ((timestamp == 0) || (numitems == 0)) { |
4923 gaim_notify_error(gc, NULL, "Got AIM SSI with a 0 timestamp or 0 numitems, not syncing, tell KingAnt! And tell him if your buddy list actually works or not. Thanks! Oh, IM him at markdoliner on AIM/ICQ.", NULL); | |
4924 return 1; | |
4925 } | |
4926 | |
2991 | 4927 /* Clean the buddy list */ |
4889 | 4928 aim_ssi_cleanlist(sess); |
2991 | 4929 |
8150 | 4930 { /* If not in server list then prune from local list */ |
4931 GaimBlistNode *gnode, *cnode, *bnode; | |
4932 GaimBuddyList *blist; | |
4933 GSList *cur; | |
4934 | |
4935 /* Buddies */ | |
4936 cur = NULL; | |
4937 if ((blist = gaim_get_blist()) != NULL) { | |
4938 for (gnode = blist->root; gnode; gnode = gnode->next) { | |
4939 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
4940 continue; | |
4941 g = (GaimGroup *)gnode; | |
4942 for (cnode = gnode->child; cnode; cnode = cnode->next) { | |
4943 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4944 continue; | |
4945 for (bnode = cnode->child; bnode; bnode = bnode->next) { | |
4946 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
4947 continue; | |
4948 b = (GaimBuddy *)bnode; | |
4949 if (b->account == gc->account) { | |
4950 if (aim_ssi_itemlist_exists(sess->ssi.local, b->name)) { | |
4951 /* If the buddy is an ICQ user then load his nickname */ | |
4952 const char *servernick = gaim_blist_node_get_string((GaimBlistNode*)b, "servernick"); | |
8214 | 4953 char *alias; |
8150 | 4954 if (servernick) |
4955 serv_got_alias(gc, b->name, servernick); | |
4956 | |
4957 /* Store local alias on server */ | |
8214 | 4958 alias = aim_ssi_getalias(sess->ssi.local, g->name, b->name); |
8150 | 4959 if (!alias && b->alias && strlen(b->alias)) |
4960 aim_ssi_aliasbuddy(sess, g->name, b->name, b->alias); | |
4961 free(alias); | |
4962 } else { | |
4963 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4964 "ssi: removing buddy %s from local list\n", b->name); | |
4965 /* We can't actually remove now because it will screw up our looping */ | |
4966 cur = g_slist_prepend(cur, b); | |
4967 } | |
4968 } | |
4969 } | |
4970 } | |
4971 } | |
4972 } | |
8175 | 4973 |
8150 | 4974 while (cur != NULL) { |
4975 b = cur->data; | |
4976 cur = g_slist_remove(cur, b); | |
4977 gaim_blist_remove_buddy(b); | |
4978 } | |
4979 | |
4980 /* Permit list */ | |
4981 if (gc->account->permit) { | |
4982 for (cur=gc->account->permit; cur; cur=cur->next) | |
4983 if (!aim_ssi_itemlist_finditem(sess->ssi.local, NULL, cur->data, AIM_SSI_TYPE_PERMIT)) { | |
4984 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4985 "ssi: removing permit %s from local list\n", (const char *)cur->data); | |
4986 gaim_privacy_permit_remove(account, cur->data, TRUE); | |
4987 cur = gc->account->permit; | |
4988 } | |
4989 } | |
4990 | |
4991 /* Deny list */ | |
4992 if (gc->account->deny) { | |
4993 for (cur=gc->account->deny; cur; cur=cur->next) | |
4994 if (!aim_ssi_itemlist_finditem(sess->ssi.local, NULL, cur->data, AIM_SSI_TYPE_DENY)) { | |
4995 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
4996 "ssi: removing deny %s from local list\n", (const char *)cur->data); | |
4997 gaim_privacy_deny_remove(account, cur->data, TRUE); | |
4998 cur = gc->account->deny; | |
4999 } | |
5000 } | |
5001 /* Presence settings (idle time visibility) */ | |
5002 if ((tmp = aim_ssi_getpresence(sess->ssi.local)) != 0xFFFFFFFF) | |
5003 if (!(tmp & 0x400)) | |
5004 aim_ssi_setpresence(sess, tmp | 0x400); | |
5005 } /* end pruning buddies from local list */ | |
5006 | |
2991 | 5007 /* Add from server list to local list */ |
4230 | 5008 for (curitem=sess->ssi.local; curitem; curitem=curitem->next) { |
7328 | 5009 if ((curitem->name == NULL) || (g_utf8_validate(curitem->name, -1, NULL))) |
2991 | 5010 switch (curitem->type) { |
4230 | 5011 case 0x0000: { /* Buddy */ |
4251 | 5012 if (curitem->name) { |
4292 | 5013 char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name); |
7166 | 5014 char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; |
4282 | 5015 char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name); |
7166 | 5016 char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; |
8150 | 5017 b = gaim_find_buddy(gc->account, curitem->name); |
4458 | 5018 /* Should gname be freed here? -- elb */ |
4754 | 5019 /* Not with the current code, but that might be cleaner -- med */ |
4458 | 5020 free(alias); |
8150 | 5021 if (b) { |
4292 | 5022 /* Get server stored alias */ |
4705 | 5023 if (alias_utf8) { |
8150 | 5024 g_free(b->alias); |
5025 b->alias = g_strdup(alias_utf8); | |
4705 | 5026 } |
4282 | 5027 } else { |
8150 | 5028 b = gaim_buddy_new(gc->account, curitem->name, alias_utf8); |
5146 | 5029 |
4754 | 5030 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { |
4687 | 5031 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); |
4754 | 5032 gaim_blist_add_group(g, NULL); |
5033 } | |
5146 | 5034 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5035 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
8150 | 5036 "ssi: adding b %s to group %s to local list\n", curitem->name, gname_utf8 ? gname_utf8 : _("Orphans")); |
5037 gaim_blist_add_buddy(b, NULL, g, NULL); | |
4251 | 5038 } |
7162 | 5039 g_free(gname_utf8); |
5040 g_free(alias_utf8); | |
2991 | 5041 } |
4230 | 5042 } break; |
5043 | |
5044 case 0x0001: { /* Group */ | |
4282 | 5045 /* Shouldn't add empty groups */ |
4230 | 5046 } break; |
5047 | |
5048 case 0x0002: { /* Permit buddy */ | |
2991 | 5049 if (curitem->name) { |
4230 | 5050 /* if (!find_permdeny_by_name(gc->permit, curitem->name)) { AAA */ |
2991 | 5051 GSList *list; |
5575 | 5052 for (list=account->permit; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 5053 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5054 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5055 "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
|
5056 gaim_privacy_permit_add(account, curitem->name, TRUE); |
2991 | 5057 } |
5058 } | |
4230 | 5059 } break; |
5060 | |
5061 case 0x0003: { /* Deny buddy */ | |
2991 | 5062 if (curitem->name) { |
5063 GSList *list; | |
5575 | 5064 for (list=account->deny; (list && aim_sncmp(curitem->name, list->data)); list=list->next); |
2991 | 5065 if (!list) { |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5066 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5067 "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
|
5068 gaim_privacy_deny_add(account, curitem->name, TRUE); |
2991 | 5069 } |
5070 } | |
4230 | 5071 } break; |
5072 | |
5073 case 0x0004: { /* Permit/deny setting */ | |
2991 | 5074 if (curitem->data) { |
5075 fu8_t permdeny; | |
5575 | 5076 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
|
5077 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
5575 | 5078 "ssi: changing permdeny from %d to %hhu\n", account->perm_deny, permdeny); |
5079 account->perm_deny = permdeny; | |
5080 if (od->icq && account->perm_deny == 0x03) { | |
4342 | 5081 serv_set_away(gc, "Invisible", ""); |
5082 } | |
2991 | 5083 } |
5084 } | |
4230 | 5085 } break; |
5086 | |
5087 case 0x0005: { /* Presence setting */ | |
3109 | 5088 /* We don't want to change Gaim's setting because it applies to all accounts */ |
4230 | 5089 } break; |
2991 | 5090 } /* End of switch on curitem->type */ |
5091 } /* End of for loop */ | |
4230 | 5092 |
4901 | 5093 /* Set our ICQ status */ |
5094 if (od->icq && !gc->away) { | |
5095 aim_setextstatus(sess, AIM_ICQ_STATE_NORMAL); | |
5096 } | |
5097 | |
4342 | 5098 /* Activate SSI */ |
5099 /* Sending the enable causes other people to be able to see you, and you to see them */ | |
5100 /* 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
|
5101 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5102 "ssi: activating server-stored buddy list\n"); |
4642 | 5103 aim_ssi_enable(sess); |
4342 | 5104 |
2991 | 5105 return 1; |
2086 | 5106 } |
4230 | 5107 |
5108 static int gaim_ssi_parseack(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5109 GaimConnection *gc = sess->aux_data; |
4230 | 5110 va_list ap; |
5111 struct aim_ssi_tmp *retval; | |
5112 | |
5113 va_start(ap, fr); | |
5114 retval = va_arg(ap, struct aim_ssi_tmp *); | |
5115 va_end(ap); | |
5116 | |
5117 while (retval) { | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5118 gaim_debug(GAIM_DEBUG_MISC, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5119 "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 | 5120 |
5121 if (retval->ack != 0xffff) | |
5122 switch (retval->ack) { | |
5123 case 0x0000: { /* added successfully */ | |
5124 } break; | |
5125 | |
4829 | 5126 case 0x000c: { /* you are over the limit, the cheat is to the limit, come on fhqwhgads */ |
5127 gchar *buf; | |
5128 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
|
5129 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
4829 | 5130 g_free(buf); |
5131 } | |
5132 | |
7023 | 5133 case 0x000e: { /* buddy requires authorization */ |
4828 | 5134 if ((retval->action == AIM_CB_SSI_ADD) && (retval->name)) |
4269 | 5135 gaim_auth_sendrequest(gc, retval->name); |
4230 | 5136 } break; |
5137 | |
5138 default: { /* La la la */ | |
5197 | 5139 gchar *buf; |
5402 | 5140 gaim_debug(GAIM_DEBUG_ERROR, "oscar", "ssi: Action 0x%04hx was unsuccessful with error 0x%04hx\n", retval->action, retval->ack); |
5141 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
|
5142 gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
5197 | 5143 g_free(buf); |
4230 | 5144 } break; |
5145 } | |
5146 | |
5147 retval = retval->next; | |
5148 } | |
5149 | |
5150 return 1; | |
5151 } | |
5152 | |
8227 | 5153 static int gaim_ssi_parseadd(aim_session_t *sess, aim_frame_t *fr, ...) { |
5154 GaimConnection *gc = sess->aux_data; | |
5155 char *gname, *gname_utf8, *alias, *alias_utf8; | |
5156 GaimBuddy *b; | |
5157 GaimGroup *g; | |
5158 va_list ap; | |
5159 fu16_t type; | |
5160 const char *name; | |
5161 | |
5162 va_start(ap, fr); | |
5163 type = (fu16_t)va_arg(ap, int); | |
5164 name = va_arg(ap, char *); | |
5165 va_end(ap); | |
5166 | |
5167 if ((type != 0x0000) || (name == NULL)) | |
5168 return 1; | |
5169 | |
5170 gname = aim_ssi_itemlist_findparentname(sess->ssi.local, name); | |
5171 gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL; | |
5172 alias = aim_ssi_getalias(sess->ssi.local, gname, name); | |
5173 alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL; | |
5174 b = gaim_find_buddy(gc->account, name); | |
5175 free(alias); | |
5176 | |
5177 if (b) { | |
5178 /* Get server stored alias */ | |
5179 if (alias_utf8) { | |
5180 g_free(b->alias); | |
5181 b->alias = g_strdup(alias_utf8); | |
5182 } | |
5183 } else { | |
5184 b = gaim_buddy_new(gc->account, name, alias_utf8); | |
5185 | |
5186 if (!(g = gaim_find_group(gname_utf8 ? gname_utf8 : _("Orphans")))) { | |
5187 g = gaim_group_new(gname_utf8 ? gname_utf8 : _("Orphans")); | |
5188 gaim_blist_add_group(g, NULL); | |
5189 } | |
5190 | |
5191 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5192 "ssi: adding b %s to group %s to local list\n", name, gname_utf8 ? gname_utf8 : _("Orphans")); | |
5193 gaim_blist_add_buddy(b, NULL, g, NULL); | |
5194 } | |
5195 g_free(gname_utf8); | |
5196 g_free(alias_utf8); | |
5197 | |
5198 return 1; | |
5199 } | |
5200 | |
4230 | 5201 static int gaim_ssi_authgiven(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5202 GaimConnection *gc = sess->aux_data; |
4230 | 5203 va_list ap; |
5204 char *sn, *msg; | |
4236 | 5205 gchar *dialog_msg, *nombre; |
4230 | 5206 struct name_data *data; |
6695 | 5207 GaimBuddy *buddy; |
4230 | 5208 |
5209 va_start(ap, fr); | |
5210 sn = va_arg(ap, char *); | |
5211 msg = va_arg(ap, char *); | |
5212 va_end(ap); | |
5213 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5214 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5215 "ssi: %s has given you permission to add him to your buddy list\n", sn); |
4230 | 5216 |
4687 | 5217 buddy = gaim_find_buddy(gc->account, sn); |
5218 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5219 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5220 else |
5221 nombre = g_strdup(sn); | |
5222 | |
5223 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 | 5224 data = g_new(struct name_data, 1); |
5225 data->gc = gc; | |
5226 data->name = g_strdup(sn); | |
5227 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5228 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5229 gaim_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5230 0, data, |
7023 | 5231 G_CALLBACK(gaim_icq_buddyadd), |
5836 | 5232 G_CALLBACK(oscar_free_name_data)); |
4236 | 5233 |
4230 | 5234 g_free(dialog_msg); |
4236 | 5235 g_free(nombre); |
4230 | 5236 |
5237 return 1; | |
5238 } | |
5239 | |
5240 static int gaim_ssi_authrequest(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5241 GaimConnection *gc = sess->aux_data; |
4230 | 5242 va_list ap; |
5243 char *sn, *msg; | |
4236 | 5244 gchar *dialog_msg, *nombre; |
4230 | 5245 struct name_data *data; |
6695 | 5246 GaimBuddy *buddy; |
4230 | 5247 |
5248 va_start(ap, fr); | |
5249 sn = va_arg(ap, char *); | |
5250 msg = va_arg(ap, char *); | |
5251 va_end(ap); | |
5252 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5253 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5254 "ssi: received authorization request from %s\n", sn); |
4230 | 5255 |
4687 | 5256 buddy = gaim_find_buddy(gc->account, sn); |
5257 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5258 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5259 else |
5260 nombre = g_strdup(sn); | |
5261 | |
4337 | 5262 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 | 5263 data = g_new(struct name_data, 1); |
5264 data->gc = gc; | |
5265 data->name = g_strdup(sn); | |
5266 data->nick = NULL; | |
5498
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5267 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5268 gaim_request_action(gc, NULL, _("Authorization Request"), dialog_msg, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5269 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5270 _("Authorize"), G_CALLBACK(gaim_auth_grant), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
5271 _("Deny"), G_CALLBACK(gaim_auth_dontgrant_msgprompt)); |
4236 | 5272 |
4230 | 5273 g_free(dialog_msg); |
4236 | 5274 g_free(nombre); |
4230 | 5275 |
5276 return 1; | |
5277 } | |
5278 | |
5279 static int gaim_ssi_authreply(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5280 GaimConnection *gc = sess->aux_data; |
4230 | 5281 va_list ap; |
5282 char *sn, *msg; | |
4236 | 5283 gchar *dialog_msg, *nombre; |
4230 | 5284 fu8_t reply; |
6695 | 5285 GaimBuddy *buddy; |
4230 | 5286 |
5287 va_start(ap, fr); | |
5288 sn = va_arg(ap, char *); | |
5289 reply = (fu8_t)va_arg(ap, int); | |
5290 msg = va_arg(ap, char *); | |
5291 va_end(ap); | |
5292 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5293 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5294 "ssi: received authorization reply from %s. Reply is 0x%04hhx\n", sn, reply); |
4236 | 5295 |
4687 | 5296 buddy = gaim_find_buddy(gc->account, sn); |
5297 if (buddy && (gaim_get_buddy_alias_only(buddy))) | |
5298 nombre = g_strdup_printf("%s (%s)", sn, gaim_get_buddy_alias_only(buddy)); | |
4236 | 5299 else |
5300 nombre = g_strdup(sn); | |
5301 | |
4230 | 5302 if (reply) { |
5303 /* Granted */ | |
7023 | 5304 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
|
5305 gaim_notify_info(gc, NULL, _("Authorization Granted"), dialog_msg); |
4230 | 5306 } else { |
5307 /* Denied */ | |
7023 | 5308 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
|
5309 gaim_notify_info(gc, NULL, _("Authorization Denied"), dialog_msg); |
4230 | 5310 } |
5311 g_free(dialog_msg); | |
4236 | 5312 g_free(nombre); |
4230 | 5313 |
5314 return 1; | |
5315 } | |
5316 | |
5317 static int gaim_ssi_gotadded(aim_session_t *sess, aim_frame_t *fr, ...) { | |
5575 | 5318 GaimConnection *gc = sess->aux_data; |
4230 | 5319 va_list ap; |
5320 char *sn; | |
6695 | 5321 GaimBuddy *buddy; |
4230 | 5322 |
5323 va_start(ap, fr); | |
5324 sn = va_arg(ap, char *); | |
5325 va_end(ap); | |
5326 | |
4687 | 5327 buddy = gaim_find_buddy(gc->account, sn); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5328 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5329 "ssi: %s added you to their buddy list\n", sn); |
7015
dece74f05509
[gaim-migrate @ 7578]
Christian Hammond <chipx86@chipx86.com>
parents:
7011
diff
changeset
|
5330 gaim_account_notify_added(gc->account, NULL, sn, (buddy ? gaim_get_buddy_alias_only(buddy) : NULL), NULL); |
4230 | 5331 |
5332 return 1; | |
5333 } | |
4269 | 5334 #endif |
2086 | 5335 |
5575 | 5336 static GList *oscar_chat_info(GaimConnection *gc) { |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5337 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5338 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5339 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5340 pce = g_new0(struct proto_chat_entry, 1); |
7841 | 5341 pce->label = _("_Group:"); |
5234 | 5342 pce->identifier = "room"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5343 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5344 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5345 pce = g_new0(struct proto_chat_entry, 1); |
7841 | 5346 pce->label = _("_Exchange:"); |
5234 | 5347 pce->identifier = "exchange"; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5348 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5349 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5350 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5351 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5352 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5353 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5354 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5355 |
5575 | 5356 static void oscar_join_chat(GaimConnection *g, GHashTable *data) { |
7283 | 5357 OscarData *od = (OscarData *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5358 aim_conn_t *cur; |
5234 | 5359 char *name, *exchange; |
5360 | |
5361 name = g_hash_table_lookup(data, "room"); | |
5362 exchange = g_hash_table_lookup(data, "exchange"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
5363 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5364 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5365 "Attempting to join chat room %s.\n", name); |
4617 | 5366 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
|
5367 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5368 "chatnav exists, creating room\n"); |
5234 | 5369 aim_chatnav_createroom(od->sess, cur, name, atoi(exchange)); |
2086 | 5370 } else { |
5371 /* this gets tricky */ | |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5372 struct create_room *cr = g_new0(struct create_room, 1); |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5373 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5374 "chatnav does not exist, opening chatnav\n"); |
5234 | 5375 cr->exchange = atoi(exchange); |
2822
744df95bf123
[gaim-migrate @ 2835]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2821
diff
changeset
|
5376 cr->name = g_strdup(name); |
4617 | 5377 od->create_rooms = g_slist_append(od->create_rooms, cr); |
5378 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_CHATNAV); | |
2086 | 5379 } |
5380 } | |
5381 | |
5575 | 5382 static void oscar_chat_invite(GaimConnection *g, int id, const char *message, const char *name) { |
7283 | 5383 OscarData *od = (OscarData *)g->proto_data; |
2086 | 5384 struct chat_connection *ccon = find_oscar_chat(g, id); |
5385 | |
5386 if (!ccon) | |
5387 return; | |
5388 | |
8225 | 5389 aim_im_sendch2_chatinvite(od->sess, name, message ? message : "", |
2086 | 5390 ccon->exchange, ccon->name, 0x0); |
5391 } | |
5392 | |
5575 | 5393 static void oscar_chat_leave(GaimConnection *g, int id) { |
7283 | 5394 OscarData *od = g ? (OscarData *)g->proto_data : NULL; |
2086 | 5395 GSList *bcs = g->buddy_chats; |
5679 | 5396 GaimConversation *b = NULL; |
2086 | 5397 struct chat_connection *c = NULL; |
5398 int count = 0; | |
5399 | |
5400 while (bcs) { | |
5401 count++; | |
5679 | 5402 b = (GaimConversation *)bcs->data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5403 if (id == gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))) |
2086 | 5404 break; |
5405 bcs = bcs->next; | |
5406 b = NULL; | |
5407 } | |
5408 | |
5409 if (!b) | |
5410 return; | |
5411 | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5412 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5413 "Attempting to leave room %s (currently in %d rooms)\n", b->name, count); |
2086 | 5414 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5415 c = find_oscar_chat(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5416 if (c != NULL) { |
4617 | 5417 if (od) |
5418 od->oscar_chats = g_slist_remove(od->oscar_chats, c); | |
2086 | 5419 if (c->inpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
5420 gaim_input_remove(c->inpa); |
4617 | 5421 if (g && od->sess) |
5422 aim_conn_kill(od->sess, &c->conn); | |
2086 | 5423 g_free(c->name); |
5424 g_free(c->show); | |
5425 g_free(c); | |
5426 } | |
5427 /* 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
|
5428 serv_got_chat_left(g, gaim_conv_chat_get_id(GAIM_CONV_CHAT(b))); |
2086 | 5429 } |
5430 | |
8219 | 5431 static int oscar_send_chat(GaimConnection *gc, int id, const char *message) { |
5432 OscarData *od = (OscarData *)gc->proto_data; | |
5433 GError *err = NULL; | |
5434 GaimConversation *conv = NULL; | |
2086 | 5435 struct chat_connection *c = NULL; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5436 char *buf, *buf2; |
8219 | 5437 char *charset = NULL; |
5438 int encoding; | |
5439 int len; | |
5440 | |
5441 if (!(conv = gaim_find_chat(gc, id))) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5442 return -EINVAL; |
2086 | 5443 |
8219 | 5444 if (!(c = find_oscar_chat_by_conv(gc, conv))) |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5445 return -EINVAL; |
2086 | 5446 |
8219 | 5447 buf = gaim_strdup_withhtml(message); |
5448 len = strlen(buf); | |
5449 | |
5450 encoding = oscar_encoding_check(buf); | |
5451 if (encoding == AIM_IMFLAGS_UNICODE) { | |
5452 gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode Chat\n"); | |
5453 charset = "unicode-2-0"; | |
5454 buf2 = g_convert(buf, len, "UCS-2BE", "UTF-8", NULL, &len, &err); | |
5455 if (err) { | |
5456 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5457 "Error converting a unicode message: %s\n", | |
5458 err->message); | |
5459 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5460 "This really shouldn't happen!\n"); | |
5461 /* We really shouldn't try to send the | |
5462 * IM now, but I'm not sure what to do */ | |
5463 g_error_free(err); | |
5464 } | |
5465 } else if (encoding & AIM_IMFLAGS_ISO_8859_1) { | |
5466 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5467 "Sending ISO-8859-1 Chat\n"); | |
5468 charset = "iso-8859-1"; | |
5469 buf2 = g_convert(buf, len, "ISO-8859-1", "UTF-8", NULL, &len, &err); | |
5470 if (err) { | |
5471 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5472 "conversion error: %s\n", err->message); | |
5473 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5474 "Someone tell Ethan his 8859-1 detection is wrong\n"); | |
5475 g_error_free(err); | |
5476 encoding = AIM_IMFLAGS_UNICODE; | |
5477 buf2 = g_convert(buf, len, "UCS-2BE", "UTF8", NULL, &len, &err); | |
5478 if (err) { | |
5479 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5480 "Error in unicode fallback: %s\n", err->message); | |
5481 g_error_free(err); | |
5482 } | |
2086 | 5483 } |
8219 | 5484 } else { |
5485 charset = "us-ascii"; | |
5486 buf2 = g_strdup(buf); | |
5487 } | |
5488 | |
5489 if (len > c->maxlen) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5490 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5491 |
8219 | 5492 g_free(buf); |
5493 buf = gaim_markup_strip_html(buf2); | |
5494 g_free(buf2); | |
5495 if (strlen(buf) > c->maxvis) { | |
5496 g_free(buf); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5497 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5498 } |
8219 | 5499 |
5500 aim_chat_send_im(od->sess, c->conn, 0, buf, len, charset); | |
2086 | 5501 g_free(buf); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5502 return 0; |
2086 | 5503 } |
5504 | |
6695 | 5505 static const char *oscar_list_icon(GaimAccount *a, GaimBuddy *b) { |
4766 | 5506 if (!b || (b && b->name && b->name[0] == '+')) { |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5507 if (a != NULL && isdigit(*gaim_account_get_username(a))) |
4687 | 5508 return "icq"; |
5509 else | |
5510 return "aim"; | |
5511 } | |
5646
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5512 |
48c63ee49961
[gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents:
5638
diff
changeset
|
5513 if (b != NULL && isdigit(b->name[0])) |
4687 | 5514 return "icq"; |
5515 return "aim"; | |
5516 } | |
5517 | |
6695 | 5518 static void oscar_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne) |
4687 | 5519 { |
7334 | 5520 GaimAccount *account = NULL; |
5521 GaimConnection *gc = NULL; | |
5522 OscarData *od = NULL; | |
4687 | 5523 char *emblems[4] = {NULL,NULL,NULL,NULL}; |
5524 int i = 0; | |
7334 | 5525 aim_userinfo_t *userinfo = NULL; |
5526 | |
5527 if (b != NULL) | |
5528 account = b->account; | |
5529 if (account != NULL) | |
5530 gc = account->gc; | |
5531 if (gc != NULL) | |
5532 od = gc->proto_data; | |
7945 | 5533 if (od != NULL) |
5534 userinfo = aim_locate_finduserinfo(od->sess, b->name); | |
4687 | 5535 |
5131 | 5536 if (!GAIM_BUDDY_IS_ONLINE(b)) { |
5537 char *gname; | |
7334 | 5538 if ((b->name) && (od) && (od->sess->ssi.received_data) && |
5131 | 5539 (gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name)) && |
5540 (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))) { | |
5541 emblems[i++] = "notauthorized"; | |
5542 } else { | |
5543 emblems[i++] = "offline"; | |
5544 } | |
5545 } | |
4916 | 5546 |
4766 | 5547 if (b->name && (b->uc & 0xffff0000) && isdigit(b->name[0])) { |
4960 | 5548 int uc = b->uc >> 16; |
4766 | 5549 if (uc & AIM_ICQ_STATE_INVISIBLE) |
4960 | 5550 emblems[i++] = "invisible"; |
4766 | 5551 else if (uc & AIM_ICQ_STATE_CHAT) |
4960 | 5552 emblems[i++] = "freeforchat"; |
4766 | 5553 else if (uc & AIM_ICQ_STATE_DND) |
4960 | 5554 emblems[i++] = "dnd"; |
4766 | 5555 else if (uc & AIM_ICQ_STATE_OUT) |
4960 | 5556 emblems[i++] = "na"; |
4766 | 5557 else if (uc & AIM_ICQ_STATE_BUSY) |
4960 | 5558 emblems[i++] = "occupied"; |
4766 | 5559 else if (uc & AIM_ICQ_STATE_AWAY) |
5560 emblems[i++] = "away"; | |
5561 } else { | |
5562 if (b->uc & UC_UNAVAILABLE) | |
5563 emblems[i++] = "away"; | |
5564 } | |
4687 | 5565 if (b->uc & UC_WIRELESS) |
5566 emblems[i++] = "wireless"; | |
5567 if (b->uc & UC_AOL) | |
5568 emblems[i++] = "aol"; | |
5569 if (b->uc & UC_ADMIN) | |
5570 emblems[i++] = "admin"; | |
5571 if (b->uc & UC_AB && i < 4) | |
5572 emblems[i++] = "activebuddy"; | |
4766 | 5573 /* if (b->uc & UC_UNCONFIRMED && i < 4) |
5574 emblems[i++] = "unconfirmed"; */ | |
7334 | 5575 |
7945 | 5576 if ((i < 4) && (userinfo != NULL) && (userinfo->capabilities & AIM_CAPS_HIPTOP)) |
5577 emblems[i++] = "hiptop"; | |
5578 | |
5579 if ((i < 4) && (userinfo != NULL) && (userinfo->capabilities & AIM_CAPS_SECUREIM)) | |
7334 | 5580 emblems[i++] = "secure"; |
5581 | |
4687 | 5582 *se = emblems[0]; |
5583 *sw = emblems[1]; | |
5584 *nw = emblems[2]; | |
5585 *ne = emblems[3]; | |
5586 } | |
5587 | |
6695 | 5588 static char *oscar_tooltip_text(GaimBuddy *b) { |
5575 | 5589 GaimConnection *gc = b->account->gc; |
7283 | 5590 OscarData *od = gc->proto_data; |
7692 | 5591 GaimGroup *g = gaim_find_buddys_group(b); |
7261 | 5592 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
7045 | 5593 aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 5594 gchar *tmp = NULL, *ret = g_strdup(""); |
5131 | 5595 |
5596 if (GAIM_BUDDY_IS_ONLINE(b)) { | |
5597 if (isdigit(b->name[0])) { | |
7011 | 5598 char *status; |
5131 | 5599 status = gaim_icq_status((b->uc & 0xffff0000) >> 16); |
7011 | 5600 tmp = ret; |
5601 ret = g_strconcat(tmp, _("<b>Status:</b> "), status, "\n", NULL); | |
5131 | 5602 g_free(tmp); |
5603 g_free(status); | |
5604 } | |
5605 | |
7011 | 5606 if ((bi != NULL) && (bi->ipaddr)) { |
7283 | 5607 char *tstr = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", |
7011 | 5608 (bi->ipaddr & 0xff000000) >> 24, |
5609 (bi->ipaddr & 0x00ff0000) >> 16, | |
5610 (bi->ipaddr & 0x0000ff00) >> 8, | |
5611 (bi->ipaddr & 0x000000ff)); | |
5612 tmp = ret; | |
5613 ret = g_strconcat(tmp, _("<b>IP Address:</b> "), tstr, "\n", NULL); | |
7162 | 5614 g_free(tmp); |
5615 g_free(tstr); | |
7011 | 5616 } |
5617 | |
5618 if ((userinfo != NULL) && (userinfo->capabilities)) { | |
5619 char *caps = caps_string(userinfo->capabilities); | |
5620 tmp = ret; | |
5621 ret = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); | |
7162 | 5622 g_free(tmp); |
7011 | 5623 } |
5624 | |
7692 | 5625 if (g && g->name) { |
5626 char *comment = NULL; | |
5627 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, b->name); | |
5628 if (comment != NULL) { | |
5629 tmp = ret; | |
5630 ret = g_strconcat(tmp, _("<b>Buddy Comment:</b> "), comment, "\n", NULL); | |
5631 free(tmp); | |
5632 free(comment); | |
5633 } | |
5634 } | |
5635 | |
7011 | 5636 if ((bi != NULL) && (bi->availmsg != NULL) && !(b->uc & UC_UNAVAILABLE)) { |
5637 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5638 tmp = ret; | |
5639 ret = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); | |
7162 | 5640 g_free(tmp); |
7011 | 5641 g_free(escaped); |
5642 } | |
5643 | |
5644 if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) { | |
8225 | 5645 gchar *charset = oscar_encoding_extract(userinfo->away_encoding); |
5646 gchar *away_utf8 = away_utf8 = oscar_encoding_to_utf8(charset, userinfo->away, userinfo->away_len); | |
5647 g_free(charset); | |
7011 | 5648 if (away_utf8 != NULL) { |
7091 | 5649 gchar *tmp1, *tmp2; |
7162 | 5650 const char *tmp3; |
7091 | 5651 tmp1 = gaim_strreplace(away_utf8, "<BR>", "\n"); |
7095
c8bf2da398e3
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7093
diff
changeset
|
5652 tmp2 = gaim_markup_strip_html(tmp1); |
7091 | 5653 g_free(tmp1); |
7235 | 5654 tmp1 = g_markup_escape_text(tmp2, strlen(tmp2)); |
7091 | 5655 g_free(tmp2); |
7235 | 5656 tmp3 = gaim_str_sub_away_formatters(tmp1, gaim_account_get_username(gaim_connection_get_account(gc))); |
5657 g_free(tmp1); | |
7011 | 5658 tmp = ret; |
7162 | 5659 ret = g_strconcat(tmp, _("<b>Away Message:</b> "), tmp3, "\n", NULL); |
5660 g_free(tmp); | |
7011 | 5661 g_free(away_utf8); |
5836 | 5662 } |
5131 | 5663 } |
5664 } else { | |
5665 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); | |
5666 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) { | |
7011 | 5667 tmp = ret; |
5668 ret = g_strconcat(tmp, _("<b>Status:</b> Not Authorized"), "\n", NULL); | |
5131 | 5669 g_free(tmp); |
5670 } else { | |
7011 | 5671 tmp = ret; |
5672 ret = g_strconcat(tmp, _("<b>Status:</b> Offline"), "\n", NULL); | |
5131 | 5673 g_free(tmp); |
5674 } | |
5675 } | |
5676 | |
5677 /* remove the trailing newline character */ | |
7011 | 5678 if (ret) |
5679 ret[strlen(ret)-1] = '\0'; | |
5680 return ret; | |
5131 | 5681 } |
5682 | |
6695 | 5683 static char *oscar_status_text(GaimBuddy *b) { |
5575 | 5684 GaimConnection *gc = b->account->gc; |
7283 | 5685 OscarData *od = gc->proto_data; |
5167 | 5686 gchar *ret = NULL; |
5687 | |
5688 if ((b->uc & UC_UNAVAILABLE) || (((b->uc & 0xffff0000) >> 16) & AIM_ICQ_STATE_CHAT)) { | |
5689 if (isdigit(b->name[0])) | |
5690 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); | |
7038 | 5691 else |
5692 ret = g_strdup(_("Away")); | |
5836 | 5693 } else if (GAIM_BUDDY_IS_ONLINE(b)) { |
7261 | 5694 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name)); |
6292 | 5695 if (bi->availmsg) |
5696 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg)); | |
5836 | 5697 } else { |
5167 | 5698 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); |
5699 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) | |
5700 ret = g_strdup(_("Not Authorized")); | |
5701 else | |
5702 ret = g_strdup(_("Offline")); | |
5703 } | |
5704 | |
5705 return ret; | |
5706 } | |
5707 | |
5842 | 5708 |
5844 | 5709 static int oscar_icon_req(aim_session_t *sess, aim_frame_t *fr, ...) { |
5842 | 5710 GaimConnection *gc = sess->aux_data; |
7283 | 5711 OscarData *od = gc->proto_data; |
5892 | 5712 va_list ap; |
5842 | 5713 fu16_t type; |
5892 | 5714 fu8_t flags = 0, length = 0; |
5715 char *md5 = NULL; | |
5716 | |
7334 | 5717 |
5842 | 5718 va_start(ap, fr); |
5719 type = va_arg(ap, int); | |
5892 | 5720 |
5721 switch(type) { | |
5722 case 0x0000: | |
5723 case 0x0001: { | |
5724 flags = va_arg(ap, int); | |
5725 length = va_arg(ap, int); | |
5726 md5 = va_arg(ap, char *); | |
5727 | |
5728 if (flags == 0x41) { | |
5729 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_ICON) && !od->iconconnecting) { | |
5730 od->iconconnecting = TRUE; | |
5731 od->set_icon = TRUE; | |
5732 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_ICON); | |
5733 } else { | |
6039 | 5734 struct stat st; |
5735 const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc)); | |
5736 if (iconfile == NULL) { | |
5737 /* Set an empty icon, or something */ | |
5738 } else if (!stat(iconfile, &st)) { | |
5739 char *buf = g_malloc(st.st_size); | |
5740 FILE *file = fopen(iconfile, "rb"); | |
5741 if (file) { | |
5742 fread(buf, 1, st.st_size, file); | |
5743 fclose(file); | |
5744 gaim_debug(GAIM_DEBUG_INFO, "oscar", | |
5745 "Uploading icon to icon server\n"); | |
6879 | 5746 aim_bart_upload(od->sess, buf, st.st_size); |
5892 | 5747 } else |
5748 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6039 | 5749 "Can't open buddy icon file!\n"); |
5750 g_free(buf); | |
5751 } else { | |
5752 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
5753 "Can't stat buddy icon file!\n"); | |
5892 | 5754 } |
5755 } | |
5893 | 5756 } else if (flags == 0x81) |
5757 aim_ssi_seticon(od->sess, md5, length); | |
5892 | 5758 } break; |
5759 | |
5760 case 0x0002: { /* We just set an "available" message? */ | |
5761 } break; | |
5762 } | |
5763 | |
5842 | 5764 va_end(ap); |
5844 | 5765 |
5766 return 0; | |
5842 | 5767 } |
5892 | 5768 |
3952 | 5769 /* |
4617 | 5770 * We have just established a socket with the other dude, so set up some handlers. |
3952 | 5771 */ |
4617 | 5772 static int gaim_odc_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5773 GaimConnection *gc = sess->aux_data; |
7283 | 5774 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5775 GaimConversation *cnv; |
2086 | 5776 struct direct_im *dim; |
5777 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5778 char *sn; |
4617 | 5779 va_list ap; |
5780 aim_conn_t *newconn, *listenerconn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5781 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5782 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5783 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5784 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 5785 va_end(ap); |
5786 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5787 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5788 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5789 |
4617 | 5790 sn = g_strdup(aim_odc_getsn(newconn)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5791 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5792 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5793 "DirectIM: initiate success to %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5794 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5795 |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5796 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
|
5797 gaim_input_remove(dim->watcher); |
2086 | 5798 dim->conn = newconn; |
4617 | 5799 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, oscar_callback, dim->conn); |
3008 | 5800 dim->connected = TRUE; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5801 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5802 g_free(sn); |
6982 | 5803 gaim_conversation_write(cnv, NULL, buf, GAIM_MESSAGE_SYSTEM, time(NULL)); |
2086 | 5804 |
4617 | 5805 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, gaim_odc_incoming, 0); |
5806 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, gaim_odc_typing, 0); | |
6982 | 5807 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_IMAGETRANSFER, gaim_odc_update_ui, 0); |
4617 | 5808 |
2993 | 5809 return 1; |
5810 } | |
5811 | |
6982 | 5812 /* |
5813 * This is called when each chunk of an image is received. It can be used to | |
5814 * update a progress bar, or to eat lots of dry cat food. Wet cat food is | |
5815 * nasty, you sicko. | |
5816 */ | |
5817 static int gaim_odc_update_ui(aim_session_t *sess, aim_frame_t *fr, ...) { | |
2993 | 5818 va_list ap; |
5819 char *sn; | |
5820 double percent; | |
5575 | 5821 GaimConnection *gc = sess->aux_data; |
7283 | 5822 OscarData *od = (OscarData *)gc->proto_data; |
5679 | 5823 GaimConversation *c; |
2993 | 5824 struct direct_im *dim; |
5825 | |
5826 va_start(ap, fr); | |
5827 sn = va_arg(ap, char *); | |
5828 percent = va_arg(ap, double); | |
5829 va_end(ap); | |
6873 | 5830 |
2994 | 5831 if (!(dim = find_direct_im(od, sn))) |
5832 return 1; | |
3059 | 5833 if (dim->watcher) { |
5834 gaim_input_remove(dim->watcher); /* Otherwise, the callback will callback */ | |
5835 dim->watcher = 0; | |
5836 } | |
6982 | 5837 /* XXX is this really necessary? */ |
7082
25a616f16b6c
[gaim-migrate @ 7647]
Christian Hammond <chipx86@chipx86.com>
parents:
7080
diff
changeset
|
5838 gaim_core_mainloop_finish_events(); |
6640
314111e7b601
[gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents:
6623
diff
changeset
|
5839 |
6982 | 5840 c = gaim_find_conversation_with_account(sn, gaim_connection_get_account(gc)); |
6873 | 5841 if (c != NULL) |
5842 gaim_conversation_update_progress(c, percent); | |
2993 | 5843 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
5844 oscar_callback, dim->conn); | |
2086 | 5845 |
5846 return 1; | |
5847 } | |
5848 | |
6982 | 5849 /* |
5850 * This is called after a direct IM has been received in its entirety. This | |
5851 * function is passed a long chunk of data which contains the IM with any | |
5852 * data chunks (images) appended to it. | |
5853 * | |
5854 * This function rips out all the data chunks and creates an imgstore for | |
5855 * each one. In order to do this, it first goes through the IM and takes | |
5856 * out all the IMG tags. When doing so, it rewrites the original IMG tag | |
5857 * with one compatable with the imgstore Gaim core code. For each one, we | |
5858 * then read in chunks of data from the end of the message and actually | |
5859 * create the img store using the given data. | |
5860 * | |
5861 * For somewhat easy reference, here's a sample message | |
5862 * (without the whitespace and asterisks): | |
5863 * | |
5864 * <HTML><BODY BGCOLOR="#ffffff"> | |
5865 * <FONT LANG="0"> | |
5866 * This is a really stupid picture:<BR> | |
5867 * <IMG SRC="Sample.jpg" ID="1" WIDTH="283" HEIGHT="212" DATASIZE="9894"><BR> | |
5868 * Yeah it is<BR> | |
5869 * Here is another one:<BR> | |
5870 * <IMG SRC="Soap Bubbles.bmp" ID="2" WIDTH="256" HEIGHT="256" DATASIZE="65978"> | |
5871 * </FONT> | |
5872 * </BODY></HTML> | |
5873 * <BINARY> | |
5874 * <DATA ID="1" SIZE="9894">datadatadatadata</DATA> | |
5875 * <DATA ID="2" SIZE="65978">datadatadatadata</DATA> | |
5876 * </BINARY> | |
5877 */ | |
4617 | 5878 static int gaim_odc_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
5575 | 5879 GaimConnection *gc = sess->aux_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5880 GaimConvImFlags imflags = 0; |
6982 | 5881 GString *newmsg = g_string_new(""); |
5882 GSList *images = NULL; | |
2086 | 5883 va_list ap; |
6982 | 5884 const char *sn, *msg, *msgend, *binary; |
5885 size_t len; | |
5886 int encoding, isawaymsg; | |
2086 | 5887 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5888 va_start(ap, fr); |
6982 | 5889 sn = va_arg(ap, const char *); |
5890 msg = va_arg(ap, const char *); | |
5891 len = va_arg(ap, size_t); | |
3952 | 5892 encoding = va_arg(ap, int); |
4870 | 5893 isawaymsg = va_arg(ap, int); |
2086 | 5894 va_end(ap); |
6982 | 5895 msgend = msg + len; |
2086 | 5896 |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5897 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
5898 "Got DirectIM message from %s\n", sn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5899 |
4870 | 5900 if (isawaymsg) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5901 imflags |= GAIM_CONV_IM_AUTO_RESP; |
4870 | 5902 |
6982 | 5903 /* message has a binary trailer */ |
5904 if ((binary = gaim_strcasestr(msg, "<binary>"))) { | |
5905 GData *attribs; | |
5906 const char *tmp, *start, *end, *last = NULL; | |
5907 | |
5908 tmp = msg; | |
5909 | |
5910 /* for each valid image tag... */ | |
5911 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
5912 const char *id, *src, *datasize; | |
5913 const char *tag = NULL, *data = NULL; | |
5914 size_t size; | |
5915 int imgid = 0; | |
5916 | |
5917 /* update the location of the last img tag */ | |
5918 last = end; | |
5919 | |
5920 /* grab attributes */ | |
5921 id = g_datalist_get_data(&attribs, "id"); | |
5922 src = g_datalist_get_data(&attribs, "src"); | |
5923 datasize = g_datalist_get_data(&attribs, "datasize"); | |
5924 | |
5925 /* if we have id & datasize, build the data tag */ | |
5926 if (id && datasize) | |
5927 tag = g_strdup_printf("<data id=\"%s\" size=\"%s\">", id, datasize); | |
5928 | |
5929 /* if we have a tag, find the start of the data */ | |
5930 if (tag && (data = gaim_strcasestr(binary, tag))) | |
5931 data += strlen(tag); | |
5932 | |
5933 /* check the data is here and store it */ | |
5934 if (data + (size = atoi(datasize)) <= msgend) | |
5935 imgid = gaim_imgstore_add(data, size, src); | |
5936 | |
5937 /* if we have a stored image... */ | |
5938 if (imgid) { | |
5939 /* append the message up to the tag */ | |
5940 newmsg = g_string_append_len(newmsg, tmp, start - tmp); | |
5941 | |
5942 /* write the new image tag */ | |
5943 g_string_append_printf(newmsg, "<IMG ID=\"%d\">", imgid); | |
5944 | |
5945 /* and record the image number */ | |
5946 images = g_slist_append(images, GINT_TO_POINTER(imgid)); | |
5947 } else { | |
5948 /* otherwise, copy up to the end of the tag */ | |
5949 newmsg = g_string_append_len(newmsg, tmp, (end + 1) - tmp); | |
5950 } | |
5951 | |
5952 /* clear the attribute list */ | |
5953 g_datalist_clear(&attribs); | |
5954 | |
5955 /* continue from the end of the tag */ | |
5956 tmp = end + 1; | |
5957 } | |
5958 | |
5959 /* append any remaining message data (without the > :-) */ | |
5960 if (last++ && (last < binary)) | |
5961 newmsg = g_string_append_len(newmsg, last, binary - last); | |
5962 | |
5963 /* set the flag if we caught any images */ | |
5964 if (images) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
5965 imflags |= GAIM_CONV_IM_IMAGES; |
6982 | 5966 } else { |
5967 g_string_append_len(newmsg, msg, len); | |
5968 } | |
5969 | |
4617 | 5970 /* XXX - I imagine Paco-Paco will want to do some voodoo with the encoding here */ |
6982 | 5971 serv_got_im(gc, sn, newmsg->str, imflags, time(NULL)); |
5972 | |
5973 /* free up the message */ | |
5974 g_string_free(newmsg, TRUE); | |
5975 | |
5976 /* unref any images we allocated */ | |
5977 if (images) { | |
5978 GSList *tmp; | |
5979 int id; | |
5980 | |
5981 for (tmp = images; tmp != NULL; tmp = tmp->next) { | |
5982 id = GPOINTER_TO_INT(tmp->data); | |
5983 gaim_imgstore_unref(id); | |
5984 } | |
5985 | |
5986 g_slist_free(images); | |
5987 } | |
2086 | 5988 |
5989 return 1; | |
5990 } | |
5991 | |
4617 | 5992 static int gaim_odc_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 5993 va_list ap; |
5994 char *sn; | |
2993 | 5995 int typing; |
5575 | 5996 GaimConnection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5997 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
5998 va_start(ap, fr); |
2086 | 5999 sn = va_arg(ap, char *); |
2993 | 6000 typing = va_arg(ap, int); |
2086 | 6001 va_end(ap); |
6002 | |
4870 | 6003 if (typing == 0x0002) { |
2993 | 6004 /* 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
|
6005 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6006 "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
|
6007 serv_got_typing(gc, sn, 0, GAIM_TYPING); |
4870 | 6008 } else if (typing == 0x0001) |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5868
diff
changeset
|
6009 serv_got_typing(gc, sn, 0, GAIM_TYPED); |
4870 | 6010 else |
4342 | 6011 serv_got_typing_stopped(gc, sn); |
2086 | 6012 return 1; |
6013 } | |
6014 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
6015 static int gaim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *message, GaimConvImFlags imflags) { |
6982 | 6016 char *buf; |
6017 size_t len; | |
6018 int ret; | |
6019 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7111
diff
changeset
|
6020 if (imflags & GAIM_CONV_IM_IMAGES) { |
6982 | 6021 GString *msg = g_string_new(""); |
6022 GString *data = g_string_new("<BINARY>"); | |
6023 GData *attribs; | |
6024 const char *tmp, *start, *end, *last = NULL; | |
6025 int oscar_id = 0; | |
6026 | |
6027 tmp = message; | |
6028 | |
6029 /* for each valid IMG tag... */ | |
6030 while (gaim_markup_find_tag("img", tmp, &start, &end, &attribs)) { | |
6031 GaimStoredImage *image = NULL; | |
6032 const char *id; | |
6033 | |
6034 last = end; | |
6035 id = g_datalist_get_data(&attribs, "id"); | |
6036 | |
6037 /* ... if it refers to a valid gaim image ... */ | |
6038 if (id && (image = gaim_imgstore_get(atoi(id)))) { | |
6039 /* ... append the message from start to the tag ... */ | |
6040 msg = g_string_append_len(msg, tmp, start - tmp); | |
6041 oscar_id++; | |
6042 | |
6043 /* ... insert a new img tag with the oscar id ... */ | |
6044 if (image->filename) | |
6045 g_string_append_printf(msg, | |
6046 "<IMG SRC=\"file://%s\" ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 6047 image->filename, oscar_id, (int)image->size); |
6982 | 6048 else |
6049 g_string_append_printf(msg, | |
6050 "<IMG ID=\"%d\" DATASIZE=\"%d\">", | |
7386 | 6051 oscar_id, (int)image->size); |
6982 | 6052 |
6053 /* ... and append the data to the binary section ... */ | |
6054 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%d\">", | |
7386 | 6055 oscar_id, (int)image->size); |
6982 | 6056 data = g_string_append_len(data, image->data, image->size); |
6057 data = g_string_append(data, "</DATA>"); | |
6058 } else { | |
6059 /* ... otherwise, allow the possibly invalid img tag through. */ | |
6060 /* should we do something else? */ | |
6061 msg = g_string_append_len(msg, tmp, (end + 1) - tmp); | |
6062 } | |
6063 | |
6064 g_datalist_clear(&attribs); | |
6065 | |
6066 /* continue from the end of the tag */ | |
6067 tmp = end + 1; | |
6068 } | |
6069 | |
6070 /* append any remaining message data (without the > :-) */ | |
6071 if (last++ && *last) | |
6072 msg = g_string_append(msg, last); | |
6073 | |
6074 /* if we inserted any images in the binary section, append it */ | |
6075 if (oscar_id) { | |
6076 msg = g_string_append_len(msg, data->str, data->len); | |
6077 msg = g_string_append(msg, "</BINARY>"); | |
6078 } | |
6079 | |
6080 len = msg->len; | |
6081 buf = msg->str; | |
6082 g_string_free(msg, FALSE); | |
6083 g_string_free(data, TRUE); | |
6084 } else { | |
6085 len = strlen(message); | |
6086 buf = g_memdup(message, len+1); | |
6087 } | |
6088 | |
6089 /* 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
|
6090 if (imflags & GAIM_CONV_IM_AUTO_RESP) |
6982 | 6091 ret = aim_odc_send_im(sess, conn, buf, len, 0, 1); |
6092 else | |
6093 ret = aim_odc_send_im(sess, conn, buf, len, 0, 0); | |
6094 | |
6095 g_free(buf); | |
6096 | |
6097 return ret; | |
6098 } | |
6099 | |
2086 | 6100 struct ask_do_dir_im { |
6101 char *who; | |
5575 | 6102 GaimConnection *gc; |
2086 | 6103 }; |
6104 | |
3730 | 6105 static void oscar_cancel_direct_im(struct ask_do_dir_im *data) { |
5136 | 6106 g_free(data->who); |
2086 | 6107 g_free(data); |
6108 } | |
6109 | |
3730 | 6110 static void oscar_direct_im(struct ask_do_dir_im *data) { |
5575 | 6111 GaimConnection *gc = data->gc; |
7283 | 6112 OscarData *od; |
2086 | 6113 struct direct_im *dim; |
6114 | |
5580
86456ec3ca25
[gaim-migrate @ 5984]
Christian Hammond <chipx86@chipx86.com>
parents:
5579
diff
changeset
|
6115 if (!g_list_find(gaim_connections_get_all(), gc)) { |
5136 | 6116 g_free(data->who); |
4244 | 6117 g_free(data); |
6118 return; | |
6119 } | |
6120 | |
7283 | 6121 od = (OscarData *)gc->proto_data; |
4244 | 6122 |
2086 | 6123 dim = find_direct_im(od, data->who); |
6124 if (dim) { | |
3008 | 6125 if (!(dim->connected)) { /* We'll free the old, unconnected dim, and start over */ |
6126 od->direct_ims = g_slist_remove(od->direct_ims, dim); | |
6127 gaim_input_remove(dim->watcher); | |
6128 g_free(dim); | |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6129 gaim_debug(GAIM_DEBUG_INFO, "oscar", |
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6130 "Gave up on old direct IM, trying again\n"); |
3008 | 6131 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6132 gaim_notify_error(gc, NULL, "DirectIM already open.", NULL); |
5136 | 6133 g_free(data->who); |
4244 | 6134 g_free(data); |
3008 | 6135 return; |
6136 } | |
2086 | 6137 } |
6138 dim = g_new0(struct direct_im, 1); | |
6139 dim->gc = gc; | |
6140 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
6141 | |
4617 | 6142 dim->conn = aim_odc_initiate(od->sess, data->who); |
2086 | 6143 if (dim->conn != NULL) { |
6144 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
6145 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 6146 oscar_callback, dim->conn); |
4617 | 6147 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIM_ESTABLISHED, |
6148 gaim_odc_initiate, 0); | |
2086 | 6149 } else { |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6150 gaim_notify_error(gc, NULL, _("Unable to open Direct IM"), NULL); |
2086 | 6151 g_free(dim); |
6152 } | |
4244 | 6153 |
5136 | 6154 g_free(data->who); |
4244 | 6155 g_free(data); |
2086 | 6156 } |
6157 | |
5575 | 6158 static void oscar_ask_direct_im(GaimConnection *gc, const char *who) { |
5420 | 6159 gchar *buf; |
2086 | 6160 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); |
5136 | 6161 data->who = g_strdup(who); |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
6162 data->gc = gc; |
5420 | 6163 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
|
6164 |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6165 gaim_request_action(gc, NULL, buf, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6166 _("Because this reveals your IP address, it " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6167 "may be considered a privacy risk. Do you " |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6168 "wish to continue?"), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6169 0, data, 2, |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6170 _("Connect"), G_CALLBACK(oscar_direct_im), |
cce2d7868c78
[gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents:
5497
diff
changeset
|
6171 _("Cancel"), G_CALLBACK(oscar_cancel_direct_im)); |
5420 | 6172 g_free(buf); |
2086 | 6173 } |
6174 | |
5575 | 6175 static void oscar_set_permit_deny(GaimConnection *gc) { |
6176 GaimAccount *account = gaim_connection_get_account(gc); | |
7283 | 6177 OscarData *od = (OscarData *)gc->proto_data; |
4230 | 6178 #ifdef NOSSI |
8143 | 6179 GSList *list; |
4230 | 6180 char buf[MAXMSGLEN]; |
6181 int at; | |
6182 | |
5575 | 6183 switch(account->perm_deny) { |
8175 | 6184 case GAIM_PRIVACY_ALLOW_ALL: |
5575 | 6185 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gaim_account_get_username(account)); |
4230 | 6186 break; |
8175 | 6187 case GAIM_PRIVACY_DENY_ALL: |
5575 | 6188 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gaim_account_get_username(account)); |
4230 | 6189 break; |
8175 | 6190 case GAIM_PRIVACY_ALLOW_USERS: |
5575 | 6191 list = account->permit; |
4230 | 6192 at = 0; |
6193 while (list) { | |
6194 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6195 list = list->next; | |
6196 } | |
6197 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
6198 break; | |
8175 | 6199 case GAIM_PRIVACY_DENY_USERS: |
5575 | 6200 list = account->deny; |
4230 | 6201 at = 0; |
6202 while (list) { | |
6203 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
6204 list = list->next; | |
6205 } | |
6206 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
6207 break; | |
6208 default: | |
6209 break; | |
2086 | 6210 } |
4230 | 6211 #else |
8175 | 6212 if (od->sess->ssi.received_data) { |
6213 switch (account->perm_deny) { | |
6214 case GAIM_PRIVACY_ALLOW_ALL: | |
6215 aim_ssi_setpermdeny(od->sess, 0x01, 0xffffffff); | |
6216 break; | |
6217 case GAIM_PRIVACY_ALLOW_BUDDYLIST: | |
6218 aim_ssi_setpermdeny(od->sess, 0x05, 0xffffffff); | |
6219 break; | |
6220 case GAIM_PRIVACY_ALLOW_USERS: | |
6221 aim_ssi_setpermdeny(od->sess, 0x03, 0xffffffff); | |
6222 break; | |
6223 case GAIM_PRIVACY_DENY_ALL: | |
6224 aim_ssi_setpermdeny(od->sess, 0x02, 0xffffffff); | |
6225 break; | |
6226 case GAIM_PRIVACY_DENY_USERS: | |
6227 aim_ssi_setpermdeny(od->sess, 0x04, 0xffffffff); | |
6228 break; | |
6229 default: | |
6230 aim_ssi_setpermdeny(od->sess, 0x01, 0xffffffff); | |
6231 break; | |
6232 } | |
6233 } | |
4230 | 6234 #endif |
2086 | 6235 } |
6236 | |
5575 | 6237 static void oscar_add_permit(GaimConnection *gc, const char *who) { |
4269 | 6238 #ifdef NOSSI |
8143 | 6239 if (gc->account->perm_deny == 3) |
4269 | 6240 oscar_set_permit_deny(gc); |
6241 #else | |
7283 | 6242 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6243 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a permit\n"); |
4230 | 6244 if (od->sess->ssi.received_data) |
4889 | 6245 aim_ssi_addpermit(od->sess, who); |
4230 | 6246 #endif |
2086 | 6247 } |
6248 | |
5575 | 6249 static void oscar_add_deny(GaimConnection *gc, const char *who) { |
4269 | 6250 #ifdef NOSSI |
8143 | 6251 if (gc->account->perm_deny == 4) |
4269 | 6252 oscar_set_permit_deny(gc); |
6253 #else | |
7283 | 6254 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6255 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to add a deny\n"); |
4230 | 6256 if (od->sess->ssi.received_data) |
4889 | 6257 aim_ssi_adddeny(od->sess, who); |
4230 | 6258 #endif |
2086 | 6259 } |
6260 | |
5575 | 6261 static void oscar_rem_permit(GaimConnection *gc, const char *who) { |
4269 | 6262 #ifdef NOSSI |
8143 | 6263 if (gc->account->perm_deny == 3) |
4269 | 6264 oscar_set_permit_deny(gc); |
6265 #else | |
7283 | 6266 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6267 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a permit\n"); |
4230 | 6268 if (od->sess->ssi.received_data) |
4889 | 6269 aim_ssi_delpermit(od->sess, who); |
4230 | 6270 #endif |
2086 | 6271 } |
6272 | |
5575 | 6273 static void oscar_rem_deny(GaimConnection *gc, const char *who) { |
4269 | 6274 #ifdef NOSSI |
8143 | 6275 if (gc->account->perm_deny == 4) |
4269 | 6276 oscar_set_permit_deny(gc); |
6277 #else | |
7283 | 6278 OscarData *od = (OscarData *)gc->proto_data; |
5219
e807abdcee83
[gaim-migrate @ 5589]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
6279 gaim_debug(GAIM_DEBUG_INFO, "oscar", "ssi: About to delete a deny\n"); |
4230 | 6280 if (od->sess->ssi.received_data) |
4889 | 6281 aim_ssi_deldeny(od->sess, who); |
4230 | 6282 #endif |
2086 | 6283 } |
6284 | |
5575 | 6285 static GList *oscar_away_states(GaimConnection *gc) |
2086 | 6286 { |
7283 | 6287 OscarData *od = gc->proto_data; |
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6288 GList *m = NULL; |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6289 |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6290 if (!od->icq) |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6291 return g_list_append(m, GAIM_AWAY_CUSTOM); |
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2432
diff
changeset
|
6292 |
4333 | 6293 m = g_list_append(m, _("Online")); |
6294 m = g_list_append(m, _("Away")); | |
6295 m = g_list_append(m, _("Do Not Disturb")); | |
6296 m = g_list_append(m, _("Not Available")); | |
6297 m = g_list_append(m, _("Occupied")); | |
6298 m = g_list_append(m, _("Free For Chat")); | |
6299 m = g_list_append(m, _("Invisible")); | |
6300 | |
6301 return m; | |
6302 } | |
6303 | |
7172 | 6304 static void oscar_ssi_editcomment(struct name_data *data, const char *text) { |
7283 | 6305 OscarData *od = data->gc->proto_data; |
7172 | 6306 GaimBuddy *b; |
6307 GaimGroup *g; | |
6308 | |
6309 if (!(b = gaim_find_buddy(gaim_connection_get_account(data->gc), data->name))) { | |
6310 oscar_free_name_data(data); | |
6311 return; | |
6312 } | |
6313 | |
6314 if (!(g = gaim_find_buddys_group(b))) { | |
6315 oscar_free_name_data(data); | |
6316 return; | |
6317 } | |
6318 | |
6319 aim_ssi_editcomment(od->sess, g->name, data->name, text); | |
6320 oscar_free_name_data(data); | |
6321 } | |
6322 | |
6323 static void oscar_buddycb_edit_comment(GaimConnection *gc, const char *name) { | |
7283 | 6324 OscarData *od = gc->proto_data; |
7172 | 6325 struct name_data *data = g_new(struct name_data, 1); |
6326 GaimBuddy *b; | |
6327 GaimGroup *g; | |
6328 char *comment; | |
6329 gchar *comment_utf8; | |
6330 | |
6331 if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name))) | |
6332 return; | |
6333 if (!(g = gaim_find_buddys_group(b))) | |
6334 return; | |
6335 comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name); | |
6336 comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL; | |
6337 | |
6338 data->gc = gc; | |
6339 data->name = g_strdup(name); | |
6340 data->nick = NULL; | |
6341 | |
6342 gaim_request_input(gc, NULL, _("Buddy Comment:"), NULL, | |
6343 comment_utf8, TRUE, FALSE, | |
6344 _("OK"), G_CALLBACK(oscar_ssi_editcomment), | |
6345 _("Cancel"), G_CALLBACK(oscar_free_name_data), | |
6346 data); | |
6347 | |
6348 free(comment); | |
6349 g_free(comment_utf8); | |
6350 } | |
6351 | |
5575 | 6352 static GList *oscar_buddy_menu(GaimConnection *gc, const char *who) { |
7283 | 6353 OscarData *od = gc->proto_data; |
4333 | 6354 GList *m = NULL; |
6355 struct proto_buddy_menu *pbm; | |
6356 | |
7172 | 6357 pbm = g_new0(struct proto_buddy_menu, 1); |
6358 pbm->label = _("Edit Buddy Comment"); | |
6359 pbm->callback = oscar_buddycb_edit_comment; | |
6360 pbm->gc = gc; | |
6361 m = g_list_append(m, pbm); | |
6362 | |
4333 | 6363 if (od->icq) { |
4624 | 6364 #if 0 |
4333 | 6365 pbm = g_new0(struct proto_buddy_menu, 1); |
6366 pbm->label = _("Get Status Msg"); | |
4969 | 6367 pbm->callback = oscar_get_icqstatusmsg; |
4333 | 6368 pbm->gc = gc; |
6369 m = g_list_append(m, pbm); | |
4624 | 6370 #endif |
4333 | 6371 } else { |
6695 | 6372 GaimBuddy *b = gaim_find_buddy(gc->account, who); |
7011 | 6373 aim_userinfo_t *userinfo; |
5975 | 6374 |
6375 if (b) | |
7045 | 6376 userinfo = aim_locate_finduserinfo(od->sess, b->name); |
7011 | 6377 |
6378 if (b && userinfo && aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), who) && GAIM_BUDDY_IS_ONLINE(b)) { | |
6379 if (userinfo->capabilities & AIM_CAPS_DIRECTIM) { | |
5917 | 6380 pbm = g_new0(struct proto_buddy_menu, 1); |
6381 pbm->label = _("Direct IM"); | |
6382 pbm->callback = oscar_ask_direct_im; | |
6383 pbm->gc = gc; | |
6384 m = g_list_append(m, pbm); | |
6385 } | |
7650 | 6386 |
6387 if (userinfo->capabilities & AIM_CAPS_SENDFILE) { | |
6388 pbm = g_new0(struct proto_buddy_menu, 1); | |
6389 pbm->label = _("Send File"); | |
6390 pbm->callback = oscar_ask_sendfile; | |
6391 pbm->gc = gc; | |
6392 m = g_list_append(m, pbm); | |
6393 } | |
4826 | 6394 #if 0 |
7011 | 6395 if (userinfo->capabilities & AIM_CAPS_GETFILE) { |
5917 | 6396 pbm = g_new0(struct proto_buddy_menu, 1); |
6397 pbm->label = _("Get File"); | |
6398 pbm->callback = oscar_ask_getfile; | |
6399 pbm->gc = gc; | |
6400 m = g_list_append(m, pbm); | |
6401 } | |
4826 | 6402 #endif |
4333 | 6403 } |
5131 | 6404 } |
5197 | 6405 |
5131 | 6406 if (od->sess->ssi.received_data) { |
6407 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, who); | |
6408 if (gname && aim_ssi_waitingforauth(od->sess->ssi.local, gname, who)) { | |
6409 pbm = g_new0(struct proto_buddy_menu, 1); | |
6873 | 6410 pbm->label = _("Re-request Authorization"); |
5131 | 6411 pbm->callback = gaim_auth_sendrequest; |
6412 pbm->gc = gc; | |
6413 m = g_list_append(m, pbm); | |
4333 | 6414 } |
4916 | 6415 } |
6416 | |
4333 | 6417 return m; |
6418 } | |
6419 | |
5575 | 6420 static void oscar_format_screenname(GaimConnection *gc, const char *nick) { |
7283 | 6421 OscarData *od = gc->proto_data; |
5575 | 6422 if (!aim_sncmp(gaim_account_get_username(gaim_connection_get_account(gc)), nick)) { |
4333 | 6423 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { |
6424 od->setnick = TRUE; | |
6425 od->newsn = g_strdup(nick); | |
6426 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6427 } else { | |
6428 aim_admin_setnick(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), nick); | |
6429 } | |
6430 } else { | |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5435
diff
changeset
|
6431 gaim_notify_error(gc, NULL, _("The new formatting is invalid."), |
8152 | 6432 _("Screen name formatting can change only capitalization and whitespace.")); |
4333 | 6433 } |
6434 } | |
6435 | |
5575 | 6436 static void oscar_show_format_screenname(GaimConnection *gc) |
4333 | 6437 { |
8152 | 6438 gaim_request_input(gc, NULL, _("New screen name formatting:"), NULL, |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6439 gaim_connection_get_display_name(gc), FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6440 _("OK"), G_CALLBACK(oscar_format_screenname), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6441 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6442 gc); |
4333 | 6443 } |
6444 | |
5575 | 6445 static void oscar_confirm_account(GaimConnection *gc) |
4333 | 6446 { |
7283 | 6447 OscarData *od = gc->proto_data; |
4333 | 6448 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6449 | |
6450 if (conn) { | |
6451 aim_admin_reqconfirm(od->sess, conn); | |
6452 } else { | |
6453 od->conf = TRUE; | |
6454 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6455 } | |
6456 } | |
6457 | |
5575 | 6458 static void oscar_show_email(GaimConnection *gc) |
4333 | 6459 { |
7283 | 6460 OscarData *od = gc->proto_data; |
4333 | 6461 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6462 | |
6463 if (conn) { | |
6464 aim_admin_getinfo(od->sess, conn, 0x11); | |
6465 } else { | |
6466 od->reqemail = TRUE; | |
6467 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6468 } | |
6469 } | |
6470 | |
5575 | 6471 static void oscar_change_email(GaimConnection *gc, const char *email) |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6472 { |
7283 | 6473 OscarData *od = gc->proto_data; |
2768
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6474 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
|
6475 |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6476 if (conn) { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6477 aim_admin_setemail(od->sess, conn, email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6478 } else { |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6479 od->setemail = TRUE; |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6480 od->email = g_strdup(email); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6481 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6482 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6483 } |
8a918df1a5ed
[gaim-migrate @ 2781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2762
diff
changeset
|
6484 |
5575 | 6485 static void oscar_show_change_email(GaimConnection *gc) |
4333 | 6486 { |
6035
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6487 gaim_request_input(gc, NULL, _("Change Address To:"), NULL, NULL, |
8c44020a958e
[gaim-migrate @ 6485]
Christian Hammond <chipx86@chipx86.com>
parents:
6029
diff
changeset
|
6488 FALSE, FALSE, |
5493
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6489 _("OK"), G_CALLBACK(oscar_change_email), |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6490 _("Cancel"), NULL, |
3e8487580024
[gaim-migrate @ 5889]
Christian Hammond <chipx86@chipx86.com>
parents:
5436
diff
changeset
|
6491 gc); |
4333 | 6492 } |
6493 | |
5575 | 6494 static void oscar_show_awaitingauth(GaimConnection *gc) |
4333 | 6495 { |
7283 | 6496 OscarData *od = gc->proto_data; |
4333 | 6497 gchar *nombre, *text, *tmp; |
6695 | 6498 GaimBlistNode *gnode, *cnode, *bnode; |
4333 | 6499 int num=0; |
6500 | |
6873 | 6501 text = g_strdup(""); |
4333 | 6502 |
4785 | 6503 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
6695 | 6504 GaimGroup *group = (GaimGroup *)gnode; |
4785 | 6505 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
6506 continue; | |
6695 | 6507 for (cnode = gnode->child; cnode; cnode = cnode->next) { |
6508 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 6509 continue; |
6695 | 6510 for (bnode = cnode->child; bnode; bnode = bnode->next) { |
6511 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
6512 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
6513 continue; | |
6514 if (buddy->account == gc->account && aim_ssi_waitingforauth(od->sess->ssi.local, group->name, buddy->name)) { | |
6515 if (gaim_get_buddy_alias_only(buddy)) | |
6516 nombre = g_strdup_printf(" %s (%s)", buddy->name, gaim_get_buddy_alias_only(buddy)); | |
6517 else | |
6518 nombre = g_strdup_printf(" %s", buddy->name); | |
6873 | 6519 tmp = g_strdup_printf("%s%s<br>", text, nombre); |
6695 | 6520 g_free(text); |
6521 text = tmp; | |
6522 g_free(nombre); | |
6523 num++; | |
6524 } | |
4333 | 6525 } |
2979 | 6526 } |
4333 | 6527 } |
6528 | |
6529 if (!num) { | |
6530 g_free(text); | |
6873 | 6531 text = g_strdup(_("<i>you are not waiting for authorization</i>")); |
6532 } | |
6533 | |
6534 gaim_notify_formatted(gc, NULL, _("You are awaiting authorization from " | |
6535 "the following buddies"), _("You can re-request " | |
6536 "authorization from these buddies by " | |
6537 "right-clicking on them and selecting " | |
6538 "\"Re-request Authorization.\""), text, NULL, NULL); | |
4333 | 6539 g_free(text); |
2979 | 6540 } |
6541 | |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6542 static void search_by_email_cb(GaimConnection *gc, const char *email) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6543 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6544 serv_dir_search(gc, "", "", "", "", "", "", "", email); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6545 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6546 |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6547 static void oscar_show_find_email(GaimConnection *gc) |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6548 { |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6549 gaim_request_input(gc, _("Find Buddy by E-mail"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6550 _("Search for a buddy by e-mail address"), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6551 _("Type the e-mail address of the buddy you are " |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6552 "searching for."), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6553 NULL, FALSE, FALSE, |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6554 _("Search"), G_CALLBACK(search_by_email_cb), |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6555 _("Cancel"), NULL, gc); |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6556 } |
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6557 |
7366 | 6558 #if 0 |
5917 | 6559 static void oscar_setavailmsg(GaimConnection *gc, char *text) { |
7283 | 6560 OscarData *od = (OscarData *)gc->proto_data; |
5917 | 6561 |
7334 | 6562 aim_locate_setprofile(od->sess, NULL, NULL, 0, NULL, "", 0); |
5917 | 6563 aim_srv_setavailmsg(od->sess, text); |
6564 } | |
6565 | |
6566 static void oscar_show_setavailmsg(GaimConnection *gc) | |
6567 { | |
7313 | 6568 gaim_request_input(gc, NULL, _("Available Message:"), NULL, |
6569 _("I'm doing work and hoping for a distraction--IM me!"), | |
6570 TRUE, FALSE, | |
5917 | 6571 _("OK"), G_CALLBACK(oscar_setavailmsg), |
6572 _("Cancel"), NULL, | |
6573 gc); | |
6574 } | |
7366 | 6575 #endif |
5917 | 6576 |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6577 static void oscar_show_set_info(GaimConnection *gc) |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6578 { |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6579 gaim_account_request_change_user_info(gaim_connection_get_account(gc)); |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6580 } |
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6581 |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6582 static void oscar_change_pass(GaimConnection *gc) |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6583 { |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6584 gaim_account_request_change_password(gaim_connection_get_account(gc)); |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6585 } |
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6586 |
5575 | 6587 static void oscar_show_chpassurl(GaimConnection *gc) |
4333 | 6588 { |
7283 | 6589 OscarData *od = gc->proto_data; |
5575 | 6590 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
|
6591 gaim_notify_uri(gc, substituted); |
5517 | 6592 g_free(substituted); |
4333 | 6593 } |
6594 | |
7026 | 6595 static void oscar_show_imforwardingurl(GaimConnection *gc) |
6596 { | |
6597 gaim_notify_uri(gc, "http://mymobile.aol.com/dbreg/register?action=imf&clientID=1"); | |
6598 } | |
6599 | |
5842 | 6600 static void oscar_set_icon(GaimConnection *gc, const char *iconfile) |
6601 { | |
7283 | 6602 OscarData *od = gc->proto_data; |
5844 | 6603 aim_session_t *sess = od->sess; |
5842 | 6604 FILE *file; |
6605 struct stat st; | |
5844 | 6606 |
6039 | 6607 if (iconfile == NULL) { |
6608 /* Set an empty icon, or something */ | |
6609 } else if (!stat(iconfile, &st)) { | |
5842 | 6610 char *buf = g_malloc(st.st_size); |
6611 file = fopen(iconfile, "rb"); | |
6612 if (file) { | |
6052 | 6613 md5_state_t *state; |
6039 | 6614 char md5[16]; |
5842 | 6615 int len = fread(buf, 1, st.st_size, file); |
6039 | 6616 fclose(file); |
6052 | 6617 state = g_malloc(sizeof(md5_state_t)); |
5842 | 6618 md5_init(state); |
6619 md5_append(state, buf, len); | |
6620 md5_finish(state, md5); | |
6621 g_free(state); | |
6622 aim_ssi_seticon(sess, md5, 16); | |
6623 } else | |
6624 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6625 "Can't open buddy icon file!\n"); | |
6626 g_free(buf); | |
6627 } else | |
6628 gaim_debug(GAIM_DEBUG_ERROR, "oscar", | |
6629 "Can't stat buddy icon file!\n"); | |
6630 } | |
6631 | |
6632 | |
5575 | 6633 static GList *oscar_actions(GaimConnection *gc) |
2086 | 6634 { |
7283 | 6635 OscarData *od = gc->proto_data; |
4333 | 6636 struct proto_actions_menu *pam; |
6637 GList *m = NULL; | |
6638 | |
6639 pam = g_new0(struct proto_actions_menu, 1); | |
7853 | 6640 pam->label = _("Set User Info..."); |
7067
71e0da45abe6
[gaim-migrate @ 7631]
Christian Hammond <chipx86@chipx86.com>
parents:
7063
diff
changeset
|
6641 pam->callback = oscar_show_set_info; |
4333 | 6642 pam->gc = gc; |
6643 m = g_list_append(m, pam); | |
6644 | |
7366 | 6645 #if 0 |
5917 | 6646 pam = g_new0(struct proto_actions_menu, 1); |
7853 | 6647 pam->label = _("Set Available Message..."); |
5917 | 6648 pam->callback = oscar_show_setavailmsg; |
6649 pam->gc = gc; | |
6650 m = g_list_append(m, pam); | |
7366 | 6651 #endif |
5917 | 6652 |
5238 | 6653 pam = g_new0(struct proto_actions_menu, 1); |
7853 | 6654 pam->label = _("Change Password..."); |
7063
7fdac700deb1
[gaim-migrate @ 7627]
Christian Hammond <chipx86@chipx86.com>
parents:
7060
diff
changeset
|
6655 pam->callback = oscar_change_pass; |
5238 | 6656 pam->gc = gc; |
6657 m = g_list_append(m, pam); | |
4617 | 6658 |
6659 if (od->sess->authinfo->chpassurl) { | |
6660 pam = g_new0(struct proto_actions_menu, 1); | |
6661 pam->label = _("Change Password (URL)"); | |
6662 pam->callback = oscar_show_chpassurl; | |
6663 pam->gc = gc; | |
6664 m = g_list_append(m, pam); | |
6665 } | |
6666 | |
7026 | 6667 if (od->sess->authinfo->chpassurl) { |
6668 pam = g_new0(struct proto_actions_menu, 1); | |
6669 pam->label = _("Configure IM Forwarding (URL)"); | |
6670 pam->callback = oscar_show_imforwardingurl; | |
6671 pam->gc = gc; | |
6672 m = g_list_append(m, pam); | |
6673 } | |
6674 | |
5238 | 6675 if (!od->icq) { |
4617 | 6676 /* AIM actions */ |
6677 m = g_list_append(m, NULL); | |
4333 | 6678 |
5917 | 6679 pam = g_new0(struct proto_actions_menu, 1); |
8152 | 6680 pam->label = _("Format Screen Name..."); |
5844 | 6681 pam->callback = oscar_show_format_screenname; |
4333 | 6682 pam->gc = gc; |
6683 m = g_list_append(m, pam); | |
6684 | |
6685 pam = g_new0(struct proto_actions_menu, 1); | |
6686 pam->label = _("Confirm Account"); | |
6687 pam->callback = oscar_confirm_account; | |
6688 pam->gc = gc; | |
6689 m = g_list_append(m, pam); | |
6690 | |
6691 pam = g_new0(struct proto_actions_menu, 1); | |
7880 | 6692 pam->label = _("Display Currently Registered Address"); |
4333 | 6693 pam->callback = oscar_show_email; |
6694 pam->gc = gc; | |
6695 m = g_list_append(m, pam); | |
6696 | |
6697 pam = g_new0(struct proto_actions_menu, 1); | |
7880 | 6698 pam->label = _("Change Currently Registered Address..."); |
4333 | 6699 pam->callback = oscar_show_change_email; |
6700 pam->gc = gc; | |
6701 m = g_list_append(m, pam); | |
2086 | 6702 } |
4333 | 6703 |
6704 m = g_list_append(m, NULL); | |
6705 | |
6706 pam = g_new0(struct proto_actions_menu, 1); | |
6707 pam->label = _("Show Buddies Awaiting Authorization"); | |
6708 pam->callback = oscar_show_awaitingauth; | |
6709 pam->gc = gc; | |
6710 m = g_list_append(m, pam); | |
6711 | |
2086 | 6712 m = g_list_append(m, NULL); |
4333 | 6713 |
6714 pam = g_new0(struct proto_actions_menu, 1); | |
7853 | 6715 pam->label = _("Search for Buddy by Email..."); |
7080
fc9c74cfb306
[gaim-migrate @ 7645]
Christian Hammond <chipx86@chipx86.com>
parents:
7067
diff
changeset
|
6716 pam->callback = oscar_show_find_email; |
4333 | 6717 pam->gc = gc; |
6718 m = g_list_append(m, pam); | |
6719 | |
4336 | 6720 /* pam = g_new0(struct proto_actions_menu, 1); |
4333 | 6721 pam->label = _("Search for Buddy by Information"); |
6722 pam->callback = show_find_info; | |
6723 pam->gc = gc; | |
4336 | 6724 m = g_list_append(m, pam); */ |
2086 | 6725 |
6726 return m; | |
6727 } | |
6728 | |
5575 | 6729 static void oscar_change_passwd(GaimConnection *gc, const char *old, const char *new) |
2086 | 6730 { |
7283 | 6731 OscarData *od = gc->proto_data; |
4617 | 6732 |
6733 if (od->icq) { | |
6734 aim_icq_changepasswd(od->sess, new); | |
2086 | 6735 } else { |
4617 | 6736 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
6737 if (conn) { | |
6738 aim_admin_changepasswd(od->sess, conn, new, old); | |
6739 } else { | |
6740 od->chpass = TRUE; | |
6741 od->oldp = g_strdup(old); | |
6742 od->newp = g_strdup(new); | |
6743 aim_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
6744 } | |
2086 | 6745 } |
6746 } | |
6747 | |
6059 | 6748 static void oscar_convo_closed(GaimConnection *gc, const char *who) |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6749 { |
7283 | 6750 OscarData *od = gc->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6751 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6752 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6753 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6754 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6755 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6756 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6757 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6758 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6759 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6760 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
6761 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6762 static GaimPluginProtocolInfo prpl_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6763 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6764 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
|
6765 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6766 NULL, |
8170 | 6767 NULL, |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6768 oscar_list_icon, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6769 oscar_list_emblems, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6770 oscar_status_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6771 oscar_tooltip_text, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6772 oscar_away_states, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6773 oscar_actions, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6774 oscar_buddy_menu, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6775 oscar_chat_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6776 oscar_login, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6777 oscar_close, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6778 oscar_send_im, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6779 oscar_set_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6780 oscar_send_typing, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6781 oscar_get_info, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6782 oscar_set_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6783 oscar_get_away, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6784 oscar_set_dir, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6785 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6786 oscar_dir_search, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6787 oscar_set_idle, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6788 oscar_change_passwd, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6789 oscar_add_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6790 oscar_add_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6791 oscar_remove_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6792 oscar_remove_buddies, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6793 oscar_add_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6794 oscar_add_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6795 oscar_rem_permit, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6796 oscar_rem_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6797 oscar_set_permit_deny, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6798 oscar_warn, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6799 oscar_join_chat, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6800 oscar_chat_invite, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6801 oscar_chat_leave, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6802 NULL, |
8219 | 6803 oscar_send_chat, |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6804 oscar_keepalive, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6805 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6806 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6807 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6808 #ifndef NOSSI |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6809 oscar_alias_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6810 oscar_move_buddy, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6811 oscar_rename_group, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6812 #else |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6813 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6814 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6815 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6816 #endif |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6817 NULL, |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6818 oscar_convo_closed, |
5842 | 6819 NULL, |
7650 | 6820 oscar_set_icon |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6821 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6822 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6823 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6824 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6825 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6826 GAIM_PLUGIN_PROTOCOL, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6827 NULL, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6828 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6829 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6830 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6831 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6832 "prpl-oscar", /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6833 "AIM/ICQ", /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6834 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6835 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6836 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6837 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6838 N_("AIM/ICQ Protocol Plugin"), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6839 NULL, /**< author */ |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6350
diff
changeset
|
6840 GAIM_WEBSITE, /**< homepage */ |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6841 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6842 NULL, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6843 NULL, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6844 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6845 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6846 NULL, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6847 &prpl_info /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6848 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6849 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6850 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6851 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6852 { |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6853 GaimAccountOption *option; |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6854 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6855 option = gaim_account_option_string_new(_("Auth host"), "server", |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6856 "login.oscar.aol.com"); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6857 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6858 option); |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6859 |
5685
43ea75092684
[gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
6860 option = gaim_account_option_int_new(_("Auth port"), "port", 5190); |
5638
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6861 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, |
0bdfa28c678e
[gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
6862 option); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6863 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5197
diff
changeset
|
6864 my_protocol = plugin; |
2086 | 6865 } |
6866 | |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5917
diff
changeset
|
6867 GAIM_INIT_PLUGIN(oscar, init_plugin, info); |