Mercurial > pidgin
annotate libfaim/aim_rxhandlers.c @ 1147:65e0608e19f7
[gaim-migrate @ 1157]
I think toc is mostly working, i tested it remotely. Oscar is somewhat working; switching between options doesn't force you offline anymore, so that's good. adding and removing doesn't force you offline either. another plus. but i'm not sure it always recognizes the changes on the server side. hey, that's what you get with a protocol where the only thing you know about it is what you see on the wire.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 27 Nov 2000 13:47:33 +0000 |
parents | efcacae6acdb |
children | c00fc3adfd66 |
rev | line source |
---|---|
237 | 1 /* |
2 * aim_rxhandlers.c | |
3 * | |
4 * This file contains most all of the incoming packet handlers, along | |
5 * with aim_rxdispatch(), the Rx dispatcher. Queue/list management is | |
6 * actually done in aim_rxqueue.c. | |
7 * | |
8 */ | |
9 | |
283
0f14e6d8a51b
[gaim-migrate @ 293]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
279
diff
changeset
|
10 #include <faim/aim.h> |
2 | 11 |
12 /* | |
237 | 13 * Bleck functions get called when there's no non-bleck functions |
14 * around to cleanup the mess... | |
2 | 15 */ |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
16 faim_internal int bleck(struct aim_session_t *sess,struct command_rx_struct *workingPtr, ...) |
237 | 17 { |
18 u_short family; | |
19 u_short subtype; | |
2 | 20 |
237 | 21 u_short maxf; |
22 u_short maxs; | |
2 | 23 |
237 | 24 /* XXX: this is ugly. and big just for debugging. */ |
25 char *literals[14][25] = { | |
26 {"Invalid", | |
27 NULL | |
28 }, | |
29 {"General", | |
30 "Invalid", | |
31 "Error", | |
32 "Client Ready", | |
33 "Server Ready", | |
34 "Service Request", | |
35 "Redirect", | |
36 "Rate Information Request", | |
37 "Rate Information", | |
38 "Rate Information Ack", | |
39 NULL, | |
40 "Rate Information Change", | |
41 "Server Pause", | |
42 NULL, | |
43 "Server Resume", | |
44 "Request Personal User Information", | |
45 "Personal User Information", | |
46 "Evil Notification", | |
47 NULL, | |
48 "Migration notice", | |
49 "Message of the Day", | |
50 "Set Privacy Flags", | |
51 "Well Known URL", | |
52 "NOP" | |
53 }, | |
54 {"Location", | |
55 "Invalid", | |
56 "Error", | |
57 "Request Rights", | |
58 "Rights Information", | |
59 "Set user information", | |
60 "Request User Information", | |
61 "User Information", | |
62 "Watcher Sub Request", | |
63 "Watcher Notification" | |
64 }, | |
65 {"Buddy List Management", | |
66 "Invalid", | |
67 "Error", | |
68 "Request Rights", | |
69 "Rights Information", | |
70 "Add Buddy", | |
71 "Remove Buddy", | |
72 "Watcher List Query", | |
73 "Watcher List Response", | |
74 "Watcher SubRequest", | |
75 "Watcher Notification", | |
76 "Reject Notification", | |
77 "Oncoming Buddy", | |
78 "Offgoing Buddy" | |
79 }, | |
80 {"Messeging", | |
81 "Invalid", | |
82 "Error", | |
83 "Add ICBM Parameter", | |
84 "Remove ICBM Parameter", | |
85 "Request Parameter Information", | |
86 "Parameter Information", | |
87 "Outgoing Message", | |
88 "Incoming Message", | |
89 "Evil Request", | |
90 "Evil Reply", | |
91 "Missed Calls", | |
92 "Message Error", | |
93 "Host Ack" | |
94 }, | |
95 {"Advertisements", | |
96 "Invalid", | |
97 "Error", | |
98 "Request Ad", | |
99 "Ad Data (GIFs)" | |
100 }, | |
101 {"Invitation / Client-to-Client", | |
102 "Invalid", | |
103 "Error", | |
104 "Invite a Friend", | |
105 "Invitation Ack" | |
106 }, | |
107 {"Administrative", | |
108 "Invalid", | |
109 "Error", | |
110 "Information Request", | |
111 "Information Reply", | |
112 "Information Change Request", | |
113 "Information Chat Reply", | |
114 "Account Confirm Request", | |
115 "Account Confirm Reply", | |
116 "Account Delete Request", | |
117 "Account Delete Reply" | |
118 }, | |
119 {"Popups", | |
120 "Invalid", | |
121 "Error", | |
122 "Display Popup" | |
123 }, | |
124 {"BOS", | |
125 "Invalid", | |
126 "Error", | |
127 "Request Rights", | |
128 "Rights Response", | |
129 "Set group permission mask", | |
130 "Add permission list entries", | |
131 "Delete permission list entries", | |
132 "Add deny list entries", | |
133 "Delete deny list entries", | |
134 "Server Error" | |
135 }, | |
136 {"User Lookup", | |
137 "Invalid", | |
138 "Error", | |
139 "Search Request", | |
140 "Search Response" | |
141 }, | |
142 {"Stats", | |
143 "Invalid", | |
144 "Error", | |
145 "Set minimum report interval", | |
146 "Report Events" | |
147 }, | |
148 {"Translate", | |
149 "Invalid", | |
150 "Error", | |
151 "Translate Request", | |
152 "Translate Reply", | |
153 }, | |
154 {"Chat Navigation", | |
155 "Invalid", | |
156 "Error", | |
157 "Request rights", | |
158 "Request Exchange Information", | |
159 "Request Room Information", | |
160 "Request Occupant List", | |
161 "Search for Room", | |
162 "Outgoing Message", | |
163 "Incoming Message", | |
164 "Evil Request", | |
165 "Evil Reply", | |
166 "Chat Error", | |
167 } | |
168 }; | |
2 | 169 |
237 | 170 maxf = sizeof(literals) / sizeof(literals[0]); |
171 maxs = sizeof(literals[0]) / sizeof(literals[0][0]); | |
172 | |
173 family = aimutil_get16(workingPtr->data+0); | |
174 subtype= aimutil_get16(workingPtr->data+2); | |
175 | |
176 if((family < maxf) && (subtype+1 < maxs) && (literals[family][subtype] != NULL)) | |
446
6d78b988b479
[gaim-migrate @ 456]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
177 printf("bleck: null handler for %04x/%04x (%s)\n", family, subtype, literals[family][subtype+1]); |
237 | 178 else |
446
6d78b988b479
[gaim-migrate @ 456]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
445
diff
changeset
|
179 printf("bleck: null handler for %04x/%04x (no literal)\n",family,subtype); |
237 | 180 |
2 | 181 return 1; |
182 } | |
183 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
184 faim_export int aim_conn_addhandler(struct aim_session_t *sess, |
237 | 185 struct aim_conn_t *conn, |
186 u_short family, | |
187 u_short type, | |
188 rxcallback_t newhandler, | |
189 u_short flags) | |
190 { | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
191 struct aim_rxcblist_t *newcb; |
237 | 192 |
193 if (!conn) | |
194 return -1; | |
195 | |
196 faimdprintf(1, "aim_conn_addhandler: adding for %04x/%04x\n", family, type); | |
197 | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
198 if (!(newcb = (struct aim_rxcblist_t *)calloc(1, sizeof(struct aim_rxcblist_t)))) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
199 return -1; |
900
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
200 newcb->family = family; |
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
201 newcb->type = type; |
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
202 newcb->flags = flags; |
237 | 203 if (!newhandler) |
900
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
204 newcb->handler = &bleck; |
237 | 205 else |
900
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
206 newcb->handler = newhandler; |
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
207 newcb->next = NULL; |
237 | 208 |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
209 if (!conn->handlerlist) |
900
e18815f5a4e9
[gaim-migrate @ 910]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
840
diff
changeset
|
210 conn->handlerlist = newcb; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
211 else { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
212 struct aim_rxcblist_t *cur; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
213 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
214 cur = conn->handlerlist; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
215 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
216 while (cur->next) |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
217 cur = cur->next; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
218 cur->next = newcb; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
219 } |
237 | 220 |
221 return 0; | |
222 } | |
223 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
224 faim_export int aim_clearhandlers(struct aim_conn_t *conn) |
237 | 225 { |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
226 struct aim_rxcblist_t *cur; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
227 |
237 | 228 if (!conn) |
229 return -1; | |
2 | 230 |
237 | 231 cur = conn->handlerlist; |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
232 while(cur) { |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
233 struct aim_rxcblist_t *tmp; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
234 |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
235 tmp = cur->next; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
236 free(cur); |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
237 cur = tmp; |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
238 } |
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
239 |
237 | 240 return 0; |
241 } | |
2 | 242 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
243 faim_internal rxcallback_t aim_callhandler(struct aim_conn_t *conn, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
244 u_short family, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
245 u_short type) |
2 | 246 { |
237 | 247 struct aim_rxcblist_t *cur; |
248 | |
249 if (!conn) | |
250 return NULL; | |
251 | |
252 faimdprintf(1, "aim_callhandler: calling for %04x/%04x\n", family, type); | |
2 | 253 |
237 | 254 cur = conn->handlerlist; |
255 while(cur) | |
2 | 256 { |
237 | 257 if ( (cur->family == family) && (cur->type == type) ) |
258 return cur->handler; | |
259 cur = cur->next; | |
2 | 260 } |
237 | 261 |
262 if (type==0xffff) | |
263 return NULL; | |
960
fa681641643d
[gaim-migrate @ 970]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
900
diff
changeset
|
264 |
237 | 265 return aim_callhandler(conn, family, 0xffff); |
266 } | |
267 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
268 faim_internal int aim_callhandler_noparam(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
269 struct aim_conn_t *conn, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
270 u_short family, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
271 u_short type, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
272 struct command_rx_struct *ptr) |
237 | 273 { |
274 rxcallback_t userfunc = NULL; | |
275 userfunc = aim_callhandler(conn, family, type); | |
276 if (userfunc) | |
277 return userfunc(sess, ptr); | |
278 return 1; /* XXX */ | |
2 | 279 } |
280 | |
281 /* | |
282 aim_rxdispatch() | |
283 | |
284 Basically, heres what this should do: | |
285 1) Determine correct packet handler for this packet | |
286 2) Mark the packet handled (so it can be dequeued in purge_queue()) | |
287 3) Send the packet to the packet handler | |
288 4) Go to next packet in the queue and start over | |
289 5) When done, run purge_queue() to purge handled commands | |
290 | |
291 Note that any unhandlable packets should probably be left in the | |
292 queue. This is the best way to prevent data loss. This means | |
293 that a single packet may get looked at by this function multiple | |
294 times. This is more good than bad! This behavior may change. | |
295 | |
296 Aren't queue's fun? | |
297 | |
298 TODO: Get rid of all the ugly if's. | |
299 TODO: Clean up. | |
300 TODO: More support for mid-level handlers. | |
301 TODO: Allow for NULL handlers. | |
302 | |
303 */ | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
304 faim_export int aim_rxdispatch(struct aim_session_t *sess) |
2 | 305 { |
306 int i = 0; | |
307 struct command_rx_struct *workingPtr = NULL; | |
308 | |
237 | 309 if (sess->queue_incoming == NULL) { |
310 faimdprintf(1, "parse_generic: incoming packet queue empty.\n"); | |
311 return 0; | |
312 } else { | |
313 workingPtr = sess->queue_incoming; | |
314 for (i = 0; workingPtr != NULL; workingPtr = workingPtr->next, i++) { | |
315 /* | |
316 * XXX: This is still fairly ugly. | |
317 */ | |
318 if (workingPtr->handled) | |
319 continue; | |
320 | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
321 /* |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
322 * This is a debugging/sanity check only and probably could/should be removed |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
323 * for stable code. |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
324 */ |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
325 if (((workingPtr->hdrtype == AIM_FRAMETYPE_OFT) && |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
326 (workingPtr->conn->type != AIM_CONN_TYPE_RENDEZVOUS)) || |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
327 ((workingPtr->hdrtype == AIM_FRAMETYPE_OSCAR) && |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
328 (workingPtr->conn->type == AIM_CONN_TYPE_RENDEZVOUS))) { |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
329 printf("faim: rxhandlers: incompatible frame type %d on connection type 0x%04x\n", workingPtr->hdrtype, workingPtr->conn->type); |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
330 workingPtr->handled = 1; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
331 continue; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
332 } |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
333 |
237 | 334 switch(workingPtr->conn->type) { |
335 case -1: | |
336 /* | |
337 * This can happen if we have a queued command | |
338 * that was recieved after a connection has | |
339 * been terminated. In which case, the handler | |
340 * list has been cleared, and there's nothing we | |
341 * can do for it. We can only cancel it. | |
342 */ | |
343 workingPtr->handled = 1; | |
344 break; | |
345 case AIM_CONN_TYPE_AUTH: { | |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
346 unsigned long head; |
237 | 347 |
348 head = aimutil_get32(workingPtr->data); | |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
349 if ((head == 0x00000001) && (workingPtr->commandlen == 4)) { |
237 | 350 faimdprintf(1, "got connection ack on auth line\n"); |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
351 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_FLAPVER, workingPtr); |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
352 } else if (workingPtr->hdr.oscar.type == 0x04) { |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
353 /* Used only by the older login protocol */ |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
354 workingPtr->handled = aim_authparse(sess, workingPtr); |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
355 } else { |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
356 unsigned short family,subtype; |
237 | 357 |
358 family = aimutil_get16(workingPtr->data); | |
359 subtype = aimutil_get16(workingPtr->data+2); | |
360 | |
361 switch (family) { | |
362 /* New login protocol */ | |
363 case 0x0017: | |
364 if (subtype == 0x0001) | |
365 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0017, 0x0001, workingPtr); | |
366 else if (subtype == 0x0003) | |
367 workingPtr->handled = aim_authparse(sess, workingPtr); | |
368 else if (subtype == 0x0007) | |
741
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
369 workingPtr->handled = aim_authkeyparse(sess, workingPtr); |
237 | 370 else |
371 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0017, 0xffff, workingPtr); | |
372 break; | |
741
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
373 case 0x0007: |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
374 if (subtype == 0x0005) |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
375 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_ADM, AIM_CB_ADM_INFOCHANGE_REPLY, workingPtr); |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
376 break; |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
377 case AIM_CB_FAM_SPECIAL: |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
378 if (subtype == AIM_CB_SPECIAL_DEBUGCONN_CONNECT) { |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
379 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr); |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
380 break; |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
381 } /* others fall through */ |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
382 default: |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
383 #if 0 |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
384 /* Old login protocol */ |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
385 /* any user callbacks will be called from here */ |
58a6e6e26695
[gaim-migrate @ 751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
715
diff
changeset
|
386 workingPtr->handled = aim_authparse(sess, workingPtr); |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
387 #endif |
237 | 388 break; |
389 } | |
2 | 390 } |
237 | 391 break; |
392 } | |
393 case AIM_CONN_TYPE_BOS: { | |
394 u_short family; | |
395 u_short subtype; | |
331
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
396 |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
397 if (workingPtr->hdr.oscar.type == 0x04) { |
331
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
398 workingPtr->handled = aim_negchan_middle(sess, workingPtr); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
399 break; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
400 } |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
401 |
237 | 402 family = aimutil_get16(workingPtr->data); |
403 subtype = aimutil_get16(workingPtr->data+2); | |
404 | |
405 switch (family) { | |
406 case 0x0000: /* not really a family, but it works */ | |
407 if (subtype == 0x0001) | |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
408 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_FLAPVER, workingPtr); |
237 | 409 else |
410 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr); | |
411 break; | |
412 case 0x0001: /* Family: General */ | |
413 switch (subtype) { | |
414 case 0x0001: | |
415 workingPtr->handled = aim_parse_generalerrs(sess, workingPtr); | |
416 break; | |
417 case 0x0003: | |
418 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x0003, workingPtr); | |
419 break; | |
420 case 0x0005: | |
421 workingPtr->handled = aim_handleredirect_middle(sess, workingPtr); | |
422 break; | |
423 case 0x0007: | |
424 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x0007, workingPtr); | |
425 break; | |
426 case 0x000a: | |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
427 workingPtr->handled = aim_parse_ratechange_middle(sess, workingPtr); |
237 | 428 break; |
429 case 0x000f: | |
430 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x000f, workingPtr); | |
431 break; | |
771
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
432 case 0x0010: |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
433 workingPtr->handled = aim_parse_evilnotify_middle(sess, workingPtr); |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
434 break; |
237 | 435 case 0x0013: |
436 workingPtr->handled = aim_parsemotd_middle(sess, workingPtr); | |
437 break; | |
438 default: | |
439 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_GEN, AIM_CB_GEN_DEFAULT, workingPtr); | |
440 break; | |
441 } | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
442 break; |
237 | 443 case 0x0002: /* Family: Location */ |
444 switch (subtype) { | |
445 case 0x0001: | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
446 workingPtr->handled = aim_parse_locateerr(sess, workingPtr); |
237 | 447 break; |
448 case 0x0003: | |
449 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0002, 0x0003, workingPtr); | |
450 break; | |
451 case 0x0006: | |
452 workingPtr->handled = aim_parse_userinfo_middle(sess, workingPtr); | |
453 break; | |
454 default: | |
455 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_LOC, AIM_CB_LOC_DEFAULT, workingPtr); | |
456 break; | |
457 } | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
458 break; |
237 | 459 case 0x0003: /* Family: Buddy List */ |
460 switch (subtype) { | |
461 case 0x0001: | |
462 workingPtr->handled = aim_parse_generalerrs(sess, workingPtr); | |
463 break; | |
464 case 0x0003: | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
465 workingPtr->handled = aim_parse_buddyrights(sess, workingPtr); |
237 | 466 break; |
467 case 0x000b: /* oncoming buddy */ | |
468 workingPtr->handled = aim_parse_oncoming_middle(sess, workingPtr); | |
469 break; | |
470 case 0x000c: /* offgoing buddy */ | |
471 workingPtr->handled = aim_parse_offgoing_middle(sess, workingPtr); | |
472 break; | |
473 default: | |
474 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_BUD, AIM_CB_BUD_DEFAULT, workingPtr); | |
475 } | |
476 break; | |
477 case 0x0004: /* Family: Messeging */ | |
478 switch (subtype) { | |
479 case 0x0001: | |
480 workingPtr->handled = aim_parse_msgerror_middle(sess, workingPtr); | |
481 break; | |
482 case 0x0005: | |
483 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0004, 0x0005, workingPtr); | |
484 break; | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
485 case 0x0006: |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
486 workingPtr->handled = aim_parse_outgoing_im_middle(sess, workingPtr); |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
487 break; |
237 | 488 case 0x0007: |
489 workingPtr->handled = aim_parse_incoming_im_middle(sess, workingPtr); | |
490 break; | |
491 case 0x000a: | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
492 workingPtr->handled = aim_parse_missedcall(sess, workingPtr); |
237 | 493 break; |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
494 case 0x000c: |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
495 workingPtr->handled = aim_parse_msgack_middle(sess, workingPtr); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
496 break; |
237 | 497 default: |
498 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_MSG, AIM_CB_MSG_DEFAULT, workingPtr); | |
499 } | |
500 break; | |
501 case 0x0009: | |
502 if (subtype == 0x0001) | |
503 workingPtr->handled = aim_parse_generalerrs(sess, workingPtr); | |
504 else if (subtype == 0x0003) | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
505 workingPtr->handled = aim_parse_bosrights(sess, workingPtr); |
237 | 506 else |
507 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_BOS, AIM_CB_BOS_DEFAULT, workingPtr); | |
508 break; | |
509 case 0x000a: /* Family: User lookup */ | |
510 switch (subtype) { | |
511 case 0x0001: | |
512 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x000a, 0x0001, workingPtr); | |
513 break; | |
514 case 0x0003: | |
515 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x000a, 0x0003, workingPtr); | |
516 break; | |
517 default: | |
518 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_LOK, AIM_CB_LOK_DEFAULT, workingPtr); | |
519 } | |
520 break; | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
521 case 0x000b: { |
237 | 522 if (subtype == 0x0001) |
523 workingPtr->handled = aim_parse_generalerrs(sess, workingPtr); | |
524 else if (subtype == 0x0002) | |
525 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x000b, 0x0002, workingPtr); | |
526 else | |
527 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_STS, AIM_CB_STS_DEFAULT, workingPtr); | |
528 break; | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
529 } |
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
530 case AIM_CB_FAM_SPECIAL: |
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
531 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr); |
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
532 break; |
237 | 533 default: |
534 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr); | |
535 break; | |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
536 } /* switch(family) */ |
237 | 537 break; |
835
88f8f98de02d
[gaim-migrate @ 845]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
771
diff
changeset
|
538 } /* AIM_CONN_TYPE_BOS */ |
237 | 539 case AIM_CONN_TYPE_CHATNAV: { |
540 u_short family; | |
541 u_short subtype; | |
542 family = aimutil_get16(workingPtr->data); | |
543 subtype= aimutil_get16(workingPtr->data+2); | |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
544 |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
545 if ((family == 0x0000) && (subtype == 0x00001)) { |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
546 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_FLAPVER, workingPtr); |
237 | 547 } else if ((family == 0x000d) && (subtype == 0x0009)) { |
548 workingPtr->handled = aim_chatnav_parse_info(sess, workingPtr); | |
549 } else { | |
550 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr); | |
551 } | |
552 break; | |
553 } | |
554 case AIM_CONN_TYPE_CHAT: { | |
555 u_short family, subtype; | |
556 | |
557 family = aimutil_get16(workingPtr->data); | |
558 subtype= aimutil_get16(workingPtr->data+2); | |
559 | |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
560 if ((family == 0x0000) && (subtype == 0x00001)) { |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
561 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_FLAPVER, workingPtr); |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
562 } else if (family == 0x0001) { |
237 | 563 if (subtype == 0x0001) |
564 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x0001, workingPtr); | |
565 else if (subtype == 0x0003) | |
566 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x0003, workingPtr); | |
567 else if (subtype == 0x0007) | |
568 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, 0x0001, 0x0007, workingPtr); | |
569 else | |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
570 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, family, subtype, workingPtr); |
237 | 571 } else if (family == 0x000e) { |
572 if (subtype == 0x0002) | |
573 workingPtr->handled = aim_chat_parse_infoupdate(sess, workingPtr); | |
574 else if (subtype == 0x0003) | |
575 workingPtr->handled = aim_chat_parse_joined(sess, workingPtr); | |
576 else if (subtype == 0x0004) | |
577 workingPtr->handled = aim_chat_parse_leave(sess, workingPtr); | |
578 else if (subtype == 0x0006) | |
579 workingPtr->handled = aim_chat_parse_incoming(sess, workingPtr); | |
580 else | |
581 printf("Chat: unknown snac %04x/%04x\n", family, subtype); | |
582 } else { | |
583 printf("Chat: unknown snac %04x/%04x\n", family, subtype); | |
584 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_CHT, AIM_CB_CHT_DEFAULT, workingPtr); | |
585 } | |
586 break; | |
587 } | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
588 case AIM_CONN_TYPE_RENDEZVOUS: { |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
589 /* make sure that we only get OFT frames on these connections */ |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
590 if (workingPtr->hdrtype != AIM_FRAMETYPE_OFT) { |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
591 printf("faim: internal error: non-OFT frames on OFT connection\n"); |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
592 workingPtr->handled = 1; /* get rid of it */ |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
593 break; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
594 } |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
595 |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
596 /* XXX: implement this */ |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
597 printf("faim: OFT frame!\n"); |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
598 |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
599 break; |
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
600 } |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
601 case AIM_CONN_TYPE_RENDEZVOUS_OUT: { |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
602 /* not possible */ |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
603 break; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
604 } |
237 | 605 default: |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
606 printf("\ninternal error: unknown connection type (very bad.) (type = %d, fd = %d, commandlen = %02x)\n\n", workingPtr->conn->type, workingPtr->conn->fd, workingPtr->commandlen); |
237 | 607 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, workingPtr); |
608 break; | |
609 } | |
2 | 610 } |
237 | 611 } |
2 | 612 |
237 | 613 /* |
614 * This doesn't have to be called here. It could easily be done | |
615 * by a seperate thread or something. It's an administrative operation, | |
616 * and can take a while. Though the less you call it the less memory | |
617 * you'll have :) | |
618 */ | |
619 aim_purge_rxqueue(sess); | |
2 | 620 |
621 return 0; | |
622 } | |
623 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
624 faim_internal int aim_parse_msgack_middle(struct aim_session_t *sess, struct command_rx_struct *command) |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
625 { |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
626 rxcallback_t userfunc = NULL; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
627 char sn[MAXSNLEN]; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
628 unsigned short type; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
629 int i = 10+8; /* skip SNAC and cookie */ |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
630 int ret = 1; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
631 unsigned char snlen; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
632 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
633 type = aimutil_get16(command->data+i); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
634 i += 2; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
635 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
636 snlen = aimutil_get8(command->data+i); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
637 i++; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
638 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
639 memset(sn, 0, sizeof(sn)); |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
640 strncpy(sn, (char *)command->data+i, snlen); |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
641 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
642 if ((userfunc = aim_callhandler(command->conn, 0x0004, 0x000c))) |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
643 ret = userfunc(sess, command, type, sn); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
644 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
645 return ret; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
646 } |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
647 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
648 faim_internal int aim_parse_ratechange_middle(struct aim_session_t *sess, struct command_rx_struct *command) |
503
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
649 { |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
650 rxcallback_t userfunc = NULL; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
651 int ret = 1; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
652 unsigned long newrate; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
653 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
654 if (command->commandlen != 0x2f) { |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
655 printf("faim: unknown rate change length 0x%04x\n", command->commandlen); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
656 return 1; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
657 } |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
658 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
659 newrate = aimutil_get32(command->data+34); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
660 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
661 if ((userfunc = aim_callhandler(command->conn, 0x0001, 0x000a))) |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
662 ret = userfunc(sess, command, newrate); |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
663 |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
664 return ret; |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
665 } |
6e318907bcce
[gaim-migrate @ 513]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
446
diff
changeset
|
666 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
667 faim_internal int aim_parse_evilnotify_middle(struct aim_session_t *sess, struct command_rx_struct *command) |
771
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
668 { |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
669 rxcallback_t userfunc = NULL; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
670 int ret = 1, pos; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
671 char *sn = NULL; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
672 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
673 if(command->commandlen < 12) /* a warning level dec sends this */ |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
674 return 1; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
675 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
676 if ((pos = aimutil_get8(command->data+ 12)) > MAXSNLEN) |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
677 return 1; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
678 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
679 if(!(sn = (char *)calloc(1, pos+1))) |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
680 return 1; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
681 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
682 memcpy(sn, command->data+13, pos); |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
683 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
684 if ((userfunc = aim_callhandler(command->conn, 0x0001, 0x0010))) |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
685 ret = userfunc(sess, command, sn); |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
686 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
687 free(sn); |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
688 |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
689 return ret; |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
690 } |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
691 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
692 faim_internal int aim_parsemotd_middle(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
693 struct command_rx_struct *command, ...) |
2 | 694 { |
237 | 695 rxcallback_t userfunc = NULL; |
696 char *msg; | |
697 int ret=1; | |
698 struct aim_tlvlist_t *tlvlist; | |
699 u_short id; | |
700 | |
701 /* | |
771
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
702 * Code. |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
703 * |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
704 * Valid values: |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
705 * 1 Mandatory upgrade |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
706 * 2 Advisory upgrade |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
707 * 3 System bulletin |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
708 * 4 Nothing's wrong ("top o the world" -- normal) |
72e556f6b99d
[gaim-migrate @ 781]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
741
diff
changeset
|
709 * |
237 | 710 */ |
711 id = aimutil_get16(command->data+10); | |
712 | |
713 /* | |
714 * TLVs follow | |
715 */ | |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
716 if (!(tlvlist = aim_readtlvchain(command->data+12, command->commandlen-12))) |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
717 return ret; |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
718 |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
719 if (!(msg = aim_gettlv_str(tlvlist, 0x000b, 1))) { |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
720 aim_freetlvchain(&tlvlist); |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
721 return ret; |
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
722 } |
237 | 723 |
724 userfunc = aim_callhandler(command->conn, 0x0001, 0x0013); | |
725 if (userfunc) | |
726 ret = userfunc(sess, command, id, msg); | |
727 | |
728 aim_freetlvchain(&tlvlist); | |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
729 free(msg); |
237 | 730 |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
731 return ret; |
237 | 732 } |
2 | 733 |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
734 faim_internal int aim_handleredirect_middle(struct aim_session_t *sess, |
237 | 735 struct command_rx_struct *command, ...) |
736 { | |
737 struct aim_tlv_t *tmptlv = NULL; | |
738 int serviceid = 0x00; | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
739 unsigned char cookie[AIM_COOKIELEN]; |
237 | 740 char *ip = NULL; |
741 rxcallback_t userfunc = NULL; | |
742 struct aim_tlvlist_t *tlvlist; | |
743 int ret = 1; | |
744 | |
745 if (!(tlvlist = aim_readtlvchain(command->data+10, command->commandlen-10))) | |
2 | 746 { |
237 | 747 printf("libfaim: major bug: unable to read tlvchain from redirect\n"); |
748 return ret; | |
749 } | |
750 | |
751 if (!(tmptlv = aim_gettlv(tlvlist, 0x000d, 1))) | |
752 { | |
753 printf("libfaim: major bug: no service ID in tlvchain from redirect\n"); | |
754 aim_freetlvchain(&tlvlist); | |
755 return ret; | |
2 | 756 } |
237 | 757 serviceid = aimutil_get16(tmptlv->value); |
758 | |
759 if (!(ip = aim_gettlv_str(tlvlist, 0x0005, 1))) | |
760 { | |
761 printf("libfaim: major bug: no IP in tlvchain from redirect (service 0x%02x)\n", serviceid); | |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
762 free(ip); |
237 | 763 aim_freetlvchain(&tlvlist); |
764 return ret; | |
765 } | |
766 | |
767 if (!(tmptlv = aim_gettlv(tlvlist, 0x0006, 1))) | |
2 | 768 { |
237 | 769 printf("libfaim: major bug: no cookie in tlvchain from redirect (service 0x%02x)\n", serviceid); |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
770 free(ip); |
237 | 771 aim_freetlvchain(&tlvlist); |
772 return ret; | |
773 } | |
774 memcpy(cookie, tmptlv->value, AIM_COOKIELEN); | |
775 | |
776 if (serviceid == AIM_CONN_TYPE_CHAT) | |
777 { | |
778 /* | |
779 * Chat hack. | |
780 * | |
781 */ | |
782 userfunc = aim_callhandler(command->conn, 0x0001, 0x0005); | |
783 if (userfunc) | |
784 ret = userfunc(sess, command, serviceid, ip, cookie, sess->pendingjoin); | |
785 free(sess->pendingjoin); | |
786 sess->pendingjoin = NULL; | |
2 | 787 } |
788 else | |
789 { | |
237 | 790 userfunc = aim_callhandler(command->conn, 0x0001, 0x0005); |
791 if (userfunc) | |
792 ret = userfunc(sess, command, serviceid, ip, cookie); | |
793 } | |
2 | 794 |
715
58106806ac2b
[gaim-migrate @ 725]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
503
diff
changeset
|
795 free(ip); |
237 | 796 aim_freetlvchain(&tlvlist); |
2 | 797 |
237 | 798 return ret; |
2 | 799 } |
800 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
801 faim_internal int aim_parse_unknown(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
802 struct command_rx_struct *command, ...) |
2 | 803 { |
237 | 804 u_int i = 0; |
2 | 805 |
1081
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
806 if (!sess || !command) |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
807 return 1; |
efcacae6acdb
[gaim-migrate @ 1091]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
808 |
237 | 809 faimdprintf(1, "\nRecieved unknown packet:"); |
2 | 810 |
811 for (i = 0; i < command->commandlen; i++) | |
812 { | |
813 if ((i % 8) == 0) | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
814 faimdprintf(1, "\n\t"); |
2 | 815 |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
816 faimdprintf(1, "0x%2x ", command->data[i]); |
2 | 817 } |
818 | |
445
e4c34ca88d9b
[gaim-migrate @ 455]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
331
diff
changeset
|
819 faimdprintf(1, "\n\n"); |
2 | 820 |
821 return 1; | |
822 } | |
823 | |
824 | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
825 faim_internal int aim_negchan_middle(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
826 struct command_rx_struct *command) |
331
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
827 { |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
828 struct aim_tlvlist_t *tlvlist; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
829 char *msg = NULL; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
830 unsigned short code = 0; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
831 struct aim_tlv_t *tmptlv; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
832 rxcallback_t userfunc = NULL; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
833 int ret = 1; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
834 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
835 tlvlist = aim_readtlvchain(command->data, command->commandlen); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
836 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
837 if ((tmptlv = aim_gettlv(tlvlist, 0x0009, 1))) |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
838 code = aimutil_get16(tmptlv->value); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
839 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
840 if ((tmptlv = aim_gettlv(tlvlist, 0x000b, 1))) |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
841 msg = aim_gettlv_str(tlvlist, 0x000b, 1); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
842 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
843 userfunc = aim_callhandler(command->conn, |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
844 AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
845 if (userfunc) |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
846 ret = userfunc(sess, command, code, msg); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
847 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
848 aim_freetlvchain(&tlvlist); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
849 free(msg); |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
850 |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
851 return ret; |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
852 } |
f3c8d79688db
[gaim-migrate @ 341]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
283
diff
changeset
|
853 |
2 | 854 /* |
855 * aim_parse_generalerrs() | |
856 * | |
857 * Middle handler for 0x0001 snac of each family. | |
858 * | |
859 */ | |
840
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
860 faim_internal int aim_parse_generalerrs(struct aim_session_t *sess, |
595ac7759563
[gaim-migrate @ 850]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
835
diff
changeset
|
861 struct command_rx_struct *command, ...) |
2 | 862 { |
863 u_short family; | |
864 u_short subtype; | |
237 | 865 |
866 family = aimutil_get16(command->data+0); | |
867 subtype= aimutil_get16(command->data+2); | |
2 | 868 |
869 switch(family) | |
870 { | |
871 default: | |
872 /* Unknown family */ | |
237 | 873 return aim_callhandler_noparam(sess, command->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_UNKNOWN, command); |
2 | 874 } |
875 | |
876 return 1; | |
877 } | |
878 | |
879 | |
880 |