src/protocols/oscar/im.c

Fri, 09 Dec 2005 04:05:04 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Fri, 09 Dec 2005 04:05:04 +0000
changeset 12429
be0a04953525
parent 11399
2313bf7bed5b
child 12600
7ecd4441fdc7
permissions
-rw-r--r--

[gaim-migrate @ 14736]
There are quite a few cases of empty if blocks for various aim_tlv_gettlv() calls. These calls exist in the code as documentation of various TLVs seen in the wild, but unhandled in Gaim for whatever reason. I'm changing them so the compiler is happy. This way, we can get quite a few useful warnings by turning on -Wextra.

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

mercurial