src/protocols/oscar/im.c

Tue, 31 Dec 2002 02:27:21 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 31 Dec 2002 02:27:21 +0000
changeset 4154
e1c6a1bdcf5a
parent 4102
06290da3f88d
child 4173
e2528bd24e6f
permissions
-rw-r--r--

[gaim-migrate @ 4382]
The buddy pounce thing bothered me.

The oscar changes are basically nothing. I just like things to be clean.

By the way, if you know of any projects using libfaim other than fire,
please let me know. I'm muy muy curious. Messa Jar Jar Binks. I guess
emailing me at mark@kingant.net is the most effective way.

Squiggle squiggle

2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2 * Family 0x0004 - Routines for sending/receiving Instant Messages.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
4 * Note the term ICBM (Inter-Client Basic Message) which blankets
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
5 * all types of genericly routed through-server messages. Within
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
6 * the ICBM types (family 4), a channel is defined. Each channel
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
7 * represents a different type of message. Channel 1 is used for
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
8 * what would commonly be called an "instant message". Channel 2
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
9 * is used for negotiating "rendezvous". These transactions end in
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
10 * something more complex happening, such as a chat invitation, or
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
11 * a file transfer. Channel 3 is used for chat messages (not in
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
12 * the same family as these channels). Channel 4 is used for
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
13 * various ICQ messages. Examples are normal messages, URLs, and
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
14 * old-style authorization.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
15 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
16 * In addition to the channel, every ICBM contains a cookie. For
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
17 * standard IMs, these are only used for error messages. However,
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
18 * the more complex rendezvous messages make suitably more complex
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
19 * use of this field.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
20 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 #define FAIM_INTERNAL
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 #include <aim.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
26 #ifdef _WIN32
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
27 #include "win32dep.h"
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
28 #endif
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
29
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 * Takes a msghdr (and a length) and returns a client type
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 * code. Note that this is *only a guess* and has a low likelihood
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 * of actually being accurate.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 * Its based on experimental data, with the help of Eric Warmenhoven
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 * who seems to have collected a wide variety of different AIM clients.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 * Heres the current collection:
4102
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
40 * 0501 0003 0101 0101 01 AOL Mobile Communicator, WinAIM 1.0.414
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
41 * 0501 0003 0101 0201 01 WinAIM 2.0.847, 2.1.1187, 3.0.1464,
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
42 * 4.3.2229, 4.4.2286
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
43 * 0501 0004 0101 0102 0101 WinAIM 4.1.2010, libfaim (right here)
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
44 * 0501 0003 0101 02 WinAIM 5
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
45 * 0501 0001 01 iChat x.x
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
46 * 0501 0001 0101 01 AOL v6.0, CompuServe 2000 v6.0, any
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
47 * TOC client
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 4076
diff changeset
48 * 0501 0002 0106 WinICQ 5.45.1.3777.85
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
49 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
50 * Note that in this function, only the feature bytes are tested, since
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
51 * the rest will always be the same.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
52 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
54 faim_export fu16_t aim_fingerprintclient(fu8_t *msghdr, int len)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
56 static const struct {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
57 fu16_t clientid;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
58 int len;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
59 fu8_t data[10];
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
60 } fingerprints[] = {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
61 /* AOL Mobile Communicator, WinAIM 1.0.414 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
62 { AIM_CLIENTTYPE_MC,
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
63 3, {0x01, 0x01, 0x01}},
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
65 /* WinAIM 2.0.847, 2.1.1187, 3.0.1464, 4.3.2229, 4.4.2286 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
66 { AIM_CLIENTTYPE_WINAIM,
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
67 3, {0x01, 0x01, 0x02}},
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
69 /* WinAIM 4.1.2010, libfaim */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
70 { AIM_CLIENTTYPE_WINAIM41,
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
71 4, {0x01, 0x01, 0x01, 0x02}},
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
73 /* AOL v6.0, CompuServe 2000 v6.0, any TOC client */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
74 { AIM_CLIENTTYPE_AOL_TOC,
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
75 1, {0x01}},
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
77 { 0, 0}
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
78 };
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
79 int i;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
81 if (!msghdr || (len <= 0))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
82 return AIM_CLIENTTYPE_UNKNOWN;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
84 for (i = 0; fingerprints[i].len; i++) {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
85 if (fingerprints[i].len != len)
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
86 continue;
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
87 if (memcmp(fingerprints[i].data, msghdr, fingerprints[i].len) == 0)
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
88 return fingerprints[i].clientid;
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
89 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
91 return AIM_CLIENTTYPE_UNKNOWN;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
94 /*
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
95 * Subtype 0x0002
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
96 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
97 * I definitly recommend sending this. If you don't, you'll be stuck
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
98 * with the rather unreasonable defaults. You don't want those. Send this.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
99 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
100 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
101 faim_export int aim_seticbmparam(aim_session_t *sess, struct aim_icbmparameters *params)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
102 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
103 aim_conn_t *conn;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
104 aim_frame_t *fr;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
105 aim_snacid_t snacid;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
106
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
107 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
108 return -EINVAL;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
109
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
110 if (!params)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
111 return -EINVAL;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
112
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
113 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+16)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
114 return -ENOMEM;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
115
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
116 snacid = aim_cachesnac(sess, 0x0004, 0x0002, 0x0000, NULL, 0);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
117 aim_putsnac(&fr->data, 0x0004, 0x0002, 0x0000, snacid);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
118
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
119 /* This is read-only (see Parameter Reply). Must be set to zero here. */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
120 aimbs_put16(&fr->data, 0x0000);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
121
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
122 /* These are all read-write */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
123 aimbs_put32(&fr->data, params->flags);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
124 aimbs_put16(&fr->data, params->maxmsglen);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
125 aimbs_put16(&fr->data, params->maxsenderwarn);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
126 aimbs_put16(&fr->data, params->maxrecverwarn);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
127 aimbs_put32(&fr->data, params->minmsginterval);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
128
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
129 aim_tx_enqueue(sess, fr);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
130
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
131 return 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
132 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
133
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
134 /* Subtype 0x0004 - Request ICBM parameter information. */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
135 faim_export int aim_reqicbmparams(aim_session_t *sess)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
136 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
137 aim_conn_t *conn;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
138
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
139 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
140 return -EINVAL;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
141
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
142 return aim_genericreq_n(sess, conn, 0x0004, 0x0004);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
143 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
144
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
145 /* Subtype 0x0005 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
146 static int paraminfo(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
147 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
148 struct aim_icbmparameters params;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
149 aim_rxcallback_t userfunc;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
150
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
151 params.maxchan = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
152 params.flags = aimbs_get32(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
153 params.maxmsglen = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
154 params.maxsenderwarn = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
155 params.maxrecverwarn = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
156 params.minmsginterval = aimbs_get32(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
157
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
158 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
159 return userfunc(sess, rx, &params);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
160
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
161 return 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
162 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
163
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 /* This should be endian-safe now... but who knows... */
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
165 faim_export fu16_t aim_iconsum(const fu8_t *buf, int buflen)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
167 fu32_t sum;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
168 int i;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169
2639
d746bc004f2f [gaim-migrate @ 2652]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2626
diff changeset
170 for (i = 0, sum = 0; i + 1 < buflen; i += 2)
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
171 sum += (buf[i+1] << 8) + buf[i];
2639
d746bc004f2f [gaim-migrate @ 2652]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2626
diff changeset
172 if (i < buflen)
d746bc004f2f [gaim-migrate @ 2652]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2626
diff changeset
173 sum += buf[i];
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
175 sum = ((sum & 0xffff0000) >> 16) + (sum & 0x0000ffff);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
177 return (fu16_t)sum;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
181 * Subtype 0x0006 - Send an ICBM (instant message).
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 * Possible flags:
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 * AIM_IMFLAGS_AWAY -- Marks the message as an autoresponse
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 * AIM_IMFLAGS_ACK -- Requests that the server send an ack
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 * when the message is received (of type 0x0004/0x000c)
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
188 * AIM_IMFLAGS_OFFLINE--If destination is offline, store it until they are
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
189 * online (probably ICQ only).
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 * AIM_IMFLAGS_UNICODE--Instead of ASCII7, the passed message is
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191 * made up of UNICODE duples. If you set
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
192 * this, you'd better be damn sure you know
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193 * what you're doing.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 * AIM_IMFLAGS_ISO_8859_1 -- The message contains the ASCII8 subset
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 * known as ISO-8859-1.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 * Generally, you should use the lowest encoding possible to send
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198 * your message. If you only use basic punctuation and the generic
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 * Latin alphabet, use ASCII7 (no flags). If you happen to use non-ASCII7
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 * characters, but they are all clearly defined in ISO-8859-1, then
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 * use that. Keep in mind that not all characters in the PC ASCII8
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 * character set are defined in the ISO standard. For those cases (most
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 * notably when the (r) symbol is used), you must use the full UNICODE
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 * encoding for your message. In UNICODE mode, _all_ characters must
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 * occupy 16bits, including ones that are not special. (Remember that
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 * the first 128 UNICODE symbols are equivelent to ASCII7, however they
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 * must be prefixed with a zero high order byte.)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 * I strongly discourage the use of UNICODE mode, mainly because none
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 * of the clients I use can parse those messages (and besides that,
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 * wchars are difficult and non-portable to handle in most UNIX environments).
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 * If you really need to include special characters, use the HTML UNICODE
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 * entities. These are of the form &#2026; where 2026 is the hex
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 * representation of the UNICODE index (in this case, UNICODE
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 * "Horizontal Ellipsis", or 133 in in ASCII8).
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 *
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
217 * Implementation note: Since this is one of the most-used functions
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
218 * in all of libfaim, it is written with performance in mind. As such,
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
219 * it is not as clear as it could be in respect to how this message is
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
220 * supposed to be layed out. Most obviously, tlvlists should be used
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
221 * instead of writing out the bytes manually.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
222 *
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
223 * XXX more precise verification that we never send SNACs larger than 8192
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
224 * XXX check SNAC size for multipart
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
225 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 */
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
227 faim_export int aim_send_im_ext(aim_session_t *sess, struct aim_sendimext_args *args)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
229 static const fu8_t deffeatures[] = {
2315
ddf565f13b41 [gaim-migrate @ 2325]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2270
diff changeset
230 0x01, 0x01, 0x01, 0x02
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
231 };
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
232 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
233 int i, msgtlvlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
234 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
235 aim_snacid_t snacid;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
237 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
238 return -EINVAL;
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
239
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
240 if (!args)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
241 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
243 if (args->flags & AIM_IMFLAGS_MULTIPART) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
244 if (args->mpmsg->numparts <= 0)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
245 return -EINVAL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
246 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
247 if (!args->msg || (args->msglen <= 0))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
248 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
250 if (args->msglen >= MAXMSGLEN)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
251 return -E2BIG;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
252 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
253
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
254 /* Painfully calculate the size of the message TLV */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
255 msgtlvlen = 1 + 1; /* 0501 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
257 if (args->flags & AIM_IMFLAGS_CUSTOMFEATURES)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
258 msgtlvlen += 2 + args->featureslen;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
259 else
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
260 msgtlvlen += 2 + sizeof(deffeatures);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
261
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
262 if (args->flags & AIM_IMFLAGS_MULTIPART) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
263 aim_mpmsg_section_t *sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
264
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
265 for (sec = args->mpmsg->parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
266 msgtlvlen += 2 /* 0101 */ + 2 /* block len */;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
267 msgtlvlen += 4 /* charset */ + sec->datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
268 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
269
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
270 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
271 msgtlvlen += 2 /* 0101 */ + 2 /* block len */;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
272 msgtlvlen += 4 /* charset */ + args->msglen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
273 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
274
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
275 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, msgtlvlen+128)))
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
276 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
278 /* XXX should be optional */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
279 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, args->destsn, strlen(args->destsn)+1);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
280 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
282 /*
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
283 * Generate a random message cookie
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
284 *
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
285 * We could cache these like we do SNAC IDs. (In fact, it
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
286 * might be a good idea.) In the message error functions,
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
287 * the 8byte message cookie is returned as well as the
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
288 * SNAC ID.
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
289 *
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
290 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
291 for (i = 0; i < 8; i++)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
292 aimbs_put8(&fr->data, (fu8_t) rand());
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
294 /*
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
295 * Channel ID
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
296 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
297 aimbs_put16(&fr->data, 0x0001);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
298
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
299 /*
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
300 * Destination SN (prepended with byte length)
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
301 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
302 aimbs_put8(&fr->data, strlen(args->destsn));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
303 aimbs_putraw(&fr->data, args->destsn, strlen(args->destsn));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
305 /*
2751
5fb4985cb441 [gaim-migrate @ 2764]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2717
diff changeset
306 * Message TLV (type 2).
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
307 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
308 aimbs_put16(&fr->data, 0x0002);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
309 aimbs_put16(&fr->data, msgtlvlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
311 /*
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
312 * Features
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
313 *
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
314 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
315 aimbs_put8(&fr->data, 0x05);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
316 aimbs_put8(&fr->data, 0x01);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
318 if (args->flags & AIM_IMFLAGS_CUSTOMFEATURES) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
319 aimbs_put16(&fr->data, args->featureslen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
320 aimbs_putraw(&fr->data, args->features, args->featureslen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
321 } else {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
322 aimbs_put16(&fr->data, sizeof(deffeatures));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
323 aimbs_putraw(&fr->data, deffeatures, sizeof(deffeatures));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
324 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
325
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
326 if (args->flags & AIM_IMFLAGS_MULTIPART) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
327 aim_mpmsg_section_t *sec;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
328
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
329 for (sec = args->mpmsg->parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
330 aimbs_put16(&fr->data, 0x0101);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
331 aimbs_put16(&fr->data, sec->datalen + 4);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
332 aimbs_put16(&fr->data, sec->charset);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
333 aimbs_put16(&fr->data, sec->charsubset);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
334 aimbs_putraw(&fr->data, sec->data, sec->datalen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
335 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
336
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
337 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
338
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
339 aimbs_put16(&fr->data, 0x0101);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
340
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
341 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
342 * Message block length.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
343 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
344 aimbs_put16(&fr->data, args->msglen + 0x04);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
346 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
347 * Character set.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
348 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
349 if (args->flags & AIM_IMFLAGS_CUSTOMCHARSET) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
350
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
351 aimbs_put16(&fr->data, args->charset);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
352 aimbs_put16(&fr->data, args->charsubset);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
353
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
354 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
355 if (args->flags & AIM_IMFLAGS_UNICODE)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
356 aimbs_put16(&fr->data, 0x0002);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
357 else if (args->flags & AIM_IMFLAGS_ISO_8859_1)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
358 aimbs_put16(&fr->data, 0x0003);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
359 else
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
360 aimbs_put16(&fr->data, 0x0000);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
362 aimbs_put16(&fr->data, 0x0000);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
363 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
364
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
365 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
366 * Message. Not terminated.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
367 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
368 aimbs_putraw(&fr->data, args->msg, args->msglen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
369 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
371 /*
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
372 * Set the Request Acknowledge flag.
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
373 */
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
374 if (args->flags & AIM_IMFLAGS_ACK) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
375 aimbs_put16(&fr->data, 0x0003);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
376 aimbs_put16(&fr->data, 0x0000);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
377 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
378
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
379 /*
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
380 * Set the Autoresponse flag.
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
381 */
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
382 if (args->flags & AIM_IMFLAGS_AWAY) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
383 aimbs_put16(&fr->data, 0x0004);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
384 aimbs_put16(&fr->data, 0x0000);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
385 }
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
386
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
387 if (args->flags & AIM_IMFLAGS_OFFLINE) {
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
388 aimbs_put16(&fr->data, 0x0006);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
389 aimbs_put16(&fr->data, 0x0000);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
390 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
392 /*
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
393 * Set the I HAVE A REALLY PURTY ICON flag.
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
394 * XXX - This should really only be sent on initial
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
395 * IMs and when you change your icon.
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
396 */
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
397 if (args->flags & AIM_IMFLAGS_HASICON) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
398 aimbs_put16(&fr->data, 0x0008);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
399 aimbs_put16(&fr->data, 0x000c);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
400 aimbs_put32(&fr->data, args->iconlen);
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
401 aimbs_put16(&fr->data, 0x0001);
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
402 aimbs_put16(&fr->data, args->iconsum);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
403 aimbs_put32(&fr->data, args->iconstamp);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
404 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
406 /*
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
407 * Set the Buddy Icon Requested flag.
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
408 * XXX - Everytime? Surely not...
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
409 */
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
410 if (args->flags & AIM_IMFLAGS_BUDDYREQ) {
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
411 aimbs_put16(&fr->data, 0x0009);
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
412 aimbs_put16(&fr->data, 0x0000);
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
413 }
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
414
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
415 aim_tx_enqueue(sess, fr);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416
2751
5fb4985cb441 [gaim-migrate @ 2764]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2717
diff changeset
417 if (!(sess->flags & AIM_SESS_FLAGS_DONTTIMEOUTONICBM))
5fb4985cb441 [gaim-migrate @ 2764]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2717
diff changeset
418 aim_cleansnacs(sess, 60); /* clean out SNACs over 60sec old */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
419
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
420 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
421 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
422
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
423 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
424 * Simple wrapper for aim_send_im_ext()
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
425 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
426 * You cannot use aim_send_im if you need the HASICON flag. You must
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
427 * use aim_send_im_ext directly for that.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
428 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
429 * aim_send_im also cannot be used if you require UNICODE messages, because
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
430 * that requires an explicit message length. Use aim_send_im_ext().
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
432 */
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
433 faim_export int aim_send_im(aim_session_t *sess, const char *destsn, fu16_t flags, const char *msg)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434 {
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
435 struct aim_sendimext_args args;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
436
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
437 args.destsn = destsn;
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
438 args.flags = flags;
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
439 args.msg = msg;
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
440 args.msglen = strlen(msg);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
441
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
442 /* Make these don't get set by accident -- they need aim_send_im_ext */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
443 args.flags &= ~(AIM_IMFLAGS_CUSTOMFEATURES | AIM_IMFLAGS_HASICON | AIM_IMFLAGS_MULTIPART);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
444
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
445 return aim_send_im_ext(sess, &args);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
448 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
449 * Subtype 0x0006
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
450 *
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
451 * This is also performance sensitive. (If you can believe it...)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
452 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
453 */
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
454 faim_export int aim_send_icon(aim_session_t *sess, const char *sn, const fu8_t *icon, int iconlen, time_t stamp, fu16_t iconsum)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455 {
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
456 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
457 int i;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
458 fu8_t ck[8];
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
459 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
460 aim_snacid_t snacid;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
462 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
463 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
465 if (!sn || !icon || (iconlen <= 0) || (iconlen >= MAXICONLEN))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
466 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
467
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
468 for (i = 0; i < 8; i++)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
469 aimutil_put8(ck+i, (fu8_t) rand());
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
470
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
471 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+8+2+1+strlen(sn)+2+2+2+8+16+2+2+2+2+2+2+2+4+4+4+iconlen+strlen(AIM_ICONIDENT)+2+2)))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
472 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
474 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
475 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
476
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
477 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
478 * Cookie
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
479 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
480 aimbs_putraw(&fr->data, ck, 8);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
481
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
482 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
483 * Channel (2)
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
484 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
485 aimbs_put16(&fr->data, 0x0002);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
486
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
487 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
488 * Dest sn
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
489 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
490 aimbs_put8(&fr->data, strlen(sn));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
491 aimbs_putraw(&fr->data, sn, strlen(sn));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
492
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
493 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
494 * TLV t(0005)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
495 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
496 * Encompasses everything below.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
497 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
498 aimbs_put16(&fr->data, 0x0005);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
499 aimbs_put16(&fr->data, 2+8+16+6+4+4+iconlen+4+4+4+strlen(AIM_ICONIDENT));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
500
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
501 aimbs_put16(&fr->data, 0x0000);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
502 aimbs_putraw(&fr->data, ck, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
503 aim_putcap(&fr->data, AIM_CAPS_BUDDYICON);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
504
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
505 /* TLV t(000a) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
506 aimbs_put16(&fr->data, 0x000a);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
507 aimbs_put16(&fr->data, 0x0002);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
508 aimbs_put16(&fr->data, 0x0001);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
509
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
510 /* TLV t(000f) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
511 aimbs_put16(&fr->data, 0x000f);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
512 aimbs_put16(&fr->data, 0x0000);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
513
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
514 /* TLV t(2711) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
515 aimbs_put16(&fr->data, 0x2711);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
516 aimbs_put16(&fr->data, 4+4+4+iconlen+strlen(AIM_ICONIDENT));
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
517 aimbs_put16(&fr->data, 0x0000);
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
518 aimbs_put16(&fr->data, iconsum);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
519 aimbs_put32(&fr->data, iconlen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
520 aimbs_put32(&fr->data, stamp);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
521 aimbs_putraw(&fr->data, icon, iconlen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
522 aimbs_putraw(&fr->data, AIM_ICONIDENT, strlen(AIM_ICONIDENT));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
523
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
524 /* TLV t(0003) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
525 aimbs_put16(&fr->data, 0x0003);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
526 aimbs_put16(&fr->data, 0x0000);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
527
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
528 aim_tx_enqueue(sess, fr);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
529
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
530 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
531 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
532
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
533 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
534 * Subtype 0x0006
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
535 *
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
536 * This only works for ICQ 2001b (thats 2001 not 2000). Better, only
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
537 * send it to clients advertising the RTF capability. In fact, if you send
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
538 * it to a client that doesn't support that capability, the server will gladly
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
539 * bounce it back to you.
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
540 *
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
541 * You'd think this would be in icq.c, but, well, I'm trying to stick with
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
542 * the one-group-per-file scheme as much as possible. This could easily
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
543 * be an exception, since Rendezvous IMs are external of the Oscar core,
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
544 * and therefore are undefined. Really I just need to think of a good way to
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
545 * make an interface similar to what AOL actually uses. But I'm not using COM.
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
546 *
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
547 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
548 faim_export int aim_send_rtfmsg(aim_session_t *sess, struct aim_sendrtfmsg_args *args)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
549 {
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
550 const char rtfcap[] = {"{97B12751-243C-4334-AD22-D6ABF73F1492}"}; /* AIM_CAPS_ICQRTF capability in string form */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
551 aim_conn_t *conn;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
552 int i;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
553 fu8_t ck[8];
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
554 aim_frame_t *fr;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
555 aim_snacid_t snacid;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
556 int servdatalen;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
557
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
558 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
559 return -EINVAL;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
560
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
561 if (!args || !args->destsn || !args->rtfmsg)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
562 return -EINVAL;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
563
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
564 servdatalen = 2+2+16+2+4+1+2 + 2+2+4+4+4 + 2+4+2+strlen(args->rtfmsg)+1 + 4+4+4+strlen(rtfcap)+1;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
565
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
566 for (i = 0; i < 8; i++)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
567 aimutil_put8(ck+i, (fu8_t) rand());
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
568
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
569 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+128+servdatalen)))
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
570 return -ENOMEM;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
571
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
572 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
573 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
574
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
575 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
576 * Cookie
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
577 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
578 aimbs_putraw(&fr->data, ck, 8);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
579
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
580 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
581 * Channel (2)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
582 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
583 aimbs_put16(&fr->data, 0x0002);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
584
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
585 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
586 * Dest sn
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
587 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
588 aimbs_put8(&fr->data, strlen(args->destsn));
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
589 aimbs_putraw(&fr->data, args->destsn, strlen(args->destsn));
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
590
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
591 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
592 * TLV t(0005)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
593 *
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
594 * Encompasses everything below.
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
595 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
596 aimbs_put16(&fr->data, 0x0005);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
597 aimbs_put16(&fr->data, 2+8+16 + 2+2+2 + 2+2 + 2+2+servdatalen);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
598
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
599 aimbs_put16(&fr->data, 0x0000);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
600 aimbs_putraw(&fr->data, ck, 8);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
601 aim_putcap(&fr->data, AIM_CAPS_ICQSERVERRELAY);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
602
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
603 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
604 * t(000a) l(0002) v(0001)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
605 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
606 aimbs_put16(&fr->data, 0x000a);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
607 aimbs_put16(&fr->data, 0x0002);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
608 aimbs_put16(&fr->data, 0x0001);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
609
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
610 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
611 * t(000f) l(0000) v()
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
612 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
613 aimbs_put16(&fr->data, 0x000f);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
614 aimbs_put16(&fr->data, 0x0000);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
615
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
616 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
617 * Service Data TLV
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
618 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
619 aimbs_put16(&fr->data, 0x2711);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
620 aimbs_put16(&fr->data, servdatalen);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
621
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
622 aimbs_putle16(&fr->data, 11 + 16 /* 11 + (sizeof CLSID) */);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
623 aimbs_putle16(&fr->data, 9);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
624 aim_putcap(&fr->data, AIM_CAPS_EMPTY);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
625 aimbs_putle16(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
626 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
627 aimbs_putle8(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
628 aimbs_putle16(&fr->data, 0x03ea); /* trid1 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
629
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
630 aimbs_putle16(&fr->data, 14);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
631 aimbs_putle16(&fr->data, 0x03eb); /* trid2 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
632 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
633 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
634 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
635
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
636 aimbs_putle16(&fr->data, 0x0001);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
637 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
638 aimbs_putle16(&fr->data, strlen(args->rtfmsg)+1);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
639 aimbs_putraw(&fr->data, args->rtfmsg, strlen(args->rtfmsg)+1);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
640
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
641 aimbs_putle32(&fr->data, args->fgcolor);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
642 aimbs_putle32(&fr->data, args->bgcolor);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
643 aimbs_putle32(&fr->data, strlen(rtfcap)+1);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
644 aimbs_putraw(&fr->data, rtfcap, strlen(rtfcap)+1);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
645
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
646 aim_tx_enqueue(sess, fr);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
647
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
648 return 0;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
649 }
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
650
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
651 /* Subtype 0x0006 */
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
652 faim_internal int aim_request_directim(aim_session_t *sess, const char *destsn, fu8_t *ip, fu16_t port, fu8_t *ckret)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
653 {
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
654 aim_conn_t *conn;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
655 fu8_t ck[8];
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
656 aim_frame_t *fr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
657 aim_snacid_t snacid;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
658 aim_tlvlist_t *tl = NULL, *itl = NULL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
659 int hdrlen, i;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
660 fu8_t *hdr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
661 aim_bstream_t hdrbs;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
662
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
663 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
664 return -EINVAL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
665
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
666 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 256+strlen(destsn))))
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
667 return -ENOMEM;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
668
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
669 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
670 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
671
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
672 /*
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
673 * Generate a random message cookie
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
674 *
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
675 * This cookie needs to be alphanumeric and NULL-terminated to be
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
676 * TOC-compatible.
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
677 *
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
678 * XXX have I mentioned these should be generated in msgcookie.c?
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
679 *
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
680 */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
681 for (i = 0; i < 7; i++)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
682 ck[i] = 0x30 + ((fu8_t) rand() % 10);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
683 ck[7] = '\0';
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
684
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
685 if (ckret)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
686 memcpy(ckret, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
687
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
688 /* Cookie */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
689 aimbs_putraw(&fr->data, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
690
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
691 /* Channel */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
692 aimbs_put16(&fr->data, 0x0002);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
693
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
694 /* Destination SN */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
695 aimbs_put8(&fr->data, strlen(destsn));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
696 aimbs_putraw(&fr->data, destsn, strlen(destsn));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
697
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
698 aim_addtlvtochain_noval(&tl, 0x0003);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
699
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
700 hdrlen = 2+8+16+6+8+6+4;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
701 hdr = malloc(hdrlen);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
702 aim_bstream_init(&hdrbs, hdr, hdrlen);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
703
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
704 aimbs_put16(&hdrbs, 0x0000);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
705 aimbs_putraw(&hdrbs, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
706 aim_putcap(&hdrbs, AIM_CAPS_IMIMAGE);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
707
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
708 aim_addtlvtochain16(&itl, 0x000a, 0x0001);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
709 aim_addtlvtochain_raw(&itl, 0x0003, 4, ip);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
710 aim_addtlvtochain16(&itl, 0x0005, port);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
711 aim_addtlvtochain_noval(&itl, 0x000f);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
712
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
713 aim_writetlvchain(&hdrbs, &itl);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
714
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
715 aim_addtlvtochain_raw(&tl, 0x0005, aim_bstream_curpos(&hdrbs), hdr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
716
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
717 aim_writetlvchain(&fr->data, &tl);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
718
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
719 free(hdr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
720 aim_freetlvchain(&itl);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
721 aim_freetlvchain(&tl);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
722
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
723 aim_tx_enqueue(sess, fr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
724
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
725 return 0;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
726 }
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
727
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
728 /* Subtype 0x0006 */
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
729 faim_internal int aim_request_sendfile(aim_session_t *sess, const char *sn, const char *filename, fu16_t numfiles, fu32_t totsize, fu8_t *ip, fu16_t port, fu8_t *ckret)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
730 {
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
731 aim_conn_t *conn;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
732 int i;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
733 fu8_t ck[8];
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
734 aim_frame_t *fr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
735 aim_snacid_t snacid;
3752
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
736 struct aim_snac_destructor snacdest;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
737
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
738 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
739 return -EINVAL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
740
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
741 if (!sn || !filename)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
742 return -EINVAL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
743
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
744 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+8+2+1+strlen(sn)+2+2+2+8+16+6+8+6+4+2+2+2+2+4+strlen(filename)+4)))
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
745 return -ENOMEM;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
746
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
747 for (i = 0; i < 7; i++)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
748 aimutil_put8(ck+i, 0x30 + ((fu8_t) rand() % 10));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
749 ck[7] = '\0';
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
750
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
751 if (ckret)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
752 memcpy(ckret, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
753
3752
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
754 /* Fill in the snac destructor so we know if the request
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
755 * times out. Use the cookie in the data field, so we
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
756 * know what request to cancel if there is an error.
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
757 */
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
758 snacdest.data = malloc(8);
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
759 memcpy(snacdest.data, ck, 8);
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
760 snacdest.conn = conn;
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
761 snacid = aim_cachesnac(sess, 0x0004, 0x0006, AIM_SNACFLAGS_DESTRUCTOR, &snacdest, sizeof(snacdest));
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
762 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
763
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
764 /*
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
765 * Cookie
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
766 */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
767 aimbs_putraw(&fr->data, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
768
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
769 /*
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
770 * Channel (2)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
771 */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
772 aimbs_put16(&fr->data, 0x0002);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
773
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
774 /*
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
775 * Dest sn
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
776 */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
777 aimbs_put8(&fr->data, strlen(sn));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
778 aimbs_putraw(&fr->data, sn, strlen(sn));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
779
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
780 /*
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
781 * TLV t(0005)
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
782 *
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
783 * Encompasses everything below. Gee.
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
784 */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
785 aimbs_put16(&fr->data, 0x0005);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
786 aimbs_put16(&fr->data, 2+8+16+6+8+6+4+2+2+2+2+4+strlen(filename)+4);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
787
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
788 aimbs_put16(&fr->data, 0x0000);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
789 aimbs_putraw(&fr->data, ck, 8);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
790 aim_putcap(&fr->data, AIM_CAPS_SENDFILE);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
791
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
792 /* TLV t(000a) */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
793 aimbs_put16(&fr->data, 0x000a);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
794 aimbs_put16(&fr->data, 0x0002);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
795 aimbs_put16(&fr->data, 0x0001);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
796
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
797 /* TLV t(0003) (IP) */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
798 aimbs_put16(&fr->data, 0x0003);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
799 aimbs_put16(&fr->data, 0x0004);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
800 aimbs_putraw(&fr->data, ip, 4);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
801
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
802 /* TLV t(0005) (port) */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
803 aimbs_put16(&fr->data, 0x0005);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
804 aimbs_put16(&fr->data, 0x0002);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
805 aimbs_put16(&fr->data, port);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
806
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
807 /* TLV t(000f) */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
808 aimbs_put16(&fr->data, 0x000f);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
809 aimbs_put16(&fr->data, 0x0000);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
810
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
811 /* TLV t(2711) */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
812 aimbs_put16(&fr->data, 0x2711);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
813 aimbs_put16(&fr->data, 2+2+4+strlen(filename)+4);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
814
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
815 /* ? */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
816 aimbs_put16(&fr->data, (numfiles > 1) ? 0x0002 : 0x0001);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
817 aimbs_put16(&fr->data, numfiles);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
818 aimbs_put32(&fr->data, totsize);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
819 aimbs_putraw(&fr->data, filename, strlen(filename));
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
820
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
821 /* ? */
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
822 aimbs_put32(&fr->data, 0x00000000);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
823
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
824 #if 0
3752
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
825 /* Newer clients seem to send this (?) -- wtm */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
826 aimbs_put32(&fr->data, 0x00030000);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
827 #endif
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
828
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
829 aim_tx_enqueue(sess, fr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
830
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
831 return 0;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
832 }
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
833
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
834 /**
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
835 * Subtype 0x0006 - Request the status message of the given ICQ user.
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
836 *
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
837 * @param sess The oscar session.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
838 * @param sn The UIN of the user of whom you wish to request info.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
839 * @param type The type of info you wish to request. This should be the current
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
840 * state of the user, as one of the AIM_ICQ_STATE_* defines.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
841 * @return Return 0 if no errors, otherwise return the error number.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
842 */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
843 faim_export int aim_send_im_ch2_geticqmessage(aim_session_t *sess, const char *sn, int type)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
844 {
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
845 aim_conn_t *conn;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
846 int i;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
847 fu8_t ck[8];
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
848 aim_frame_t *fr;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
849 aim_snacid_t snacid;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
850
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
851 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)) || !sn)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
852 return -EINVAL;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
853
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
854 for (i = 0; i < 8; i++)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
855 aimutil_put8(ck+i, (fu8_t) rand());
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
856
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
857 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+8+2+1+strlen(sn) + 4+0x5e + 4)))
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
858 return -ENOMEM;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
859
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
860 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
861 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
862
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
863 /* Cookie */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
864 aimbs_putraw(&fr->data, ck, 8);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
865
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
866 /* Channel (2) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
867 aimbs_put16(&fr->data, 0x0002);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
868
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
869 /* Dest sn */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
870 aimbs_put8(&fr->data, strlen(sn));
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
871 aimbs_putraw(&fr->data, sn, strlen(sn));
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
872
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
873 /* TLV t(0005) - Encompasses almost everything below. */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
874 aimbs_put16(&fr->data, 0x0005); /* T */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
875 aimbs_put16(&fr->data, 0x005e); /* L */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
876 { /* V */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
877 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
878
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
879 /* Cookie */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
880 aimbs_putraw(&fr->data, ck, 8);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
881
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
882 /* Put the 16 byte server relay capability */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
883 aim_putcap(&fr->data, AIM_CAPS_ICQSERVERRELAY);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
884
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
885 /* TLV t(000a) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
886 aimbs_put16(&fr->data, 0x000a);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
887 aimbs_put16(&fr->data, 0x0002);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
888 aimbs_put16(&fr->data, 0x0001);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
889
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
890 /* TLV t(000f) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
891 aimbs_put16(&fr->data, 0x000f);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
892 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
893
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
894 /* TLV t(2711) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
895 aimbs_put16(&fr->data, 0x2711);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
896 aimbs_put16(&fr->data, 0x0036);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
897 { /* V */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
898 aimbs_putle16(&fr->data, 0x001b); /* L */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
899 aimbs_putle16(&fr->data, 0x0008); /* XXX - Protocol version */
4154
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
900 aim_putcap(&fr->data, AIM_CAPS_EMPTY);
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
901 aimbs_putle16(&fr->data, 0x0000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
902 aimbs_putle16(&fr->data, 0x0003); /* Client features? */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
903 aimbs_putle16(&fr->data, 0x0000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
904 aimbs_putle8(&fr->data, 0x00); /* Unkizown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
905 aimbs_putle16(&fr->data, 0xffff); /* Sequence number? XXX - This should decrement by 1 with each request */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
906
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
907 aimbs_putle16(&fr->data, 0x000e); /* L */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
908 aimbs_putle16(&fr->data, 0xffff); /* Sequence number? XXX - This should decrement by 1 with each request */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
909 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
910 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
911 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
912
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
913 /* The type of status message being requested */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
914 if (type & AIM_ICQ_STATE_CHAT)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
915 aimbs_putle16(&fr->data, 0x03ec);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
916 else if(type & AIM_ICQ_STATE_DND)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
917 aimbs_putle16(&fr->data, 0x03eb);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
918 else if(type & AIM_ICQ_STATE_OUT)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
919 aimbs_putle16(&fr->data, 0x03ea);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
920 else if(type & AIM_ICQ_STATE_BUSY)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
921 aimbs_putle16(&fr->data, 0x03e9);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
922 else if(type & AIM_ICQ_STATE_AWAY)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
923 aimbs_putle16(&fr->data, 0x03e8);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
924
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
925 aimbs_putle16(&fr->data, 0x0000); /* Status? */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
926 aimbs_putle16(&fr->data, 0x0001); /* Priority of this message? */
4154
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
927 aimbs_putle16(&fr->data, 0x0001); /* L */
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
928 aimbs_putle8(&fr->data, 0x00); /* String of length L */
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
929 } /* End TLV t(2711) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
930 } /* End TLV t(0005) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
931
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
932 /* TLV t(0003) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
933 aimbs_put16(&fr->data, 0x0003);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
934 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
935
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
936 aim_tx_enqueue(sess, fr);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
937
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
938 return 0;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
939 }
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
940
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
941 /**
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
942 * Subtype 0x0006
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
943 *
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
944 * This can be used to send an ICQ authorization reply (deny or grant). It is the "old way."
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
945 * The new way is to use SSI. I like the new way a lot better. This seems like such a hack,
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
946 * mostly because it's in network byte order. Figuring this stuff out sometimes takes a while,
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
947 * but thats ok, because it gives me time to try to figure out what kind of drugs the AOL people
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
948 * were taking when they merged the two protocols.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
949 *
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
950 * @param sn The destination screen name.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
951 * @param type The type of message. 0x0007 for authorization denied. 0x0008 for authorization granted.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
952 * @param message The message you want to send, it should be null terminated.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
953 * @return Return 0 if no errors, otherwise return the error number.
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
954 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
955 faim_export int aim_send_im_ch4(aim_session_t *sess, char *sn, fu16_t type, fu8_t *message)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
956 {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
957 aim_conn_t *conn;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
958 aim_frame_t *fr;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
959 aim_snacid_t snacid;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
960 int i;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
961
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
962 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
963 return -EINVAL;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
964
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
965 if (!sn || !type || !message)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
966 return -EINVAL;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
967
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
968 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+8+3+strlen(sn)+12+strlen(message)+1+4)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
969 return -ENOMEM;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
970
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
971 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
972 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
973
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
974 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
975 * Cookie
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
976 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
977 for (i=0; i<8; i++)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
978 aimbs_put8(&fr->data, (fu8_t)rand());
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
979
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
980 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
981 * Channel (4)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
982 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
983 aimbs_put16(&fr->data, 0x0004);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
984
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
985 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
986 * Dest sn
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
987 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
988 aimbs_put8(&fr->data, strlen(sn));
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
989 aimbs_putraw(&fr->data, sn, strlen(sn));
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
990
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
991 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
992 * TLV t(0005)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
993 *
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
994 * ICQ data (the UIN and the message).
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
995 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
996 aimbs_put16(&fr->data, 0x0005);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
997 aimbs_put16(&fr->data, 4 + 2+2+strlen(message)+1);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
998
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
999 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1000 * Your UIN
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1001 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1002 aimbs_putle32(&fr->data, atoi(sess->sn));
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1003
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1004 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1005 * TLV t(type) l(strlen(message)+1) v(message+NULL)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1006 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1007 aimbs_putle16(&fr->data, type);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1008 aimbs_putle16(&fr->data, strlen(message)+1);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1009 aimbs_putraw(&fr->data, message, strlen(message)+1);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1010
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1011 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1012 * TLV t(0006) l(0000) v()
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1013 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1014 aimbs_put16(&fr->data, 0x0006);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1015 aimbs_put16(&fr->data, 0x0000);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1016
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1017 aim_tx_enqueue(sess, fr);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1018
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1019 return 0;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1020 }
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1021
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1022 static int outgoingim(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1023 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1024 int i, ret = 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1025 aim_rxcallback_t userfunc;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1026 fu8_t cookie[8];
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1027 fu16_t channel;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1028 aim_tlvlist_t *tlvlist;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1029 char *sn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1030 int snlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1031 fu16_t icbmflags = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1032 fu8_t flag1 = 0, flag2 = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1033 fu8_t *msg = NULL;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1034 aim_tlv_t *msgblock;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1035
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1036 /* ICBM Cookie. */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1037 for (i = 0; i < 8; i++)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1038 cookie[i] = aimbs_get8(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1039
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1040 /* Channel ID */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1041 channel = aimbs_get16(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1042
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1043 if (channel != 0x01) {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1044 faimdprintf(sess, 0, "icbm: ICBM recieved on unsupported channel. Ignoring. (chan = %04x)\n", channel);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1045 return 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1046 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1047
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1048 snlen = aimbs_get8(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1049 sn = aimbs_getstr(bs, snlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1050
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1051 tlvlist = aim_readtlvchain(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1052
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1053 if (aim_gettlv(tlvlist, 0x0003, 1))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1054 icbmflags |= AIM_IMFLAGS_ACK;
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1055 if (aim_gettlv(tlvlist, 0x0004, 1))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1056 icbmflags |= AIM_IMFLAGS_AWAY;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1057
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1058 if ((msgblock = aim_gettlv(tlvlist, 0x0002, 1))) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1059 aim_bstream_t mbs;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1060 int featurelen, msglen;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1061
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1062 aim_bstream_init(&mbs, msgblock->value, msgblock->length);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1063
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1064 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1065 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1066 for (featurelen = aimbs_get16(&mbs); featurelen; featurelen--)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1067 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1068 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1069 aimbs_get8(&mbs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1070
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1071 msglen = aimbs_get16(&mbs) - 4; /* final block length */
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1072
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1073 flag1 = aimbs_get16(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1074 flag2 = aimbs_get16(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1075
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1076 msg = aimbs_getstr(&mbs, msglen);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1077 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1078
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1079 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1080 ret = userfunc(sess, rx, channel, sn, msg, icbmflags, flag1, flag2);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1081
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1082 free(sn);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1083 aim_freetlvchain(&tlvlist);
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1084
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1085 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1086 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1087
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1088 /*
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1089 * Ahh, the joys of nearly ridiculous over-engineering.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1090 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1091 * Not only do AIM ICBM's support multiple channels. Not only do they
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1092 * support multiple character sets. But they support multiple character
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1093 * sets / encodings within the same ICBM.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1094 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1095 * These multipart messages allow for complex space savings techniques, which
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1096 * seem utterly unnecessary by today's standards. In fact, there is only
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1097 * one client still in popular use that still uses this method: AOL for the
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1098 * Macintosh, Version 5.0. Obscure, yes, I know.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1099 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1100 * In modern (non-"legacy") clients, if the user tries to send a character
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1101 * that is not ISO-8859-1 or ASCII, the client will send the entire message
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1102 * as UNICODE, meaning that every character in the message will occupy the
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1103 * full 16 bit UNICODE field, even if the high order byte would be zero.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1104 * Multipart messages prevent this wasted space by allowing the client to
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1105 * only send the characters in UNICODE that need to be sent that way, and
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1106 * the rest of the message can be sent in whatever the native character
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1107 * set is (probably ASCII).
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1108 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1109 * An important note is that sections will be displayed in the order that
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1110 * they appear in the ICBM. There is no facility for merging or rearranging
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1111 * sections at run time. So if you have, say, ASCII then UNICODE then ASCII,
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1112 * you must supply two ASCII sections with a UNICODE in the middle, and incur
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1113 * the associated overhead.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1114 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1115 * Normally I would have laughed and given a firm 'no' to supporting this
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1116 * seldom-used feature, but something is attracting me to it. In the future,
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1117 * it may be possible to abuse this to send mixed-media messages to other
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1118 * open source clients (like encryption or something) -- see faimtest for
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1119 * examples of how to do this.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1120 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1121 * I would definitly recommend avoiding this feature unless you really
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1122 * know what you are doing, and/or you have something neat to do with it.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1123 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1124 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1125 faim_export int aim_mpmsg_init(aim_session_t *sess, aim_mpmsg_t *mpm)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1126 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1127
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1128 memset(mpm, 0, sizeof(aim_mpmsg_t));
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1129
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1130 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1131 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1132
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1133 static int mpmsg_addsection(aim_session_t *sess, aim_mpmsg_t *mpm, fu16_t charset, fu16_t charsubset, fu8_t *data, fu16_t datalen)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1134 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1135 aim_mpmsg_section_t *sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1136
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1137 if (!(sec = malloc(sizeof(aim_mpmsg_section_t))))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1138 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1139
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1140 sec->charset = charset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1141 sec->charsubset = charsubset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1142 sec->data = data;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1143 sec->datalen = datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1144 sec->next = NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1145
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1146 if (!mpm->parts)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1147 mpm->parts = sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1148 else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1149 aim_mpmsg_section_t *cur;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1150
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1151 for (cur = mpm->parts; cur->next; cur = cur->next)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1152 ;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1153 cur->next = sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1154 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1155
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1156 mpm->numparts++;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1157
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1158 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1159 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1160
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1161 faim_export int aim_mpmsg_addraw(aim_session_t *sess, aim_mpmsg_t *mpm, fu16_t charset, fu16_t charsubset, const fu8_t *data, fu16_t datalen)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1162 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1163 fu8_t *dup;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1164
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1165 if (!(dup = malloc(datalen)))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1166 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1167 memcpy(dup, data, datalen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1168
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1169 if (mpmsg_addsection(sess, mpm, charset, charsubset, dup, datalen) == -1) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1170 free(dup);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1171 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1172 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1173
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1174 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1175 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1176
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1177 /* XXX should provide a way of saying ISO-8859-1 specifically */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1178 faim_export int aim_mpmsg_addascii(aim_session_t *sess, aim_mpmsg_t *mpm, const char *ascii)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1179 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1180 fu8_t *dup;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1181
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1182 if (!(dup = strdup(ascii)))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1183 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1184
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1185 if (mpmsg_addsection(sess, mpm, 0x0000, 0x0000, dup, strlen(ascii)) == -1) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1186 free(dup);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1187 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1188 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1189
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1190 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1191 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1192
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1193 faim_export int aim_mpmsg_addunicode(aim_session_t *sess, aim_mpmsg_t *mpm, const fu16_t *unicode, fu16_t unicodelen)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1194 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1195 fu8_t *buf;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1196 aim_bstream_t bs;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1197 int i;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1198
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1199 if (!(buf = malloc(unicodelen * 2)))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1200 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1201
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1202 aim_bstream_init(&bs, buf, unicodelen * 2);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1203
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1204 /* We assume unicode is in /host/ byte order -- convert to network */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1205 for (i = 0; i < unicodelen; i++)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1206 aimbs_put16(&bs, unicode[i]);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1207
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1208 if (mpmsg_addsection(sess, mpm, 0x0002, 0x0000, buf, aim_bstream_curpos(&bs)) == -1) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1209 free(buf);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1210 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1211 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1212
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1213 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1214 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1215
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1216 faim_export void aim_mpmsg_free(aim_session_t *sess, aim_mpmsg_t *mpm)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1217 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1218 aim_mpmsg_section_t *cur;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1219
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1220 for (cur = mpm->parts; cur; ) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1221 aim_mpmsg_section_t *tmp;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1222
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1223 tmp = cur->next;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1224 free(cur->data);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1225 free(cur);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1226 cur = tmp;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1227 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1228
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1229 mpm->numparts = 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1230 mpm->parts = NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1231
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1232 return;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1233 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1234
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1235 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1236 * Start by building the multipart structures, then pick the first
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1237 * human-readable section and stuff it into args->msg so no one gets
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1238 * suspicious.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1239 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1240 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1241 static int incomingim_ch1_parsemsgs(aim_session_t *sess, fu8_t *data, int len, struct aim_incomingim_ch1_args *args)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1242 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1243 static const fu16_t charsetpri[] = {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1244 0x0000, /* ASCII first */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1245 0x0003, /* then ISO-8859-1 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1246 0x0002, /* UNICODE as last resort */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1247 };
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1248 static const int charsetpricount = 3;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1249 int i;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1250 aim_bstream_t mbs;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1251 aim_mpmsg_section_t *sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1252
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1253 aim_bstream_init(&mbs, data, len);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1254
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1255 while (aim_bstream_empty(&mbs)) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1256 fu16_t msglen, flag1, flag2;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1257 fu8_t *msgbuf;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1258
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1259 aimbs_get8(&mbs); /* 01 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1260 aimbs_get8(&mbs); /* 01 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1261
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1262 /* Message string length, including character set info. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1263 msglen = aimbs_get16(&mbs);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1264
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1265 /* Character set info */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1266 flag1 = aimbs_get16(&mbs);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1267 flag2 = aimbs_get16(&mbs);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1268
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1269 /* Message. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1270 msglen -= 4;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1271
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1272 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1273 * For now, we don't care what the encoding is. Just copy
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1274 * it into a multipart struct and deal with it later. However,
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1275 * always pad the ending with a NULL. This makes it easier
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1276 * to treat ASCII sections as strings. It won't matter for
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1277 * UNICODE or binary data, as you should never read past
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1278 * the specified data length, which will not include the pad.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1279 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1280 * XXX There's an API bug here. For sending, the UNICODE is
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1281 * given in host byte order (aim_mpmsg_addunicode), but here
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1282 * the received messages are given in network byte order.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1283 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1284 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1285 msgbuf = aimbs_getstr(&mbs, msglen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1286 mpmsg_addsection(sess, &args->mpmsg, flag1, flag2, msgbuf, msglen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1287
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1288 } /* while */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1289
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1290 args->icbmflags |= AIM_IMFLAGS_MULTIPART; /* always set */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1291
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1292 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1293 * Clients that support multiparts should never use args->msg, as it
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1294 * will point to an arbitrary section.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1295 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1296 * Here, we attempt to provide clients that do not support multipart
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1297 * messages with something to look at -- hopefully a human-readable
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1298 * string. But, failing that, a UNICODE message, or nothing at all.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1299 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1300 * Which means that even if args->msg is NULL, it does not mean the
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1301 * message was blank.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1302 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1303 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1304 for (i = 0; i < charsetpricount; i++) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1305 for (sec = args->mpmsg.parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1306
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1307 if (sec->charset != charsetpri[i])
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1308 continue;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1309
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1310 /* Great. We found one. Fill it in. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1311 args->charset = sec->charset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1312 args->charsubset = sec->charsubset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1313 args->icbmflags |= AIM_IMFLAGS_CUSTOMCHARSET;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1314
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1315 /* Set up the simple flags */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1316 if (args->charset == 0x0000)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1317 ; /* ASCII */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1318 else if (args->charset == 0x0002)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1319 args->icbmflags |= AIM_IMFLAGS_UNICODE;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1320 else if (args->charset == 0x0003)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1321 args->icbmflags |= AIM_IMFLAGS_ISO_8859_1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1322 else if (args->charset == 0xffff)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1323 ; /* no encoding (yeep!) */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1324
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1325 if (args->charsubset == 0x0000)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1326 ; /* standard subencoding? */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1327 else if (args->charsubset == 0x000b)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1328 args->icbmflags |= AIM_IMFLAGS_SUBENC_MACINTOSH;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1329 else if (args->charsubset == 0xffff)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1330 ; /* no subencoding */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1331 #if 0
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1332 /* XXX this isn't really necesary... */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1333 if ( ((args.flag1 != 0x0000) &&
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1334 (args.flag1 != 0x0002) &&
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1335 (args.flag1 != 0x0003) &&
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1336 (args.flag1 != 0xffff)) ||
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1337 ((args.flag2 != 0x0000) &&
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1338 (args.flag2 != 0x000b) &&
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1339 (args.flag2 != 0xffff))) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1340 faimdprintf(sess, 0, "icbm: **warning: encoding flags are being used! {%04x, %04x}\n", args.flag1, args.flag2);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1341 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1342 #endif
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1343
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1344 args->msg = sec->data;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1345 args->msglen = sec->datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1346
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1347 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1348 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1349 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1350
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1351 /* No human-readable sections found. Oh well. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1352 args->charset = args->charsubset = 0xffff;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1353 args->msg = NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1354 args->msglen = 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1355
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1356 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1357 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1358
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1359 static int incomingim_ch1(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, aim_userinfo_t *userinfo, aim_bstream_t *bs, fu8_t *cookie)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1360 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1361 fu16_t type, length;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1362 aim_rxcallback_t userfunc;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1363 int ret = 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1364 struct aim_incomingim_ch1_args args;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1365 int endpos;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1366
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1367 memset(&args, 0, sizeof(args));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1368
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1369 aim_mpmsg_init(sess, &args.mpmsg);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1370
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1371 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1372 * This used to be done using tlvchains. For performance reasons,
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1373 * I've changed it to process the TLVs in-place. This avoids lots
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1374 * of per-IM memory allocations.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1375 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1376 while (aim_bstream_empty(bs)) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1377
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1378 type = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1379 length = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1380
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1381 endpos = aim_bstream_curpos(bs) + length;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1382
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1383 if (type == 0x0002) { /* Message Block */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1384
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1385 /*
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1386 * This TLV consists of the following:
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1387 * - 0501 -- Unknown
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1388 * - Features: Don't know how to interpret these
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1389 * - 0101 -- Unknown
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1390 * - Message
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1391 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1392 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1393
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1394 aimbs_get8(bs); /* 05 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1395 aimbs_get8(bs); /* 01 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1396
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1397 args.featureslen = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1398 /* XXX XXX this is all evil! */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1399 args.features = bs->data + bs->offset;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1400 aim_bstream_advance(bs, args.featureslen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1401 args.icbmflags |= AIM_IMFLAGS_CUSTOMFEATURES;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1402
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1403 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1404 * The rest of the TLV contains one or more message
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1405 * blocks...
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1406 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1407 incomingim_ch1_parsemsgs(sess, bs->data + bs->offset /* XXX evil!!! */, length - 2 - 2 - args.featureslen, &args);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1408
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1409 } else if (type == 0x0003) { /* Server Ack Requested */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1410
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1411 args.icbmflags |= AIM_IMFLAGS_ACK;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1412
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1413 } else if (type == 0x0004) { /* Message is Auto Response */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1414
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1415 args.icbmflags |= AIM_IMFLAGS_AWAY;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1416
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1417 } else if (type == 0x0006) { /* Message was received offline. */
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1418
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1419 /* XXX not sure if this actually gets sent. */
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1420 args.icbmflags |= AIM_IMFLAGS_OFFLINE;
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1421
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1422 } else if (type == 0x0008) { /* I-HAVE-A-REALLY-PURTY-ICON Flag */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1423
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1424 args.iconlen = aimbs_get32(bs);
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
1425 aimbs_get16(bs); /* 0x0001 */
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
1426 args.iconsum = aimbs_get16(bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1427 args.iconstamp = aimbs_get32(bs);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1428
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1429 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1430 * This looks to be a client bug. MacAIM 4.3 will
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1431 * send this tag, but with all zero values, in the
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1432 * first message of a conversation. This makes no
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1433 * sense whatsoever, so I'm going to say its a bug.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1434 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1435 * You really shouldn't advertise a zero-length icon
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1436 * anyway.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1437 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1438 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1439 if (args.iconlen)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1440 args.icbmflags |= AIM_IMFLAGS_HASICON;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1441
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1442 } else if (type == 0x0009) {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1443
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1444 args.icbmflags |= AIM_IMFLAGS_BUDDYREQ;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1445
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1446 } else if (type == 0x000b) { /* Non-direct connect typing notification */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1447
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1448 args.icbmflags |= AIM_IMFLAGS_TYPINGNOT;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1449
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1450 } else if (type == 0x0017) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1451
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1452 args.extdatalen = length;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1453 args.extdata = aimbs_getraw(bs, args.extdatalen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1454
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1455 } else {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1456 faimdprintf(sess, 0, "incomingim_ch1: unknown TLV 0x%04x (len %d)\n", type, length);
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1457 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1458
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1459 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1460 * This is here to protect ourselves from ourselves. That
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1461 * is, if something above doesn't completly parse its value
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1462 * section, or, worse, overparses it, this will set the
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1463 * stream where it needs to be in order to land on the next
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1464 * TLV when the loop continues.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1465 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1466 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1467 aim_bstream_setpos(bs, endpos);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1468 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1469
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1470
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1471 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1472 ret = userfunc(sess, rx, channel, userinfo, &args);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1473
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1474 aim_mpmsg_free(sess, &args.mpmsg);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1475 free(args.extdata);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1476
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1477 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1478 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1479
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1480 static void incomingim_ch2_buddylist(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_bstream_t *servdata)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1481 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1482
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1483 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1484 * This goes like this...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1485 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1486 * group name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1487 * group name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1488 * num of buddies in group
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1489 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1490 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1491 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1492 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1493 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1494 * group name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1495 * group name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1496 * num of buddies in group
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1497 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1498 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1499 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1500 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1501 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1502 while (servdata && aim_bstream_empty(servdata)) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1503 fu16_t gnlen, numb;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1504 int i;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1505 char *gn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1506
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1507 gnlen = aimbs_get16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1508 gn = aimbs_getstr(servdata, gnlen);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1509 numb = aimbs_get16(servdata);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1510
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1511 for (i = 0; i < numb; i++) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1512 fu16_t bnlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1513 char *bn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1514
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1515 bnlen = aimbs_get16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1516 bn = aimbs_getstr(servdata, bnlen);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1517
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1518 faimdprintf(sess, 0, "got a buddy list from %s: group %s, buddy %s\n", userinfo->sn, gn, bn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1519
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1520 free(bn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1521 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1522
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1523 free(gn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1524 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1525
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1526 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1527 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1528
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1529 static void incomingim_ch2_buddyicon_free(aim_session_t *sess, struct aim_incomingim_ch2_args *args)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1530 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1531
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1532 free(args->info.icon.icon);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1533
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1534 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1535 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1536
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1537 static void incomingim_ch2_buddyicon(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_bstream_t *servdata)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1538 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1539
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1540 if (servdata) {
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1541 args->info.icon.checksum = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1542 args->info.icon.length = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1543 args->info.icon.timestamp = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1544 args->info.icon.icon = aimbs_getraw(servdata, args->info.icon.length);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1545 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1546
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1547 args->destructor = (void *)incomingim_ch2_buddyicon_free;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1548
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1549 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1550 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1551
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1552 static void incomingim_ch2_chat_free(aim_session_t *sess, struct aim_incomingim_ch2_args *args)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1553 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1554
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1555 /* XXX aim_chat_roominfo_free() */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1556 free(args->info.chat.roominfo.name);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1557
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1558 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1559 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1560
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1561 static void incomingim_ch2_chat(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_bstream_t *servdata)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1562 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1563
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1564 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1565 * Chat room info.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1566 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1567 if (servdata)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1568 aim_chat_readroominfo(servdata, &args->info.chat.roominfo);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1569
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1570 args->destructor = (void *)incomingim_ch2_chat_free;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1571
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1572 return;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1573 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1574
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1575 static void incomingim_ch2_icqserverrelay_free(aim_session_t *sess, struct aim_incomingim_ch2_args *args)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1576 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1577
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1578 free((char *)args->info.rtfmsg.rtfmsg);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1579
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1580 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1581 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1582
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1583 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1584 * The relationship between AIM_CAPS_ICQSERVERRELAY and AIM_CAPS_ICQRTF is
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1585 * kind of odd. This sends the client ICQRTF since that is all that I've seen
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1586 * SERVERRELAY used for.
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1587 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1588 * Note that this is all little-endian. Cringe.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1589 *
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1590 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1591 static void incomingim_ch2_icqserverrelay(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_bstream_t *servdata)
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1592 {
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1593 fu16_t hdrlen, anslen, msglen;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1594 fu16_t msgtype;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1595
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1596 hdrlen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1597 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1598
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1599 hdrlen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1600 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1601
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1602 msgtype = aimbs_getle16(servdata);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1603
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1604 anslen = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1605 aim_bstream_advance(servdata, anslen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1606
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1607 msglen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1608 args->info.rtfmsg.rtfmsg = aimbs_getstr(servdata, msglen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1609
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1610 args->info.rtfmsg.fgcolor = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1611 args->info.rtfmsg.bgcolor = aimbs_getle32(servdata);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1612
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1613 hdrlen = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1614 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1615
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1616 /* XXX This is such a hack. */
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1617 args->reqclass = AIM_CAPS_ICQRTF;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1618
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1619 args->destructor = (void *)incomingim_ch2_icqserverrelay_free;
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1620
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1621 return;
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1622 }
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1623
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1624 static void incomingim_ch2_sendfile_free(aim_session_t *sess, struct aim_incomingim_ch2_args *args)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1625 {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1626 free(args->info.sendfile.filename);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1627 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1628
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1629 static void incomingim_ch2_sendfile(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_userinfo_t *userinfo, struct aim_incomingim_ch2_args *args, aim_bstream_t *servdata)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1630 {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1631
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1632 args->destructor = (void *)incomingim_ch2_sendfile_free;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1633
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1634 if (servdata) {
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1635 int flen;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1636
3771
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1637 /* subtype is one of AIM_OFT_SUBTYPE_* */
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1638 args->info.sendfile.subtype = aimbs_get16(servdata);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1639 args->info.sendfile.totfiles = aimbs_get16(servdata);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1640 args->info.sendfile.totsize = aimbs_get32(servdata);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1641
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1642 /* XXX - create an aimbs_getnullstr function */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1643 /* Use an inelegant way of getting the null-terminated filename,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1644 * since there's no easy bstream routine. */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1645 for (flen = 0; aimbs_get8(servdata); flen++);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1646 aim_bstream_advance(servdata, -flen -1);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1647 args->info.sendfile.filename = aimbs_getstr(servdata, flen);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1648
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1649 /* There is sometimes more after the null-terminated filename,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1650 * but I'm unsure of its format. */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1651 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1652
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1653 return;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1654 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1655
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1656 typedef void (*ch2_args_destructor_t)(aim_session_t *sess, struct aim_incomingim_ch2_args *args);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1657
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1658 static int incomingim_ch2(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, aim_userinfo_t *userinfo, aim_tlvlist_t *tlvlist, fu8_t *cookie)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1659 {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1660 aim_rxcallback_t userfunc;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1661 aim_tlv_t *block1, *servdatatlv;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1662 aim_tlvlist_t *list2;
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1663 struct aim_incomingim_ch2_args args;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1664 aim_bstream_t bbs, sdbs, *sdbsptr = NULL;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1665 fu8_t *cookie2;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1666 int ret = 0;
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1667
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1668 char clientip1[30] = {""};
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1669 char clientip2[30] = {""};
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1670 char verifiedip[30] = {""};
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1671
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1672 memset(&args, 0, sizeof(args));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1673
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1674 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1675 * There's another block of TLVs embedded in the type 5 here.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1676 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1677 block1 = aim_gettlv(tlvlist, 0x0005, 1);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1678 aim_bstream_init(&bbs, block1->value, block1->length);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1679
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1680 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1681 * First two bytes represent the status of the connection.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1682 *
3771
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1683 * 0 is a request, 1 is a cancel, 2 is an accept
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1684 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1685 args.status = aimbs_get16(&bbs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1686
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1687 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1688 * Next comes the cookie. Should match the ICBM cookie.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1689 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1690 cookie2 = aimbs_getraw(&bbs, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1691 if (memcmp(cookie, cookie2, 8) != 0)
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1692 faimdprintf(sess, 0, "rend: warning cookies don't match!\n");
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1693 memcpy(args.cookie, cookie2, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1694 free(cookie2);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1695
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1696 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1697 * The next 16bytes are a capability block so we can
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1698 * identify what type of rendezvous this is.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1699 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1700 args.reqclass = aim_getcap(sess, &bbs, 0x10);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1701
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1702 /*
2196
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1703 * What follows may be TLVs or nothing, depending on the
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1704 * purpose of the message.
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1705 *
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1706 * Ack packets for instance have nothing more to them.
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1707 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1708 list2 = aim_readtlvchain(&bbs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1709
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1710 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1711 * IP address from the perspective of the client.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1712 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1713 if (aim_gettlv(list2, 0x0002, 1)) {
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1714 aim_tlv_t *iptlv;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1715
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1716 iptlv = aim_gettlv(list2, 0x0002, 1);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1717
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1718 snprintf(clientip1, sizeof(clientip1), "%d.%d.%d.%d",
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1719 aimutil_get8(iptlv->value+0),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1720 aimutil_get8(iptlv->value+1),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1721 aimutil_get8(iptlv->value+2),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1722 aimutil_get8(iptlv->value+3));
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1723 }
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1724
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1725 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1726 * Secondary IP address from the perspective of the client.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1727 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1728 if (aim_gettlv(list2, 0x0003, 1)) {
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1729 aim_tlv_t *iptlv;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1730
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1731 iptlv = aim_gettlv(list2, 0x0003, 1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1732
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1733 snprintf(clientip2, sizeof(clientip2), "%d.%d.%d.%d",
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1734 aimutil_get8(iptlv->value+0),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1735 aimutil_get8(iptlv->value+1),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1736 aimutil_get8(iptlv->value+2),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1737 aimutil_get8(iptlv->value+3));
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1738 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1739
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1740 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1741 * Verified IP address (from the perspective of Oscar).
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1742 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1743 * This is added by the server.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1744 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1745 if (aim_gettlv(list2, 0x0004, 1)) {
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1746 aim_tlv_t *iptlv;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1747
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1748 iptlv = aim_gettlv(list2, 0x0004, 1);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1749
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1750 snprintf(verifiedip, sizeof(verifiedip), "%d.%d.%d.%d",
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1751 aimutil_get8(iptlv->value+0),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1752 aimutil_get8(iptlv->value+1),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1753 aimutil_get8(iptlv->value+2),
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1754 aimutil_get8(iptlv->value+3));
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1755 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1756
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1757 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1758 * Port number for something.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1759 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1760 if (aim_gettlv(list2, 0x0005, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1761 args.port = aim_gettlv16(list2, 0x0005, 1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1762
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1763 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1764 * Error code.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1765 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1766 if (aim_gettlv(list2, 0x000b, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1767 args.errorcode = aim_gettlv16(list2, 0x000b, 1);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1768
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1769 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1770 * Invitation message / chat description.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1771 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1772 if (aim_gettlv(list2, 0x000c, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1773 args.msg = aim_gettlv_str(list2, 0x000c, 1);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1774
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1775 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1776 * Character set.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1777 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1778 if (aim_gettlv(list2, 0x000d, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1779 args.encoding = aim_gettlv_str(list2, 0x000d, 1);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1780
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1781 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1782 * Language.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1783 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1784 if (aim_gettlv(list2, 0x000e, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1785 args.language = aim_gettlv_str(list2, 0x000e, 1);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1786
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1787 /* Unknown -- two bytes = 0x0001 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1788 if (aim_gettlv(list2, 0x000a, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1789 ;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1790
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1791 /* Unknown -- no value */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1792 if (aim_gettlv(list2, 0x000f, 1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1793 ;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1794
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1795 if (strlen(clientip1))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1796 args.clientip = (char *)clientip1;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1797 if (strlen(clientip2))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1798 args.clientip2 = (char *)clientip2;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1799 if (strlen(verifiedip))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1800 args.verifiedip = (char *)verifiedip;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1801
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1802 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1803 * This is must be present in PROPOSALs, but will probably not
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1804 * exist in CANCELs and ACCEPTs.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1805 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1806 * Service Data blocks are module-specific in format.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1807 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1808 if ((servdatatlv = aim_gettlv(list2, 0x2711 /* 10001 */, 1))) {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1809
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1810 aim_bstream_init(&sdbs, servdatatlv->value, servdatatlv->length);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1811 sdbsptr = &sdbs;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1812 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1813
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1814 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1815 * The rest of the handling depends on what type it is.
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1816 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1817 * Not all of them have special handling (yet).
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1818 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1819 if (args.reqclass & AIM_CAPS_BUDDYICON)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1820 incomingim_ch2_buddyicon(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1821 else if (args.reqclass & AIM_CAPS_SENDBUDDYLIST)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1822 incomingim_ch2_buddylist(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1823 else if (args.reqclass & AIM_CAPS_CHAT)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1824 incomingim_ch2_chat(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1825 else if (args.reqclass & AIM_CAPS_ICQSERVERRELAY)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1826 incomingim_ch2_icqserverrelay(sess, mod, rx, snac, userinfo, &args, sdbsptr);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1827 else if (args.reqclass & AIM_CAPS_SENDFILE)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1828 incomingim_ch2_sendfile(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1829
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1830
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1831 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1832 ret = userfunc(sess, rx, channel, userinfo, &args);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1833
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1834
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1835 if (args.destructor)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1836 ((ch2_args_destructor_t)args.destructor)(sess, &args);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1837
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1838 free((char *)args.msg);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1839 free((char *)args.encoding);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1840 free((char *)args.language);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1841
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1842 aim_freetlvchain(&list2);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1843
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1844 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1845 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1846
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1847 static int incomingim_ch4(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, fu16_t channel, aim_userinfo_t *userinfo, aim_tlvlist_t *tlvlist, fu8_t *cookie)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1848 {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1849 aim_bstream_t meat;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1850 aim_rxcallback_t userfunc;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1851 aim_tlv_t *block;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1852 struct aim_incomingim_ch4_args args;
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3141
diff changeset
1853 int ret = 0;
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1854
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1855 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1856 * Make a bstream for the meaty part. Yum. Meat.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1857 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1858 if (!(block = aim_gettlv(tlvlist, 0x0005, 1)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1859 return -1;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1860 aim_bstream_init(&meat, block->value, block->length);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1861
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1862 args.uin = aimbs_getle32(&meat);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1863 args.type = aimbs_getle16(&meat);
4076
563a1af15501 [gaim-migrate @ 4291]
Mark Doliner <markdoliner@pidgin.im>
parents: 4071
diff changeset
1864 args.msglen = aimbs_getle16(&meat);
563a1af15501 [gaim-migrate @ 4291]
Mark Doliner <markdoliner@pidgin.im>
parents: 4071
diff changeset
1865 args.msg = aimbs_getraw(&meat, args.msglen);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1866
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1867 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1868 ret = userfunc(sess, rx, channel, userinfo, &args);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1869
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1870 free(args.msg);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1871
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1872 return ret;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1873 }
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1874
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1875 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1876 * Subtype 0x0007
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1877 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1878 * It can easily be said that parsing ICBMs is THE single
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1879 * most difficult thing to do in the in AIM protocol. In
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1880 * fact, I think I just did say that.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1881 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1882 * Below is the best damned solution I've come up with
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1883 * over the past sixteen months of battling with it. This
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1884 * can parse both away and normal messages from every client
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1885 * I have access to. Its not fast, its not clean. But it works.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1886 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1887 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1888 static int incomingim(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1889 {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1890 int i, ret = 0;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1891 fu8_t cookie[8];
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1892 fu16_t channel;
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1893 aim_userinfo_t userinfo;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1894
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1895 memset(&userinfo, 0x00, sizeof(aim_userinfo_t));
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1896
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1897 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1898 * Read ICBM Cookie. And throw away.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1899 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1900 for (i = 0; i < 8; i++)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1901 cookie[i] = aimbs_get8(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1902
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1903 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1904 * Channel ID.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1905 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1906 * Channel 0x0001 is the message channel. There are
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1907 * other channels for things called "rendevous"
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1908 * which represent chat and some of the other new
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1909 * features of AIM2/3/3.5.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1910 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1911 * Channel 0x0002 is the Rendevous channel, which
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1912 * is where Chat Invitiations and various client-client
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1913 * connection negotiations come from.
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1914 *
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1915 * Channel 0x0004 is used for ICQ authorization, or
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1916 * possibly any system notice.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1917 *
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1918 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1919 channel = aimbs_get16(bs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1920
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1921 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1922 * Extract the standard user info block.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1923 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1924 * Note that although this contains TLVs that appear contiguous
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1925 * with the TLVs read below, they are two different pieces. The
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1926 * userinfo block contains the number of TLVs that contain user
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1927 * information, the rest are not even though there is no seperation.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1928 * aim_extractuserinfo() returns the number of bytes used by the
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1929 * userinfo tlvs, so you can start reading the rest of them right
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1930 * afterward.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1931 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1932 * That also means that TLV types can be duplicated between the
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1933 * userinfo block and the rest of the message, however there should
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1934 * never be two TLVs of the same type in one block.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1935 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1936 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1937 aim_extractuserinfo(sess, bs, &userinfo);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1938
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1939 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1940 * From here on, its depends on what channel we're on.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1941 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1942 * Technically all channels have a TLV list have this, however,
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1943 * for the common channel 1 case, in-place parsing is used for
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1944 * performance reasons (less memory allocation).
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1945 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1946 if (channel == 1) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1947
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1948 ret = incomingim_ch1(sess, mod, rx, snac, channel, &userinfo, bs, cookie);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1949
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1950 } else if (channel == 2) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1951 aim_tlvlist_t *tlvlist;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1952
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1953 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1954 * Read block of TLVs (not including the userinfo data). All
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1955 * further data is derived from what is parsed here.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1956 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1957 tlvlist = aim_readtlvchain(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1958
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1959 ret = incomingim_ch2(sess, mod, rx, snac, channel, &userinfo, tlvlist, cookie);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1960
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1961 aim_freetlvchain(&tlvlist);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1962
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1963 } else if (channel == 4) {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1964 aim_tlvlist_t *tlvlist;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1965
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1966 tlvlist = aim_readtlvchain(bs);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1967 ret = incomingim_ch4(sess, mod, rx, snac, channel, &userinfo, tlvlist, cookie);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1968 aim_freetlvchain(&tlvlist);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1969
2507
4f2c8913240e [gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2421
diff changeset
1970 } else {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1971
2507
4f2c8913240e [gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2421
diff changeset
1972 faimdprintf(sess, 0, "icbm: ICBM received on an unsupported channel. Ignoring.\n (chan = %04x)", channel);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1973
2507
4f2c8913240e [gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2421
diff changeset
1974 return 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1975 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1976
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1977 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1978 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1979
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1980 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1981 * Subtype 0x0008 - Send a warning to destsn.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1982 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1983 * Flags:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1984 * AIM_WARN_ANON Send as an anonymous (doesn't count as much)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1985 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1986 * returns -1 on error (couldn't alloc packet), 0 on success.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1987 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1988 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1989 faim_export int aim_send_warning(aim_session_t *sess, aim_conn_t *conn, const char *destsn, fu32_t flags)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1990 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1991 aim_frame_t *fr;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1992 aim_snacid_t snacid;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1993 fu16_t outflags = 0x0000;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1994
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1995 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, strlen(destsn)+13)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1996 return -ENOMEM;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1997
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1998 snacid = aim_cachesnac(sess, 0x0004, 0x0008, 0x0000, destsn, strlen(destsn)+1);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1999
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2000 aim_putsnac(&fr->data, 0x0004, 0x0008, 0x0000, snacid);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2001
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2002 if (flags & AIM_WARN_ANON)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2003 outflags |= 0x0001;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2004
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2005 aimbs_put16(&fr->data, outflags);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2006 aimbs_put8(&fr->data, strlen(destsn));
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2007 aimbs_putraw(&fr->data, destsn, strlen(destsn));
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2008
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2009 aim_tx_enqueue(sess, fr);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2010
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2011 return 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2012 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2013
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2014 /* Subtype 0x000a */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2015 static int missedcall(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2016 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2017 int ret = 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2018 aim_rxcallback_t userfunc;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2019 fu16_t channel, nummissed, reason;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2020 aim_userinfo_t userinfo;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2021
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2022 while (aim_bstream_empty(bs)) {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2023
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2024 channel = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2025 aim_extractuserinfo(sess, bs, &userinfo);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2026 nummissed = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2027 reason = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2028
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2029 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2030 ret = userfunc(sess, rx, channel, &userinfo, nummissed, reason);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2031 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2032
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2033 return ret;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2034 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2035
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2036 /*
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2037 * Subtype 0x000b
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2038 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2039 * Possible codes:
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2040 * AIM_TRANSFER_DENY_NOTSUPPORTED -- "client does not support"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2041 * AIM_TRANSFER_DENY_DECLINE -- "client has declined transfer"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2042 * AIM_TRANSFER_DENY_NOTACCEPTING -- "client is not accepting transfers"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2043 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2044 */
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2045 faim_export int aim_denytransfer(aim_session_t *sess, const char *sender, const char *cookie, fu16_t code)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2046 {
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2047 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2048 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2049 aim_snacid_t snacid;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2050 aim_tlvlist_t *tl = NULL;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2051
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2052 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2053 return -EINVAL;
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2054
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2055 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+8+2+1+strlen(sender)+6)))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2056 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2057
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2058 snacid = aim_cachesnac(sess, 0x0004, 0x000b, 0x0000, NULL, 0);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2059 aim_putsnac(&fr->data, 0x0004, 0x000b, 0x0000, snacid);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2060
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2061 aimbs_putraw(&fr->data, cookie, 8);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2062
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2063 aimbs_put16(&fr->data, 0x0002); /* channel */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2064 aimbs_put8(&fr->data, strlen(sender));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2065 aimbs_putraw(&fr->data, sender, strlen(sender));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2066
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2067 aim_addtlvtochain16(&tl, 0x0003, code);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2068 aim_writetlvchain(&fr->data, &tl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2069 aim_freetlvchain(&tl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2070
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2071 aim_tx_enqueue(sess, fr);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2072
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2073 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2074 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2075
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2076 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2077 * Subtype 0x000b - Receive the response from an ICQ status message request.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2078 *
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2079 * This contains the ICQ status message. Go figure.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2080 *
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2081 */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2082 static int clientautoresp(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2083 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2084 int ret = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2085 aim_rxcallback_t userfunc;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2086 fu16_t channel, reason;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2087 char *sn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2088 fu8_t *ck, snlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2089
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2090 ck = aimbs_getraw(bs, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2091 channel = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2092 snlen = aimbs_get8(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2093 sn = aimbs_getstr(bs, snlen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2094 reason = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2095
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2096 if (channel == 0x0002) { /* File transfer declined */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2097 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2098 ret = userfunc(sess, rx, channel, sn, reason, ck);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2099 } else if (channel == 0x0004) { /* ICQ message */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2100 switch (reason) {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2101 case 0x0003: { /* ICQ status message. Maybe other stuff too, you never know with these people. */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2102 fu8_t statusmsgtype, *msg;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2103 fu16_t len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2104 fu32_t state;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2105
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2106 len = aimbs_getle16(bs); /* Should be 0x001b */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2107 aim_bstream_advance(bs, len); /* Unknown */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2108
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2109 len = aimbs_getle16(bs); /* Should be 0x000e */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2110 aim_bstream_advance(bs, len); /* Unknown */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2111
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2112 statusmsgtype = aimbs_getle8(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2113 switch (statusmsgtype) {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2114 case 0xe8:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2115 state = AIM_ICQ_STATE_AWAY;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2116 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2117 case 0xe9:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2118 state = AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_BUSY;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2119 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2120 case 0xea:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2121 state = AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_OUT;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2122 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2123 case 0xeb:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2124 state = AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_DND | AIM_ICQ_STATE_BUSY;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2125 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2126 case 0xec:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2127 state = AIM_ICQ_STATE_CHAT;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2128 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2129 default:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2130 state = 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2131 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2132 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2133
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2134 aimbs_getle8(bs); /* Unknown - 0x03 Maybe this means this is an auto-reply */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2135 aimbs_getle16(bs); /* Unknown - 0x0000 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2136 aimbs_getle16(bs); /* Unknown - 0x0000 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2137
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2138 len = aimbs_getle16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2139 msg = aimbs_getraw(bs, len);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2140
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2141 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2142 ret = userfunc(sess, rx, channel, sn, reason, state, msg);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2143
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2144 free(msg);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2145 } break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2146
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2147 default: {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2148 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2149 ret = userfunc(sess, rx, channel, sn, reason);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2150 } break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2151 } /* end switch */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2152 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2153
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2154 free(ck);
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2155 free(sn);
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2156
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2157 return ret;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2158 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2159
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2160 /* Subtype 0x000c */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2161 static int msgack(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2162 {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2163 aim_rxcallback_t userfunc;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2164 fu16_t type;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2165 fu8_t snlen, *ck;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2166 char *sn;
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2167 int ret = 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2168
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2169 ck = aimbs_getraw(bs, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2170 type = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2171 snlen = aimbs_get8(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2172 sn = aimbs_getstr(bs, snlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2173
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2174 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2175 ret = userfunc(sess, rx, type, sn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2176
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2177 free(sn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2178 free(ck);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2179
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2180 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2181 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2182
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2183 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2184 * Subtype 0x0014 - Send a mini typing notification (mtn) packet.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2185 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2186 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2187 * and Gaim 0.60 and newer.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2188 *
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2189 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2190 faim_export int aim_mtn_send(aim_session_t *sess, fu16_t type1, char *sn, fu16_t type2)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2191 {
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2192 aim_conn_t *conn;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2193 aim_frame_t *fr;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2194 aim_snacid_t snacid;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2195
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2196 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002)))
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2197 return -EINVAL;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2198
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2199 if (!sn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2200 return -EINVAL;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2201
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2202 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+11+strlen(sn)+2)))
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2203 return -ENOMEM;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2204
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2205 snacid = aim_cachesnac(sess, 0x0004, 0x0014, 0x0000, NULL, 0);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2206 aim_putsnac(&fr->data, 0x0004, 0x0014, 0x0000, snacid);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2207
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2208 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2209 * 8 days of light
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2210 * Er, that is to say, 8 bytes of 0's
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2211 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2212 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2213 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2214 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2215 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2216
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2217 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2218 * Type 1 (should be 0x0001 for mtn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2219 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2220 aimbs_put16(&fr->data, type1);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2221
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2222 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2223 * Dest sn
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2224 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2225 aimbs_put8(&fr->data, strlen(sn));
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2226 aimbs_putraw(&fr->data, sn, strlen(sn));
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2227
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2228 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2229 * Type 2 (should be 0x0000, 0x0001, or 0x0002 for mtn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2230 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2231 aimbs_put16(&fr->data, type2);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2232
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2233 aim_tx_enqueue(sess, fr);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2234
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2235 return 0;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2236 }
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2237
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2238 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2239 * Subtype 0x0014 - Receive a mini typing notification (mtn) packet.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2240 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2241 * This is supported by winaim5 and newer, MacAIM bleh and newer, iChat bleh and newer,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2242 * and Gaim 0.60 and newer.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2243 *
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2244 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2245 static int mtn_receive(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2246 {
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2247 int ret = 0;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2248 aim_rxcallback_t userfunc;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2249 char *sn;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2250 fu8_t snlen;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2251 fu16_t type1, type2;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2252
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2253 aim_bstream_advance(bs, 8); /* Unknown - All 0's */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2254 type1 = aimbs_get16(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2255 snlen = aimbs_get8(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2256 sn = aimbs_getstr(bs, snlen);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2257 type2 = aimbs_get16(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2258
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2259 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2260 ret = userfunc(sess, rx, type1, sn, type2);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2261
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2262 free(sn);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2263
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2264 return ret;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2265 }
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2266
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2267 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2268 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2269
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2270 if (snac->subtype == 0x0005)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2271 return paraminfo(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2272 else if (snac->subtype == 0x0006)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2273 return outgoingim(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2274 else if (snac->subtype == 0x0007)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2275 return incomingim(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2276 else if (snac->subtype == 0x000a)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2277 return missedcall(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2278 else if (snac->subtype == 0x000b)
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2279 return clientautoresp(sess, mod, rx, snac, bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2280 else if (snac->subtype == 0x000c)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2281 return msgack(sess, mod, rx, snac, bs);
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2282 else if (snac->subtype == 0x0014)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2283 return mtn_receive(sess, mod, rx, snac, bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2284
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2285 return 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2286 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2287
3752
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2288 static int snacdestructor(aim_session_t *sess, aim_conn_t *conn, aim_modsnac_t *snac, void *data)
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2289 {
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2290 aim_rxcallback_t userfunc;
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2291 int ret = 0;
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2292
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2293 if (snac->subtype == 0x0006) {
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2294 if ((userfunc = aim_callhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_MSGTIMEOUT)))
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2295 ret = userfunc(sess, NULL, conn, data);
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2296 }
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2297 /* Note that we return 1 for success, 0 for failure. */
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2298 return ret;
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2299 }
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2300
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2301 faim_internal int msg_modfirst(aim_session_t *sess, aim_module_t *mod)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2302 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2303
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2304 mod->family = 0x0004;
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2639
diff changeset
2305 mod->version = 0x0001;
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2639
diff changeset
2306 mod->toolid = 0x0110;
4071
f0c425b22b92 [gaim-migrate @ 4283]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
2307 mod->toolversion = 0x0629;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2308 mod->flags = 0;
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2309 strncpy(mod->name, "messaging", sizeof(mod->name));
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2310 mod->snachandler = snachandler;
3752
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
2311 mod->snacdestructor = snacdestructor;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2312
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2313 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2314 }

mercurial