Mercurial > pidgin
annotate src/protocols/oscar/oscar.c @ 2273:0b5c3338fa3d
[gaim-migrate @ 2283]
One of the girls on the floor of my sister's dorm lost both her parents when their plane was hijacked and crashed into the World Trade Center. my girlfriend's boss's sister-in-law's brother died when the building collapsed. my parents flew to atlanta on monday; they're safe but currently stranded there. they had planned on flying to Raleigh, NC today but now are just hoping to be able to fly home soon. how did this happen?
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Wed, 12 Sep 2001 21:29:32 +0000 |
parents | 59a11f4fa4d0 |
children | 4f2a6268c5ec |
rev | line source |
---|---|
2086 | 1 /* |
2 * gaim | |
3 * | |
4 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
5 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx> | |
6 * | |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or | |
10 * (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 * GNU General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
20 * | |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
24 #include <config.h> |
2086 | 25 #endif |
26 | |
27 | |
28 #include <netdb.h> | |
29 #include <unistd.h> | |
30 #include <errno.h> | |
31 #include <netinet/in.h> | |
32 #include <arpa/inet.h> | |
33 #include <string.h> | |
34 #include <stdlib.h> | |
35 #include <stdio.h> | |
36 #include <time.h> | |
37 #include <sys/socket.h> | |
38 #include <sys/stat.h> | |
39 #include "multi.h" | |
40 #include "prpl.h" | |
41 #include "gaim.h" | |
42 #include "aim.h" | |
43 #include "proxy.h" | |
44 | |
45 /*#include "pixmaps/cancel.xpm"*/ | |
46 #include "pixmaps/admin_icon.xpm" | |
47 #include "pixmaps/aol_icon.xpm" | |
48 #include "pixmaps/away_icon.xpm" | |
49 #include "pixmaps/dt_icon.xpm" | |
50 #include "pixmaps/free_icon.xpm" | |
51 | |
52 /* constants to identify proto_opts */ | |
53 #define USEROPT_AUTH 0 | |
54 #define USEROPT_AUTHPORT 1 | |
55 | |
56 #define AIMHASHDATA "http://gaim.sourceforge.net/aim_data.php3" | |
57 | |
58 static int gaim_caps = AIM_CAPS_CHAT | | |
59 AIM_CAPS_BUDDYICON | | |
60 AIM_CAPS_IMIMAGE; | |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
61 static fu8_t gaim_features[] = {0x01, 0x01, 0x01, 0x02, 0x66}; |
2086 | 62 |
63 struct oscar_data { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
64 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
65 aim_conn_t *conn; |
2086 | 66 |
67 guint cnpa; | |
68 guint paspa; | |
69 | |
70 int create_exchange; | |
71 char *create_name; | |
72 | |
73 gboolean conf; | |
74 gboolean reqemail; | |
75 gboolean chpass; | |
76 char *oldp; | |
77 char *newp; | |
78 | |
79 GSList *oscar_chats; | |
80 GSList *direct_ims; | |
81 GSList *hasicons; | |
82 | |
83 gboolean killme; | |
84 }; | |
85 | |
86 struct chat_connection { | |
87 char *name; | |
88 char *show; /* AOL did something funny to us */ | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
89 fu16_t exchange; /* XXX should have instance here too */ |
2086 | 90 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
|
91 aim_conn_t *conn; |
2086 | 92 int inpa; |
93 int id; | |
94 struct gaim_connection *gc; /* i hate this. */ | |
95 struct conversation *cnv; /* bah. */ | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
96 int maxlen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
97 int maxvis; |
2086 | 98 }; |
99 | |
100 struct direct_im { | |
101 struct gaim_connection *gc; | |
102 char name[80]; | |
103 int watcher; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
104 aim_conn_t *conn; |
2086 | 105 }; |
106 | |
107 struct ask_direct { | |
108 struct gaim_connection *gc; | |
109 char *sn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
110 char ip[64]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
111 fu8_t cookie[8]; |
2086 | 112 }; |
113 | |
114 struct icon_req { | |
115 char *user; | |
116 time_t timestamp; | |
2196
016c5307f26b
[gaim-migrate @ 2206]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2194
diff
changeset
|
117 unsigned long length; |
2191
657dbe515608
[gaim-migrate @ 2201]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2172
diff
changeset
|
118 unsigned long checksum; |
2086 | 119 gboolean request; |
120 }; | |
121 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
122 static struct direct_im *find_direct_im(struct oscar_data *od, const char *who) { |
2086 | 123 GSList *d = od->direct_ims; |
124 char *n = g_strdup(normalize(who)); | |
125 struct direct_im *m = NULL; | |
126 | |
127 while (d) { | |
128 m = (struct direct_im *)d->data; | |
129 if (!strcmp(n, normalize(m->name))) | |
130 break; | |
131 m = NULL; | |
132 d = d->next; | |
133 } | |
134 | |
135 g_free(n); | |
136 return m; | |
137 } | |
138 | |
139 static char *extract_name(char *name) { | |
140 char *tmp; | |
141 int i, j; | |
142 char *x = strchr(name, '-'); | |
143 if (!x) return NULL; | |
144 x = strchr(++x, '-'); | |
145 if (!x) return NULL; | |
146 tmp = g_strdup(++x); | |
147 | |
148 for (i = 0, j = 0; x[i]; i++) { | |
149 if (x[i] != '%') | |
150 tmp[j++] = x[i]; | |
151 else { | |
152 char hex[3]; | |
153 hex[0] = x[++i]; | |
154 hex[1] = x[++i]; | |
155 hex[2] = 0; | |
156 sscanf(hex, "%x", (int *)&tmp[j++]); | |
157 } | |
158 } | |
159 | |
160 tmp[j] = 0; | |
161 return tmp; | |
162 } | |
163 | |
164 static struct chat_connection *find_oscar_chat(struct gaim_connection *gc, int id) { | |
165 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; | |
166 struct chat_connection *c = NULL; | |
167 if (gc->protocol != PROTO_OSCAR) return NULL; | |
168 | |
169 while (g) { | |
170 c = (struct chat_connection *)g->data; | |
171 if (c->id == id) | |
172 break; | |
173 g = g->next; | |
174 c = NULL; | |
175 } | |
176 | |
177 return c; | |
178 } | |
179 | |
180 static struct chat_connection *find_oscar_chat_by_conn(struct gaim_connection *gc, | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
181 aim_conn_t *conn) { |
2086 | 182 GSList *g = ((struct oscar_data *)gc->proto_data)->oscar_chats; |
183 struct chat_connection *c = NULL; | |
184 | |
185 while (g) { | |
186 c = (struct chat_connection *)g->data; | |
187 if (c->conn == conn) | |
188 break; | |
189 g = g->next; | |
190 c = NULL; | |
191 } | |
192 | |
193 return c; | |
194 } | |
195 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
196 static int gaim_parse_auth_resp (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
197 static int gaim_parse_login (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
198 static int gaim_handle_redirect (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
199 static int gaim_info_change (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
200 static int gaim_account_confirm (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
201 static int gaim_parse_oncoming (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
202 static int gaim_parse_offgoing (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
203 static int gaim_parse_incoming_im(aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
204 static int gaim_parse_misses (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
205 static int gaim_parse_user_info (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
206 static int gaim_parse_motd (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
207 static int gaim_chatnav_info (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
208 static int gaim_chat_join (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
209 static int gaim_chat_leave (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
210 static int gaim_chat_info_update (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
211 static int gaim_chat_incoming_msg(aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
212 static int gaim_parse_msgack (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
213 static int gaim_parse_ratechange (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
214 static int gaim_parse_evilnotify (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
215 static int gaim_parse_searcherror(aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
216 static int gaim_parse_searchreply(aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
217 static int gaim_bosrights (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
218 static int rateresp_bos (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
219 static int rateresp_auth (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
220 static int gaim_parse_msgerr (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
221 static int gaim_parse_buddyrights(aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
222 static int gaim_parse_locerr (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
223 static int gaim_icbm_param_info (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
224 static int gaim_parse_genericerr (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
225 static int gaim_memrequest (aim_session_t *, aim_frame_t*, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
226 static int server_ready_bos (aim_session_t *, aim_frame_t*, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
227 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
228 static int gaim_directim_initiate (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
229 static int gaim_directim_incoming (aim_session_t *, aim_frame_t *, ...); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
230 static int gaim_directim_typing (aim_session_t *, aim_frame_t *, ...); |
2086 | 231 |
232 static char *msgerrreason[] = { | |
233 "Invalid error", | |
234 "Invalid SNAC", | |
235 "Rate to host", | |
236 "Rate to client", | |
237 "Not logged in", | |
238 "Service unavailable", | |
239 "Service not defined", | |
240 "Obsolete SNAC", | |
241 "Not supported by host", | |
242 "Not supported by client", | |
243 "Refused by client", | |
244 "Reply too big", | |
245 "Responses lost", | |
246 "Request denied", | |
247 "Busted SNAC payload", | |
248 "Insufficient rights", | |
249 "In local permit/deny", | |
250 "Too evil (sender)", | |
251 "Too evil (receiver)", | |
252 "User temporarily unavailable", | |
253 "No match", | |
254 "List overflow", | |
255 "Request ambiguous", | |
256 "Queue full", | |
257 "Not while on AOL" | |
258 }; | |
259 static int msgerrreasonlen = 25; | |
260 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
261 static void gaim_directim_disconnect(aim_session_t *sess, aim_conn_t *conn) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
262 struct gaim_connection *gc = sess->aux_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
263 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
264 struct conversation *cnv; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
265 struct direct_im *dim; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
266 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
267 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
268 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
269 sn = g_strdup(aim_directim_getsn(conn)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
270 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
271 debug_printf("%s disconnected Direct IM.\n", sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
272 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
273 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
274 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
275 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
276 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
277 g_snprintf(buf, sizeof buf, _("Direct IM with %s closed"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
278 if ((cnv = find_conversation(sn))) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
279 write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time((time_t)NULL)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
280 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
281 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
|
282 g_free(sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
283 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
284 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
285 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
286 |
2086 | 287 static void oscar_callback(gpointer data, gint source, |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
288 GaimInputCondition condition) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
289 aim_conn_t *conn = (aim_conn_t *)data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
290 aim_session_t *sess = aim_conn_getsess(conn); |
2086 | 291 struct gaim_connection *gc = sess ? sess->aux_data : NULL; |
292 struct oscar_data *odata; | |
293 | |
294 if (!gc) { | |
295 /* gc is null. we return, else we seg SIGSEG on next line. */ | |
296 debug_printf("oscar callback for closed connection (1).\n"); | |
297 return; | |
298 } | |
299 | |
300 odata = (struct oscar_data *)gc->proto_data; | |
301 | |
302 if (!g_slist_find(connections, gc)) { | |
303 /* oh boy. this is probably bad. i guess the only thing we | |
304 * can really do is return? */ | |
305 debug_printf("oscar callback for closed connection (2).\n"); | |
306 return; | |
307 } | |
308 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
309 if (condition & GAIM_INPUT_READ) { |
2086 | 310 if (conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) { |
311 debug_printf("got information on rendezvous\n"); | |
312 if (aim_handlerendconnect(odata->sess, conn) < 0) { | |
313 debug_printf(_("connection error (rend)\n")); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
314 aim_conn_kill(odata->sess, &conn); |
2086 | 315 } |
316 } else { | |
317 if (aim_get_command(odata->sess, conn) >= 0) { | |
318 aim_rxdispatch(odata->sess); | |
319 if (odata->killme) | |
320 signoff(gc); | |
321 } else { | |
322 if ((conn->type == AIM_CONN_TYPE_BOS) || | |
323 !(aim_getconn_type(odata->sess, AIM_CONN_TYPE_BOS))) { | |
324 debug_printf(_("major connection error\n")); | |
325 hide_login_progress(gc, _("Disconnected.")); | |
326 signoff(gc); | |
327 } else if (conn->type == AIM_CONN_TYPE_CHAT) { | |
328 struct chat_connection *c = find_oscar_chat_by_conn(gc, conn); | |
329 char buf[BUF_LONG]; | |
330 debug_printf("disconnected from chat room %s\n", c->name); | |
331 c->conn = NULL; | |
332 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
333 gaim_input_remove(c->inpa); |
2086 | 334 c->inpa = 0; |
335 c->fd = -1; | |
336 aim_conn_kill(odata->sess, &conn); | |
337 sprintf(buf, _("You have been disconnected from chat room %s."), c->name); | |
338 do_error_dialog(buf, _("Chat Error!")); | |
339 } else if (conn->type == AIM_CONN_TYPE_CHATNAV) { | |
340 if (odata->cnpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
341 gaim_input_remove(odata->cnpa); |
2086 | 342 odata->cnpa = 0; |
343 debug_printf("removing chatnav input watcher\n"); | |
344 if (odata->create_exchange) { | |
345 odata->create_exchange = 0; | |
346 g_free(odata->create_name); | |
347 odata->create_name = NULL; | |
348 do_error_dialog(_("Chat is currently unavailable"), | |
349 _("Gaim - Chat")); | |
350 } | |
351 aim_conn_kill(odata->sess, &conn); | |
352 } else if (conn->type == AIM_CONN_TYPE_AUTH) { | |
353 if (odata->paspa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
354 gaim_input_remove(odata->paspa); |
2086 | 355 odata->paspa = 0; |
356 debug_printf("removing authconn input watcher\n"); | |
357 aim_conn_kill(odata->sess, &conn); | |
358 } else if (conn->type == AIM_CONN_TYPE_RENDEZVOUS) { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
359 if (conn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
360 gaim_directim_disconnect(odata->sess, conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
361 else { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
362 debug_printf("No handler for rendezvous disconnect (%d).\n", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
363 source); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
364 } |
2086 | 365 aim_conn_kill(odata->sess, &conn); |
366 } else { | |
367 debug_printf("holy crap! generic connection error! %d\n", | |
368 conn->type); | |
369 aim_conn_kill(odata->sess, &conn); | |
370 } | |
371 } | |
372 } | |
373 } | |
374 } | |
375 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
376 static void oscar_debug(aim_session_t *sess, int level, const char *format, va_list va) { |
2086 | 377 char *s = g_strdup_vprintf(format, va); |
378 char buf[256]; | |
379 char *t; | |
380 struct gaim_connection *gc = sess->aux_data; | |
381 | |
382 g_snprintf(buf, sizeof(buf), "%s %d: ", gc->username, level); | |
383 t = g_strconcat(buf, s, NULL); | |
384 debug_printf(t); | |
385 if (t[strlen(t)-1] != '\n') | |
386 debug_printf("\n"); | |
387 g_free(t); | |
388 g_free(s); | |
389 } | |
390 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
391 static void oscar_login_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 392 { |
393 struct gaim_connection *gc = data; | |
394 struct oscar_data *odata; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
395 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
396 aim_conn_t *conn; |
2086 | 397 |
398 if (!g_slist_find(connections, gc)) { | |
399 close(source); | |
400 return; | |
401 } | |
402 | |
403 odata = gc->proto_data; | |
404 sess = odata->sess; | |
405 conn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); | |
406 | |
407 if (source < 0) { | |
408 hide_login_progress(gc, _("Couldn't connect to host")); | |
409 signoff(gc); | |
410 return; | |
411 } | |
412 | |
413 aim_conn_completeconnect(sess, conn); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
414 gc->inpa = gaim_input_add(conn->fd, GAIM_INPUT_READ, |
2086 | 415 oscar_callback, conn); |
416 debug_printf(_("Password sent, waiting for response\n")); | |
417 } | |
418 | |
419 static void oscar_login(struct aim_user *user) { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
420 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
421 aim_conn_t *conn; |
2086 | 422 char buf[256]; |
423 struct gaim_connection *gc = new_gaim_conn(user); | |
424 struct oscar_data *odata = gc->proto_data = g_new0(struct oscar_data, 1); | |
425 odata->create_exchange = 0; | |
426 | |
427 debug_printf(_("Logging in %s\n"), user->username); | |
428 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
429 sess = g_new0(aim_session_t, 1); |
2086 | 430 |
431 aim_session_init(sess, AIM_SESS_FLAGS_NONBLOCKCONNECT, 0); | |
432 aim_setdebuggingcb(sess, oscar_debug); | |
433 | |
434 /* we need an immediate queue because we don't use a while-loop to | |
435 * see if things need to be sent. */ | |
436 aim_tx_setenqueue(sess, AIM_TX_IMMEDIATE, NULL); | |
437 odata->sess = sess; | |
438 sess->aux_data = gc; | |
439 | |
440 conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
441 if (conn == NULL) { | |
442 debug_printf(_("internal connection error\n")); | |
443 hide_login_progress(gc, _("Unable to login to AIM")); | |
444 signoff(gc); | |
445 return; | |
446 } | |
447 | |
448 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); | |
449 set_login_progress(gc, 2, buf); | |
450 | |
451 aim_conn_addhandler(sess, conn, 0x0017, 0x0007, gaim_parse_login, 0); | |
452 aim_conn_addhandler(sess, conn, 0x0017, 0x0003, gaim_parse_auth_resp, 0); | |
453 | |
454 conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
455 conn->fd = proxy_connect(user->proto_opt[USEROPT_AUTH][0] ? | |
456 user->proto_opt[USEROPT_AUTH] : FAIM_LOGIN_SERVER, | |
457 user->proto_opt[USEROPT_AUTHPORT][0] ? | |
458 atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
459 oscar_login_connect, gc); | |
460 if (conn->fd < 0) { | |
461 hide_login_progress(gc, _("Couldn't connect to host")); | |
462 signoff(gc); | |
463 return; | |
464 } | |
465 aim_request_login(sess, conn, gc->username); | |
466 } | |
467 | |
468 static void oscar_close(struct gaim_connection *gc) { | |
469 struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
470 if (gc->protocol != PROTO_OSCAR) return; | |
471 | |
472 while (odata->oscar_chats) { | |
473 struct chat_connection *n = odata->oscar_chats->data; | |
474 if (n->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
475 gaim_input_remove(n->inpa); |
2086 | 476 g_free(n->name); |
477 g_free(n->show); | |
478 odata->oscar_chats = g_slist_remove(odata->oscar_chats, n); | |
479 g_free(n); | |
480 } | |
481 while (odata->direct_ims) { | |
482 struct direct_im *n = odata->direct_ims->data; | |
483 if (n->watcher > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
484 gaim_input_remove(n->watcher); |
2086 | 485 odata->direct_ims = g_slist_remove(odata->direct_ims, n); |
486 g_free(n); | |
487 } | |
488 while (odata->hasicons) { | |
489 struct icon_req *n = odata->hasicons->data; | |
490 g_free(n->user); | |
491 odata->hasicons = g_slist_remove(odata->hasicons, n); | |
492 g_free(n); | |
493 } | |
494 if (gc->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
495 gaim_input_remove(gc->inpa); |
2086 | 496 if (odata->cnpa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
497 gaim_input_remove(odata->cnpa); |
2086 | 498 if (odata->paspa > 0) |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
499 gaim_input_remove(odata->paspa); |
2086 | 500 aim_session_kill(odata->sess); |
501 g_free(odata->sess); | |
502 odata->sess = NULL; | |
503 g_free(gc->proto_data); | |
504 gc->proto_data = NULL; | |
505 debug_printf(_("Signed off.\n")); | |
506 } | |
507 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
508 static void oscar_bos_connect(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 509 struct gaim_connection *gc = data; |
510 struct oscar_data *odata; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
511 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
512 aim_conn_t *bosconn; |
2086 | 513 |
514 if (!g_slist_find(connections, gc)) { | |
515 close(source); | |
516 return; | |
517 } | |
518 | |
519 odata = gc->proto_data; | |
520 sess = odata->sess; | |
521 bosconn = odata->conn; | |
522 | |
523 if (source < 0) { | |
524 hide_login_progress(gc, _("Could Not Connect")); | |
525 signoff(gc); | |
526 return; | |
527 } | |
528 | |
529 aim_conn_completeconnect(sess, bosconn); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
530 gc->inpa = gaim_input_add(bosconn->fd, GAIM_INPUT_READ, |
2086 | 531 oscar_callback, bosconn); |
532 set_login_progress(gc, 4, _("Connection established, cookie sent")); | |
533 } | |
534 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
535 static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 536 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
537 aim_conn_t *bosconn = NULL; |
2086 | 538 char *sn = NULL, *bosip = NULL, *errurl = NULL, *email = NULL; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
539 fu8_t *cookie = NULL; |
2086 | 540 int errorcode = 0, regstatus = 0; |
541 int latestbuild = 0, latestbetabuild = 0; | |
542 char *latestrelease = NULL, *latestbeta = NULL; | |
543 char *latestreleaseurl = NULL, *latestbetaurl = NULL; | |
544 char *latestreleaseinfo = NULL, *latestbetainfo = NULL; | |
545 int i; char *host; int port; | |
546 struct aim_user *user; | |
547 | |
548 struct gaim_connection *gc = sess->aux_data; | |
549 struct oscar_data *od = gc->proto_data; | |
550 user = gc->user; | |
551 port = user->proto_opt[USEROPT_AUTHPORT][0] ? | |
552 atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
553 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
554 va_start(ap, fr); |
2086 | 555 sn = va_arg(ap, char *); |
556 errorcode = va_arg(ap, int); | |
557 errurl = va_arg(ap, char *); | |
558 regstatus = va_arg(ap, int); | |
559 email = va_arg(ap, char *); | |
560 bosip = va_arg(ap, char *); | |
561 cookie = va_arg(ap, unsigned char *); | |
562 | |
563 latestrelease = va_arg(ap, char *); | |
564 latestbuild = va_arg(ap, int); | |
565 latestreleaseurl = va_arg(ap, char *); | |
566 latestreleaseinfo = va_arg(ap, char *); | |
567 | |
568 latestbeta = va_arg(ap, char *); | |
569 latestbetabuild = va_arg(ap, int); | |
570 latestbetaurl = va_arg(ap, char *); | |
571 latestbetainfo = va_arg(ap, char *); | |
572 | |
573 va_end(ap); | |
574 | |
575 debug_printf("inside auth_resp (Screen name: %s)\n", sn); | |
576 | |
577 if (errorcode || !bosip || !cookie) { | |
578 switch (errorcode) { | |
579 case 0x05: | |
580 /* Incorrect nick/password */ | |
581 hide_login_progress(gc, _("Incorrect nickname or password.")); | |
582 plugin_event(event_error, (void *)980, 0, 0, 0); | |
583 break; | |
584 case 0x11: | |
585 /* Suspended account */ | |
586 hide_login_progress(gc, _("Your account is currently suspended.")); | |
587 break; | |
588 case 0x18: | |
589 /* connecting too frequently */ | |
590 hide_login_progress(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.")); | |
591 plugin_event(event_error, (void *)983, 0, 0, 0); | |
592 break; | |
593 case 0x1c: | |
594 /* client too old */ | |
595 hide_login_progress(gc, _("The client version you are using is too old. Please upgrade at " WEBSITE)); | |
596 plugin_event(event_error, (void *)989, 0, 0, 0); | |
597 break; | |
598 default: | |
599 hide_login_progress(gc, _("Authentication Failed")); | |
600 break; | |
601 } | |
602 debug_printf("Login Error Code 0x%04x\n", errorcode); | |
603 debug_printf("Error URL: %s\n", errurl); | |
604 od->killme = TRUE; | |
605 return 1; | |
606 } | |
607 | |
608 | |
609 debug_printf("Reg status: %2d\n", regstatus); | |
610 if (email) { | |
611 debug_printf("Email: %s\n", email); | |
612 } else { | |
613 debug_printf("Email is NULL\n"); | |
614 } | |
615 debug_printf("BOSIP: %s\n", bosip); | |
616 if (latestbeta) | |
617 debug_printf("Latest WinAIM beta version %s, build %d, at %s (%s)\n", | |
618 latestbeta, latestbetabuild, latestbetaurl, latestbetainfo); | |
619 if (latestrelease) | |
620 debug_printf("Latest WinAIM released version %s, build %d, at %s (%s)\n", | |
621 latestrelease, latestbuild, latestreleaseurl, latestreleaseinfo); | |
622 debug_printf("Closing auth connection...\n"); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
623 aim_conn_kill(sess, &fr->conn); |
2086 | 624 |
625 bosconn = aim_newconn(sess, AIM_CONN_TYPE_BOS, NULL); | |
626 if (bosconn == NULL) { | |
627 hide_login_progress(gc, _("Internal Error")); | |
628 od->killme = TRUE; | |
629 return 0; | |
630 } | |
631 | |
632 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0003, gaim_bosrights, 0); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
633 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0007, rateresp_bos, 0); /* rate info */ |
2086 | 634 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_ACK, AIM_CB_ACK_ACK, NULL, 0); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
635 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_SERVERREADY, server_ready_bos, 0); |
2086 | 636 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATEINFO, NULL, 0); |
637 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_REDIRECT, gaim_handle_redirect, 0); | |
638 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_RIGHTSINFO, gaim_parse_buddyrights, 0); | |
639 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_ONCOMING, gaim_parse_oncoming, 0); | |
640 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_BUD, AIM_CB_BUD_OFFGOING, gaim_parse_offgoing, 0); | |
641 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_INCOMING, gaim_parse_incoming_im, 0); | |
642 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_ERROR, gaim_parse_locerr, 0); | |
643 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_MISSEDCALL, gaim_parse_misses, 0); | |
644 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_RATECHANGE, gaim_parse_ratechange, 0); | |
645 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_GEN, AIM_CB_GEN_EVIL, gaim_parse_evilnotify, 0); | |
646 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, AIM_CB_LOK_ERROR, gaim_parse_searcherror, 0); | |
647 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOK, 0x0003, gaim_parse_searchreply, 0); | |
648 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ERROR, gaim_parse_msgerr, 0); | |
649 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_LOC, AIM_CB_LOC_USERINFO, gaim_parse_user_info, 0); | |
650 aim_conn_addhandler(sess, bosconn, AIM_CB_FAM_MSG, AIM_CB_MSG_ACK, gaim_parse_msgack, 0); | |
651 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
|
652 aim_conn_addhandler(sess, bosconn, 0x0004, 0x0005, gaim_icbm_param_info, 0); |
2086 | 653 aim_conn_addhandler(sess, bosconn, 0x0001, 0x0001, gaim_parse_genericerr, 0); |
654 aim_conn_addhandler(sess, bosconn, 0x0003, 0x0001, gaim_parse_genericerr, 0); | |
655 aim_conn_addhandler(sess, bosconn, 0x0009, 0x0001, gaim_parse_genericerr, 0); | |
656 aim_conn_addhandler(sess, bosconn, 0x0001, 0x001f, gaim_memrequest, 0); | |
657 | |
658 ((struct oscar_data *)gc->proto_data)->conn = bosconn; | |
659 for (i = 0; i < (int)strlen(bosip); i++) { | |
660 if (bosip[i] == ':') { | |
661 port = atoi(&(bosip[i+1])); | |
662 break; | |
663 } | |
664 } | |
665 host = g_strndup(bosip, i); | |
666 bosconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
667 bosconn->fd = proxy_connect(host, port, oscar_bos_connect, gc); | |
668 g_free(host); | |
669 if (bosconn->fd < 0) { | |
670 hide_login_progress(gc, _("Could Not Connect")); | |
671 od->killme = TRUE; | |
672 return 0; | |
673 } | |
674 aim_auth_sendcookie(sess, bosconn, cookie); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
675 gaim_input_remove(gc->inpa); |
2086 | 676 return 1; |
677 } | |
678 | |
679 struct pieceofcrap { | |
680 struct gaim_connection *gc; | |
681 unsigned long offset; | |
682 unsigned long len; | |
683 char *modname; | |
684 int fd; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
685 aim_conn_t *conn; |
2086 | 686 unsigned int inpa; |
687 }; | |
688 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
689 static void damn_you(gpointer data, gint source, GaimInputCondition c) |
2086 | 690 { |
691 struct pieceofcrap *pos = data; | |
692 struct oscar_data *od = pos->gc->proto_data; | |
693 char in = '\0'; | |
694 int x = 0; | |
695 unsigned char m[17]; | |
696 | |
697 while (read(pos->fd, &in, 1) == 1) { | |
698 if (in == '\n') | |
699 x++; | |
700 else if (in != '\r') | |
701 x = 0; | |
702 if (x == 2) | |
703 break; | |
704 in = '\0'; | |
705 } | |
706 if (in != '\n') { | |
707 do_error_dialog("Gaim was unable to get a valid hash for logging into AIM." | |
708 " You may be disconnected shortly.", "Login Error"); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
709 gaim_input_remove(pos->inpa); |
2086 | 710 close(pos->fd); |
711 g_free(pos); | |
712 return; | |
713 } | |
714 read(pos->fd, m, 16); | |
715 m[16] = '\0'; | |
716 debug_printf("Sending hash: "); | |
717 for (x = 0; x < 16; x++) | |
718 debug_printf("%02x ", (unsigned char)m[x]); | |
719 debug_printf("\n"); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
720 gaim_input_remove(pos->inpa); |
2086 | 721 close(pos->fd); |
722 aim_sendmemblock(od->sess, pos->conn, 0, 16, m, AIM_SENDMEMBLOCK_FLAG_ISHASH); | |
723 g_free(pos); | |
724 } | |
725 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
726 static void straight_to_hell(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 727 struct pieceofcrap *pos = data; |
728 char buf[BUF_LONG]; | |
729 | |
730 if (source < 0) { | |
731 do_error_dialog("Gaim was unable to get a valid hash for logging into AIM." | |
732 " You may be disconnected shortly.", "Login Error"); | |
733 if (pos->modname) | |
734 g_free(pos->modname); | |
735 g_free(pos); | |
736 return; | |
737 } | |
738 | |
739 g_snprintf(buf, sizeof(buf), "GET " AIMHASHDATA | |
740 "?offset=%ld&len=%ld&modname=%s HTTP/1.0\n\n", | |
741 pos->offset, pos->len, pos->modname ? pos->modname : ""); | |
742 write(pos->fd, buf, strlen(buf)); | |
743 if (pos->modname) | |
744 g_free(pos->modname); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
745 pos->inpa = gaim_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); |
2086 | 746 return; |
747 } | |
748 | |
749 /* size of icbmui.ocm, the largest module in AIM 3.5 */ | |
750 #define AIM_MAX_FILE_SIZE 98304 | |
751 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
752 int gaim_memrequest(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 753 va_list ap; |
754 struct pieceofcrap *pos; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
755 fu32_t offset, len; |
2086 | 756 char *modname; |
757 int fd; | |
758 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
759 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
760 offset = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
761 len = (fu32_t)va_arg(ap, unsigned long); |
2086 | 762 modname = va_arg(ap, char *); |
763 va_end(ap); | |
764 | |
765 debug_printf("offset: %d, len: %d, file: %s\n", offset, len, modname ? modname : "aim.exe"); | |
766 if (len == 0) { | |
767 debug_printf("len is 0, hashing NULL\n"); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
768 aim_sendmemblock(sess, fr->conn, offset, len, NULL, |
2086 | 769 AIM_SENDMEMBLOCK_FLAG_ISREQUEST); |
770 return 1; | |
771 } | |
772 /* uncomment this when you're convinced it's right. remember, it's been wrong before. | |
773 if (offset > AIM_MAX_FILE_SIZE || len > AIM_MAX_FILE_SIZE) { | |
774 char *buf; | |
775 int i = 8; | |
776 if (modname) | |
777 i += strlen(modname); | |
778 buf = g_malloc(i); | |
779 i = 0; | |
780 if (modname) { | |
781 memcpy(buf, modname, strlen(modname)); | |
782 i += strlen(modname); | |
783 } | |
784 buf[i++] = offset & 0xff; | |
785 buf[i++] = (offset >> 8) & 0xff; | |
786 buf[i++] = (offset >> 16) & 0xff; | |
787 buf[i++] = (offset >> 24) & 0xff; | |
788 buf[i++] = len & 0xff; | |
789 buf[i++] = (len >> 8) & 0xff; | |
790 buf[i++] = (len >> 16) & 0xff; | |
791 buf[i++] = (len >> 24) & 0xff; | |
792 debug_printf("len + offset is invalid, hashing request\n"); | |
793 aim_sendmemblock(sess, command->conn, offset, i, buf, AIM_SENDMEMBLOCK_FLAG_ISREQUEST); | |
794 g_free(buf); | |
795 return 1; | |
796 } | |
797 */ | |
798 | |
799 pos = g_new0(struct pieceofcrap, 1); | |
800 pos->gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
801 pos->conn = fr->conn; |
2086 | 802 |
803 pos->offset = offset; | |
804 pos->len = len; | |
805 pos->modname = modname ? g_strdup(modname) : NULL; | |
806 | |
807 fd = proxy_connect("gaim.sourceforge.net", 80, straight_to_hell, pos); | |
808 if (fd < 0) { | |
809 if (pos->modname) | |
810 g_free(pos->modname); | |
811 g_free(pos); | |
812 do_error_dialog("Gaim was unable to get a valid hash for logging into AIM." | |
813 " You may be disconnected shortly.", "Login Error"); | |
814 } | |
815 pos->fd = fd; | |
816 | |
817 return 1; | |
818 } | |
819 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
820 static int gaim_parse_login(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 821 #if 0 |
822 struct client_info_s info = {"gaim", 4, 1, 2010, "us", "en", 0x0004, 0x0000, 0x04b}; | |
823 #else | |
824 struct client_info_s info = AIM_CLIENTINFO_KNOWNGOOD; | |
825 #endif | |
826 char *key; | |
827 va_list ap; | |
828 struct gaim_connection *gc = sess->aux_data; | |
829 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
830 va_start(ap, fr); |
2086 | 831 key = va_arg(ap, char *); |
832 va_end(ap); | |
833 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
834 aim_send_login(sess, fr->conn, gc->username, gc->password, &info, key); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
835 |
2086 | 836 return 1; |
837 } | |
838 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
839 static int server_ready_auth(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 840 struct gaim_connection *gc = sess->aux_data; |
841 struct oscar_data *od = gc->proto_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
842 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
843 aim_auth_setversions(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
844 aim_bos_reqrate(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
845 debug_printf("done with AUTH ServerReady\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
846 if (od->chpass) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
847 debug_printf("changing password\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
848 aim_auth_changepasswd(sess, fr->conn, od->newp, od->oldp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
849 g_free(od->oldp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
850 g_free(od->newp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
851 od->chpass = FALSE; |
2086 | 852 } |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
853 if (od->conf) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
854 debug_printf("confirming account\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
855 aim_auth_reqconfirm(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
856 od->conf = FALSE; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
857 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
858 if (od->reqemail) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
859 debug_printf("requesting email\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
860 aim_auth_getinfo(sess, fr->conn, 0x0011); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
861 od->reqemail = FALSE; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
862 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
863 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
864 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
865 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
866 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
867 static int server_ready_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
868 aim_setversions(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
869 aim_bos_reqrate(sess, fr->conn); /* request rate info */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
870 debug_printf("done with BOS ServerReady\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
871 |
2086 | 872 return 1; |
873 } | |
874 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
875 static int server_ready_chatnav(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
876 debug_printf("chatnav: got server ready\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
877 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CTN, AIM_CB_CTN_INFO, gaim_chatnav_info, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
878 aim_bos_reqrate(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
879 aim_bos_ackrateresp(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
880 aim_chatnav_clientready(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
881 aim_chatnav_reqrights(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
882 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
883 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
884 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
885 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
886 static int server_ready_chat(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
887 struct gaim_connection *gc = sess->aux_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
888 struct chat_connection *chatcon; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
889 static int id = 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
890 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
891 debug_printf("chat: got server ready\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
892 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERJOIN, gaim_chat_join, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
893 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_USERLEAVE, gaim_chat_leave, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
894 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_ROOMINFOUPDATE, gaim_chat_info_update, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
895 aim_conn_addhandler(sess, fr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_INCOMINGMSG, gaim_chat_incoming_msg, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
896 aim_bos_reqrate(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
897 aim_bos_ackrateresp(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
898 aim_chat_clientready(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
899 chatcon = find_oscar_chat_by_conn(gc, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
900 chatcon->id = id; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
901 chatcon->cnv = serv_got_joined_chat(gc, id++, chatcon->show); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
902 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
903 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
904 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
905 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
906 static void oscar_chatnav_connect(gpointer data, gint source, GaimInputCondition cond) { |
2086 | 907 struct gaim_connection *gc = data; |
908 struct oscar_data *odata; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
909 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
910 aim_conn_t *tstconn; |
2086 | 911 |
912 if (!g_slist_find(connections, gc)) { | |
913 close(source); | |
914 return; | |
915 } | |
916 | |
917 odata = gc->proto_data; | |
918 sess = odata->sess; | |
919 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_CHATNAV); | |
920 | |
921 if (source < 0) { | |
922 aim_conn_kill(sess, &tstconn); | |
923 debug_printf("unable to connect to chatnav server\n"); | |
924 return; | |
925 } | |
926 | |
927 aim_conn_completeconnect(sess, tstconn); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
928 odata->cnpa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
929 oscar_callback, tstconn); |
2086 | 930 debug_printf("chatnav: connected\n"); |
931 } | |
932 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
933 static void oscar_auth_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 934 { |
935 struct gaim_connection *gc = data; | |
936 struct oscar_data *odata; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
937 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
938 aim_conn_t *tstconn; |
2086 | 939 |
940 if (!g_slist_find(connections, gc)) { | |
941 close(source); | |
942 return; | |
943 } | |
944 | |
945 odata = gc->proto_data; | |
946 sess = odata->sess; | |
947 tstconn = aim_getconn_type_all(sess, AIM_CONN_TYPE_AUTH); | |
948 | |
949 if (source < 0) { | |
950 aim_conn_kill(sess, &tstconn); | |
951 debug_printf("unable to connect to authorizer\n"); | |
952 return; | |
953 } | |
954 | |
955 aim_conn_completeconnect(sess, tstconn); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
956 odata->paspa = gaim_input_add(tstconn->fd, GAIM_INPUT_READ, |
2086 | 957 oscar_callback, tstconn); |
958 debug_printf("chatnav: connected\n"); | |
959 } | |
960 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
961 static void oscar_chat_connect(gpointer data, gint source, GaimInputCondition cond) |
2086 | 962 { |
963 struct chat_connection *ccon = data; | |
964 struct gaim_connection *gc = ccon->gc; | |
965 struct oscar_data *odata; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
966 aim_session_t *sess; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
967 aim_conn_t *tstconn; |
2086 | 968 |
969 if (!g_slist_find(connections, gc)) { | |
970 close(source); | |
971 g_free(ccon->show); | |
972 g_free(ccon->name); | |
973 g_free(ccon); | |
974 return; | |
975 } | |
976 | |
977 odata = gc->proto_data; | |
978 sess = odata->sess; | |
979 tstconn = ccon->conn; | |
980 | |
981 if (source < 0) { | |
982 aim_conn_kill(sess, &tstconn); | |
983 g_free(ccon->show); | |
984 g_free(ccon->name); | |
985 g_free(ccon); | |
986 return; | |
987 } | |
988 | |
989 aim_conn_completeconnect(sess, ccon->conn); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
990 ccon->inpa = gaim_input_add(tstconn->fd, |
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
991 GAIM_INPUT_READ, |
2086 | 992 oscar_callback, tstconn); |
993 odata->oscar_chats = g_slist_append(odata->oscar_chats, ccon); | |
994 aim_chat_attachname(tstconn, ccon->name); | |
995 } | |
996 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
997 /* 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
|
998 static int gaim_handle_redirect(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 999 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1000 fu16_t serviceid; |
2086 | 1001 char *ip; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1002 fu8_t *cookie; |
2086 | 1003 struct gaim_connection *gc = sess->aux_data; |
1004 struct aim_user *user = gc->user; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1005 aim_conn_t *tstconn; |
2086 | 1006 int i; |
1007 char *host; | |
1008 int port; | |
1009 | |
1010 port = user->proto_opt[USEROPT_AUTHPORT][0] ? | |
1011 atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, | |
1012 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1013 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1014 serviceid = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1015 ip = va_arg(ap, char *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1016 cookie = (fu8_t *)va_arg(ap, unsigned char *); |
2086 | 1017 |
1018 for (i = 0; i < (int)strlen(ip); i++) { | |
1019 if (ip[i] == ':') { | |
1020 port = atoi(&(ip[i+1])); | |
1021 break; | |
1022 } | |
1023 } | |
1024 host = g_strndup(ip, i); | |
1025 | |
1026 switch(serviceid) { | |
1027 case 0x7: /* Authorizer */ | |
1028 debug_printf("Reconnecting with authorizor...\n"); | |
1029 tstconn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); | |
1030 if (tstconn == NULL) { | |
1031 debug_printf("unable to reconnect with authorizer\n"); | |
1032 g_free(host); | |
1033 return 1; | |
1034 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1035 aim_conn_addhandler(sess, tstconn, 0x0001, 0x0003, server_ready_auth, 0); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1036 aim_conn_addhandler(sess, tstconn, 0x0001, 0x0007, rateresp_auth, 0); |
2086 | 1037 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0003, gaim_info_change, 0); |
1038 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0005, gaim_info_change, 0); | |
1039 aim_conn_addhandler(sess, tstconn, 0x0007, 0x0007, gaim_account_confirm, 0); | |
1040 | |
1041 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
1042 tstconn->fd = proxy_connect(host, port, oscar_auth_connect, gc); | |
1043 if (tstconn->fd < 0) { | |
1044 aim_conn_kill(sess, &tstconn); | |
1045 debug_printf("unable to reconnect with authorizer\n"); | |
1046 g_free(host); | |
1047 return 1; | |
1048 } | |
1049 aim_auth_sendcookie(sess, tstconn, cookie); | |
1050 break; | |
1051 case 0xd: /* ChatNav */ | |
1052 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHATNAV, NULL); | |
1053 if (tstconn == NULL) { | |
1054 debug_printf("unable to connect to chatnav server\n"); | |
1055 g_free(host); | |
1056 return 1; | |
1057 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1058 aim_conn_addhandler(sess, tstconn, 0x0001, 0x0003, server_ready_chatnav, 0); |
2086 | 1059 |
1060 tstconn->status |= AIM_CONN_STATUS_INPROGRESS; | |
1061 tstconn->fd = proxy_connect(host, port, oscar_chatnav_connect, gc); | |
1062 if (tstconn->fd < 0) { | |
1063 aim_conn_kill(sess, &tstconn); | |
1064 debug_printf("unable to connect to chatnav server\n"); | |
1065 g_free(host); | |
1066 return 1; | |
1067 } | |
1068 aim_auth_sendcookie(sess, tstconn, cookie); | |
1069 break; | |
1070 case 0xe: /* Chat */ | |
1071 { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1072 char *roomname; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1073 fu16_t exchange; |
2086 | 1074 struct chat_connection *ccon; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1075 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1076 roomname = va_arg(ap, char *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1077 exchange = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1078 |
2086 | 1079 tstconn = aim_newconn(sess, AIM_CONN_TYPE_CHAT, NULL); |
1080 if (tstconn == NULL) { | |
1081 debug_printf("unable to connect to chat server\n"); | |
1082 g_free(host); | |
1083 return 1; | |
1084 } | |
1085 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1086 aim_conn_addhandler(sess, tstconn, 0x0001, 0x0003, server_ready_chat, 0); |
2086 | 1087 ccon = g_new0(struct chat_connection, 1); |
1088 ccon->conn = tstconn; | |
1089 ccon->gc = gc; | |
1090 ccon->fd = -1; | |
1091 ccon->name = g_strdup(roomname); | |
1092 ccon->exchange = exchange; | |
1093 ccon->show = extract_name(roomname); | |
1094 | |
1095 ccon->conn->status |= AIM_CONN_STATUS_INPROGRESS; | |
1096 ccon->conn->fd = proxy_connect(host, port, oscar_chat_connect, ccon); | |
1097 if (ccon->conn->fd < 0) { | |
1098 aim_conn_kill(sess, &tstconn); | |
1099 debug_printf("unable to connect to chat server\n"); | |
1100 g_free(host); | |
1101 g_free(ccon->show); | |
1102 g_free(ccon->name); | |
1103 g_free(ccon); | |
1104 return 1; | |
1105 } | |
1106 aim_auth_sendcookie(sess, tstconn, cookie); | |
1107 debug_printf("Connected to chat room %s exchange %d\n", roomname, exchange); | |
1108 } | |
1109 break; | |
1110 default: /* huh? */ | |
1111 debug_printf("got redirect for unknown service 0x%04x\n", serviceid); | |
1112 break; | |
1113 } | |
1114 | |
1115 va_end(ap); | |
1116 | |
1117 g_free(host); | |
1118 return 1; | |
1119 } | |
1120 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1121 static int gaim_parse_oncoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1122 struct aim_userinfo_s *info; |
1123 time_t time_idle; | |
1124 int type = 0; | |
1125 struct gaim_connection *gc = sess->aux_data; | |
1126 | |
1127 va_list ap; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1128 va_start(ap, fr); |
2086 | 1129 info = va_arg(ap, struct aim_userinfo_s *); |
1130 va_end(ap); | |
1131 | |
1132 if (info->flags & AIM_FLAG_UNCONFIRMED) | |
1133 type |= UC_UNCONFIRMED; | |
1134 else if (info->flags & AIM_FLAG_ADMINISTRATOR) | |
1135 type |= UC_ADMIN; | |
1136 else if (info->flags & AIM_FLAG_AOL) | |
1137 type |= UC_AOL; | |
1138 else if (info->flags & AIM_FLAG_FREE) | |
1139 type |= UC_NORMAL; | |
1140 if (info->flags & AIM_FLAG_AWAY) | |
1141 type |= UC_UNAVAILABLE; | |
1142 | |
1143 if (info->idletime) { | |
1144 time(&time_idle); | |
1145 time_idle -= info->idletime*60; | |
1146 } else | |
1147 time_idle = 0; | |
1148 | |
1149 serv_got_update(gc, info->sn, 1, info->warnlevel/10, info->onlinesince, | |
1150 time_idle, type, info->capabilities); | |
1151 | |
1152 return 1; | |
1153 } | |
1154 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1155 static int gaim_parse_offgoing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1156 struct aim_userinfo_s *info; |
1157 va_list ap; | |
1158 struct gaim_connection *gc = sess->aux_data; | |
1159 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1160 va_start(ap, fr); |
2086 | 1161 info = va_arg(ap, struct aim_userinfo_s *); |
1162 va_end(ap); | |
1163 | |
1164 serv_got_update(gc, info->sn, 0, 0, 0, 0, 0, 0); | |
1165 | |
1166 return 1; | |
1167 } | |
1168 | |
1169 static void cancel_direct_im(gpointer w, struct ask_direct *d) { | |
1170 debug_printf("Freeing DirectIM prompts.\n"); | |
1171 | |
1172 g_free(d->sn); | |
1173 g_free(d); | |
1174 } | |
1175 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1176 static void oscar_directim_callback(gpointer data, gint source, GaimInputCondition condition) { |
2086 | 1177 struct direct_im *dim = data; |
1178 struct gaim_connection *gc = dim->gc; | |
1179 struct oscar_data *od = gc->proto_data; | |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
1180 struct conversation *cnv; |
2086 | 1181 char buf[256]; |
1182 | |
1183 if (!g_slist_find(connections, gc)) { | |
1184 g_free(dim); | |
1185 return; | |
1186 } | |
1187 | |
1188 if (source < 0) { | |
1189 g_free(dim); | |
1190 return; | |
1191 } | |
1192 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1193 if (dim->conn->fd != source) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1194 dim->conn->fd = source; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1195 |
2086 | 1196 aim_conn_completeconnect(od->sess, dim->conn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1197 if (!(cnv = find_conversation(dim->name))) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1198 cnv = new_conversation(dim->name); |
2086 | 1199 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), dim->name); |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
1200 write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time((time_t)NULL)); |
2086 | 1201 |
1202 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
1203 | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1204 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 1205 oscar_callback, dim->conn); |
1206 } | |
1207 | |
1208 static int accept_direct_im(gpointer w, struct ask_direct *d) { | |
1209 struct gaim_connection *gc = d->gc; | |
1210 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
1211 struct direct_im *dim; | |
1212 char *host; int port = FAIM_LOGIN_PORT; | |
1213 int i; | |
1214 | |
1215 debug_printf("Accepted DirectIM.\n"); | |
1216 | |
1217 dim = find_direct_im(od, d->sn); | |
1218 if (dim) { | |
1219 cancel_direct_im(w, d); /* 40 */ | |
1220 return TRUE; | |
1221 } | |
1222 dim = g_new0(struct direct_im, 1); | |
1223 dim->gc = d->gc; | |
1224 g_snprintf(dim->name, sizeof dim->name, "%s", d->sn); | |
1225 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1226 dim->conn = aim_directim_connect(od->sess, d->sn, NULL, d->cookie); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1227 if (!dim->conn) { |
2086 | 1228 g_free(dim); |
1229 cancel_direct_im(w, d); | |
1230 return TRUE; | |
1231 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1232 |
2086 | 1233 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
1234 gaim_directim_incoming, 0); | |
1235 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, | |
1236 gaim_directim_typing, 0); | |
1237 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1238 for (i = 0; i < (int)strlen(d->ip); i++) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1239 if (d->ip[i] == ':') { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1240 port = atoi(&(d->ip[i+1])); |
2086 | 1241 break; |
1242 } | |
1243 } | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1244 host = g_strndup(d->ip, i); |
2086 | 1245 dim->conn->status |= AIM_CONN_STATUS_INPROGRESS; |
1246 dim->conn->fd = proxy_connect(host, port, oscar_directim_callback, dim); | |
1247 g_free(host); | |
1248 if (dim->conn->fd < 0) { | |
1249 aim_conn_kill(od->sess, &dim->conn); | |
1250 g_free(dim); | |
1251 cancel_direct_im(w, d); | |
1252 return TRUE; | |
1253 } | |
1254 | |
1255 cancel_direct_im(w, d); | |
1256 | |
1257 return TRUE; | |
1258 } | |
1259 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1260 static int incomingim_chan1(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch1_args *args) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1261 char *tmp = g_malloc(BUF_LONG); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1262 struct gaim_connection *gc = sess->aux_data; |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1263 int flags = 0; |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1264 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1265 if (sizeof(gaim_features) == args->featureslen) { |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1266 int i; |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1267 for (i = 0; i < args->featureslen; i++) { |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1268 if (gaim_features[i] != args->features[i]) |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1269 break; |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1270 } |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1271 if (i == args->featureslen) |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1272 flags |= IM_FLAG_GAIMUSER; |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1273 } |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1274 |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1275 if (args->icbmflags & AIM_IMFLAGS_AWAY) |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1276 flags |= IM_FLAG_AWAY; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1277 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1278 if (args->icbmflags & AIM_IMFLAGS_HASICON) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1279 struct oscar_data *od = gc->proto_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1280 struct icon_req *ir = NULL; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1281 GSList *h = od->hasicons; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1282 char *who = normalize(userinfo->sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1283 debug_printf("%s has an icon\n", userinfo->sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1284 while (h) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1285 ir = h->data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1286 if (!strcmp(ir->user, who)) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1287 break; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1288 h = h->next; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1289 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1290 if (!h) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1291 ir = g_new0(struct icon_req, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1292 ir->user = g_strdup(who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1293 od->hasicons = g_slist_append(od->hasicons, ir); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1294 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1295 if ((args->iconlen != ir->length) || |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1296 (args->iconsum != ir->checksum) || |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1297 (args->iconstamp != ir->timestamp)) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1298 ir->request = TRUE; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1299 ir->length = args->iconlen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1300 ir->checksum = args->iconsum; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1301 ir->timestamp = args->iconstamp; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1302 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1303 |
2249
59a11f4fa4d0
[gaim-migrate @ 2259]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2248
diff
changeset
|
1304 if (gc->user->iconfile && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1305 FILE *file; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1306 struct stat st; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1307 |
2248
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
1308 if (!stat(gc->user->iconfile, &st)) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1309 char *buf = g_malloc(st.st_size); |
2248
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
1310 file = fopen(gc->user->iconfile, "r"); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1311 if (file) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1312 fread(buf, 1, st.st_size, file); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1313 aim_send_icon(sess, conn, userinfo->sn, buf, st.st_size, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1314 st.st_mtime, aim_iconsum(buf, st.st_size)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1315 fclose(file); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1316 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1317 g_free(buf); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1318 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1319 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1320 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1321 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1322 * Quickly convert it to eight bit format, replacing |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1323 * non-ASCII UNICODE characters with their equivelent |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1324 * HTML entity. |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1325 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1326 if (args->icbmflags & AIM_IMFLAGS_UNICODE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1327 int i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1328 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1329 for (i = 0, tmp[0] = '\0'; i < args->msglen; i += 2) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1330 unsigned short uni; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1331 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1332 uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i+1] & 0xff); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1333 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1334 if ((uni < 128) || ((uni >= 160) && (uni <= 255))) { /* ISO 8859-1 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1335 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1336 g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "%c", uni); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1337 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1338 } else { /* something else, do UNICODE entity */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1339 g_snprintf(tmp+strlen(tmp), BUF_LONG-strlen(tmp), "&#%04x;", uni); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1340 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1341 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1342 } else |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1343 g_snprintf(tmp, BUF_LONG, "%s", args->msg); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1344 |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
1345 serv_got_im(gc, userinfo->sn, tmp, flags, time(NULL)); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1346 g_free(tmp); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1347 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1348 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1349 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1350 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1351 static int incomingim_chan2(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, struct aim_incomingim_ch2_args *args) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1352 struct gaim_connection *gc = sess->aux_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1353 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1354 if (args->reqclass & AIM_CAPS_CHAT) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1355 char *name = extract_name(args->info.chat.roominfo.name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1356 int *exch = g_new0(int, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1357 GList *m = NULL; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1358 m = g_list_append(m, g_strdup(name ? name : args->info.chat.roominfo.name)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1359 *exch = args->info.chat.roominfo.exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1360 m = g_list_append(m, exch); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1361 serv_got_chat_invite(gc, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1362 name ? name : args->info.chat.roominfo.name, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1363 userinfo->sn, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1364 args->info.chat.msg, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1365 m); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1366 if (name) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1367 g_free(name); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1368 } else if (args->reqclass & AIM_CAPS_SENDFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1369 } else if (args->reqclass & AIM_CAPS_GETFILE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1370 } else if (args->reqclass & AIM_CAPS_VOICE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1371 } else if (args->reqclass & AIM_CAPS_BUDDYICON) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1372 set_icon_data(gc, normalize(userinfo->sn), args->info.icon.icon, |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1373 args->info.icon.length); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1374 } else if (args->reqclass & AIM_CAPS_IMIMAGE) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1375 struct ask_direct *d = g_new0(struct ask_direct, 1); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1376 char buf[256]; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1377 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1378 debug_printf("%s received direct im request from %s (%s)\n", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1379 gc->username, userinfo->sn, args->info.imimage.ip); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1380 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1381 d->gc = gc; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1382 d->sn = g_strdup(userinfo->sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1383 strncpy(d->ip, args->info.imimage.ip, sizeof(d->ip)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1384 memcpy(d->cookie, args->cookie, 8); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1385 g_snprintf(buf, sizeof buf, "%s has just asked to directly connect to %s.", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1386 userinfo->sn, gc->username); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1387 do_ask_dialog(buf, d, accept_direct_im, cancel_direct_im); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1388 } else { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1389 debug_printf("Unknown reqclass %d\n", args->reqclass); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1390 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1391 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1392 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1393 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1394 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1395 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1396 static int gaim_parse_incoming_im(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1397 int channel, ret = 0; |
2086 | 1398 struct aim_userinfo_s *userinfo; |
1399 va_list ap; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1400 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1401 va_start(ap, fr); |
2086 | 1402 channel = va_arg(ap, int); |
1403 userinfo = va_arg(ap, struct aim_userinfo_s *); | |
1404 | |
1405 /* channel 1: standard message */ | |
1406 if (channel == 1) { | |
1407 struct aim_incomingim_ch1_args *args; | |
1408 | |
1409 args = va_arg(ap, struct aim_incomingim_ch1_args *); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1410 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1411 ret = incomingim_chan1(sess, fr->conn, userinfo, args); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1412 |
2086 | 1413 } else if (channel == 2) { |
1414 struct aim_incomingim_ch2_args *args; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1415 |
2086 | 1416 args = va_arg(ap, struct aim_incomingim_ch2_args *); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1417 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1418 ret = incomingim_chan2(sess, fr->conn, userinfo, args); |
2086 | 1419 } |
1420 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1421 va_end(ap); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1422 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1423 return ret; |
2086 | 1424 } |
1425 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1426 static int gaim_parse_misses(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1427 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1428 fu16_t chan, nummissed, reason; |
2086 | 1429 struct aim_userinfo_s *userinfo; |
1430 char buf[1024]; | |
1431 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1432 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1433 chan = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1434 userinfo = va_arg(ap, struct aim_userinfo_s *); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1435 nummissed = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1436 reason = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1437 va_end(ap); |
1438 | |
1439 switch(reason) { | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1440 case 0: |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1441 /* Invalid (0) */ |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1442 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1443 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1444 _("You missed %d message%s from %s because %s invalid."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1445 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1446 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1447 nummissed == 1 ? "it was" : "they were", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1448 userinfo->sn); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1449 break; |
2086 | 1450 case 1: |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1451 /* Message too large */ |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1452 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1453 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1454 _("You missed %d message%s from %s because %s too large."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1455 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1456 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1457 nummissed == 1 ? "it was" : "they were", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1458 userinfo->sn); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1459 break; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1460 case 2: |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1461 /* Rate exceeded */ |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1462 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1463 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1464 _("You missed %d message%s from %s because the rate limit has been exceeded."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1465 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1466 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1467 userinfo->sn); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1468 break; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1469 case 3: |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1470 /* Evil Sender */ |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1471 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1472 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1473 _("You missed %d message%s from %s because they are too evil."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1474 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1475 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1476 userinfo->sn); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1477 break; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1478 case 4: |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1479 /* Evil Receiver */ |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1480 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1481 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1482 _("You missed %d message%s from %s because you are too evil."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1483 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1484 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1485 userinfo->sn); |
2086 | 1486 break; |
1487 default: | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1488 g_snprintf(buf, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1489 sizeof(buf), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1490 _("You missed %d message%s from %s for unknown reasons."), |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1491 nummissed, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1492 nummissed == 1 ? "" : "s", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1493 userinfo->sn); |
2086 | 1494 break; |
1495 } | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1496 do_error_dialog(buf, _("Gaim - Error")); |
2086 | 1497 |
1498 return 1; | |
1499 } | |
1500 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1501 static int gaim_parse_genericerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1502 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1503 fu16_t reason; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1504 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1505 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1506 reason = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1507 va_end(ap); |
1508 | |
1509 debug_printf("snac threw error (reason 0x%04x: %s\n", reason, | |
1510 (reason < msgerrreasonlen) ? msgerrreason[reason] : "unknown"); | |
1511 | |
1512 return 1; | |
1513 } | |
1514 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1515 static int gaim_parse_msgerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1516 va_list ap; |
1517 char *destn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1518 fu16_t reason; |
2086 | 1519 char buf[1024]; |
1520 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1521 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1522 reason = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1523 destn = va_arg(ap, char *); |
1524 va_end(ap); | |
1525 | |
1526 sprintf(buf, _("Your message to %s did not get sent: %s"), destn, | |
1527 (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); | |
1528 do_error_dialog(buf, _("Gaim - Error")); | |
1529 | |
1530 return 1; | |
1531 } | |
1532 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1533 static int gaim_parse_locerr(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1534 va_list ap; |
1535 char *destn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1536 fu16_t reason; |
2086 | 1537 char buf[1024]; |
1538 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1539 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1540 reason = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1541 destn = va_arg(ap, char *); |
1542 va_end(ap); | |
1543 | |
1544 sprintf(buf, _("User information for %s unavailable: %s"), destn, | |
1545 (reason < msgerrreasonlen) ? msgerrreason[reason] : _("Reason unknown")); | |
1546 do_error_dialog(buf, _("Gaim - Error")); | |
1547 | |
1548 return 1; | |
1549 } | |
1550 | |
1551 static char *images(int flags) { | |
1552 static char buf[1024]; | |
1553 g_snprintf(buf, sizeof(buf), "%s%s%s%s", | |
1554 (flags & AIM_FLAG_UNCONFIRMED) ? "<IMG SRC=\"dt_icon.gif\">" : "", | |
1555 (flags & AIM_FLAG_AOL) ? "<IMG SRC=\"aol_icon.gif\">" : "", | |
1556 (flags & AIM_FLAG_ADMINISTRATOR) ? "<IMG SRC=\"admin_icon.gif\">" : "", | |
1557 (flags & AIM_FLAG_FREE) ? "<IMG SRC=\"free_icon.gif\">" : ""); | |
1558 return buf; | |
1559 } | |
1560 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1561 static int gaim_parse_user_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1562 struct aim_userinfo_s *info; |
1563 char *prof_enc = NULL, *prof = NULL; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1564 fu16_t infotype; |
2086 | 1565 char buf[BUF_LONG]; |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1566 char legend[BUF_LONG]; |
2086 | 1567 struct gaim_connection *gc = sess->aux_data; |
1568 va_list ap; | |
1569 char *asc; | |
1570 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1571 va_start(ap, fr); |
2086 | 1572 info = va_arg(ap, struct aim_userinfo_s *); |
1573 prof_enc = va_arg(ap, char *); | |
1574 prof = va_arg(ap, char *); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1575 infotype = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1576 va_end(ap); |
1577 | |
1578 if (info->membersince) | |
1579 asc = g_strdup_printf("Member Since : <B>%s</B><BR>\n", | |
1580 asctime(localtime(&info->membersince))); | |
1581 else | |
1582 asc = g_strdup(""); | |
1583 | |
1584 g_snprintf(buf, sizeof buf, | |
1585 _("Username : <B>%s</B> %s <BR>\n" | |
1586 "%s" | |
1587 "Warning Level : <B>%d %%</B><BR>\n" | |
1588 "Online Since : <B>%s</B><BR>\n" | |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1589 "Idle Minutes : <B>%d</B>\n<BR>\n<HR><BR>\n"), |
2086 | 1590 info->sn, images(info->flags), |
1591 asc, | |
1592 info->warnlevel/10, | |
1593 asctime(localtime(&info->onlinesince)), | |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1594 info->idletime); |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1595 g_snprintf(legend, sizeof legend, |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1596 _("<br><BODY BGCOLOR=WHITE><hr><I>Legend:</I><br><br>" |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1597 "<IMG SRC=\"free_icon.gif\"> : Normal AIM User<br>" |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1598 "<IMG SRC=\"aol_icon.gif\"> : AOL User <br>" |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1599 "<IMG SRC=\"dt_icon.gif\"> : Trial AIM User <br>" |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1600 "<IMG SRC=\"admin_icon.gif\"> : Administrator")); |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1601 g_show_info_text(buf, |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1602 (prof && strlen(prof)) ? |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1603 away_subs(prof, gc->username) |
2086 | 1604 : |
1605 (infotype == AIM_GETINFO_GENERALINFO ? | |
1606 _("<i>No Information Provided</i>") : | |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1607 _("<i>User has no away message</i>")), |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1608 legend, |
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
1609 NULL); |
2086 | 1610 |
1611 g_free(asc); | |
1612 | |
1613 return 1; | |
1614 } | |
1615 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1616 static int gaim_parse_motd(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1617 char *msg; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1618 fu16_t id; |
2086 | 1619 va_list ap; |
1620 char buildbuf[150]; | |
1621 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1622 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1623 id = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1624 msg = va_arg(ap, char *); |
1625 va_end(ap); | |
1626 | |
1627 aim_getbuildstring(buildbuf, sizeof(buildbuf)); | |
1628 | |
1629 debug_printf("MOTD: %s (%d)\n", msg ? msg : "Unknown", id); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1630 debug_printf("Gaim %s / libfaim %s\n", VERSION, buildbuf); |
2092
59b0377d18aa
[gaim-migrate @ 2102]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
1631 if (id < 4) |
2086 | 1632 do_error_dialog(_("Your connection may be lost."), |
1633 _("AOL error")); | |
1634 | |
1635 return 1; | |
1636 } | |
1637 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1638 static int gaim_chatnav_info(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1639 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1640 fu16_t type; |
2086 | 1641 struct gaim_connection *gc = sess->aux_data; |
1642 struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
1643 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1644 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1645 type = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1646 |
1647 switch(type) { | |
1648 case 0x0002: { | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1649 fu8_t maxrooms; |
2086 | 1650 struct aim_chat_exchangeinfo *exchanges; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1651 int exchangecount, i; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1652 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1653 maxrooms = (fu8_t)va_arg(ap, unsigned int); |
2086 | 1654 exchangecount = va_arg(ap, int); |
1655 exchanges = va_arg(ap, struct aim_chat_exchangeinfo *); | |
1656 va_end(ap); | |
1657 | |
1658 debug_printf("chat info: Chat Rights:\n"); | |
1659 debug_printf("chat info: \tMax Concurrent Rooms: %d\n", maxrooms); | |
1660 debug_printf("chat info: \tExchange List: (%d total)\n", exchangecount); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1661 for (i = 0; i < exchangecount; i++) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1662 debug_printf("chat info: \t\t%d\n", exchanges[i].number); |
2086 | 1663 if (odata->create_exchange) { |
1664 debug_printf("creating room %s\n", odata->create_name); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1665 aim_chatnav_createroom(sess, fr->conn, odata->create_name, |
2086 | 1666 odata->create_exchange); |
1667 odata->create_exchange = 0; | |
1668 g_free(odata->create_name); | |
1669 odata->create_name = NULL; | |
1670 } | |
1671 } | |
1672 break; | |
1673 case 0x0008: { | |
1674 char *fqcn, *name, *ck; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1675 fu16_t instance, flags, maxmsglen, maxoccupancy, unknown, exchange; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1676 fu8_t createperms; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1677 fu32_t createtime; |
2086 | 1678 |
1679 fqcn = va_arg(ap, char *); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1680 instance = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1681 exchange = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1682 flags = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1683 createtime = va_arg(ap, fu32_t); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1684 maxmsglen = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1685 maxoccupancy = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1686 createperms = (fu8_t)va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1687 unknown = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1688 name = va_arg(ap, char *); |
1689 ck = va_arg(ap, char *); | |
1690 va_end(ap); | |
1691 | |
1692 debug_printf("created room: %s %d %d %d %lu %d %d %d %d %s %s\n", | |
1693 fqcn, | |
1694 exchange, instance, flags, | |
1695 createtime, | |
1696 maxmsglen, maxoccupancy, createperms, unknown, | |
1697 name, ck); | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1698 aim_chat_join(odata->sess, odata->conn, exchange, ck, instance); |
2086 | 1699 } |
1700 break; | |
1701 default: | |
1702 va_end(ap); | |
1703 debug_printf("chatnav info: unknown type (%04x)\n", type); | |
1704 break; | |
1705 } | |
1706 return 1; | |
1707 } | |
1708 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1709 static int gaim_chat_join(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1710 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1711 int count, i; |
2086 | 1712 struct aim_userinfo_s *info; |
1713 struct gaim_connection *g = sess->aux_data; | |
1714 | |
1715 struct chat_connection *c = NULL; | |
1716 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1717 va_start(ap, fr); |
2086 | 1718 count = va_arg(ap, int); |
1719 info = va_arg(ap, struct aim_userinfo_s *); | |
1720 va_end(ap); | |
1721 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1722 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 1723 if (!c) |
1724 return 1; | |
1725 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1726 for (i = 0; i < count; i++) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1727 add_chat_buddy(c->cnv, info[i].sn); |
2086 | 1728 |
1729 return 1; | |
1730 } | |
1731 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1732 static int gaim_chat_leave(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1733 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1734 int count, i; |
2086 | 1735 struct aim_userinfo_s *info; |
1736 struct gaim_connection *g = sess->aux_data; | |
1737 | |
1738 struct chat_connection *c = NULL; | |
1739 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1740 va_start(ap, fr); |
2086 | 1741 count = va_arg(ap, int); |
1742 info = va_arg(ap, struct aim_userinfo_s *); | |
1743 va_end(ap); | |
1744 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1745 c = find_oscar_chat_by_conn(g, fr->conn); |
2086 | 1746 if (!c) |
1747 return 1; | |
1748 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1749 for (i = 0; i < count; i++) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1750 remove_chat_buddy(c->cnv, info[i].sn); |
2086 | 1751 |
1752 return 1; | |
1753 } | |
1754 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1755 static int gaim_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
|
1756 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1757 struct aim_userinfo_s *userinfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1758 struct aim_chat_roominfo *roominfo; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1759 char *roomname; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1760 int usercount; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1761 char *roomdesc; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1762 fu16_t unknown_c9, unknown_d2, unknown_d5, maxmsglen, maxvisiblemsglen; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1763 fu32_t creationtime; |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1764 struct gaim_connection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1765 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
|
1766 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1767 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1768 roominfo = va_arg(ap, struct aim_chat_roominfo *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1769 roomname = va_arg(ap, char *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1770 usercount= va_arg(ap, int); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1771 userinfo = va_arg(ap, struct aim_userinfo_s *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1772 roomdesc = va_arg(ap, char *); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1773 unknown_c9 = (fu16_t)va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1774 creationtime = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1775 maxmsglen = (fu16_t)va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1776 unknown_d2 = (fu16_t)va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1777 unknown_d5 = (fu16_t)va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1778 maxvisiblemsglen = (fu16_t)va_arg(ap, int); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1779 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1780 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1781 debug_printf("inside chat_info_update (maxmsglen = %d, maxvislen = %d)\n", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1782 maxmsglen, maxvisiblemsglen); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1783 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1784 ccon->maxlen = maxmsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1785 ccon->maxvis = maxvisiblemsglen; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1786 |
2086 | 1787 return 1; |
1788 } | |
1789 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1790 static int gaim_chat_incoming_msg(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1791 va_list ap; |
1792 struct aim_userinfo_s *info; | |
1793 char *msg; | |
1794 struct gaim_connection *gc = sess->aux_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1795 struct chat_connection *ccon = find_oscar_chat_by_conn(gc, fr->conn); |
2086 | 1796 char *tmp; |
1797 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1798 va_start(ap, fr); |
2086 | 1799 info = va_arg(ap, struct aim_userinfo_s *); |
1800 msg = va_arg(ap, char *); | |
1801 | |
1802 tmp = g_malloc(BUF_LONG); | |
1803 g_snprintf(tmp, BUF_LONG, "%s", msg); | |
1804 serv_got_chat_in(gc, ccon->id, info->sn, 0, tmp, time((time_t)NULL)); | |
1805 g_free(tmp); | |
1806 | |
1807 return 1; | |
1808 } | |
1809 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1810 /* |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1811 * 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
|
1812 */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1813 static int gaim_parse_msgack(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1814 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1815 fu16_t type; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1816 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1817 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1818 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1819 type = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1820 sn = va_arg(ap, char *); |
1821 va_end(ap); | |
1822 | |
1823 debug_printf("Sent message to %s.\n", sn); | |
1824 | |
1825 return 1; | |
1826 } | |
1827 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1828 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
|
1829 static const char *codes[5] = { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1830 "invalid", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1831 "change", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1832 "warning", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1833 "limit", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1834 "limit cleared", |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1835 }; |
2086 | 1836 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1837 fu16_t code, rateclass; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1838 fu32_t windowsize, clear, alert, limit, disconnect, currentavg, maxavg; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1839 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1840 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1841 code = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1842 rateclass= (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1843 windowsize = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1844 clear = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1845 alert = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1846 limit = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1847 disconnect = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1848 currentavg = (fu32_t)va_arg(ap, unsigned long); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1849 maxavg = (fu32_t)va_arg(ap, unsigned long); |
2086 | 1850 va_end(ap); |
1851 | |
1852 debug_printf("rate %s (paramid 0x%04lx): curavg = %ld, maxavg = %ld, alert at %ld, " | |
1853 "clear warning at %ld, limit at %ld, disconnect at %ld (window size = %ld)\n", | |
1854 (code < 5) ? codes[code] : codes[0], | |
1855 rateclass, | |
1856 currentavg, maxavg, | |
1857 alert, clear, | |
1858 limit, disconnect, | |
1859 windowsize); | |
1860 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1861 /* XXX fix these values */ |
2086 | 1862 if (code == AIM_RATE_CODE_CHANGE) { |
1863 if (currentavg >= clear) | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1864 aim_conn_setlatency(fr->conn, 0); |
2086 | 1865 } else if (code == AIM_RATE_CODE_WARNING) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1866 aim_conn_setlatency(fr->conn, windowsize/4); |
2086 | 1867 } else if (code == AIM_RATE_CODE_LIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1868 aim_conn_setlatency(fr->conn, windowsize/2); |
2086 | 1869 } else if (code == AIM_RATE_CODE_CLEARLIMIT) { |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1870 aim_conn_setlatency(fr->conn, 0); |
2086 | 1871 } |
1872 | |
1873 return 1; | |
1874 } | |
1875 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1876 static int gaim_parse_evilnotify(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1877 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1878 fu16_t newevil; |
2086 | 1879 struct aim_userinfo_s *userinfo; |
1880 struct gaim_connection *gc = sess->aux_data; | |
1881 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1882 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1883 newevil = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1884 userinfo = va_arg(ap, struct aim_userinfo_s *); |
1885 va_end(ap); | |
1886 | |
1887 serv_got_eviled(gc, (userinfo && userinfo->sn[0]) ? userinfo->sn : NULL, newevil / 10); | |
1888 | |
1889 return 1; | |
1890 } | |
1891 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1892 static int rateresp_bos(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1893 struct gaim_connection *gc = sess->aux_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1894 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1895 aim_bos_ackrateresp(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1896 aim_bos_reqpersonalinfo(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1897 aim_bos_reqlocaterights(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1898 aim_bos_setprofile(sess, fr->conn, gc->user->user_info, NULL, gaim_caps); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1899 aim_bos_reqbuddyrights(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1900 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1901 account_online(gc); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1902 serv_finish_login(gc); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1903 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1904 if (bud_list_cache_exists(gc)) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1905 do_import(NULL, gc); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1906 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1907 debug_printf("buddy list loaded\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1908 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1909 aim_reqicbmparams(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1910 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1911 aim_bos_reqrights(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1912 aim_bos_setgroupperm(sess, fr->conn, AIM_FLAG_ALLUSERS); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1913 aim_bos_setprivacyflags(sess, fr->conn, AIM_PRIVFLAGS_ALLOWIDLE | |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1914 AIM_PRIVFLAGS_ALLOWMEMBERSINCE); |
2086 | 1915 |
1916 return 1; | |
1917 } | |
1918 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1919 static int rateresp_auth(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1920 aim_bos_ackrateresp(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1921 aim_auth_clientready(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1922 debug_printf("connected to auth (admin)\n"); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1923 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1924 return 1; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1925 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1926 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1927 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
|
1928 struct aim_icbmparameters *params; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1929 va_list ap; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1930 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1931 va_start(ap, fr); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1932 params = va_arg(ap, struct aim_icbmparameters *); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1933 va_end(ap); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1934 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1935 debug_printf("ICBM Parameters: maxchannel = %d, default flags = 0x%08lx, max msg len = %d, " |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1936 "max sender evil = %f, max receiver evil = %f, min msg interval = %ld\n", |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1937 params->maxchan, params->flags, params->maxmsglen, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1938 ((float)params->maxsenderwarn)/10.0, ((float)params->maxrecverwarn)/10.0, |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1939 params->minmsginterval); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1940 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1941 /* Maybe senderwarn and recverwarn should be user preferences... */ |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1942 params->maxmsglen = 8000; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1943 params->minmsginterval = 0; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1944 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1945 aim_seticbmparam(sess, fr->conn, params); |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1946 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1947 return 1; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1948 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1949 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1950 /* XXX this is frivelous... do you really want to know this info? */ |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1951 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
|
1952 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1953 fu16_t maxbuddies, maxwatchers; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1954 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1955 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1956 maxbuddies = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1957 maxwatchers = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1958 va_end(ap); |
1959 | |
1960 debug_printf("buddy list rights: Max buddies = %d / Max watchers = %d\n", maxbuddies, maxwatchers); | |
1961 | |
1962 return 1; | |
1963 } | |
1964 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1965 static int gaim_bosrights(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1966 fu16_t maxpermits, maxdenies; |
2086 | 1967 va_list ap; |
1968 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1969 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1970 maxpermits = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1971 maxdenies = (fu16_t)va_arg(ap, unsigned int); |
2086 | 1972 va_end(ap); |
1973 | |
1974 debug_printf("BOS rights: Max permit = %d / Max deny = %d\n", maxpermits, maxdenies); | |
1975 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1976 aim_bos_clientready(sess, fr->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1977 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1978 aim_bos_reqservice(sess, fr->conn, AIM_CONN_TYPE_CHATNAV); |
2086 | 1979 |
1980 return 1; | |
1981 } | |
1982 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1983 static int gaim_parse_searchreply(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 1984 va_list ap; |
1985 char *address, *SNs; | |
1986 int i, num; | |
1987 char *buf; | |
1988 int at = 0, len; | |
1989 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
1990 va_start(ap, fr); |
2086 | 1991 address = va_arg(ap, char *); |
1992 num = va_arg(ap, int); | |
1993 SNs = va_arg(ap, char *); | |
1994 va_end(ap); | |
1995 | |
1996 len = num * (MAXSNLEN + 1) + 1024; | |
1997 buf = g_malloc(len); | |
1998 at += g_snprintf(buf + at, len - at, "<B>%s has the following screen names:</B><BR>", address); | |
1999 for (i = 0; i < num; i++) | |
2000 at += g_snprintf(buf + at, len - at, "%s<BR>", &SNs[i * (MAXSNLEN + 1)]); | |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
2001 g_show_info_text(buf, NULL); |
2086 | 2002 g_free(buf); |
2003 | |
2004 return 1; | |
2005 } | |
2006 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2007 static int gaim_parse_searcherror(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2008 va_list ap; |
2009 char *address; | |
2010 char buf[BUF_LONG]; | |
2011 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2012 va_start(ap, fr); |
2086 | 2013 address = va_arg(ap, char *); |
2014 va_end(ap); | |
2015 | |
2016 g_snprintf(buf, sizeof(buf), "No results found for email address %s", address); | |
2017 do_error_dialog(buf, _("Error")); | |
2018 | |
2019 return 1; | |
2020 } | |
2021 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2022 static int gaim_account_confirm(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2023 fu16_t status; |
2086 | 2024 va_list ap; |
2025 char msg[256]; | |
2026 struct gaim_connection *gc = sess->aux_data; | |
2027 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2028 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2029 status = (fu16_t)va_arg(ap, unsigned int); /* status code of confirmation request */ |
2086 | 2030 va_end(ap); |
2031 | |
2032 debug_printf("account confirmation returned status 0x%04x (%s)\n", status, | |
2033 status ? "email sent" : "unknown"); | |
2034 if (status) { | |
2035 g_snprintf(msg, sizeof(msg), "You should receive an email asking to confirm %s.", | |
2036 gc->username); | |
2037 do_error_dialog(msg, "Confirm"); | |
2038 } | |
2039 | |
2040 return 1; | |
2041 } | |
2042 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2043 static int gaim_info_change(aim_session_t *sess, aim_frame_t *fr, ...) { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2044 int change, str; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2045 fu16_t perms, type, length; |
2086 | 2046 char *val; |
2047 va_list ap; | |
2048 char buf[BUF_LONG]; | |
2049 struct gaim_connection *gc = sess->aux_data; | |
2050 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2051 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2052 change = va_arg(ap, int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2053 perms = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2054 type = (fu16_t)va_arg(ap, unsigned int); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2055 length = (fu16_t)va_arg(ap, unsigned int); |
2086 | 2056 val = va_arg(ap, char *); |
2057 str = va_arg(ap, int); | |
2058 va_end(ap); | |
2059 | |
2060 debug_printf("info%s: perms = %d, type = %x, length = %d, val = %s\n", | |
2061 change ? " change" : "", perms, type, length, str ? val : "(not string)"); | |
2062 | |
2063 if ((type == 0x0011) && str) { | |
2064 g_snprintf(buf, sizeof(buf), "The email address for %s is %s", gc->username, val); | |
2065 do_error_dialog(buf, "Email"); | |
2066 } | |
2067 | |
2068 return 1; | |
2069 } | |
2070 | |
2071 static void oscar_keepalive(struct gaim_connection *gc) { | |
2072 struct oscar_data *odata = (struct oscar_data *)gc->proto_data; | |
2073 aim_flap_nop(odata->sess, odata->conn); | |
2074 } | |
2075 | |
2076 static char *oscar_name() { | |
2077 return "Oscar"; | |
2078 } | |
2079 | |
2231
8c4ff1a368bd
[gaim-migrate @ 2241]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2205
diff
changeset
|
2080 static int oscar_send_im(struct gaim_connection *gc, char *name, char *message, int imflags) { |
2086 | 2081 struct oscar_data *odata = (struct oscar_data *)gc->proto_data; |
2082 struct direct_im *dim = find_direct_im(odata, name); | |
2083 if (dim) { | |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2113
diff
changeset
|
2084 return aim_send_im_direct(odata->sess, dim->conn, message); |
2086 | 2085 } else { |
2231
8c4ff1a368bd
[gaim-migrate @ 2241]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2205
diff
changeset
|
2086 if (imflags & IM_FLAG_AWAY) |
2123
56c4382f2909
[gaim-migrate @ 2133]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2113
diff
changeset
|
2087 return aim_send_im(odata->sess, odata->conn, name, AIM_IMFLAGS_AWAY, message); |
2086 | 2088 else { |
2197
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2089 struct aim_sendimext_args args; |
2086 | 2090 GSList *h = odata->hasicons; |
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
2091 struct icon_req *ir = NULL; |
2086 | 2092 char *who = normalize(name); |
2197
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2093 struct stat st; |
2248
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
2094 |
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
2095 args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES; |
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
2096 |
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2097 args.features = gaim_features; |
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2249
diff
changeset
|
2098 args.featureslen = sizeof(gaim_features); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2099 |
2086 | 2100 while (h) { |
2101 ir = h->data; | |
2102 if (ir->request && !strcmp(who, ir->user)) | |
2103 break; | |
2104 h = h->next; | |
2105 } | |
2106 if (h) { | |
2107 ir->request = FALSE; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2108 args.flags |= AIM_IMFLAGS_BUDDYREQ; |
2086 | 2109 debug_printf("sending buddy icon request with message\n"); |
2110 } | |
2197
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2111 |
2248
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
2112 if (gc->user->iconfile && !stat(gc->user->iconfile, &st)) { |
cef6d4e81aec
[gaim-migrate @ 2258]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2246
diff
changeset
|
2113 FILE *file = fopen(gc->user->iconfile, "r"); |
2197
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2114 if (file) { |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2115 char *buf = g_malloc(st.st_size); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2116 fread(buf, 1, st.st_size, file); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2117 |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2118 args.iconlen = st.st_size; |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2119 args.iconsum = aim_iconsum(buf, st.st_size); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2120 args.iconstamp = st.st_mtime; |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2121 |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2122 args.flags |= AIM_IMFLAGS_HASICON; |
2197
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2123 |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2124 fclose(file); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2125 g_free(buf); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2126 } |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2127 } |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2128 |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2129 args.destsn = name; |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2130 args.msg = message; |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2131 args.msglen = strlen(message); |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2132 |
8f1ca76e46f5
[gaim-migrate @ 2207]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2196
diff
changeset
|
2133 return aim_send_im_ext(odata->sess, odata->conn, &args); |
2086 | 2134 } |
2135 } | |
2136 } | |
2137 | |
2138 static void oscar_get_info(struct gaim_connection *g, char *name) { | |
2139 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2140 aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_GENERALINFO); | |
2141 } | |
2142 | |
2143 static void oscar_get_away_msg(struct gaim_connection *g, char *name) { | |
2144 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2145 aim_getinfo(odata->sess, odata->conn, name, AIM_GETINFO_AWAYMESSAGE); | |
2146 } | |
2147 | |
2148 static void oscar_set_dir(struct gaim_connection *g, char *first, char *middle, char *last, | |
2149 char *maiden, char *city, char *state, char *country, int web) { | |
2150 /* FIXME : some of these things are wrong, but i'm lazy */ | |
2151 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2152 aim_setdirectoryinfo(odata->sess, odata->conn, first, middle, last, | |
2153 maiden, NULL, NULL, city, state, NULL, 0, web); | |
2154 } | |
2155 | |
2156 | |
2157 static void oscar_set_idle(struct gaim_connection *g, int time) { | |
2158 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2159 aim_bos_setidle(odata->sess, odata->conn, time); | |
2160 } | |
2161 | |
2162 static void oscar_set_info(struct gaim_connection *g, char *info) { | |
2163 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2164 char inforeal[1025], away[1025]; | |
2165 g_snprintf(inforeal, sizeof(inforeal), "%s", info); | |
2166 if (g->away) | |
2167 g_snprintf(away, sizeof(away), "%s", g->away); | |
2168 if (strlen(info) > 1024) | |
2169 do_error_dialog("Maximum info length (1024) exceeded, truncating", "Info Too Long"); | |
2170 aim_bos_setprofile(odata->sess, odata->conn, inforeal, g->away ? NULL : "", gaim_caps); | |
2171 } | |
2172 | |
2173 static void oscar_set_away(struct gaim_connection *g, char *state, char *message) { | |
2174 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2175 char info[1025], away[1025]; | |
2176 g_snprintf(info, sizeof(info), "%s", g->user->user_info); | |
2177 if (message) | |
2178 g_snprintf(away, sizeof(away), "%s", message); | |
2179 aim_bos_setprofile(odata->sess, odata->conn, NULL, message ? away : "", gaim_caps); | |
2180 if (g->away) | |
2181 g_free (g->away); | |
2182 g->away = NULL; | |
2183 if (message) { | |
2184 if (strlen(message) > 1024) | |
2185 do_error_dialog("Maximum away length (1024) exceeded, truncating", | |
2186 "Info Too Long"); | |
2187 g->away = g_strdup (message); | |
2188 } | |
2189 } | |
2190 | |
2191 static void oscar_warn(struct gaim_connection *g, char *name, int anon) { | |
2192 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2113 | 2193 aim_send_warning(odata->sess, odata->conn, name, anon ? AIM_WARN_ANON : 0); |
2086 | 2194 } |
2195 | |
2196 static void oscar_dir_search(struct gaim_connection *g, char *first, char *middle, char *last, | |
2197 char *maiden, char *city, char *state, char *country, char *email) { | |
2198 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2199 if (strlen(email)) | |
2200 aim_usersearch_address(odata->sess, odata->conn, email); | |
2201 } | |
2202 | |
2203 static void oscar_add_buddy(struct gaim_connection *g, char *name) { | |
2204 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2205 aim_add_buddy(odata->sess, odata->conn, name); | |
2206 } | |
2207 | |
2208 static void oscar_add_buddies(struct gaim_connection *g, GList *buddies) { | |
2209 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2210 char buf[MSG_LEN]; | |
2211 int n = 0; | |
2212 while (buddies) { | |
2213 if (n > MSG_LEN - 18) { | |
2214 aim_bos_setbuddylist(odata->sess, odata->conn, buf); | |
2215 n = 0; | |
2216 } | |
2217 n += g_snprintf(buf + n, sizeof(buf) - n, "%s&", (char *)buddies->data); | |
2218 buddies = buddies->next; | |
2219 } | |
2220 aim_bos_setbuddylist(odata->sess, odata->conn, buf); | |
2221 } | |
2222 | |
2223 static void oscar_remove_buddy(struct gaim_connection *g, char *name) { | |
2224 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2225 aim_remove_buddy(odata->sess, odata->conn, name); | |
2226 } | |
2227 | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2228 static GList *oscar_chat_info(struct gaim_connection *gc) { |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2229 GList *m = NULL; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2230 struct proto_chat_entry *pce; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2231 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2232 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2233 pce->label = _("Join what group:"); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2234 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2235 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2236 pce = g_new0(struct proto_chat_entry, 1); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2237 pce->label = _("Exchange:"); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2238 pce->is_int = TRUE; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2239 pce->min = 4; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2240 pce->max = 20; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2241 m = g_list_append(m, pce); |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2242 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2243 return m; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2244 } |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2245 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2246 static void oscar_join_chat(struct gaim_connection *g, GList *data) { |
2086 | 2247 struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2248 aim_conn_t *cur; |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2249 char *name; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2250 int *exchange; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2251 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2252 if (!data || !data->next) |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2253 return; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2254 |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2255 name = data->data; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2256 exchange = data->next->data; |
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2257 |
2086 | 2258 debug_printf("Attempting to join chat room %s.\n", name); |
2259 if ((cur = aim_getconn_type(odata->sess, AIM_CONN_TYPE_CHATNAV))) { | |
2260 debug_printf("chatnav exists, creating room\n"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2261 aim_chatnav_createroom(odata->sess, cur, name, *exchange); |
2086 | 2262 } else { |
2263 /* this gets tricky */ | |
2264 debug_printf("chatnav does not exist, opening chatnav\n"); | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2265 odata->create_exchange = *exchange; |
2086 | 2266 odata->create_name = g_strdup(name); |
2267 aim_bos_reqservice(odata->sess, odata->conn, AIM_CONN_TYPE_CHATNAV); | |
2268 } | |
2269 } | |
2270 | |
2271 static void oscar_chat_invite(struct gaim_connection *g, int id, char *message, char *name) { | |
2272 struct oscar_data *odata = (struct oscar_data *)g->proto_data; | |
2273 struct chat_connection *ccon = find_oscar_chat(g, id); | |
2274 | |
2275 if (!ccon) | |
2276 return; | |
2277 | |
2278 aim_chat_invite(odata->sess, odata->conn, name, message ? message : "", | |
2279 ccon->exchange, ccon->name, 0x0); | |
2280 } | |
2281 | |
2282 static void oscar_chat_leave(struct gaim_connection *g, int id) { | |
2283 struct oscar_data *odata = g ? (struct oscar_data *)g->proto_data : NULL; | |
2284 GSList *bcs = g->buddy_chats; | |
2285 struct conversation *b = NULL; | |
2286 struct chat_connection *c = NULL; | |
2287 int count = 0; | |
2288 | |
2289 while (bcs) { | |
2290 count++; | |
2291 b = (struct conversation *)bcs->data; | |
2292 if (id == b->id) | |
2293 break; | |
2294 bcs = bcs->next; | |
2295 b = NULL; | |
2296 } | |
2297 | |
2298 if (!b) | |
2299 return; | |
2300 | |
2301 debug_printf("Attempting to leave room %s (currently in %d rooms)\n", b->name, count); | |
2302 | |
2303 c = find_oscar_chat(g, b->id); | |
2304 if (c != NULL) { | |
2305 if (odata) | |
2306 odata->oscar_chats = g_slist_remove(odata->oscar_chats, c); | |
2307 if (c->inpa > 0) | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
2308 gaim_input_remove(c->inpa); |
2086 | 2309 if (g && odata->sess) |
2310 aim_conn_kill(odata->sess, &c->conn); | |
2311 g_free(c->name); | |
2312 g_free(c->show); | |
2313 g_free(c); | |
2314 } | |
2315 /* we do this because with Oscar it doesn't tell us we left */ | |
2316 serv_got_chat_left(g, b->id); | |
2317 } | |
2318 | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2319 static int oscar_chat_send(struct gaim_connection *g, int id, char *message) { |
2086 | 2320 struct oscar_data *odata = (struct oscar_data *)g->proto_data; |
2321 GSList *bcs = g->buddy_chats; | |
2322 struct conversation *b = NULL; | |
2323 struct chat_connection *c = NULL; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2324 char *buf, *buf2; |
2086 | 2325 int i, j; |
2326 | |
2327 while (bcs) { | |
2328 b = (struct conversation *)bcs->data; | |
2329 if (id == b->id) | |
2330 break; | |
2331 bcs = bcs->next; | |
2332 b = NULL; | |
2333 } | |
2334 if (!b) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2335 return -EINVAL; |
2086 | 2336 |
2337 bcs = odata->oscar_chats; | |
2338 while (bcs) { | |
2339 c = (struct chat_connection *)bcs->data; | |
2340 if (b == c->cnv) | |
2341 break; | |
2342 bcs = bcs->next; | |
2343 c = NULL; | |
2344 } | |
2345 if (!c) | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2346 return -EINVAL; |
2086 | 2347 |
2348 buf = g_malloc(strlen(message) * 4 + 1); | |
2349 for (i = 0, j = 0; i < strlen(message); i++) { | |
2350 if (message[i] == '\n') { | |
2351 buf[j++] = '<'; | |
2352 buf[j++] = 'B'; | |
2353 buf[j++] = 'R'; | |
2354 buf[j++] = '>'; | |
2355 } else { | |
2356 buf[j++] = message[i]; | |
2357 } | |
2358 } | |
2359 buf[j] = '\0'; | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2360 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2361 if (strlen(buf) > c->maxlen) |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2362 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2363 |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2364 buf2 = strip_html(buf); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2365 if (strlen(buf2) > c->maxvis) { |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2366 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2367 return -E2BIG; |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2368 } |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2369 g_free(buf2); |
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2370 |
2086 | 2371 aim_chat_send_im(odata->sess, c->conn, 0, buf, strlen(buf)); |
2372 g_free(buf); | |
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
2373 return 0; |
2086 | 2374 } |
2375 | |
2376 static char **oscar_list_icon(int uc) { | |
2377 if (uc & UC_UNAVAILABLE) | |
2378 return (char **)away_icon_xpm; | |
2379 if (uc & UC_AOL) | |
2380 return (char **)aol_icon_xpm; | |
2381 if (uc & UC_NORMAL) | |
2382 return (char **)free_icon_xpm; | |
2383 if (uc & UC_ADMIN) | |
2384 return (char **)admin_icon_xpm; | |
2385 if (uc & UC_UNCONFIRMED) | |
2386 return (char **)dt_icon_xpm; | |
2387 return NULL; | |
2388 } | |
2389 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2390 static int gaim_directim_initiate(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2391 va_list ap; |
2392 struct gaim_connection *gc = sess->aux_data; | |
2393 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2394 aim_conn_t *newconn, *listenerconn; |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
2395 struct conversation *cnv; |
2086 | 2396 struct direct_im *dim; |
2397 char buf[256]; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2398 char *sn; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2399 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2400 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2401 newconn = va_arg(ap, aim_conn_t *); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2402 listenerconn = va_arg(ap, aim_conn_t *); |
2086 | 2403 va_end(ap); |
2404 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2405 aim_conn_close(listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2406 aim_conn_kill(sess, &listenerconn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2407 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2408 sn = g_strdup(aim_directim_getsn(newconn)); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2409 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2410 debug_printf("DirectIM: initiate success to %s\n", sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2411 dim = find_direct_im(od, sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2412 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2413 if (!(cnv = find_conversation(sn))) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2414 cnv = new_conversation(sn); |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
2415 gaim_input_remove(dim->watcher); |
2086 | 2416 dim->conn = newconn; |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
2417 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 2418 oscar_callback, dim->conn); |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2419 g_snprintf(buf, sizeof buf, _("Direct IM with %s established"), sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2420 g_free(sn); |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
2421 write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL, time((time_t)NULL)); |
2086 | 2422 |
2423 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, | |
2424 gaim_directim_incoming, 0); | |
2425 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING, | |
2426 gaim_directim_typing, 0); | |
2427 | |
2428 return 1; | |
2429 } | |
2430 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2431 static int gaim_directim_incoming(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2432 va_list ap; |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2433 char *msg, *sn; |
2086 | 2434 struct gaim_connection *gc = sess->aux_data; |
2435 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2436 va_start(ap, fr); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2437 sn = va_arg(ap, char *); |
2086 | 2438 msg = va_arg(ap, char *); |
2439 va_end(ap); | |
2440 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2441 debug_printf("Got DirectIM message from %s\n", sn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2442 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2443 serv_got_im(gc, sn, msg, 0, time((time_t)NULL)); |
2086 | 2444 |
2445 return 1; | |
2446 } | |
2447 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2448 static int gaim_directim_typing(aim_session_t *sess, aim_frame_t *fr, ...) { |
2086 | 2449 va_list ap; |
2450 char *sn; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2451 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2452 va_start(ap, fr); |
2086 | 2453 sn = va_arg(ap, char *); |
2454 va_end(ap); | |
2455 | |
2456 /* I had to leave this. It's just too funny. It reminds me of my sister. */ | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2457 debug_printf("ohmigod! %s has started typing (DirectIM). He's going to send you a message! *squeal*\n", sn); |
2086 | 2458 |
2459 return 1; | |
2460 } | |
2461 | |
2462 struct ask_do_dir_im { | |
2463 char *who; | |
2464 struct gaim_connection *gc; | |
2465 }; | |
2466 | |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
2467 static void oscar_cancel_direct_im(gpointer obj, struct ask_do_dir_im *data) { |
2086 | 2468 g_free(data); |
2469 } | |
2470 | |
2235
5d8b6100a9cc
[gaim-migrate @ 2245]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2232
diff
changeset
|
2471 static void oscar_direct_im(gpointer obj, struct ask_do_dir_im *data) { |
2086 | 2472 struct gaim_connection *gc = data->gc; |
2473 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
2474 struct direct_im *dim; | |
2475 | |
2476 dim = find_direct_im(od, data->who); | |
2477 if (dim) { | |
2478 do_error_dialog("Direct IM request already pending.", "Unable"); | |
2479 return; | |
2480 } | |
2481 dim = g_new0(struct direct_im, 1); | |
2482 dim->gc = gc; | |
2483 g_snprintf(dim->name, sizeof dim->name, "%s", data->who); | |
2484 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2485 dim->conn = aim_directim_initiate(od->sess, od->conn, data->who); |
2086 | 2486 if (dim->conn != NULL) { |
2487 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
2488 dim->watcher = gaim_input_add(dim->conn->fd, GAIM_INPUT_READ, |
2086 | 2489 oscar_callback, dim->conn); |
2490 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE, | |
2491 gaim_directim_initiate, 0); | |
2492 } else { | |
2493 do_error_dialog(_("Unable to open Direct IM"), _("Error")); | |
2494 g_free(dim); | |
2495 } | |
2496 } | |
2497 | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2498 static void oscar_ask_direct_im(struct gaim_connection *gc, gchar *who) { |
2086 | 2499 char buf[BUF_LONG]; |
2500 struct ask_do_dir_im *data = g_new0(struct ask_do_dir_im, 1); | |
2501 data->who = who; | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2502 data->gc = gc; |
2086 | 2503 g_snprintf(buf, sizeof(buf), _("You have selected to open a Direct IM connection with %s." |
2504 " Doing this will let them see your IP address, and may be" | |
2505 " a security risk. Do you wish to continue?"), who); | |
2506 do_ask_dialog(buf, data, oscar_direct_im, oscar_cancel_direct_im); | |
2507 } | |
2508 | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2509 static GList *oscar_buddy_menu(struct gaim_connection *gc, char *who) { |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2510 GList *m = NULL; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2511 struct proto_buddy_menu *pbm; |
2086 | 2512 char *n = g_strdup(normalize(gc->username)); |
2513 | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2514 pbm = g_new0(struct proto_buddy_menu, 1); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2515 pbm->label = _("Get Info"); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2516 pbm->callback = oscar_get_info; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2517 pbm->gc = gc; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2518 m = g_list_append(m, pbm); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2519 |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2520 pbm = g_new0(struct proto_buddy_menu, 1); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2521 pbm->label = _("Get Away Msg"); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2522 pbm->callback = oscar_get_away_msg; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2523 pbm->gc = gc; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2524 m = g_list_append(m, pbm); |
2086 | 2525 |
2526 if (strcmp(n, normalize(who))) { | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2527 pbm = g_new0(struct proto_buddy_menu, 1); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2528 pbm->label = _("Direct IM"); |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2529 pbm->callback = oscar_ask_direct_im; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2530 pbm->gc = gc; |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2531 m = g_list_append(m, pbm); |
2086 | 2532 } |
2533 g_free(n); | |
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2534 |
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2535 return m; |
2086 | 2536 } |
2537 | |
2154
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2538 static GList *oscar_user_opts() |
2086 | 2539 { |
2154
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2540 GList *m = NULL; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2541 struct proto_user_opt *puo; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2542 |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2543 puo = g_new0(struct proto_user_opt, 1); |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2544 puo->label = "Auth Host:"; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2545 puo->def = "login.oscar.aol.com"; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2546 puo->pos = USEROPT_AUTH; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2547 m = g_list_append(m, puo); |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2548 |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2549 puo = g_new0(struct proto_user_opt, 1); |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2550 puo->label = "Auth Port:"; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2551 puo->def = "5190"; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2552 puo->pos = USEROPT_AUTHPORT; |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2553 m = g_list_append(m, puo); |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2554 |
cff133e0ec0c
[gaim-migrate @ 2164]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2141
diff
changeset
|
2555 return m; |
2086 | 2556 } |
2557 | |
2558 static void oscar_set_permit_deny(struct gaim_connection *gc) { | |
2559 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | |
2560 GSList *list; | |
2561 char buf[MAXMSGLEN]; | |
2562 int at; | |
2563 | |
2564 switch(gc->permdeny) { | |
2565 case 1: | |
2566 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, gc->username); | |
2567 break; | |
2568 case 2: | |
2569 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, gc->username); | |
2570 break; | |
2571 case 3: | |
2572 list = gc->permit; | |
2573 at = 0; | |
2574 while (list) { | |
2575 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
2576 list = list->next; | |
2577 } | |
2578 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_PERMITADD, buf); | |
2579 break; | |
2580 case 4: | |
2581 list = gc->deny; | |
2582 at = 0; | |
2583 while (list) { | |
2584 at += g_snprintf(buf + at, sizeof(buf) - at, "%s&", (char *)list->data); | |
2585 list = list->next; | |
2586 } | |
2587 aim_bos_changevisibility(od->sess, od->conn, AIM_VISIBILITYCHANGE_DENYADD, buf); | |
2588 break; | |
2589 default: | |
2590 break; | |
2591 } | |
2592 } | |
2593 | |
2594 static void oscar_add_permit(struct gaim_connection *gc, char *who) { | |
2595 if (gc->permdeny != 3) return; | |
2596 oscar_set_permit_deny(gc); | |
2597 } | |
2598 | |
2599 static void oscar_add_deny(struct gaim_connection *gc, char *who) { | |
2600 if (gc->permdeny != 4) return; | |
2601 oscar_set_permit_deny(gc); | |
2602 } | |
2603 | |
2604 static void oscar_rem_permit(struct gaim_connection *gc, char *who) { | |
2605 if (gc->permdeny != 3) return; | |
2606 oscar_set_permit_deny(gc); | |
2607 } | |
2608 | |
2609 static void oscar_rem_deny(struct gaim_connection *gc, char *who) { | |
2610 if (gc->permdeny != 4) return; | |
2611 oscar_set_permit_deny(gc); | |
2612 } | |
2613 | |
2614 static GList *oscar_away_states() | |
2615 { | |
2616 return g_list_append(NULL, GAIM_AWAY_CUSTOM); | |
2617 } | |
2618 | |
2619 static void oscar_do_action(struct gaim_connection *gc, char *act) | |
2620 { | |
2621 struct oscar_data *od = gc->proto_data; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2622 aim_conn_t *conn = aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH); |
2086 | 2623 |
2624 if (!strcmp(act, "Set User Info")) { | |
2625 show_set_info(gc); | |
2626 } else if (!strcmp(act, "Change Password")) { | |
2627 show_change_passwd(gc); | |
2628 } else if (!strcmp(act, "Confirm Account")) { | |
2629 if (!conn) { | |
2630 od->conf = TRUE; | |
2631 aim_bos_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
2632 } else | |
2633 aim_auth_reqconfirm(od->sess, conn); | |
2634 } else if (!strcmp(act, "Change Email")) { | |
2635 } else if (!strcmp(act, "Display Current Registered Address")) { | |
2636 if (!conn) { | |
2637 od->reqemail = TRUE; | |
2638 aim_bos_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
2639 } else | |
2640 aim_auth_getinfo(od->sess, conn, 0x11); | |
2641 } else if (!strcmp(act, "Search for Buddy by Email")) { | |
2642 show_find_email(gc); | |
2643 } | |
2644 } | |
2645 | |
2646 static GList *oscar_actions() | |
2647 { | |
2648 GList *m = NULL; | |
2649 | |
2650 m = g_list_append(m, "Set User Info"); | |
2651 m = g_list_append(m, NULL); | |
2652 m = g_list_append(m, "Change Password"); | |
2653 m = g_list_append(m, "Confirm Account"); | |
2654 /* | |
2655 m = g_list_append(m, "Change Email"); | |
2656 */ | |
2657 m = g_list_append(m, "Display Current Registered Address"); | |
2658 m = g_list_append(m, NULL); | |
2659 m = g_list_append(m, "Search for Buddy by Email"); | |
2660 | |
2661 return m; | |
2662 } | |
2663 | |
2664 static void oscar_change_passwd(struct gaim_connection *gc, char *old, char *new) | |
2665 { | |
2666 struct oscar_data *od = gc->proto_data; | |
2667 if (!aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH)) { | |
2668 od->chpass = TRUE; | |
2669 od->oldp = g_strdup(old); | |
2670 od->newp = g_strdup(new); | |
2671 aim_bos_reqservice(od->sess, od->conn, AIM_CONN_TYPE_AUTH); | |
2672 } else { | |
2673 aim_auth_changepasswd(od->sess, aim_getconn_type(od->sess, AIM_CONN_TYPE_AUTH), | |
2674 new, old); | |
2675 } | |
2676 } | |
2677 | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2678 static void oscar_convo_closed(struct gaim_connection *gc, char *who) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2679 { |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2680 struct oscar_data *od = gc->proto_data; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2681 struct direct_im *dim = find_direct_im(od, who); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2682 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2683 if (!dim) |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2684 return; |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2685 |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2686 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2687 gaim_input_remove(dim->watcher); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2688 aim_conn_kill(od->sess, &dim->conn); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2689 g_free(dim); |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2690 } |
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2691 |
2086 | 2692 static struct prpl *my_protocol = NULL; |
2693 | |
2694 void oscar_init(struct prpl *ret) { | |
2695 ret->protocol = PROTO_OSCAR; | |
2696 ret->options = OPT_PROTO_HTML | OPT_PROTO_CORRECT_TIME; | |
2697 ret->name = oscar_name; | |
2698 ret->list_icon = oscar_list_icon; | |
2699 ret->away_states = oscar_away_states; | |
2700 ret->actions = oscar_actions; | |
2701 ret->do_action = oscar_do_action; | |
2702 ret->buddy_menu = oscar_buddy_menu; | |
2703 ret->user_opts = oscar_user_opts; | |
2704 ret->login = oscar_login; | |
2705 ret->close = oscar_close; | |
2706 ret->send_im = oscar_send_im; | |
2707 ret->set_info = oscar_set_info; | |
2708 ret->get_info = oscar_get_info; | |
2709 ret->set_away = oscar_set_away; | |
2710 ret->get_away_msg = oscar_get_away_msg; | |
2711 ret->set_dir = oscar_set_dir; | |
2712 ret->get_dir = NULL; /* Oscar really doesn't have this */ | |
2713 ret->dir_search = oscar_dir_search; | |
2714 ret->set_idle = oscar_set_idle; | |
2715 ret->change_passwd = oscar_change_passwd; | |
2716 ret->add_buddy = oscar_add_buddy; | |
2717 ret->add_buddies = oscar_add_buddies; | |
2718 ret->remove_buddy = oscar_remove_buddy; | |
2719 ret->add_permit = oscar_add_permit; | |
2720 ret->add_deny = oscar_add_deny; | |
2721 ret->rem_permit = oscar_rem_permit; | |
2722 ret->rem_deny = oscar_rem_deny; | |
2723 ret->set_permit_deny = oscar_set_permit_deny; | |
2724 ret->warn = oscar_warn; | |
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2197
diff
changeset
|
2725 ret->chat_info = oscar_chat_info; |
2086 | 2726 ret->join_chat = oscar_join_chat; |
2727 ret->chat_invite = oscar_chat_invite; | |
2728 ret->chat_leave = oscar_chat_leave; | |
2729 ret->chat_whisper = NULL; | |
2730 ret->chat_send = oscar_chat_send; | |
2731 ret->keepalive = oscar_keepalive; | |
2246
933346315b9b
[gaim-migrate @ 2256]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2235
diff
changeset
|
2732 ret->convo_closed = oscar_convo_closed; |
2086 | 2733 |
2734 my_protocol = ret; | |
2735 } | |
2736 | |
2737 #ifndef STATIC | |
2738 | |
2739 char *gaim_plugin_init(GModule *handle) | |
2740 { | |
2741 load_protocol(oscar_init, sizeof(struct prpl)); | |
2742 return NULL; | |
2743 } | |
2744 | |
2745 void gaim_plugin_remove() | |
2746 { | |
2747 struct prpl *p = find_prpl(PROTO_OSCAR); | |
2748 if (p == my_protocol) | |
2749 unload_protocol(p); | |
2750 } | |
2751 | |
2752 char *name() | |
2753 { | |
2754 return "Oscar"; | |
2755 } | |
2756 | |
2757 char *description() | |
2758 { | |
2162
a464da684307
[gaim-migrate @ 2172]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2154
diff
changeset
|
2759 return PRPL_DESC("Oscar"); |
2086 | 2760 } |
2761 | |
2762 #endif |