src/protocols/oscar/im.c

Tue, 14 Oct 2003 04:35:46 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 14 Oct 2003 04:35:46 +0000
changeset 7259
9d12688cee90
parent 7167
9cfb68a44e17
child 7282
73b94979f76b
permissions
-rw-r--r--

[gaim-migrate @ 7836]
Correctly handle failed get info requests.

This should fix that bug that's assigned to me, and also the
problem SimGuy (and other people) have had where you need to
Get Info twice before it works.

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

mercurial