src/protocols/oscar/im.c

Tue, 14 Jun 2005 00:24:27 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Tue, 14 Jun 2005 00:24:27 +0000
changeset 11005
06c22b605323
parent 11000
89dd47a25272
child 11155
12904075510f
permissions
-rw-r--r--

[gaim-migrate @ 12864]
Small changes to the oscar PRPL. Someone in #gaim was attempting to
debug a problem he's seen with permit/deny settings not sticking,
and noticed that there were multiple copies of people in his permit
or deny list. He didn't think the copies were still being added.

In any case, now Gaim will remove duplicate copies of people in your
permit and deny list, and multiple copies of a single buddy in the
same group.

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
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
5 * all types of generically routed through-server messages. Within
4617
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));
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
51 aimbs_putstr(bs, sn);
4617
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 */
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
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 */
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
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 *
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
121 * I definitely 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 */
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
147 aimbs_put32(&fr->data, params->flags);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
148 aimbs_put16(&fr->data, params->maxmsglen);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
149 aimbs_put16(&fr->data, params->maxsenderwarn);
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
150 aimbs_put16(&fr->data, params->maxrecverwarn);
3952
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
7282
73b94979f76b [gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents: 7167
diff changeset
169 return aim_genericreq_n_snacid(sess, conn, 0x0004, 0x0004);
3952
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);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
187
3952
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 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 * Generally, you should use the lowest encoding possible to send
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 * your message. If you only use basic punctuation and the generic
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207 * 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
208 * characters, but they are all clearly defined in ISO-8859-1, then
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209 * 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
210 * character set are defined in the ISO standard. For those cases (most
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 * 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
212 * encoding for your message. In UNICODE mode, _all_ characters must
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 * occupy 16bits, including ones that are not special. (Remember that
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
214 * the first 128 UNICODE symbols are equivalent to ASCII7, however they
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 * must be prefixed with a zero high order byte.)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 * I strongly discourage the use of UNICODE mode, mainly because none
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 * of the clients I use can parse those messages (and besides that,
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 * wchars are difficult and non-portable to handle in most UNIX environments).
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 * If you really need to include special characters, use the HTML UNICODE
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 * entities. These are of the form &#2026; where 2026 is the hex
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222 * representation of the UNICODE index (in this case, UNICODE
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 * "Horizontal Ellipsis", or 133 in in ASCII8).
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 *
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
225 * Implementation note: Since this is one of the most-used functions
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
226 * 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
227 * 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
228 * supposed to be layed out. Most obviously, tlvlists should be used
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
229 * instead of writing out the bytes manually.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
230 *
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
231 * 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
232 * XXX - check SNAC size for multipart
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
233 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
235 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
236 {
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
237 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
238 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
239 aim_snacid_t snacid;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
240 fu8_t ck[8];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
241 int i, msgtlvlen;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
242 static const fu8_t deffeatures[] = { 0x01, 0x01, 0x01, 0x02 };
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
244 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
245 return -EINVAL;
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
246
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
247 if (!args)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
248 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
250 if (args->flags & AIM_IMFLAGS_MULTIPART) {
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
251 if (args->mpmsg->numparts == 0)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
252 return -EINVAL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
253 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
254 if (!args->msg || (args->msglen <= 0))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
255 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
257 if (args->msglen >= MAXMSGLEN)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
258 return -E2BIG;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
259 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
260
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
261 /* Painfully calculate the size of the message TLV */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
262 msgtlvlen = 1 + 1; /* 0501 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
264 if (args->flags & AIM_IMFLAGS_CUSTOMFEATURES)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
265 msgtlvlen += 2 + args->featureslen;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
266 else
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
267 msgtlvlen += 2 + sizeof(deffeatures);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
268
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
269 if (args->flags & AIM_IMFLAGS_MULTIPART) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
270 aim_mpmsg_section_t *sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
271
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
272 for (sec = args->mpmsg->parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
273 msgtlvlen += 2 /* 0101 */ + 2 /* block len */;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
274 msgtlvlen += 4 /* charset */ + sec->datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
275 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
276
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
277 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
278 msgtlvlen += 2 /* 0101 */ + 2 /* block len */;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
279 msgtlvlen += 4 /* charset */ + args->msglen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
280 }
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 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
283 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
285 /* XXX - should be optional */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
286 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
287 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
289 /*
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
290 * Generate a random message cookie
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
291 *
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
292 * 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
293 * might be a good idea.) In the message error functions,
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
294 * the 8byte message cookie is returned as well as the
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
295 * SNAC ID.
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
296 *
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
297 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
298 for (i = 0; i < 8; i++)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
299 ck[i] = (fu8_t)rand();
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
300
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
301 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
302 aim_im_puticbm(&fr->data, ck, 0x0001, args->destsn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
304 /* Message TLV (type 0x0002) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
305 aimbs_put16(&fr->data, 0x0002);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
306 aimbs_put16(&fr->data, msgtlvlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
308 /* Features TLV (type 0x0501) */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
309 aimbs_put16(&fr->data, 0x0501);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
310 if (args->flags & AIM_IMFLAGS_CUSTOMFEATURES) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
311 aimbs_put16(&fr->data, args->featureslen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
312 aimbs_putraw(&fr->data, args->features, args->featureslen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
313 } else {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
314 aimbs_put16(&fr->data, sizeof(deffeatures));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
315 aimbs_putraw(&fr->data, deffeatures, sizeof(deffeatures));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
316 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
318 if (args->flags & AIM_IMFLAGS_MULTIPART) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
319 aim_mpmsg_section_t *sec;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
320
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
321 /* Insert each message part in a TLV (type 0x0101) */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
322 for (sec = args->mpmsg->parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
323 aimbs_put16(&fr->data, 0x0101);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
324 aimbs_put16(&fr->data, sec->datalen + 4);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
325 aimbs_put16(&fr->data, sec->charset);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
326 aimbs_put16(&fr->data, sec->charsubset);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
327 aimbs_putraw(&fr->data, sec->data, sec->datalen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
328 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
329
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
330 } else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
331
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
332 /* Insert message text in a TLV (type 0x0101) */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
333 aimbs_put16(&fr->data, 0x0101);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
334
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
335 /* Message block length */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
336 aimbs_put16(&fr->data, args->msglen + 0x04);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
338 /* Character set */
4662
740f32459759 [gaim-migrate @ 4973]
Mark Doliner <markdoliner@pidgin.im>
parents: 4650
diff changeset
339 aimbs_put16(&fr->data, args->charset);
740f32459759 [gaim-migrate @ 4973]
Mark Doliner <markdoliner@pidgin.im>
parents: 4650
diff changeset
340 aimbs_put16(&fr->data, args->charsubset);
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
341
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
342 /* Message. Not terminated */
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
343 aimbs_putstr(&fr->data, args->msg);
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
344 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
346 /* Set the Autoresponse flag */
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
347 if (args->flags & AIM_IMFLAGS_AWAY) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
348 aimbs_put16(&fr->data, 0x0004);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
349 aimbs_put16(&fr->data, 0x0000);
4838
653f06ff2acf [gaim-migrate @ 5163]
Mark Doliner <markdoliner@pidgin.im>
parents: 4662
diff changeset
350 } else if (args->flags & AIM_IMFLAGS_ACK) {
653f06ff2acf [gaim-migrate @ 5163]
Mark Doliner <markdoliner@pidgin.im>
parents: 4662
diff changeset
351 /* Set the Request Acknowledge flag */
653f06ff2acf [gaim-migrate @ 5163]
Mark Doliner <markdoliner@pidgin.im>
parents: 4662
diff changeset
352 aimbs_put16(&fr->data, 0x0003);
653f06ff2acf [gaim-migrate @ 5163]
Mark Doliner <markdoliner@pidgin.im>
parents: 4662
diff changeset
353 aimbs_put16(&fr->data, 0x0000);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
354 }
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
355
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
356 if (args->flags & AIM_IMFLAGS_OFFLINE) {
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
357 aimbs_put16(&fr->data, 0x0006);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
358 aimbs_put16(&fr->data, 0x0000);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
359 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
361 /*
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
362 * Set the I HAVE A REALLY PURTY ICON flag.
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
363 * XXX - This should really only be sent on initial
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
364 * IMs and when you change your icon.
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
365 */
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
366 if (args->flags & AIM_IMFLAGS_HASICON) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
367 aimbs_put16(&fr->data, 0x0008);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
368 aimbs_put16(&fr->data, 0x000c);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
369 aimbs_put32(&fr->data, args->iconlen);
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
370 aimbs_put16(&fr->data, 0x0001);
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
371 aimbs_put16(&fr->data, args->iconsum);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
372 aimbs_put32(&fr->data, args->iconstamp);
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
373 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
374
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
375 /*
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
376 * Set the Buddy Icon Requested flag.
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
377 * XXX - Every time? Surely not...
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
378 */
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
379 if (args->flags & AIM_IMFLAGS_BUDDYREQ) {
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
380 aimbs_put16(&fr->data, 0x0009);
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
381 aimbs_put16(&fr->data, 0x0000);
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
382 }
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
383
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
384 aim_tx_enqueue(sess, fr);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
385
7283
aa76f7c93746 [gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents: 7282
diff changeset
386 /* clean out SNACs over 60sec old */
aa76f7c93746 [gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents: 7282
diff changeset
387 aim_cleansnacs(sess, 60);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
389 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
390 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
392 /*
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
393 * Simple wrapper for aim_im_sendch1_ext()
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
394 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
395 * 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
396 * use aim_im_sendch1_ext directly for that.
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 * 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
399 * that requires an explicit message length. Use aim_im_sendch1_ext().
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
402 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
403 {
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
404 struct aim_sendimext_args args;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
406 args.destsn = sn;
2122
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
407 args.flags = flags;
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
408 args.msg = msg;
95b41c0f938e [gaim-migrate @ 2132]
Adam Fritzler <mid@auk.cx>
parents: 2086
diff changeset
409 args.msglen = strlen(msg);
4662
740f32459759 [gaim-migrate @ 4973]
Mark Doliner <markdoliner@pidgin.im>
parents: 4650
diff changeset
410 args.charset = 0x0000;
740f32459759 [gaim-migrate @ 4973]
Mark Doliner <markdoliner@pidgin.im>
parents: 4650
diff changeset
411 args.charsubset = 0x0000;
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 /* 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
414 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
415
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
416 return aim_im_sendch1_ext(sess, &args);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
417 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
418
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
419 /*
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
420 * Subtype 0x0006 - Send a chat invitation.
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
421 */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
422 faim_export int aim_im_sendch2_chatinvite(aim_session_t *sess, const char *sn, const char *msg, fu16_t exchange, const char *roomname, fu16_t instance)
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
423 {
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
424 aim_conn_t *conn;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
425 aim_frame_t *fr;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
426 aim_snacid_t snacid;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
427 int i;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
428 aim_msgcookie_t *cookie;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
429 struct aim_invite_priv *priv;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
430 fu8_t ck[8];
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
431 aim_tlvlist_t *otl = NULL, *itl = NULL;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
432 fu8_t *hdr;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
433 int hdrlen;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
434 aim_bstream_t hdrbs;
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
435
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
436 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
437 return -EINVAL;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
438
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
439 if (!sn || !msg || !roomname)
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
440 return -EINVAL;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
441
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
442 for (i = 0; i < 8; i++)
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
443 ck[i] = (fu8_t)rand();
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
444
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
445 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152+strlen(sn)+strlen(roomname)+strlen(msg))))
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
446 return -ENOMEM;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
447
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
448 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, sn, strlen(sn)+1);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
449 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
450
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
451 /* XXX should be uncached by an unwritten 'invite accept' handler */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
452 if ((priv = malloc(sizeof(struct aim_invite_priv)))) {
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
453 priv->sn = strdup(sn);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
454 priv->roomname = strdup(roomname);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
455 priv->exchange = exchange;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
456 priv->instance = instance;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
457 }
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
458
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
459 if ((cookie = aim_mkcookie(ck, AIM_COOKIETYPE_INVITE, priv)))
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
460 aim_cachecookie(sess, cookie);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
461 else
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
462 free(priv);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
463
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
464 /* ICBM Header */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
465 aimbs_putraw(&fr->data, ck, 8); /* Cookie */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
466 aimbs_put16(&fr->data, 0x0002); /* Channel */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
467 aimbs_put8(&fr->data, strlen(sn)); /* Screename length */
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
468 aimbs_putstr(&fr->data, sn); /* Screenname */
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
469
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
470 /*
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
471 * TLV t(0005)
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
472 *
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
473 * Everything else is inside this TLV.
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
474 *
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
475 * Sigh. AOL was rather inconsistent right here. So we have
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
476 * to play some minor tricks. Right inside the type 5 is some
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
477 * raw data, followed by a series of TLVs.
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
478 *
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
479 */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
480 hdrlen = 2+8+16+6+4+4+strlen(msg)+4+2+1+strlen(roomname)+2;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
481 hdr = malloc(hdrlen);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
482 aim_bstream_init(&hdrbs, hdr, hdrlen);
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
483
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
484 aimbs_put16(&hdrbs, 0x0000); /* Unknown! */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
485 aimbs_putraw(&hdrbs, ck, sizeof(ck)); /* I think... */
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
486 aim_putcap(&hdrbs, AIM_CAPS_CHAT);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
487
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
488 aim_tlvlist_add_16(&itl, 0x000a, 0x0001);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
489 aim_tlvlist_add_noval(&itl, 0x000f);
10991
ad4c153f004f [gaim-migrate @ 12829]
Mark Doliner <markdoliner@pidgin.im>
parents: 10990
diff changeset
490 aim_tlvlist_add_str(&itl, 0x000c, msg);
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
491 aim_tlvlist_add_chatroom(&itl, 0x2711, exchange, roomname, instance);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
492 aim_tlvlist_write(&hdrbs, &itl);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
493
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
494 aim_tlvlist_add_raw(&otl, 0x0005, aim_bstream_curpos(&hdrbs), hdr);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
495
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
496 aim_tlvlist_write(&fr->data, &otl);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
497
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
498 free(hdr);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
499 aim_tlvlist_free(&itl);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
500 aim_tlvlist_free(&otl);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
501
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
502 aim_tx_enqueue(sess, fr);
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
503
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
504 return 0;
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
505 }
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
506
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
507 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
508 * Subtype 0x0006 - Send your icon to a given user.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
509 *
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
510 * This is also performance sensitive. (If you can believe it...)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
511 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
512 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
513 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
514 {
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
515 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
516 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
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 int i;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
520
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
521 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
522 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
523
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
524 if (!sn || !icon || (iconlen <= 0) || (iconlen >= MAXICONLEN))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
525 return -EINVAL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
526
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
527 for (i = 0; i < 8; i++)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
528 ck[i] = (fu8_t)rand();
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
529
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
530 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
531 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
532
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
533 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
534 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
535
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
536 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
537 aim_im_puticbm(&fr->data, ck, 0x0002, sn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
538
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
539 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
540 * TLV t(0005)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
541 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
542 * Encompasses everything below.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
543 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
544 aimbs_put16(&fr->data, 0x0005);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
545 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
546
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
547 aimbs_put16(&fr->data, 0x0000);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
548 aimbs_putraw(&fr->data, ck, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
549 aim_putcap(&fr->data, AIM_CAPS_BUDDYICON);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
550
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
551 /* TLV t(000a) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
552 aimbs_put16(&fr->data, 0x000a);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
553 aimbs_put16(&fr->data, 0x0002);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
554 aimbs_put16(&fr->data, 0x0001);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
556 /* TLV t(000f) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
557 aimbs_put16(&fr->data, 0x000f);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
558 aimbs_put16(&fr->data, 0x0000);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
559
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
560 /* TLV t(2711) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
561 aimbs_put16(&fr->data, 0x2711);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
562 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
563 aimbs_put16(&fr->data, 0x0000);
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
564 aimbs_put16(&fr->data, iconsum);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
565 aimbs_put32(&fr->data, iconlen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
566 aimbs_put32(&fr->data, stamp);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
567 aimbs_putraw(&fr->data, icon, iconlen);
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
568 aimbs_putstr(&fr->data, AIM_ICONIDENT);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
569
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
570 /* TLV t(0003) */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
571 aimbs_put16(&fr->data, 0x0003);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
572 aimbs_put16(&fr->data, 0x0000);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
573
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
574 aim_tx_enqueue(sess, fr);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
575
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
576 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
577 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
578
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
579 /*
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
580 * Subtype 0x0006 - Send a rich text message.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
581 *
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
582 * 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
583 * 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
584 * 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
585 * bounce it back to you.
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 * 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
588 * the one-group-per-file scheme as much as possible. This could easily
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
589 * be an exception, since Rendezvous IMs are external of the Oscar core,
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
590 * 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
591 * 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
592 *
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
593 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
594 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
595 {
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
596 aim_conn_t *conn;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
597 aim_frame_t *fr;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
598 aim_snacid_t snacid;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
599 fu8_t ck[8];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
600 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
601 int i, servdatalen;
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
602
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
603 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
604 return -EINVAL;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
605
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
606 if (!args || !args->destsn || !args->rtfmsg)
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
607 return -EINVAL;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
608
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
609 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
610
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
611 for (i = 0; i < 8; i++)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
612 ck[i] = (fu8_t)rand();
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
613
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
614 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
615 return -ENOMEM;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
616
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
617 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
618 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
619
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
620 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
621 aim_im_puticbm(&fr->data, ck, 0x0002, args->destsn);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
622
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
623 /* TLV t(0005) - Encompasses everything below. */
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
624 aimbs_put16(&fr->data, 0x0005);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
625 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
626
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
627 aimbs_put16(&fr->data, 0x0000);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
628 aimbs_putraw(&fr->data, ck, 8);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
629 aim_putcap(&fr->data, AIM_CAPS_ICQSERVERRELAY);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
630
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
631 /* t(000a) l(0002) v(0001) */
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
632 aimbs_put16(&fr->data, 0x000a);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
633 aimbs_put16(&fr->data, 0x0002);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
634 aimbs_put16(&fr->data, 0x0001);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
635
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
636 /* t(000f) l(0000) v() */
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
637 aimbs_put16(&fr->data, 0x000f);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
638 aimbs_put16(&fr->data, 0x0000);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
639
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
640 /* Service Data TLV */
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
641 aimbs_put16(&fr->data, 0x2711);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
642 aimbs_put16(&fr->data, servdatalen);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
643
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
644 aimbs_putle16(&fr->data, 11 + 16 /* 11 + (sizeof CLSID) */);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
645 aimbs_putle16(&fr->data, 9);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
646 aim_putcap(&fr->data, AIM_CAPS_EMPTY);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
647 aimbs_putle16(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
648 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
649 aimbs_putle8(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
650 aimbs_putle16(&fr->data, 0x03ea); /* trid1 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
651
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
652 aimbs_putle16(&fr->data, 14);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
653 aimbs_putle16(&fr->data, 0x03eb); /* trid2 */
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
654 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
655 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
656 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
657
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
658 aimbs_putle16(&fr->data, 0x0001);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
659 aimbs_putle32(&fr->data, 0);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
660 aimbs_putle16(&fr->data, strlen(args->rtfmsg)+1);
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
661 aimbs_putraw(&fr->data, (fu8_t *)args->rtfmsg, strlen(args->rtfmsg)+1);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
662
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
663 aimbs_putle32(&fr->data, args->fgcolor);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
664 aimbs_putle32(&fr->data, args->bgcolor);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
665 aimbs_putle32(&fr->data, strlen(rtfcap)+1);
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
666 aimbs_putraw(&fr->data, (fu8_t *)rtfcap, strlen(rtfcap)+1);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
667
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
668 aim_tx_enqueue(sess, fr);
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
669
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
670 return 0;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
671 }
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
672
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
673 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
674 * 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
675 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
676 */
10035
03f36b9a1276 [gaim-migrate @ 10994]
Mark Doliner <markdoliner@pidgin.im>
parents: 9933
diff changeset
677 faim_export int aim_im_sendch2_odcrequest(aim_session_t *sess, fu8_t *cookie, fu8_t usecookie, const char *sn, const fu8_t *ip, fu16_t port)
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
678 {
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
679 aim_conn_t *conn;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
680 aim_frame_t *fr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
681 aim_snacid_t snacid;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
682 fu8_t ck[8];
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
683 aim_tlvlist_t *tl = NULL, *itl = NULL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
684 int hdrlen, i;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
685 fu8_t *hdr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
686 aim_bstream_t hdrbs;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
687
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
688 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
689 return -EINVAL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
690
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
691 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
692 return -ENOMEM;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
693
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
694 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
695 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
696
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
697 /*
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
698 * Generate a random message cookie
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
699 *
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
700 * This cookie needs to be alphanumeric and NULL-terminated to be
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
701 * TOC-compatible.
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
702 *
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
703 * 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
704 *
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
705 */
8982
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
706
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
707 if (cookie && usecookie) /* allow user-specified cookie */
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
708 memcpy(ck, cookie, 8);
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
709 else
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
710 for (i = 0; i < 7; i++)
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
711 ck[i] = 0x30 + ((fu8_t) rand() % 10);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
712 ck[7] = '\0';
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
713
8982
0ba49ae0ed51 [gaim-migrate @ 9757]
Tim Ringenbach <marv@pidgin.im>
parents: 8978
diff changeset
714 if (cookie && !usecookie)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
715 memcpy(cookie, ck, 8);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
716
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
717 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
718 aim_im_puticbm(&fr->data, ck, 0x0002, sn);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
719
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
720 aim_tlvlist_add_noval(&tl, 0x0003);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
721
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
722 hdrlen = 2+8+16+6+8+6+4;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
723 hdr = malloc(hdrlen);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
724 aim_bstream_init(&hdrbs, hdr, hdrlen);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
725
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
726 aimbs_put16(&hdrbs, 0x0000);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
727 aimbs_putraw(&hdrbs, ck, 8);
6871
ff864e84ca84 [gaim-migrate @ 7417]
Mark Doliner <markdoliner@pidgin.im>
parents: 6304
diff changeset
728 aim_putcap(&hdrbs, AIM_CAPS_DIRECTIM);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
729
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
730 aim_tlvlist_add_16(&itl, 0x000a, 0x0001);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
731 aim_tlvlist_add_raw(&itl, 0x0003, 4, ip);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
732 aim_tlvlist_add_16(&itl, 0x0005, port);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
733 aim_tlvlist_add_noval(&itl, 0x000f);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
734
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
735 aim_tlvlist_write(&hdrbs, &itl);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
736
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
737 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
738
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
739 aim_tlvlist_write(&fr->data, &tl);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
740
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
741 free(hdr);
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
742 aim_tlvlist_free(&itl);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
743 aim_tlvlist_free(&tl);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
744
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
745 aim_tx_enqueue(sess, fr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
746
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
747 return 0;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
748 }
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
749
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
750 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
751 * 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
752 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
753 */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
754 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
755 {
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
756 aim_conn_t *conn;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
757 aim_frame_t *fr;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
758 aim_snacid_t snacid;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
759 aim_tlvlist_t *tl=NULL, *subtl=NULL;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
760 int i;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
761
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
762 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)) || !oft_info)
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
763 return -EINVAL;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
764
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
765 /* XXX - Should be like "21CBF95" and null terminated */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
766 for (i = 0; i < 7; i++)
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
767 oft_info->cookie[i] = 0x30 + ((fu8_t)rand() % 10);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
768 oft_info->cookie[7] = '\0';
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
769
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
770 { /* Create the subTLV chain */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
771 fu8_t *buf;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
772 int buflen;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
773 aim_bstream_t bs;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
774
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
775 aim_tlvlist_add_16(&subtl, 0x000a, 0x0001);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
776 aim_tlvlist_add_noval(&subtl, 0x000f);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
777 /* aim_tlvlist_add_raw(&subtl, 0x000e, 2, "en");
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
778 aim_tlvlist_add_raw(&subtl, 0x000d, 8, "us-ascii");
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
779 aim_tlvlist_add_raw(&subtl, 0x000c, 24, "Please accept this file."); */
8838
c23227da7b4a [gaim-migrate @ 9604]
Mark Doliner <markdoliner@pidgin.im>
parents: 8735
diff changeset
780 /* XXX - Change oft_info->clientip to an array of 4 bytes */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
781 if (oft_info->clientip) {
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
782 fu8_t ip[4];
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
783 char *nexttoken;
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
784 int i = 0;
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
785 nexttoken = strtok(oft_info->clientip, ".");
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
786 while (nexttoken && i<4) {
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
787 ip[i] = atoi(nexttoken);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
788 nexttoken = strtok(NULL, ".");
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
789 i++;
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
790 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
791 aim_tlvlist_add_raw(&subtl, 0x0003, 4, ip);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
792 }
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
793 aim_tlvlist_add_16(&subtl, 0x0005, oft_info->port);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
794
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
795 /* TLV t(2711) */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
796 buflen = 2+2+4+strlen(oft_info->fh.name)+1;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
797 buf = malloc(buflen);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
798 aim_bstream_init(&bs, buf, buflen);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
799 aimbs_put16(&bs, (oft_info->fh.totfiles > 1) ? 0x0002 : 0x0001);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
800 aimbs_put16(&bs, oft_info->fh.totfiles);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
801 aimbs_put32(&bs, oft_info->fh.totsize);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
802
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
803 /* Filename - NULL terminated, for some odd reason */
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
804 aimbs_putstr(&bs, oft_info->fh.name);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
805 aimbs_put8(&bs, 0x00);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
806
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
807 aim_tlvlist_add_raw(&subtl, 0x2711, bs.len, bs.data);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
808 free(buf);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
809 }
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
810
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
811 { /* Create the main TLV chain */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
812 fu8_t *buf;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
813 int buflen;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
814 aim_bstream_t bs;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
815
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
816 /* TLV t(0005) - Encompasses everything from above. Gee. */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
817 buflen = 2+8+16+aim_tlvlist_size(&subtl);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
818 buf = malloc(buflen);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
819 aim_bstream_init(&bs, buf, buflen);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
820 aimbs_put16(&bs, AIM_RENDEZVOUS_PROPOSE);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
821 aimbs_putraw(&bs, oft_info->cookie, 8);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
822 aim_putcap(&bs, AIM_CAPS_SENDFILE);
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
823 aim_tlvlist_write(&bs, &subtl);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
824 aim_tlvlist_free(&subtl);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
825 aim_tlvlist_add_raw(&tl, 0x0005, bs.len, bs.data);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
826 free(buf);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
827
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
828 /* TLV t(0003) - Request an ack */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
829 aim_tlvlist_add_noval(&tl, 0x0003);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
830 }
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
831
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
832 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
833 return -ENOMEM;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
834
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
835 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
836 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
a0468bc9b944 [gaim-migrate @ 3890]
William T. Mahan <wtm2@duke.edu>
parents: 3630
diff changeset
837
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
838 /* ICBM header */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
839 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
840
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
841 /* 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
842 aim_tlvlist_write(&fr->data, &tl);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
843 aim_tlvlist_free(&tl);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
844
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
845 aim_tx_enqueue(sess, fr);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
846
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
847 return 0;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
848 }
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
849
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
850 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
851 * Subtype 0x0006 - Send an "I will accept this file" message?
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
852 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
853 * @param rendid Capability type (AIM_CAPS_GETFILE or AIM_CAPS_SENDFILE)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
854 */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
855 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
856 {
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
857 aim_conn_t *conn;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
858 aim_frame_t *fr;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
859 aim_snacid_t snacid;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
860
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
861 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)) || !oft_info)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
862 return -EINVAL;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
863
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
864 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
865 return -ENOMEM;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
866
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
867 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
868 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
869
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
870 /* ICBM header */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
871 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
872
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
873 aimbs_put16(&fr->data, 0x0005);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
874 aimbs_put16(&fr->data, 0x001a);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
875 aimbs_put16(&fr->data, AIM_RENDEZVOUS_ACCEPT);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
876 aimbs_putraw(&fr->data, oft_info->cookie, 8);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
877 aim_putcap(&fr->data, AIM_CAPS_SENDFILE);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
878
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
879 aim_tx_enqueue(sess, fr);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
880
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
881 return 0;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
882 }
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
883
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
884 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
885 * Subtype 0x0006 - Send a "cancel this file transfer" message?
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
886 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
887 */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
888 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
889 {
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
890 aim_conn_t *conn;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
891 aim_frame_t *fr;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
892 aim_snacid_t snacid;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
893
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
894 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)) || !oft_info)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
895 return -EINVAL;
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
896
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
897 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
898 return -ENOMEM;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
899
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
900 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
901 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
902
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
903 /* ICBM header */
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
904 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
905
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
906 aimbs_put16(&fr->data, 0x0005);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
907 aimbs_put16(&fr->data, 0x001a);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
908 aimbs_put16(&fr->data, AIM_RENDEZVOUS_CANCEL);
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
909 aimbs_putraw(&fr->data, oft_info->cookie, 8);
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
910 aim_putcap(&fr->data, AIM_CAPS_SENDFILE);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
911
2717
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
912 aim_tx_enqueue(sess, fr);
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
913
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
914 return 0;
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
915 }
b97d1ea4e28c [gaim-migrate @ 2730]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
916
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
917 /**
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
918 * 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
919 *
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
920 * @param sess The oscar session.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
921 * @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
922 * @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
923 * 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
924 * @return Return 0 if no errors, otherwise return the error number.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
925 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
926 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
927 {
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
928 aim_conn_t *conn;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
929 aim_frame_t *fr;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
930 aim_snacid_t snacid;
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
931 int i;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
932 fu8_t ck[8];
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
933
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
934 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)) || !sn)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
935 return -EINVAL;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
936
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
937 for (i = 0; i < 8; i++)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
938 ck[i] = (fu8_t)rand();
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
939
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
940 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
941 return -ENOMEM;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
942
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
943 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
944 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
945
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
946 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
947 aim_im_puticbm(&fr->data, ck, 0x0002, sn);
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
948
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
949 /* TLV t(0005) - Encompasses almost everything below. */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
950 aimbs_put16(&fr->data, 0x0005); /* T */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
951 aimbs_put16(&fr->data, 0x005e); /* L */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
952 { /* V */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
953 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
954
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
955 /* Cookie */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
956 aimbs_putraw(&fr->data, ck, 8);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
957
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
958 /* Put the 16 byte server relay capability */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
959 aim_putcap(&fr->data, AIM_CAPS_ICQSERVERRELAY);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
960
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
961 /* TLV t(000a) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
962 aimbs_put16(&fr->data, 0x000a);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
963 aimbs_put16(&fr->data, 0x0002);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
964 aimbs_put16(&fr->data, 0x0001);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
965
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
966 /* TLV t(000f) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
967 aimbs_put16(&fr->data, 0x000f);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
968 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
969
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
970 /* TLV t(2711) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
971 aimbs_put16(&fr->data, 0x2711);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
972 aimbs_put16(&fr->data, 0x0036);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
973 { /* V */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
974 aimbs_putle16(&fr->data, 0x001b); /* L */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
975 aimbs_putle16(&fr->data, 0x0008); /* XXX - Protocol version */
4154
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
976 aim_putcap(&fr->data, AIM_CAPS_EMPTY);
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
977 aimbs_putle16(&fr->data, 0x0000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
978 aimbs_putle16(&fr->data, 0x0003); /* Client features? */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
979 aimbs_putle16(&fr->data, 0x0000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
980 aimbs_putle8(&fr->data, 0x00); /* Unkizown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
981 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
982
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
983 aimbs_putle16(&fr->data, 0x000e); /* L */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
984 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
985 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
986 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
987 aimbs_putle32(&fr->data, 0x00000000); /* Unknown */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
988
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
989 /* The type of status message being requested */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
990 if (type & AIM_ICQ_STATE_CHAT)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
991 aimbs_putle16(&fr->data, 0x03ec);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
992 else if(type & AIM_ICQ_STATE_DND)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
993 aimbs_putle16(&fr->data, 0x03eb);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
994 else if(type & AIM_ICQ_STATE_OUT)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
995 aimbs_putle16(&fr->data, 0x03ea);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
996 else if(type & AIM_ICQ_STATE_BUSY)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
997 aimbs_putle16(&fr->data, 0x03e9);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
998 else if(type & AIM_ICQ_STATE_AWAY)
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
999 aimbs_putle16(&fr->data, 0x03e8);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1000
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1001 aimbs_putle16(&fr->data, 0x0000); /* Status? */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1002 aimbs_putle16(&fr->data, 0x0001); /* Priority of this message? */
4154
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
1003 aimbs_putle16(&fr->data, 0x0001); /* L */
e1c6a1bdcf5a [gaim-migrate @ 4382]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
1004 aimbs_putle8(&fr->data, 0x00); /* String of length L */
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1005 } /* End TLV t(2711) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1006 } /* End TLV t(0005) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1007
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1008 /* TLV t(0003) */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1009 aimbs_put16(&fr->data, 0x0003);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1010 aimbs_put16(&fr->data, 0x0000);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1011
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1012 aim_tx_enqueue(sess, fr);
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1013
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1014 return 0;
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1015 }
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1016
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1017 /**
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1018 * Subtype 0x0006 - Send an ICQ-esque ICBM.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1019 *
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1020 * 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
1021 * 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
1022 * 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
1023 * 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
1024 * were taking when they merged the two protocols.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1025 *
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1026 * @param sn The destination screen name.
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
1027 * @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
1028 * @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
1029 * @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
1030 */
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1031 faim_export int aim_im_sendch4(aim_session_t *sess, const char *sn, fu16_t type, const char *message)
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1032 {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1033 aim_conn_t *conn;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1034 aim_frame_t *fr;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1035 aim_snacid_t snacid;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1036 int i;
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1037 fu8_t ck[8];
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1038
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1039 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1040 return -EINVAL;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1041
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1042 if (!sn || !type || !message)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1043 return -EINVAL;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1044
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1045 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
1046 return -ENOMEM;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1047
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1048 snacid = aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, NULL, 0);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1049 aim_putsnac(&fr->data, 0x0004, 0x0006, 0x0000, snacid);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1050
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1051 /* Cookie */
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1052 for (i=0; i<8; i++)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1053 ck[i] = (fu8_t)rand();
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1054
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1055 /* ICBM header */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1056 aim_im_puticbm(&fr->data, ck, 0x0004, sn);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1057
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1058 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1059 * TLV t(0005)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1060 *
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1061 * ICQ data (the UIN and the message).
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1062 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1063 aimbs_put16(&fr->data, 0x0005);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1064 aimbs_put16(&fr->data, 4 + 2+2+strlen(message)+1);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1065
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1066 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1067 * Your UIN
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1068 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1069 aimbs_putle32(&fr->data, atoi(sess->sn));
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1070
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1071 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1072 * TLV t(type) l(strlen(message)+1) v(message+NULL)
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1073 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1074 aimbs_putle16(&fr->data, type);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1075 aimbs_putle16(&fr->data, strlen(message)+1);
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1076 aimbs_putraw(&fr->data, (fu8_t *)message, strlen(message)+1);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1077
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1078 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1079 * TLV t(0006) l(0000) v()
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1080 */
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1081 aimbs_put16(&fr->data, 0x0006);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1082 aimbs_put16(&fr->data, 0x0000);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1083
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1084 aim_tx_enqueue(sess, fr);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1085
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1086 return 0;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1087 }
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1088
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1089 /*
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1090 * XXX - I don't see when this would ever get called...
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1091 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1092 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
1093 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1094 int i, ret = 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1095 aim_rxcallback_t userfunc;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1096 fu8_t cookie[8];
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1097 fu16_t channel;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1098 aim_tlvlist_t *tlvlist;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1099 char *sn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1100 int snlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1101 fu16_t icbmflags = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1102 fu8_t flag1 = 0, flag2 = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1103 fu8_t *msg = NULL;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1104 aim_tlv_t *msgblock;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1105
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1106 /* ICBM Cookie. */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1107 for (i = 0; i < 8; i++)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1108 cookie[i] = aimbs_get8(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1109
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1110 /* Channel ID */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1111 channel = aimbs_get16(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1112
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1113 if (channel != 0x01) {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1114 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
1115 return 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1116 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1117
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1118 snlen = aimbs_get8(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1119 sn = aimbs_getstr(bs, snlen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1120
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1121 tlvlist = aim_tlvlist_read(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1122
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1123 if (aim_tlv_gettlv(tlvlist, 0x0003, 1))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1124 icbmflags |= AIM_IMFLAGS_ACK;
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1125 if (aim_tlv_gettlv(tlvlist, 0x0004, 1))
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1126 icbmflags |= AIM_IMFLAGS_AWAY;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1127
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1128 if ((msgblock = aim_tlv_gettlv(tlvlist, 0x0002, 1))) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1129 aim_bstream_t mbs;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1130 int featurelen, msglen;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1131
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1132 aim_bstream_init(&mbs, msgblock->value, msgblock->length);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1133
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1134 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1135 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1136 for (featurelen = aimbs_get16(&mbs); featurelen; featurelen--)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1137 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1138 aimbs_get8(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1139 aimbs_get8(&mbs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1140
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1141 msglen = aimbs_get16(&mbs) - 4; /* final block length */
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1142
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1143 flag1 = aimbs_get16(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1144 flag2 = aimbs_get16(&mbs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1145
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1146 msg = aimbs_getraw(&mbs, msglen);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1147 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1148
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1149 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1150 ret = userfunc(sess, rx, channel, sn, msg, icbmflags, flag1, flag2);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1151
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1152 free(sn);
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1153 aim_tlvlist_free(&tlvlist);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1154
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1155 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1156 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1157
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1158 /*
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1159 * Ahh, the joys of nearly ridiculous over-engineering.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1160 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1161 * 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
1162 * support multiple character sets. But they support multiple character
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1163 * sets / encodings within the same ICBM.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1164 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1165 * These multipart messages allow for complex space savings techniques, which
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1166 * 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
1167 * 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
1168 * Macintosh, Version 5.0. Obscure, yes, I know.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1169 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1170 * 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
1171 * 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
1172 * 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
1173 * 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
1174 * Multipart messages prevent this wasted space by allowing the client to
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1175 * 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
1176 * 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
1177 * set is (probably ASCII).
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 * 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
1180 * 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
1181 * 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
1182 * 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
1183 * the associated overhead.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1184 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1185 * 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
1186 * 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
1187 * 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
1188 * open source clients (like encryption or something) -- see faimtest for
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1189 * examples of how to do this.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1190 *
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
1191 * I would definitely recommend avoiding this feature unless you really
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1192 * 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
1193 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1194 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1195 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
1196 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1197
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1198 memset(mpm, 0, sizeof(aim_mpmsg_t));
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 return 0;
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
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1203 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
1204 {
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1205 aim_mpmsg_section_t *sec;
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1206
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1207 if (!(sec = malloc(sizeof(aim_mpmsg_section_t))))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1208 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1209
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1210 sec->charset = charset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1211 sec->charsubset = charsubset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1212 sec->data = data;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1213 sec->datalen = datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1214 sec->next = 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 if (!mpm->parts)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1217 mpm->parts = sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1218 else {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1219 aim_mpmsg_section_t *cur;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1220
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1221 for (cur = mpm->parts; cur->next; cur = cur->next)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1222 ;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1223 cur->next = sec;
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
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1226 mpm->numparts++;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1227
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1228 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1229 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1230
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1231 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
1232 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1233 fu8_t *dup;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1234
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1235 if (!(dup = malloc(datalen)))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1236 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1237 memcpy(dup, data, datalen);
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 if (mpmsg_addsection(sess, mpm, charset, charsubset, dup, datalen) == -1) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1240 free(dup);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1241 return -1;
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
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1244 return 0;
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
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1247 /* 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
1248 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
1249 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1250 fu8_t *dup;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1251
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1252 if (!(dup = (fu8_t *)strdup(ascii)))
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1253 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1254
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1255 if (mpmsg_addsection(sess, mpm, 0x0000, 0x0000, dup, strlen(ascii)) == -1) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1256 free(dup);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1257 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1258 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1259
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1260 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1261 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1262
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1263 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
1264 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1265 fu8_t *buf;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1266 aim_bstream_t bs;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1267 int i;
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 if (!(buf = malloc(unicodelen * 2)))
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1270 return -1;
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 aim_bstream_init(&bs, buf, unicodelen * 2);
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 /* We assume unicode is in /host/ byte order -- convert to network */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1275 for (i = 0; i < unicodelen; i++)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1276 aimbs_put16(&bs, unicode[i]);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1277
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1278 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
1279 free(buf);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1280 return -1;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1281 }
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1282
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1283 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1284 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1285
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1286 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
1287 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1288 aim_mpmsg_section_t *cur;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1289
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1290 for (cur = mpm->parts; cur; ) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1291 aim_mpmsg_section_t *tmp;
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1292
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1293 tmp = cur->next;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1294 free(cur->data);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1295 free(cur);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1296 cur = tmp;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1297 }
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1298
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1299 mpm->numparts = 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1300 mpm->parts = NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1301
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1302 return;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1303 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1304
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1305 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1306 * Start by building the multipart structures, then pick the first
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1307 * 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
1308 * suspicious.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1309 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1310 */
10693
2c185cecbe95 [gaim-migrate @ 12245]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
1311 static int incomingim_ch1_parsemsgs(aim_session_t *sess, aim_userinfo_t *userinfo, fu8_t *data, int len, struct aim_incomingim_ch1_args *args)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1312 {
9806
6b4ad56649c6 [gaim-migrate @ 10674]
Mark Doliner <markdoliner@pidgin.im>
parents: 8982
diff changeset
1313 /* Should this be ASCII -> UNICODE -> Custom */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1314 static const fu16_t charsetpri[] = {
9826
8fd989d134e0 [gaim-migrate @ 10697]
Mark Doliner <markdoliner@pidgin.im>
parents: 9807
diff changeset
1315 AIM_CHARSET_ASCII, /* ASCII first */
8fd989d134e0 [gaim-migrate @ 10697]
Mark Doliner <markdoliner@pidgin.im>
parents: 9807
diff changeset
1316 AIM_CHARSET_CUSTOM, /* then ISO-8859-1 */
8fd989d134e0 [gaim-migrate @ 10697]
Mark Doliner <markdoliner@pidgin.im>
parents: 9807
diff changeset
1317 AIM_CHARSET_UNICODE, /* UNICODE as last resort */
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1318 };
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1319 static const int charsetpricount = 3;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1320 int i;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1321 aim_bstream_t mbs;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1322 aim_mpmsg_section_t *sec;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1323
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1324 aim_bstream_init(&mbs, data, len);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1325
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1326 while (aim_bstream_empty(&mbs)) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1327 fu16_t msglen, flag1, flag2;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1328 fu8_t *msgbuf;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1329
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1330 aimbs_get8(&mbs); /* 01 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1331 aimbs_get8(&mbs); /* 01 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1332
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1333 /* Message string length, including character set info. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1334 msglen = aimbs_get16(&mbs);
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1335 if (msglen > aim_bstream_empty(&mbs))
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1336 {
10693
2c185cecbe95 [gaim-migrate @ 12245]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
1337 faimdprintf(sess, 0, "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.", userinfo->sn);
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1338 break;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1339 }
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1340
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1341 /* Character set info */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1342 flag1 = aimbs_get16(&mbs);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1343 flag2 = aimbs_get16(&mbs);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1344
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1345 /* Message. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1346 msglen -= 4;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1347
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1348 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1349 * 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
1350 * it into a multipart struct and deal with it later. However,
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1351 * always pad the ending with a NULL. This makes it easier
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1352 * to treat ASCII sections as strings. It won't matter for
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1353 * UNICODE or binary data, as you should never read past
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1354 * the specified data length, which will not include the pad.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1355 *
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1356 * 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
1357 * given in host byte order (aim_mpmsg_addunicode), but here
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1358 * the received messages are given in network byte order.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1359 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1360 */
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
1361 msgbuf = aimbs_getraw(&mbs, msglen);
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1362 mpmsg_addsection(sess, &args->mpmsg, flag1, flag2, msgbuf, msglen);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1363
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1364 } /* while */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1365
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1366 args->icbmflags |= AIM_IMFLAGS_MULTIPART; /* always set */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1367
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1368 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1369 * Clients that support multiparts should never use args->msg, as it
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1370 * will point to an arbitrary section.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1371 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1372 * Here, we attempt to provide clients that do not support multipart
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1373 * messages with something to look at -- hopefully a human-readable
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1374 * string. But, failing that, a UNICODE message, or nothing at all.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1375 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1376 * 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
1377 * message was blank.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1378 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1379 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1380 for (i = 0; i < charsetpricount; i++) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1381 for (sec = args->mpmsg.parts; sec; sec = sec->next) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1382
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1383 if (sec->charset != charsetpri[i])
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1384 continue;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1385
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1386 /* Great. We found one. Fill it in. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1387 args->charset = sec->charset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1388 args->charsubset = sec->charsubset;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1389
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1390 /* Set up the simple flags */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1391 if (args->charsubset == 0x0000)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1392 ; /* standard subencoding? */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1393 else if (args->charsubset == 0x000b)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1394 args->icbmflags |= AIM_IMFLAGS_SUBENC_MACINTOSH;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1395 else if (args->charsubset == 0xffff)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1396 ; /* no subencoding */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1397
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1398 args->msg = sec->data;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1399 args->msglen = sec->datalen;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1400
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1401 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1402 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1403 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1404
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1405 /* No human-readable sections found. Oh well. */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1406 args->charset = args->charsubset = 0xffff;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1407 args->msg = NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1408 args->msglen = 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1409
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1410 return 0;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1411 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1412
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1413 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
1414 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1415 fu16_t type, length;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1416 aim_rxcallback_t userfunc;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1417 int ret = 0;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1418 struct aim_incomingim_ch1_args args;
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1419 unsigned int endpos;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1420
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1421 memset(&args, 0, sizeof(args));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1422
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1423 aim_mpmsg_init(sess, &args.mpmsg);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1424
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1425 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1426 * This used to be done using tlvchains. For performance reasons,
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1427 * 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
1428 * of per-IM memory allocations.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1429 */
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1430 while (aim_bstream_empty(bs))
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1431 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1432 type = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1433 length = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1434
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1435 if (length > aim_bstream_empty(bs))
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1436 {
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1437 faimdprintf(sess, 0, "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn);
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1438 break;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1439 }
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1440
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1441 endpos = aim_bstream_curpos(bs) + length;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1442
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1443 if (type == 0x0002) { /* Message Block */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1444
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1445 /*
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1446 * This TLV consists of the following:
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1447 * - 0501 -- Unknown
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1448 * - Features: Don't know how to interpret these
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1449 * - 0101 -- Unknown
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1450 * - Message
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1451 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1452 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1453
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1454 aimbs_get8(bs); /* 05 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1455 aimbs_get8(bs); /* 01 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1456
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1457 args.featureslen = aimbs_get16(bs);
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1458 if (args.featureslen > aim_bstream_empty(bs))
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1459 {
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1460 faimdprintf(sess, 0, "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn);
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1461 break;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1462 }
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1463 if (args.featureslen == 0)
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1464 {
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1465 args.features = NULL;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1466 }
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1467 else
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1468 {
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1469 args.features = aimbs_getraw(bs, args.featureslen);
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1470 args.icbmflags |= AIM_IMFLAGS_CUSTOMFEATURES;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1471 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1472
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1473 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1474 * The rest of the TLV contains one or more message
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1475 * blocks...
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1476 */
10693
2c185cecbe95 [gaim-migrate @ 12245]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
1477 incomingim_ch1_parsemsgs(sess, userinfo, 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
1478
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1479 } else if (type == 0x0003) { /* Server Ack Requested */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1480
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1481 args.icbmflags |= AIM_IMFLAGS_ACK;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1482
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1483 } else if (type == 0x0004) { /* Message is Auto Response */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1484
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1485 args.icbmflags |= AIM_IMFLAGS_AWAY;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1486
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1487 } else if (type == 0x0006) { /* Message was received offline. */
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1488
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1489 /* XXX - not sure if this actually gets sent. */
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1490 args.icbmflags |= AIM_IMFLAGS_OFFLINE;
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2673
diff changeset
1491
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1492 } else if (type == 0x0008) { /* I-HAVE-A-REALLY-PURTY-ICON Flag */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1493
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1494 args.iconlen = aimbs_get32(bs);
2626
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
1495 aimbs_get16(bs); /* 0x0001 */
9e459528a570 [gaim-migrate @ 2639]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2507
diff changeset
1496 args.iconsum = aimbs_get16(bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1497 args.iconstamp = aimbs_get32(bs);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1498
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1499 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1500 * This looks to be a client bug. MacAIM 4.3 will
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1501 * send this tag, but with all zero values, in the
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1502 * first message of a conversation. This makes no
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1503 * sense whatsoever, so I'm going to say its a bug.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1504 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1505 * You really shouldn't advertise a zero-length icon
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1506 * anyway.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1507 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1508 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1509 if (args.iconlen)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1510 args.icbmflags |= AIM_IMFLAGS_HASICON;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1511
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1512 } else if (type == 0x0009) {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1513
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1514 args.icbmflags |= AIM_IMFLAGS_BUDDYREQ;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1515
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1516 } else if (type == 0x000b) { /* Non-direct connect typing notification */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1517
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1518 args.icbmflags |= AIM_IMFLAGS_TYPINGNOT;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
1519
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1520 } else if (type == 0x0017) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1521
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1522 free(args.extdata);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1523 args.extdatalen = length;
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1524 if (args.extdatalen > aim_bstream_empty(bs))
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1525 {
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1526 faimdprintf(sess, 0, "Received an IM containing an invalid message part from %s. They are probably trying to do something malicious.\n", userinfo->sn);
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1527 break;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1528 }
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1529 if (args.extdatalen == 0)
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1530 args.extdata = NULL;
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1531 else
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1532 args.extdata = aimbs_getraw(bs, args.extdatalen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1533
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1534 } else {
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1535 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
1536 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1537
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1538 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1539 * This is here to protect ourselves from ourselves. That
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
1540 * is, if something above doesn't completely parse its value
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1541 * section, or, worse, overparses it, this will set the
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1542 * 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
1543 * TLV when the loop continues.
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1544 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1545 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1546 aim_bstream_setpos(bs, endpos);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1547 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1548
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1549
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1550 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1551 ret = userfunc(sess, rx, channel, userinfo, &args);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1552
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
1553 aim_mpmsg_free(sess, &args.mpmsg);
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10051
diff changeset
1554 free(args.features);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1555 free(args.extdata);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1556
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1557 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1558 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1559
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1560 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
1561 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1562
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1563 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1564 * This goes like this...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1565 *
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1566 * group name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1567 * group name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1568 * num of buddies in group
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1569 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1570 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1571 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1572 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1573 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1574 * group name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1575 * group name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1576 * num of buddies in group
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1577 * buddy name length
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1578 * buddy name
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1579 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1580 * ...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1581 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1582 while (servdata && aim_bstream_empty(servdata)) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1583 fu16_t gnlen, numb;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1584 int i;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1585 char *gn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1586
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1587 gnlen = aimbs_get16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1588 gn = aimbs_getstr(servdata, gnlen);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1589 numb = aimbs_get16(servdata);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1590
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1591 for (i = 0; i < numb; i++) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1592 fu16_t bnlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1593 char *bn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1594
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1595 bnlen = aimbs_get16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1596 bn = aimbs_getstr(servdata, bnlen);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1597
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1598 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
1599
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1600 free(bn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1601 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1602
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1603 free(gn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1604 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1605
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1606 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1607 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1608
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1609 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
1610 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1611
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1612 free(args->info.icon.icon);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1613
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1614 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1615 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1616
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1617 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
1618 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1619
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1620 if (servdata) {
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1621 args->info.icon.checksum = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1622 args->info.icon.length = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1623 args->info.icon.timestamp = aimbs_get32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1624 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
1625 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1626
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1627 args->destructor = (void *)incomingim_ch2_buddyicon_free;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1628
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1629 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1630 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1631
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1632 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
1633 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1634
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1635 /* XXX - aim_chat_roominfo_free() */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1636 free(args->info.chat.roominfo.name);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1637
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1638 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1639 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1640
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1641 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
1642 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1643
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1644 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1645 * Chat room info.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1646 */
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1647 if (servdata)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1648 aim_chat_readroominfo(servdata, &args->info.chat.roominfo);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1649
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1650 args->destructor = (void *)incomingim_ch2_chat_free;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1651
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1652 return;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1653 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1654
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1655 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
1656 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1657
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1658 free((char *)args->info.rtfmsg.rtfmsg);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1659
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1660 return;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1661 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1662
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1663 /*
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1664 * The relationship between AIM_CAPS_ICQSERVERRELAY and AIM_CAPS_ICQRTF is
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1665 * 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
1666 * SERVERRELAY used for.
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1667 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1668 * Note that this is all little-endian. Cringe.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1669 *
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1670 */
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1671 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
1672 {
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1673 fu16_t hdrlen, anslen, msglen;
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1674
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1675 hdrlen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1676 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1677
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1678 hdrlen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1679 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1680
8708
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1681 args->info.rtfmsg.msgtype = aimbs_getle16(servdata);
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1682
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1683 anslen = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1684 aim_bstream_advance(servdata, anslen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1685
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1686 msglen = aimbs_getle16(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1687 args->info.rtfmsg.rtfmsg = aimbs_getstr(servdata, msglen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1688
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1689 args->info.rtfmsg.fgcolor = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1690 args->info.rtfmsg.bgcolor = aimbs_getle32(servdata);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1691
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1692 hdrlen = aimbs_getle32(servdata);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1693 aim_bstream_advance(servdata, hdrlen);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1694
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1695 args->destructor = (void *)incomingim_ch2_icqserverrelay_free;
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1696
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1697 return;
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1698 }
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1699
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1700 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
1701 {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1702 free(args->info.sendfile.filename);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1703 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1704
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1705 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
1706 {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1707
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1708 args->destructor = (void *)incomingim_ch2_sendfile_free;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1709
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1710 /* 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
1711 * this is? Maybe TLV t(000a)? */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1712 if (servdata) { /* Someone is sending us a file */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1713 int flen;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1714
3771
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1715 /* subtype is one of AIM_OFT_SUBTYPE_* */
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1716 args->info.sendfile.subtype = aimbs_get16(servdata);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1717 args->info.sendfile.totfiles = aimbs_get16(servdata);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1718 args->info.sendfile.totsize = aimbs_get32(servdata);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1719
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1720 /*
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1721 * 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
1722 * 32 char max filename length for single files. I think
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1723 * OFT tends to do that. Gotta love inconsistency. I saw
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1724 * a 26 byte filename?
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1725 */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1726 /* AAA - create an aimbs_getnullstr function (don't anymore)(maybe) */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1727 /* Use an inelegant way of getting the null-terminated filename,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1728 * since there's no easy bstream routine. */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1729 for (flen = 0; aimbs_get8(servdata); flen++);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1730 aim_bstream_advance(servdata, -flen -1);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1731 args->info.sendfile.filename = aimbs_getstr(servdata, flen);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1732
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1733 /* There is sometimes more after the null-terminated filename,
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1734 * but I'm unsure of its format. */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1735 /* I don't believe him. */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1736 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1737
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1738 return;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1739 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1740
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1741 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
1742
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1743 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
1744 {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1745 aim_rxcallback_t userfunc;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1746 aim_tlv_t *block1, *servdatatlv;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1747 aim_tlvlist_t *list2;
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1748 struct aim_incomingim_ch2_args args;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1749 aim_bstream_t bbs, sdbs, *sdbsptr = NULL;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1750 fu8_t *cookie2;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1751 int ret = 0;
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1752
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1753 char proxyip[30] = {""};
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1754 char clientip[30] = {""};
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1755 char verifiedip[30] = {""};
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1756
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1757 memset(&args, 0, sizeof(args));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1758
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1759 /*
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
1760 * There's another block of TLVs embedded in the type 5 here.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1761 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1762 block1 = aim_tlv_gettlv(tlvlist, 0x0005, 1);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1763 aim_bstream_init(&bbs, block1->value, block1->length);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1764
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1765 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1766 * First two bytes represent the status of the connection.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1767 *
3771
fc0f8f47fa58 [gaim-migrate @ 3910]
Rob Flynn <gaim@robflynn.com>
parents: 3752
diff changeset
1768 * 0 is a request, 1 is a cancel, 2 is an accept
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
1769 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1770 args.status = aimbs_get16(&bbs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1771
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1772 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1773 * Next comes the cookie. Should match the ICBM cookie.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1774 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1775 cookie2 = aimbs_getraw(&bbs, 8);
8978
38af990ff584 [gaim-migrate @ 9752]
Tim Ringenbach <marv@pidgin.im>
parents: 8971
diff changeset
1776 if (memcmp(cookie, cookie2, 8) != 0)
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1777 faimdprintf(sess, 0, "rend: warning cookies don't match!\n");
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1778 memcpy(args.cookie, cookie2, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1779 free(cookie2);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1780
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1781 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1782 * The next 16bytes are a capability block so we can
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1783 * identify what type of rendezvous this is.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1784 */
7334
4d1a7f313b70 [gaim-migrate @ 7922]
Mark Doliner <markdoliner@pidgin.im>
parents: 7283
diff changeset
1785 args.reqclass = aim_locate_getcaps(sess, &bbs, 0x10);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1786
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1787 /*
2196
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1788 * What follows may be TLVs or nothing, depending on the
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1789 * purpose of the message.
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1790 *
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1791 * Ack packets for instance have nothing more to them.
f39aeaa5f829 [gaim-migrate @ 2206]
Adam Fritzler <mid@auk.cx>
parents: 2167
diff changeset
1792 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1793 list2 = aim_tlvlist_read(&bbs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1794
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1795 /*
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1796 * IP address to proxy the file transfer through.
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1797 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1798 * 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
1799 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1800 if (aim_tlv_gettlv(list2, 0x0002, 1)) {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1801 aim_tlv_t *iptlv;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1802
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1803 iptlv = aim_tlv_gettlv(list2, 0x0002, 1);
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1804 if (iptlv->length == 4)
7495
98295ab34bf6 [gaim-migrate @ 8108]
Evan Schoenberg <evands@pidgin.im>
parents: 7334
diff changeset
1805 snprintf(proxyip, sizeof(proxyip), "%hhu.%hhu.%hhu.%hhu",
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1806 iptlv->value[0], iptlv->value[1],
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1807 iptlv->value[2], iptlv->value[3]);
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
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1810 /*
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1811 * IP address from the perspective of the client.
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1812 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1813 if (aim_tlv_gettlv(list2, 0x0003, 1)) {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1814 aim_tlv_t *iptlv;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1815
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1816 iptlv = aim_tlv_gettlv(list2, 0x0003, 1);
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1817 if (iptlv->length == 4)
7495
98295ab34bf6 [gaim-migrate @ 8108]
Evan Schoenberg <evands@pidgin.im>
parents: 7334
diff changeset
1818 snprintf(clientip, sizeof(clientip), "%hhu.%hhu.%hhu.%hhu",
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1819 iptlv->value[0], iptlv->value[1],
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1820 iptlv->value[2], iptlv->value[3]);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1821 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1822
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1823 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1824 * Verified IP address (from the perspective of Oscar).
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 * This is added by the server.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1827 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1828 if (aim_tlv_gettlv(list2, 0x0004, 1)) {
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1829 aim_tlv_t *iptlv;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1830
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1831 iptlv = aim_tlv_gettlv(list2, 0x0004, 1);
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1832 if (iptlv->length == 4)
7495
98295ab34bf6 [gaim-migrate @ 8108]
Evan Schoenberg <evands@pidgin.im>
parents: 7334
diff changeset
1833 snprintf(verifiedip, sizeof(verifiedip), "%hhu.%hhu.%hhu.%hhu",
4901
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1834 iptlv->value[0], iptlv->value[1],
8a9aebd9897f [gaim-migrate @ 5235]
Mark Doliner <markdoliner@pidgin.im>
parents: 4898
diff changeset
1835 iptlv->value[2], iptlv->value[3]);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1836 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1837
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1838 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1839 * Port number for something.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1840 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1841 if (aim_tlv_gettlv(list2, 0x0005, 1))
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1842 args.port = aim_tlv_get16(list2, 0x0005, 1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1843
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1844 /*
8708
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1845 * Something to do with ft? -- two bytes
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1846 * 0x0001 - "I want to send you this file"
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1847 * 0x0002 - "I will accept this file from you"
8708
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1848 * 0x0002 - Also used in ICQ Lite Beta 4.0 URLs
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1849 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1850 if (aim_tlv_gettlv(list2, 0x000a, 1))
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1851 ;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1852
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1853 /*
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1854 * Error code.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1855 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1856 if (aim_tlv_gettlv(list2, 0x000b, 1))
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1857 args.errorcode = aim_tlv_get16(list2, 0x000b, 1);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1858
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1859 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1860 * Invitation message / chat description.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1861 */
9933
61bd3fadbfe6 [gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents: 9826
diff changeset
1862 if (aim_tlv_gettlv(list2, 0x000c, 1)) {
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1863 args.msg = aim_tlv_getstr(list2, 0x000c, 1);
9933
61bd3fadbfe6 [gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents: 9826
diff changeset
1864 args.msglen = aim_tlv_getlength(list2, 0x000c, 1);
61bd3fadbfe6 [gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents: 9826
diff changeset
1865 }
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1866
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1867 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1868 * Character set.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1869 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1870 if (aim_tlv_gettlv(list2, 0x000d, 1))
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1871 args.encoding = aim_tlv_getstr(list2, 0x000d, 1);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
1872
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1873 /*
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1874 * Language.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1875 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1876 if (aim_tlv_gettlv(list2, 0x000e, 1))
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1877 args.language = aim_tlv_getstr(list2, 0x000e, 1);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1878
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1879 /*
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1880 * Unknown -- no value
5146
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
1881 *
56b1615ba288 [gaim-migrate @ 5510]
Mark Doliner <markdoliner@pidgin.im>
parents: 4901
diff changeset
1882 * Maybe means we should connect directly to transfer the file?
8708
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1883 * Also used in ICQ Lite Beta 4.0 URLs. Also empty.
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1884 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1885 if (aim_tlv_gettlv(list2, 0x000f, 1))
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1886 ;
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1887
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1888 /*
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1889 * Unknown -- no value
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1890 *
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1891 * 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
1892 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1893 if (aim_tlv_gettlv(list2, 0x0010, 1))
4898
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1894 ;
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1895
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1896 if (strlen(proxyip))
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1897 args.proxyip = (char *)proxyip;
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1898 if (strlen(clientip))
285e9ff6eeb8 [gaim-migrate @ 5230]
Mark Doliner <markdoliner@pidgin.im>
parents: 4838
diff changeset
1899 args.clientip = (char *)clientip;
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1900 if (strlen(verifiedip))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1901 args.verifiedip = (char *)verifiedip;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1902
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1903 /*
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
1904 * This must be present in PROPOSALs, but will probably not
8708
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1905 * exist in CANCELs and ACCEPTs. Also exists in ICQ Lite
31a7bd5a32f4 [gaim-migrate @ 9461]
Mark Doliner <markdoliner@pidgin.im>
parents: 8225
diff changeset
1906 * Beta 4.0 URLs (AIM_CAPS_ICQSERVERRELAY).
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1907 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1908 * Service Data blocks are module-specific in format.
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1909 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1910 if ((servdatatlv = aim_tlv_gettlv(list2, 0x2711 /* 10001 */, 1))) {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1911
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1912 aim_bstream_init(&sdbs, servdatatlv->value, servdatatlv->length);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1913 sdbsptr = &sdbs;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1914 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1915
2167
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 * 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
1918 *
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1919 * Not all of them have special handling (yet).
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1920 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1921 if (args.reqclass & AIM_CAPS_BUDDYICON)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1922 incomingim_ch2_buddyicon(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1923 else if (args.reqclass & AIM_CAPS_SENDBUDDYLIST)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1924 incomingim_ch2_buddylist(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1925 else if (args.reqclass & AIM_CAPS_CHAT)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1926 incomingim_ch2_chat(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2866
159551b6db88 [gaim-migrate @ 2879]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2808
diff changeset
1927 else if (args.reqclass & AIM_CAPS_ICQSERVERRELAY)
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1928 incomingim_ch2_icqserverrelay(sess, mod, rx, snac, userinfo, &args, sdbsptr);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1929 else if (args.reqclass & AIM_CAPS_SENDFILE)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
1930 incomingim_ch2_sendfile(sess, mod, rx, snac, userinfo, &args, sdbsptr);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1931
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1932 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1933 ret = userfunc(sess, rx, channel, userinfo, &args);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1934
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1935
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1936 if (args.destructor)
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1937 ((ch2_args_destructor_t)args.destructor)(sess, &args);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1938
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1939 free((char *)args.msg);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1940 free((char *)args.encoding);
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
1941 free((char *)args.language);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1942
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1943 aim_tlvlist_free(&list2);
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 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1946 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1947
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1948 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
1949 {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1950 aim_bstream_t meat;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1951 aim_rxcallback_t userfunc;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1952 aim_tlv_t *block;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1953 struct aim_incomingim_ch4_args args;
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3141
diff changeset
1954 int ret = 0;
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1955
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1956 /*
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1957 * Make a bstream for the meaty part. Yum. Meat.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1958 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
1959 if (!(block = aim_tlv_gettlv(tlvlist, 0x0005, 1)))
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1960 return -1;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1961 aim_bstream_init(&meat, block->value, block->length);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1962
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1963 args.uin = aimbs_getle32(&meat);
4173
e2528bd24e6f [gaim-migrate @ 4403]
Mark Doliner <markdoliner@pidgin.im>
parents: 4154
diff changeset
1964 args.type = aimbs_getle8(&meat);
e2528bd24e6f [gaim-migrate @ 4403]
Mark Doliner <markdoliner@pidgin.im>
parents: 4154
diff changeset
1965 args.flags = aimbs_getle8(&meat);
4076
563a1af15501 [gaim-migrate @ 4291]
Mark Doliner <markdoliner@pidgin.im>
parents: 4071
diff changeset
1966 args.msglen = aimbs_getle16(&meat);
563a1af15501 [gaim-migrate @ 4291]
Mark Doliner <markdoliner@pidgin.im>
parents: 4071
diff changeset
1967 args.msg = aimbs_getraw(&meat, args.msglen);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1968
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1969 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1970 ret = userfunc(sess, rx, channel, userinfo, &args);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1971
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1972 free(args.msg);
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1973
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1974 return ret;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1975 }
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
1976
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1977 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1978 * Subtype 0x0007
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
1979 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1980 * It can easily be said that parsing ICBMs is THE single
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1981 * most difficult thing to do in the in AIM protocol. In
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1982 * fact, I think I just did say that.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1983 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1984 * Below is the best damned solution I've come up with
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1985 * over the past sixteen months of battling with it. This
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1986 * can parse both away and normal messages from every client
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1987 * 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
1988 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1989 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1990 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
1991 {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1992 int i, ret = 0;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1993 fu8_t cookie[8];
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
1994 fu16_t channel;
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1995 aim_userinfo_t userinfo;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1996
2421
009ae3cf0e83 [gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2341
diff changeset
1997 memset(&userinfo, 0x00, sizeof(aim_userinfo_t));
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1998
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
1999 /*
8225
4ef47db8c9bc [gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents: 7495
diff changeset
2000 * Read ICBM Cookie.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2001 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2002 for (i = 0; i < 8; i++)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2003 cookie[i] = aimbs_get8(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2004
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2005 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2006 * Channel ID.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2007 *
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2008 * Channel 0x0001 is the message channel. It is
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2009 * used to send basic ICBMs.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2010 *
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
2011 * Channel 0x0002 is the Rendezvous channel, which
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2012 * is where Chat Invitiations and various client-client
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2013 * connection negotiations come from.
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2014 *
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2015 * Channel 0x0003 is used for chat messages.
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2016 *
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2017 * Channel 0x0004 is used for ICQ authorization, or
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2018 * possibly any system notice.
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2019 *
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2020 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2021 channel = aimbs_get16(bs);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2022
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2023 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2024 * Extract the standard user info block.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2025 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2026 * Note that although this contains TLVs that appear contiguous
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2027 * with the TLVs read below, they are two different pieces. The
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2028 * userinfo block contains the number of TLVs that contain user
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 8708
diff changeset
2029 * information, the rest are not even though there is no separation.
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2030 * You can start reading the message TLVs after aim_info_extract()
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2031 * parses out the standard userinfo block.
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2032 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2033 * That also means that TLV types can be duplicated between the
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2034 * userinfo block and the rest of the message, however there should
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2035 * never be two TLVs of the same type in one block.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2036 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2037 */
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2038 aim_info_extract(sess, bs, &userinfo);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2039
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2040 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2041 * From here on, its depends on what channel we're on.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2042 *
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2043 * Technically all channels have a TLV list have this, however,
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2044 * 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
2045 * performance reasons (less memory allocation).
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2046 */
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2047 if (channel == 1) {
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 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
2050
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
2051 } else if (channel == 2) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2052 aim_tlvlist_t *tlvlist;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2053
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2054 /*
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2055 * Read block of TLVs (not including the userinfo data). All
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2056 * further data is derived from what is parsed here.
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2057 */
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2058 tlvlist = aim_tlvlist_read(bs);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2059
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2060 ret = incomingim_ch2(sess, mod, rx, snac, channel, &userinfo, tlvlist, cookie);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2061
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2062 aim_tlvlist_free(&tlvlist);
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
2063
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2064 } else if (channel == 4) {
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2065 aim_tlvlist_t *tlvlist;
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2066
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2067 tlvlist = aim_tlvlist_read(bs);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2068 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
2069 aim_tlvlist_free(&tlvlist);
3141
3adc8022a85f [gaim-migrate @ 3156]
Rob Flynn <gaim@robflynn.com>
parents: 2869
diff changeset
2070
2507
4f2c8913240e [gaim-migrate @ 2520]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2421
diff changeset
2071 } else {
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2072 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
2073 }
2869
3165d3aff6c0 [gaim-migrate @ 2882]
Adam Fritzler <mid@auk.cx>
parents: 2866
diff changeset
2074
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2075 aim_info_free(&userinfo);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2076
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2077 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2078 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2079
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2080 /*
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2081 * Subtype 0x0008 - Send a warning to sn.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2082 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2083 * Flags:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2084 * 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
2085 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2086 * returns -1 on error (couldn't alloc packet), 0 on success.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2087 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2088 */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2089 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
2090 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2091 aim_frame_t *fr;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2092 aim_snacid_t snacid;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2093
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2094 if (!sess || !conn || !sn)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2095 return -EINVAL;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2096
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2097 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
2098 return -ENOMEM;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2099
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2100 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
2101 aim_putsnac(&fr->data, 0x0004, 0x0008, 0x0000, snacid);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2102
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
2103 aimbs_put16(&fr->data, (flags & AIM_WARN_ANON) ? 0x0001 : 0x0000);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2104 aimbs_put8(&fr->data, strlen(sn));
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
2105 aimbs_putstr(&fr->data, sn);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2106
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2107 aim_tx_enqueue(sess, fr);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2108
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2109 return 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2110 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2111
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2112 /* Subtype 0x000a */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2113 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
2114 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2115 int ret = 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2116 aim_rxcallback_t userfunc;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2117 fu16_t channel, nummissed, reason;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2118 aim_userinfo_t userinfo;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2119
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
2120 while (aim_bstream_empty(bs)) {
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2121
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2122 channel = aimbs_get16(bs);
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2123 aim_info_extract(sess, bs, &userinfo);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2124 nummissed = aimbs_get16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2125 reason = aimbs_get16(bs);
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 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2128 ret = userfunc(sess, rx, channel, &userinfo, nummissed, reason);
5836
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2129
88819e4cc840 [gaim-migrate @ 6267]
Mark Doliner <markdoliner@pidgin.im>
parents: 5556
diff changeset
2130 aim_info_free(&userinfo);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2131 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2132
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2133 return ret;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2134 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2135
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 * Subtype 0x000b
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2138 *
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2139 * Possible codes:
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2140 * AIM_TRANSFER_DENY_NOTSUPPORTED -- "client does not support"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2141 * AIM_TRANSFER_DENY_DECLINE -- "client has declined transfer"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2142 * AIM_TRANSFER_DENY_NOTACCEPTING -- "client is not accepting transfers"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2143 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2144 */
11000
89dd47a25272 [gaim-migrate @ 12849]
Mark Doliner <markdoliner@pidgin.im>
parents: 10991
diff changeset
2145 faim_export int aim_im_denytransfer(aim_session_t *sess, const char *sender, const fu8_t *cookie, fu16_t code)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2146 {
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2147 aim_conn_t *conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2148 aim_frame_t *fr;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2149 aim_snacid_t snacid;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2150 aim_tlvlist_t *tl = NULL;
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
2151
2673
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2152 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0004)))
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2153 return -EINVAL;
84bb25b76700 [gaim-migrate @ 2686]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2672
diff changeset
2154
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2155 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
2156 return -ENOMEM;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2157
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2158 snacid = aim_cachesnac(sess, 0x0004, 0x000b, 0x0000, NULL, 0);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2159 aim_putsnac(&fr->data, 0x0004, 0x000b, 0x0000, snacid);
10051
a05b969d98c9 [gaim-migrate @ 11012]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
2160
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2161 aimbs_putraw(&fr->data, cookie, 8);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2162
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2163 aimbs_put16(&fr->data, 0x0002); /* channel */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2164 aimbs_put8(&fr->data, strlen(sender));
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
2165 aimbs_putstr(&fr->data, sender);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2166
7167
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2167 aim_tlvlist_add_16(&tl, 0x0003, code);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2168 aim_tlvlist_write(&fr->data, &tl);
9cfb68a44e17 [gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents: 6871
diff changeset
2169 aim_tlvlist_free(&tl);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2170
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2171 aim_tx_enqueue(sess, fr);
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 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2174 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2175
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2176 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2177 * Subtype 0x000b - Receive the response from an ICQ status message request.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2178 *
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2179 * This contains the ICQ status message. Go figure.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2180 *
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2181 */
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2182 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
2183 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2184 int ret = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2185 aim_rxcallback_t userfunc;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2186 fu16_t channel, reason;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2187 char *sn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2188 fu8_t *ck, snlen;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2189
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2190 ck = aimbs_getraw(bs, 8);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2191 channel = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2192 snlen = aimbs_get8(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2193 sn = aimbs_getstr(bs, snlen);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2194 reason = aimbs_get16(bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2195
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2196 if (channel == 0x0002) { /* File transfer declined */
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2197 aimbs_get16(bs); /* Unknown */
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2198 aimbs_get16(bs); /* Unknown */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2199 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2200 ret = userfunc(sess, rx, channel, sn, reason, ck);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2201 } else if (channel == 0x0004) { /* ICQ message */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2202 switch (reason) {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2203 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
2204 fu8_t statusmsgtype, *msg;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2205 fu16_t len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2206 fu32_t state;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2207
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2208 len = aimbs_getle16(bs); /* Should be 0x001b */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2209 aim_bstream_advance(bs, len); /* Unknown */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2210
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2211 len = aimbs_getle16(bs); /* Should be 0x000e */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2212 aim_bstream_advance(bs, len); /* Unknown */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2213
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2214 statusmsgtype = aimbs_getle8(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2215 switch (statusmsgtype) {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2216 case 0xe8:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2217 state = AIM_ICQ_STATE_AWAY;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2218 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2219 case 0xe9:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2220 state = AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_BUSY;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2221 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2222 case 0xea:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2223 state = AIM_ICQ_STATE_AWAY | AIM_ICQ_STATE_OUT;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2224 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2225 case 0xeb:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2226 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
2227 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2228 case 0xec:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2229 state = AIM_ICQ_STATE_CHAT;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2230 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2231 default:
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2232 state = 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2233 break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2234 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2235
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2236 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
2237 aimbs_getle16(bs); /* Unknown - 0x0000 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2238 aimbs_getle16(bs); /* Unknown - 0x0000 */
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 len = aimbs_getle16(bs);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2241 msg = aimbs_getraw(bs, len);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2242
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2243 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2244 ret = userfunc(sess, rx, channel, sn, reason, state, msg);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2245
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2246 free(msg);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2247 } break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2248
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2249 default: {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2250 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2251 ret = userfunc(sess, rx, channel, sn, reason);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2252 } break;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2253 } /* end switch */
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2254 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3595
diff changeset
2255
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2256 free(ck);
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2257 free(sn);
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2258
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2259 return ret;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2260 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2261
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2262 /*
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2263 * Subtype 0x000c - Receive an ack after sending an ICBM.
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2264 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2265 * 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
2266 * (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
2267 * sent.
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2268 *
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2269 */
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2270 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
2271 {
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2272 aim_rxcallback_t userfunc;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2273 fu16_t ch;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2274 fu8_t *ck;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2275 char *sn;
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2276 int ret = 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2277
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2278 ck = aimbs_getraw(bs, 8);
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2279 ch = aimbs_get16(bs);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2280 sn = aimbs_getstr(bs, aimbs_get8(bs));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2281
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2282 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
2283 ret = userfunc(sess, rx, ch, sn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2284
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2285 free(sn);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2286 free(ck);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2287
2341
1577b2cac2da [gaim-migrate @ 2354]
Arkadiusz Miskiewicz <arekm@maven.pl>
parents: 2315
diff changeset
2288 return ret;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2289 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2290
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2291 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2292 * Subtype 0x0014 - Send a mini typing notification (mtn) packet.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2293 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2294 * 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
2295 * and Gaim 0.60 and newer.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2296 *
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2297 */
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 5971
diff changeset
2298 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
2299 {
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2300 aim_conn_t *conn;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2301 aim_frame_t *fr;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2302 aim_snacid_t snacid;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2303
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2304 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0002)))
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2305 return -EINVAL;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2306
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2307 if (!sn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2308 return -EINVAL;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2309
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2310 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
2311 return -ENOMEM;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2312
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2313 snacid = aim_cachesnac(sess, 0x0004, 0x0014, 0x0000, NULL, 0);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2314 aim_putsnac(&fr->data, 0x0004, 0x0014, 0x0000, snacid);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2315
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2316 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2317 * 8 days of light
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2318 * Er, that is to say, 8 bytes of 0's
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2319 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2320 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2321 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2322 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2323 aimbs_put16(&fr->data, 0x0000);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2324
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2325 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2326 * Type 1 (should be 0x0001 for mtn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2327 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2328 aimbs_put16(&fr->data, type1);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2329
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2330 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2331 * Dest sn
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2332 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2333 aimbs_put8(&fr->data, strlen(sn));
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10986
diff changeset
2334 aimbs_putstr(&fr->data, sn);
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2335
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2336 /*
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2337 * Type 2 (should be 0x0000, 0x0001, or 0x0002 for mtn)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2338 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2339 aimbs_put16(&fr->data, type2);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2340
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2341 aim_tx_enqueue(sess, fr);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2342
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2343 return 0;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2344 }
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2345
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2346 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2347 * Subtype 0x0014 - Receive a mini typing notification (mtn) packet.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2348 *
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2349 * 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
2350 * and Gaim 0.60 and newer.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3771
diff changeset
2351 *
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2352 */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2353 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
2354 {
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2355 int ret = 0;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2356 aim_rxcallback_t userfunc;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2357 char *sn;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2358 fu8_t snlen;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2359 fu16_t type1, type2;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2360
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2361 aim_bstream_advance(bs, 8); /* Unknown - All 0's */
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2362 type1 = aimbs_get16(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2363 snlen = aimbs_get8(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2364 sn = aimbs_getstr(bs, snlen);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2365 type2 = aimbs_get16(bs);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2366
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2367 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2368 ret = userfunc(sess, rx, type1, sn, type2);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2369
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2370 free(sn);
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2371
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2372 return ret;
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2373 }
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2374
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2375 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
2376 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2377
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2378 if (snac->subtype == 0x0005)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4173
diff changeset
2379 return aim_im_paraminfo(sess, mod, rx, snac, bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2380 else if (snac->subtype == 0x0006)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2381 return outgoingim(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2382 else if (snac->subtype == 0x0007)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2383 return incomingim(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2384 else if (snac->subtype == 0x000a)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2385 return missedcall(sess, mod, rx, snac, bs);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2386 else if (snac->subtype == 0x000b)
3212
3c00e6f5f085 [gaim-migrate @ 3229]
Mark Doliner <markdoliner@pidgin.im>
parents: 3159
diff changeset
2387 return clientautoresp(sess, mod, rx, snac, bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2388 else if (snac->subtype == 0x000c)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2389 return msgack(sess, mod, rx, snac, bs);
3595
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2390 else if (snac->subtype == 0x0014)
28da7ae040a5 [gaim-migrate @ 3697]
Mark Doliner <markdoliner@pidgin.im>
parents: 3255
diff changeset
2391 return mtn_receive(sess, mod, rx, snac, bs);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2392
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2393 return 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2394 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2395
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2196
diff changeset
2396 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
2397 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2398
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2399 mod->family = 0x0004;
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2639
diff changeset
2400 mod->version = 0x0001;
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2639
diff changeset
2401 mod->toolid = 0x0110;
4071
f0c425b22b92 [gaim-migrate @ 4283]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
2402 mod->toolversion = 0x0629;
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2403 mod->flags = 0;
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2404 strncpy(mod->name, "messaging", sizeof(mod->name));
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2405 mod->snachandler = snachandler;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2406
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2122
diff changeset
2407 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2408 }

mercurial