libfaim/rxhandlers.c

Mon, 28 May 2001 18:54:00 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Mon, 28 May 2001 18:54:00 +0000
changeset 1903
cb301e38f51a
parent 1839
8ccb8f83aaab
permissions
-rw-r--r--

[gaim-migrate @ 1913]
this is part three of three

1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * aim_rxhandlers.c
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 * This file contains most all of the incoming packet handlers, along
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 * with aim_rxdispatch(), the Rx dispatcher. Queue/list management is
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * actually done in aim_rxqueue.c.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 #define FAIM_INTERNAL
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 #include <aim.h>
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
13 static aim_module_t *findmodule(struct aim_session_t *sess, const char *name)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
14 {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
15 aim_module_t *cur;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
16
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
17 for (cur = (aim_module_t *)sess->modlistv; cur; cur = cur->next) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
18 if (strcmp(name, cur->name) == 0)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
19 return cur;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
20 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
21
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
22 return NULL;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
23 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
24
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
25 faim_internal int aim__registermodule(struct aim_session_t *sess, int (*modfirst)(struct aim_session_t *, aim_module_t *))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
26 {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
27 aim_module_t *mod;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
28
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
29 if (!sess || !modfirst)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
30 return -1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
31
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
32 if (!(mod = malloc(sizeof(aim_module_t))))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
33 return -1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
34 memset(mod, 0, sizeof(aim_module_t));
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
35
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
36 if (modfirst(sess, mod) == -1) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
37 free(mod);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
38 return -1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
39 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
40
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
41 if (findmodule(sess, mod->name)) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
42 if (mod->shutdown)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
43 mod->shutdown(sess, mod);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
44 free(mod);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
45 return -1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
46 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
47
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
48 mod->next = (aim_module_t *)sess->modlistv;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
49 (aim_module_t *)sess->modlistv = mod;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
50
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
51 faimdprintf(sess, 1, "registered module %s (family 0x%04x)\n", mod->name, mod->family);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
52
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
53 return 0;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
54 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
55
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
56 faim_internal void aim__shutdownmodules(struct aim_session_t *sess)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
57 {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
58 aim_module_t *cur;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
59
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
60 for (cur = (aim_module_t *)sess->modlistv; cur; ) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
61 aim_module_t *tmp;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
62
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
63 tmp = cur->next;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
64
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
65 if (cur->shutdown)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
66 cur->shutdown(sess, cur);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
67
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
68 free(cur);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
69
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
70 cur = tmp;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
71 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
72
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
73 sess->modlistv = NULL;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
74
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
75 return;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
76 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
77
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
78 static int consumesnac(struct aim_session_t *sess, struct command_rx_struct *rx)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
79 {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
80 aim_module_t *cur;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
81 aim_modsnac_t snac;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
82
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
83 snac.family = aimutil_get16(rx->data+0);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
84 snac.subtype = aimutil_get16(rx->data+2);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
85 snac.flags = aimutil_get16(rx->data+4);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
86 snac.id = aimutil_get32(rx->data+6);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
87
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
88 for (cur = (aim_module_t *)sess->modlistv; cur; cur = cur->next) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
89
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
90 if (!(cur->flags & AIM_MODFLAG_MULTIFAMILY) &&
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
91 (cur->family != snac.family))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
92 continue;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
93
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
94 if (cur->snachandler(sess, cur, rx, &snac, rx->data+10, rx->commandlen-10))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
95 return 1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
96
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
97 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
98
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
99 return 0;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
100 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
101
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
102 static int consumenonsnac(struct aim_session_t *sess, struct command_rx_struct *rx, unsigned short family, unsigned short subtype)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
103 {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
104 aim_module_t *cur;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
105 aim_modsnac_t snac;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
106
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
107 snac.family = family;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
108 snac.subtype = subtype;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
109 snac.flags = snac.id = 0;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
110
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
111 for (cur = (aim_module_t *)sess->modlistv; cur; cur = cur->next) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
112
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
113 if (!(cur->flags & AIM_MODFLAG_MULTIFAMILY) &&
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
114 (cur->family != snac.family))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
115 continue;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
116
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
117 if (cur->snachandler(sess, cur, rx, &snac, rx->data, rx->commandlen))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
118 return 1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
119
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
120 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
121
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
122 return 0;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
123 }
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
124
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126 * Bleck functions get called when there's no non-bleck functions
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 * around to cleanup the mess...
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 faim_internal int bleck(struct aim_session_t *sess,struct command_rx_struct *workingPtr, ...)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 u_short family;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 u_short subtype;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 u_short maxf;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135 u_short maxs;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
136
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137 /* XXX: this is ugly. and big just for debugging. */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 char *literals[14][25] = {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139 {"Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 NULL
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142 {"General",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 "Client Ready",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 "Server Ready",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 "Service Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 "Redirect",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 "Rate Information Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150 "Rate Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 "Rate Information Ack",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 NULL,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153 "Rate Information Change",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 "Server Pause",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155 NULL,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 "Server Resume",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 "Request Personal User Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 "Personal User Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159 "Evil Notification",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 NULL,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 "Migration notice",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 "Message of the Day",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163 "Set Privacy Flags",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 "Well Known URL",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165 "NOP"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167 {"Location",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170 "Request Rights",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 "Rights Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172 "Set user information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
173 "Request User Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174 "User Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175 "Watcher Sub Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 "Watcher Notification"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 {"Buddy List Management",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 "Request Rights",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 "Rights Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 "Add Buddy",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 "Remove Buddy",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 "Watcher List Query",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 "Watcher List Response",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 "Watcher SubRequest",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 "Watcher Notification",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 "Reject Notification",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 "Oncoming Buddy",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 "Offgoing Buddy"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 {"Messeging",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 "Add ICBM Parameter",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 "Remove ICBM Parameter",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 "Request Parameter Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 "Parameter Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 "Outgoing Message",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 "Incoming Message",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 "Evil Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 "Evil Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 "Missed Calls",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 "Message Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 "Host Ack"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 {"Advertisements",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 "Request Ad",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 "Ad Data (GIFs)"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 {"Invitation / Client-to-Client",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 "Invite a Friend",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 "Invitation Ack"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 {"Administrative",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 "Information Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 "Information Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 "Information Change Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 "Information Chat Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 "Account Confirm Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 "Account Confirm Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229 "Account Delete Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 "Account Delete Reply"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
231 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232 {"Popups",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
233 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235 "Display Popup"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
237 {"BOS",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
238 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
239 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240 "Request Rights",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
241 "Rights Response",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242 "Set group permission mask",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243 "Add permission list entries",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244 "Delete permission list entries",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245 "Add deny list entries",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
246 "Delete deny list entries",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 "Server Error"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249 {"User Lookup",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
251 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
252 "Search Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253 "Search Response"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
254 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
255 {"Stats",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
258 "Set minimum report interval",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 "Report Events"
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 {"Translate",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264 "Translate Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265 "Translate Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
266 },
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
267 {"Chat Navigation",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 "Invalid",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 "Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270 "Request rights",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271 "Request Exchange Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272 "Request Room Information",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273 "Request Occupant List",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
274 "Search for Room",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
275 "Outgoing Message",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
276 "Incoming Message",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277 "Evil Request",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 "Evil Reply",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279 "Chat Error",
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281 };
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
282
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283 maxf = sizeof(literals) / sizeof(literals[0]);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284 maxs = sizeof(literals[0]) / sizeof(literals[0][0]);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286 family = aimutil_get16(workingPtr->data+0);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
287 subtype= aimutil_get16(workingPtr->data+2);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
289 if((family < maxf) && (subtype+1 < maxs) && (literals[family][subtype] != NULL))
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 faimdprintf(sess, 0, "bleck: null handler for %04x/%04x (%s)\n", family, subtype, literals[family][subtype+1]);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 else
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
292 faimdprintf(sess, 0, "bleck: null handler for %04x/%04x (no literal)\n",family,subtype);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294 return 1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
296
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297 faim_export int aim_conn_addhandler(struct aim_session_t *sess,
1839
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
298 struct aim_conn_t *conn,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
299 u_short family,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
300 u_short type,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
301 aim_rxcallback_t newhandler,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
302 u_short flags)
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 struct aim_rxcblist_t *newcb;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
305
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 if (!conn)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307 return -1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
309 faimdprintf(sess, 1, "aim_conn_addhandler: adding for %04x/%04x\n", family, type);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311 if (!(newcb = (struct aim_rxcblist_t *)calloc(1, sizeof(struct aim_rxcblist_t))))
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 return -1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 newcb->family = family;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
314 newcb->type = type;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
315 newcb->flags = flags;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 if (!newhandler)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317 newcb->handler = &bleck;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
318 else
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
319 newcb->handler = newhandler;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
320 newcb->next = NULL;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
321
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
322 if (!conn->handlerlist)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
323 conn->handlerlist = newcb;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324 else {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
325 struct aim_rxcblist_t *cur;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
326
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
327 cur = conn->handlerlist;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
328
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
329 while (cur->next)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
330 cur = cur->next;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
331 cur->next = newcb;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
334 return 0;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
335 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
336
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337 faim_export int aim_clearhandlers(struct aim_conn_t *conn)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
339 struct aim_rxcblist_t *cur;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
340
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
341 if (!conn)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
342 return -1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
343
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
344 for (cur = conn->handlerlist; cur; ) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345 struct aim_rxcblist_t *tmp;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 tmp = cur->next;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
348 free(cur);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
349 cur = tmp;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
351 conn->handlerlist = NULL;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
352
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
353 return 0;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
354 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
355
1839
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
356 faim_internal aim_rxcallback_t aim_callhandler(struct aim_session_t *sess,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
357 struct aim_conn_t *conn,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
358 unsigned short family,
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
359 unsigned short type)
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 struct aim_rxcblist_t *cur;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
362
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363 if (!conn)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
364 return NULL;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
365
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
366 faimdprintf(sess, 1, "aim_callhandler: calling for %04x/%04x\n", family, type);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
368 for (cur = conn->handlerlist; cur; cur = cur->next) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
369 if ((cur->family == family) && (cur->type == type))
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370 return cur->handler;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
371 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
372
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
373 if (type == AIM_CB_SPECIAL_DEFAULT) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
374 faimdprintf(sess, 1, "aim_callhandler: no default handler for family 0x%04x\n", family);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
375 return NULL; /* prevent infinite recursion */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
376 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
377
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
378 faimdprintf(sess, 1, "aim_callhandler: no handler for 0x%04x/0x%04x\n", family, type);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
379
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
380 return aim_callhandler(sess, conn, family, AIM_CB_SPECIAL_DEFAULT);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
381 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
382
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
383 faim_internal int aim_callhandler_noparam(struct aim_session_t *sess,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
384 struct aim_conn_t *conn,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
385 u_short family,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
386 u_short type,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
387 struct command_rx_struct *ptr)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388 {
1839
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
389 aim_rxcallback_t userfunc = NULL;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
390 userfunc = aim_callhandler(sess, conn, family, type);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391 if (userfunc)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
392 return userfunc(sess, ptr);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
393 return 1; /* XXX */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
394 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
395
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
396 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
397 aim_rxdispatch()
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
398
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
399 Basically, heres what this should do:
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 1) Determine correct packet handler for this packet
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401 2) Mark the packet handled (so it can be dequeued in purge_queue())
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
402 3) Send the packet to the packet handler
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
403 4) Go to next packet in the queue and start over
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404 5) When done, run purge_queue() to purge handled commands
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
406 Note that any unhandlable packets should probably be left in the
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 queue. This is the best way to prevent data loss. This means
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
408 that a single packet may get looked at by this function multiple
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
409 times. This is more good than bad! This behavior may change.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
410
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
411 Aren't queue's fun?
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
412
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
413 TODO: Get rid of all the ugly if's.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
414 TODO: Clean up.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
415 TODO: More support for mid-level handlers.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416 TODO: Allow for NULL handlers.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
417
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
418 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
419 faim_export int aim_rxdispatch(struct aim_session_t *sess)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
420 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
421 int i = 0;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
422 struct command_rx_struct *workingPtr = NULL;
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
423 static int critical = 0;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
424
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
425 if (critical)
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
426 return 0; /* don't call recursively! */
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
427
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
428 critical = 1;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
429
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
430 if (sess->queue_incoming == NULL) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 faimdprintf(sess, 1, "parse_generic: incoming packet queue empty.\n");
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
432 } else {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
433 workingPtr = sess->queue_incoming;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434 for (i = 0; workingPtr != NULL; workingPtr = workingPtr->next, i++) {
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
435 unsigned short family,subtype;
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
436
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
437 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
438 * XXX: This is still fairly ugly.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
439 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
440 if (workingPtr->handled)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
441 continue;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
442
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
443 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
444 * This is a debugging/sanity check only and probably could/should be removed
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
445 * for stable code.
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447 if (((workingPtr->hdrtype == AIM_FRAMETYPE_OFT) &&
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
448 (workingPtr->conn->type != AIM_CONN_TYPE_RENDEZVOUS)) ||
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
449 ((workingPtr->hdrtype == AIM_FRAMETYPE_OSCAR) &&
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
450 (workingPtr->conn->type == AIM_CONN_TYPE_RENDEZVOUS))) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451 faimdprintf(sess, 0, "rxhandlers: incompatible frame type %d on connection type 0x%04x\n", workingPtr->hdrtype, workingPtr->conn->type);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 workingPtr->handled = 1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
453 continue;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
454 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
456 if (workingPtr->conn->type == AIM_CONN_TYPE_RENDEZVOUS) {
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
457 /* make sure that we only get OFT frames on these connections */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
458 if (workingPtr->hdrtype != AIM_FRAMETYPE_OFT) {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
459 faimdprintf(sess, 0, "internal error: non-OFT frames on OFT connection\n");
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
460 workingPtr->handled = 1; /* get rid of it */
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
461 } else {
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
462 /* XXX: implement this */
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
463 faimdprintf(sess, 0, "faim: OFT frame!\n");
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
464 workingPtr->handled = 1; /* get rid of it */
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
465 }
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
466 continue;
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
467 }
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
468
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
469 if (workingPtr->conn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) {
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
470 /* not possible */
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
471 faimdprintf(sess, 0, "rxdispatch called on RENDEZVOUS_OUT connection!\n");
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
472 workingPtr->handled = 1;
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
473 continue;
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
474 }
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
475
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
476 if ((workingPtr->commandlen == 4) &&
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
477 (aimutil_get32(workingPtr->data) == 0x00000001)) {
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
478 workingPtr->handled = aim_callhandler_noparam(sess, workingPtr->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_FLAPVER, workingPtr);
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
479 continue;
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
480 }
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
481
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
482 if (workingPtr->hdr.oscar.type == 0x04) {
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
483 workingPtr->handled = aim_negchan_middle(sess, workingPtr);
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
484 continue;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
485 }
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
486
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
487 if ((workingPtr->handled = consumesnac(sess, workingPtr)))
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
488 continue;
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
489
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
490 if (!workingPtr->handled) {
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
491 family = aimutil_get16(workingPtr->data);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
492 subtype = aimutil_get16(workingPtr->data+2);
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
493
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
494 faimdprintf(sess, 1, "warning: unhandled packet %04x/%04x\n", family, subtype);
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
495 consumenonsnac(sess, workingPtr, 0xffff, 0xffff); /* last chance! */
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
496 workingPtr->handled = 1;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
497 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
498 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
499 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
500
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
501 /*
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
502 * This doesn't have to be called here. It could easily be done
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
503 * by a seperate thread or something. It's an administrative operation,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
504 * and can take a while. Though the less you call it the less memory
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
505 * you'll have :)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
506 */
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
507 aim_purge_rxqueue(sess);
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
508
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
509 critical = 0;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
510
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
511 return 0;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
512 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
513
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
514 faim_internal int aim_parse_unknown(struct aim_session_t *sess,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
515 struct command_rx_struct *command, ...)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
516 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
517 u_int i = 0;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
518
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
519 if (!sess || !command)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
520 return 1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
521
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
522 faimdprintf(sess, 1, "\nRecieved unknown packet:");
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
523
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
524 for (i = 0; i < command->commandlen; i++)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
525 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
526 if ((i % 8) == 0)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
527 faimdprintf(sess, 1, "\n\t");
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
528
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
529 faimdprintf(sess, 1, "0x%2x ", command->data[i]);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
530 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
531
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
532 faimdprintf(sess, 1, "\n\n");
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
533
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
534 return 1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
535 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
536
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
537
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
538 faim_internal int aim_negchan_middle(struct aim_session_t *sess,
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
539 struct command_rx_struct *command)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
540 {
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
541 struct aim_tlvlist_t *tlvlist;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
542 char *msg = NULL;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
543 unsigned short code = 0;
1839
8ccb8f83aaab [gaim-migrate @ 1849]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1649
diff changeset
544 aim_rxcallback_t userfunc = NULL;
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
545 int ret = 1;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
546
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
547 /* Used only by the older login protocol */
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
548 /* XXX remove this special case? */
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
549 if (command->conn->type == AIM_CONN_TYPE_AUTH)
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
550 return consumenonsnac(sess, command, 0x0017, 0x0003);
1612
7ce787de8185 [gaim-migrate @ 1622]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1535
diff changeset
551
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
552 tlvlist = aim_readtlvchain(command->data, command->commandlen);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
553
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
554 if (aim_gettlv(tlvlist, 0x0009, 1))
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555 code = aim_gettlv16(tlvlist, 0x0009, 1);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
556
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
557 if (aim_gettlv(tlvlist, 0x000b, 1))
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
558 msg = aim_gettlv_str(tlvlist, 0x000b, 1);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
559
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
560 if ((userfunc = aim_callhandler(sess, command->conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNERR)))
1649
f1e75c7ad28c [gaim-migrate @ 1659]
Adam Fritzler <mid@auk.cx>
parents: 1612
diff changeset
561 ret = userfunc(sess, command, code, msg);
1535
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
562
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
563 aim_freetlvchain(&tlvlist);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
564
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
565 if (msg)
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
566 free(msg);
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
567
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
568 return ret;
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
569 }
b118fbab0556 [gaim-migrate @ 1545]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
570

mercurial