Mercurial > pidgin
comparison libpurple/protocols/oscar/rxhandlers.c @ 15373:5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 20 Jan 2007 02:32:10 +0000 |
parents | |
children | 32c366eeeb99 |
comparison
equal
deleted
inserted
replaced
15372:f79e0f4df793 | 15373:5fe8042783c1 |
---|---|
1 /* | |
2 * Gaim's oscar protocol plugin | |
3 * This file is the legal property of its developers. | |
4 * Please see the AUTHORS file distributed alongside this file. | |
5 * | |
6 * This library is free software; you can redistribute it and/or | |
7 * modify it under the terms of the GNU Lesser General Public | |
8 * License as published by the Free Software Foundation; either | |
9 * version 2 of the License, or (at your option) any later version. | |
10 * | |
11 * This library is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * Lesser General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU Lesser General Public | |
17 * License along with this library; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
19 */ | |
20 | |
21 #include "oscar.h" | |
22 #include "peer.h" | |
23 | |
24 aim_module_t *aim__findmodulebygroup(OscarData *od, guint16 group) | |
25 { | |
26 aim_module_t *cur; | |
27 | |
28 for (cur = (aim_module_t *)od->modlistv; cur; cur = cur->next) { | |
29 if (cur->family == group) | |
30 return cur; | |
31 } | |
32 | |
33 return NULL; | |
34 } | |
35 | |
36 aim_module_t *aim__findmodule(OscarData *od, const char *name) | |
37 { | |
38 aim_module_t *cur; | |
39 | |
40 for (cur = (aim_module_t *)od->modlistv; cur; cur = cur->next) { | |
41 if (strcmp(name, cur->name) == 0) | |
42 return cur; | |
43 } | |
44 | |
45 return NULL; | |
46 } | |
47 | |
48 int aim__registermodule(OscarData *od, int (*modfirst)(OscarData *, aim_module_t *)) | |
49 { | |
50 aim_module_t *mod; | |
51 | |
52 if (!od || !modfirst) | |
53 return -1; | |
54 | |
55 mod = g_new0(aim_module_t, 1); | |
56 | |
57 if (modfirst(od, mod) == -1) { | |
58 free(mod); | |
59 return -1; | |
60 } | |
61 | |
62 if (aim__findmodule(od, mod->name)) { | |
63 if (mod->shutdown) | |
64 mod->shutdown(od, mod); | |
65 free(mod); | |
66 return -1; | |
67 } | |
68 | |
69 mod->next = (aim_module_t *)od->modlistv; | |
70 od->modlistv = mod; | |
71 | |
72 gaim_debug_misc("oscar", "registered module %s (family 0x%04x, version = 0x%04x, tool 0x%04x, tool version 0x%04x)\n", mod->name, mod->family, mod->version, mod->toolid, mod->toolversion); | |
73 | |
74 return 0; | |
75 } | |
76 | |
77 void aim__shutdownmodules(OscarData *od) | |
78 { | |
79 aim_module_t *cur; | |
80 | |
81 for (cur = (aim_module_t *)od->modlistv; cur; ) { | |
82 aim_module_t *tmp; | |
83 | |
84 tmp = cur->next; | |
85 | |
86 if (cur->shutdown) | |
87 cur->shutdown(od, cur); | |
88 | |
89 free(cur); | |
90 | |
91 cur = tmp; | |
92 } | |
93 | |
94 od->modlistv = NULL; | |
95 | |
96 return; | |
97 } | |
98 | |
99 #if 0 | |
100 /* | |
101 * Bleck functions get called when there's no non-bleck functions | |
102 * around to cleanup the mess... | |
103 */ | |
104 static int bleck(OscarData *od, FlapFrame *frame, ...) | |
105 { | |
106 guint16 family, subtype; | |
107 guint16 maxf, maxs; | |
108 | |
109 static const char *channels[6] = { | |
110 "Invalid (0)", | |
111 "FLAP Version", | |
112 "SNAC", | |
113 "Invalid (3)", | |
114 "Negotiation", | |
115 "FLAP NOP" | |
116 }; | |
117 static const int maxchannels = 5; | |
118 | |
119 /* XXX: this is ugly. and big just for debugging. */ | |
120 static const char *literals[14][25] = { | |
121 {"Invalid", | |
122 NULL | |
123 }, | |
124 {"General", | |
125 "Invalid", | |
126 "Error", | |
127 "Client Ready", | |
128 "Server Ready", | |
129 "Service Request", | |
130 "Redirect", | |
131 "Rate Information Request", | |
132 "Rate Information", | |
133 "Rate Information Ack", | |
134 NULL, | |
135 "Rate Information Change", | |
136 "Server Pause", | |
137 NULL, | |
138 "Server Resume", | |
139 "Request Personal User Information", | |
140 "Personal User Information", | |
141 "Evil Notification", | |
142 NULL, | |
143 "Migration notice", | |
144 "Message of the Day", | |
145 "Set Privacy Flags", | |
146 "Well Known URL", | |
147 "NOP" | |
148 }, | |
149 {"Location", | |
150 "Invalid", | |
151 "Error", | |
152 "Request Rights", | |
153 "Rights Information", | |
154 "Set user information", | |
155 "Request User Information", | |
156 "User Information", | |
157 "Watcher Sub Request", | |
158 "Watcher Notification" | |
159 }, | |
160 {"Buddy List Management", | |
161 "Invalid", | |
162 "Error", | |
163 "Request Rights", | |
164 "Rights Information", | |
165 "Add Buddy", | |
166 "Remove Buddy", | |
167 "Watcher List Query", | |
168 "Watcher List Response", | |
169 "Watcher SubRequest", | |
170 "Watcher Notification", | |
171 "Reject Notification", | |
172 "Oncoming Buddy", | |
173 "Offgoing Buddy" | |
174 }, | |
175 {"Messeging", | |
176 "Invalid", | |
177 "Error", | |
178 "Add ICBM Parameter", | |
179 "Remove ICBM Parameter", | |
180 "Request Parameter Information", | |
181 "Parameter Information", | |
182 "Outgoing Message", | |
183 "Incoming Message", | |
184 "Evil Request", | |
185 "Evil Reply", | |
186 "Missed Calls", | |
187 "Message Error", | |
188 "Host Ack" | |
189 }, | |
190 {"Advertisements", | |
191 "Invalid", | |
192 "Error", | |
193 "Request Ad", | |
194 "Ad Data (GIFs)" | |
195 }, | |
196 {"Invitation / Client-to-Client", | |
197 "Invalid", | |
198 "Error", | |
199 "Invite a Friend", | |
200 "Invitation Ack" | |
201 }, | |
202 {"Administrative", | |
203 "Invalid", | |
204 "Error", | |
205 "Information Request", | |
206 "Information Reply", | |
207 "Information Change Request", | |
208 "Information Chat Reply", | |
209 "Account Confirm Request", | |
210 "Account Confirm Reply", | |
211 "Account Delete Request", | |
212 "Account Delete Reply" | |
213 }, | |
214 {"Popups", | |
215 "Invalid", | |
216 "Error", | |
217 "Display Popup" | |
218 }, | |
219 {"BOS", | |
220 "Invalid", | |
221 "Error", | |
222 "Request Rights", | |
223 "Rights Response", | |
224 "Set group permission mask", | |
225 "Add permission list entries", | |
226 "Delete permission list entries", | |
227 "Add deny list entries", | |
228 "Delete deny list entries", | |
229 "Server Error" | |
230 }, | |
231 {"User Lookup", | |
232 "Invalid", | |
233 "Error", | |
234 "Search Request", | |
235 "Search Response" | |
236 }, | |
237 {"Stats", | |
238 "Invalid", | |
239 "Error", | |
240 "Set minimum report interval", | |
241 "Report Events" | |
242 }, | |
243 {"Translate", | |
244 "Invalid", | |
245 "Error", | |
246 "Translate Request", | |
247 "Translate Reply", | |
248 }, | |
249 {"Chat Navigation", | |
250 "Invalid", | |
251 "Error", | |
252 "Request rights", | |
253 "Request Exchange Information", | |
254 "Request Room Information", | |
255 "Request Occupant List", | |
256 "Search for Room", | |
257 "Outgoing Message", | |
258 "Incoming Message", | |
259 "Evil Request", | |
260 "Evil Reply", | |
261 "Chat Error", | |
262 } | |
263 }; | |
264 | |
265 maxf = sizeof(literals) / sizeof(literals[0]); | |
266 maxs = sizeof(literals[0]) / sizeof(literals[0][0]); | |
267 | |
268 if (frame->channel == 0x02) { | |
269 | |
270 family = byte_stream_get16(&frame->data); | |
271 subtype = byte_stream_get16(&frame->data); | |
272 | |
273 if ((family < maxf) && (subtype+1 < maxs) && (literals[family][subtype] != NULL)) | |
274 gaim_debug_misc("oscar", "bleck: channel %s: null handler for %04x/%04x (%s)\n", channels[frame->channel], family, subtype, literals[family][subtype+1]); | |
275 else | |
276 gaim_debug_misc("oscar", "bleck: channel %s: null handler for %04x/%04x (no literal)\n", channels[frame->channel], family, subtype); | |
277 } else { | |
278 | |
279 if (frame->channel <= maxchannels) | |
280 gaim_debug_misc("oscar", "bleck: channel %s (0x%02x)\n", channels[frame->channel], frame->channel); | |
281 else | |
282 gaim_debug_misc("oscar", "bleck: unknown channel 0x%02x\n", frame->channel); | |
283 | |
284 } | |
285 | |
286 return 1; | |
287 } | |
288 #endif |