libpurple/protocols/oscar/family_oservice.c

Sun, 11 Apr 2010 10:02:02 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sun, 11 Apr 2010 10:02:02 +0000
changeset 29986
ac5cbbbd080d
parent 29978
22849432e852
child 30646
614d7280770c
permissions
-rw-r--r--

There's no reason to call into oscar.c anymore, so move this icon stuff
directly into family_oservice.c

2 files changed, 38 insertions(+), 71 deletions(-)
But more importantly, this is simpler and oscar.c is smaller.

13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
2 * Purple's oscar protocol plugin
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 * version 2 of the License, or (at your option) any later version.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
17 * License along with this library; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 17443
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
20
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 * Family 0x0001 - This is a very special group. All connections support
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 * this group, as it does some particularly good things (like rate limiting).
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26 #include "oscar.h"
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
27
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28 #include "cipher.h"
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29
29259
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
30 /*
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
31 * Each time we make a FLAP connection to an oscar server the server gives
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
32 * us a list of rate classes. Each rate class has different properties for
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
33 * how frequently we can send SNACs in that rate class before we become
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
34 * throttled or disconnected.
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
35 *
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
36 * The server also gives us a list of every available SNAC and tells us which
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
37 * rate class it's in. There are a lot of different SNACs, so this list can be
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
38 * fairly large. One important characteristic of these rate classes is that
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
39 * currently (and since at least 2004) most SNACs are in the same rate class.
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
40 *
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
41 * One optimization we can do to save memory is to only keep track of SNACs
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
42 * that are in classes other than this default rate class. So if we try to
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
43 * look up a SNAC and it's not in our hash table then we can assume that it's
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
44 * in the default rate class.
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
45 */
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
46 #define OSCAR_DEFAULT_RATECLASS 1
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
47
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
48 /* Subtype 0x0002 - Client Online */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
49 void
24114
9f8a5772ffc6 It helps to rename the function
Mark Doliner <markdoliner@pidgin.im>
parents: 23526
diff changeset
50 aim_srv_clientready(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
52 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53 aim_snacid_t snacid;
14410
a5ae93474db6 [gaim-migrate @ 17050]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
54 GSList *cur;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
56 byte_stream_new(&bs, 1142);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
58 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
59 * Send only the tool versions that the server cares about (that it
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 * marked as supporting in the server ready SNAC).
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
61 */
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
62 for (cur = conn->groups; cur != NULL; cur = cur->next)
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
63 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
64 aim_module_t *mod;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
65
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
66 if ((mod = aim__findmodulebygroup(od, GPOINTER_TO_UINT(cur->data))))
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
67 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
68 byte_stream_put16(&bs, mod->family);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
69 byte_stream_put16(&bs, mod->version);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
70 byte_stream_put16(&bs, mod->toolid);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
71 byte_stream_put16(&bs, mod->toolversion);
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
72 }
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
73 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
74
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
75 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0002, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
76 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0002, 0x0000, snacid, &bs);
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
77
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
78 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
79 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
80
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
82 * Subtype 0x0003 - Host Online
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
83 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
84 * See comments in conn.c about how the group associations are supposed
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
85 * to work, and how they really work.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
86 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
87 * This info probably doesn't even need to make it to the client.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
88 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
89 * We don't actually call the client here. This starts off the connection
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
90 * initialization routine required by all AIM connections. The next time
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
91 * the client is called is the CONNINITDONE callback, which should be
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
92 * shortly after the rate information is acknowledged.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
93 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
94 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
95 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
96 hostonline(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
97 {
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
98 int group;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
99
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
100 while (byte_stream_empty(bs))
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
101 {
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
102 group = byte_stream_get16(bs);
14410
a5ae93474db6 [gaim-migrate @ 17050]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
103 conn->groups = g_slist_prepend(conn->groups, GUINT_TO_POINTER(group));
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
104 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
105
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 * Next step is in the Host Versions handler.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
109 * Note that we must send this before we request rates, since
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
110 * the format of the rate information depends on the versions we
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
111 * give it.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
112 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
113 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
114 aim_srv_setversions(od, conn);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
115
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
116 return 1;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
117 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
118
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
119 /* Subtype 0x0004 - Service request */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
120 void
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
121 aim_srv_requestnew(OscarData *od, guint16 serviceid)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
122 {
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
123 FlapConnection *conn;
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
124 ByteStream bs;
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
125 aim_snacid_t snacid;
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
126 GSList *tlvlist = NULL;
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
127
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
128 conn = flap_connection_findbygroup(od, SNAC_FAMILY_BOS);
15341
486e3de35514 [gaim-migrate @ 18069]
Evan Schoenberg <evands@pidgin.im>
parents: 15168
diff changeset
129 if(!conn)
486e3de35514 [gaim-migrate @ 18069]
Evan Schoenberg <evands@pidgin.im>
parents: 15168
diff changeset
130 return;
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
131
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
132 byte_stream_new(&bs, 6);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
133
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
134 byte_stream_put16(&bs, serviceid);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
135
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
136 if (od->use_ssl)
25519
d15507b37c1a Shuffle a few comments around to make it look like I did something
Mark Doliner <markdoliner@pidgin.im>
parents: 25127
diff changeset
137 /* Request SSL Connection */
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
138 aim_tlvlist_add_noval(&tlvlist, 0x008c);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
139
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
140 aim_tlvlist_write(&bs, &tlvlist);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
141 aim_tlvlist_free(tlvlist);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
142
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
143 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0004, 0x0000, NULL, 0);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
144 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0004, 0x0000, snacid, &bs);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
145
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
146 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
147 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
148
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
149 /*
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
150 * Join a room of name roomname. This is the first step to joining an
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
151 * already created room. It's basically a Service Request for
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
152 * family 0x000e, with a little added on to specify the exchange and room
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
153 * name.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
154 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
155 int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
156 aim_chat_join(OscarData *od, guint16 exchange, const char *roomname, guint16 instance)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
157 {
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
158 FlapConnection *conn;
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
159 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
160 aim_snacid_t snacid;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
161 GSList *tlvlist = NULL;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
162 struct chatsnacinfo csi;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
163
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
164 conn = flap_connection_findbygroup(od, SNAC_FAMILY_BOS);
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
165 if (!conn || !roomname || roomname[0] == '\0')
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
166 return -EINVAL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
167
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
168 byte_stream_new(&bs, 506);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
169
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
170 memset(&csi, 0, sizeof(csi));
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
171 csi.exchange = exchange;
25700
1c47af7fda59 I forgot about g_strlcpy in 3d3f63414473d19a9f2eb0cdeab673cde67dbda9.
Daniel Atallah <datallah@pidgin.im>
parents: 25696
diff changeset
172 g_strlcpy(csi.name, roomname, sizeof(csi.name));
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
173 csi.instance = instance;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
174
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
175 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
176 * Requesting service chat (0x000e)
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
177 */
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
178 byte_stream_put16(&bs, 0x000e);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
179
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
180 aim_tlvlist_add_chatroom(&tlvlist, 0x0001, exchange, roomname, instance);
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
181
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
182 if (od->use_ssl)
25519
d15507b37c1a Shuffle a few comments around to make it look like I did something
Mark Doliner <markdoliner@pidgin.im>
parents: 25127
diff changeset
183 /* Request SSL Connection */
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
184 aim_tlvlist_add_noval(&tlvlist, 0x008c);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
185
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
186 aim_tlvlist_write(&bs, &tlvlist);
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
187 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
188
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
189 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0004, 0x0000, &csi, sizeof(csi));
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
190 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0004, 0x0000, snacid, &bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
191
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
192 byte_stream_destroy(&bs);
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
193
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
194 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
195 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
196
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
197 /* Subtype 0x0005 - Redirect */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
198 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
199 redirect(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
200 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
201 struct aim_redirect_data redir;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
202 aim_rxcallback_t userfunc;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
203 GSList *tlvlist;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
204 aim_snac_t *origsnac = NULL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
205 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
206
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
207 memset(&redir, 0, sizeof(redir));
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
208
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
209 tlvlist = aim_tlvlist_read(bs);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
210
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
211 if (!aim_tlv_gettlv(tlvlist, 0x000d, 1) ||
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
212 !aim_tlv_gettlv(tlvlist, 0x0005, 1) ||
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
213 !aim_tlv_gettlv(tlvlist, 0x0006, 1)) {
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
214 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
215 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
216 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
217
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
218 redir.group = aim_tlv_get16(tlvlist, 0x000d, 1);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
219 redir.ip = aim_tlv_getstr(tlvlist, 0x0005, 1);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
220 redir.cookielen = aim_tlv_gettlv(tlvlist, 0x0006, 1)->length;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
221 redir.cookie = (guchar *)aim_tlv_getstr(tlvlist, 0x0006, 1);
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
222 redir.ssl_cert_cn = aim_tlv_getstr(tlvlist, 0x008d, 1);
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
223 redir.use_ssl = aim_tlv_get8(tlvlist, 0x008e, 1);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
224
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
225 /* Fetch original SNAC so we can get csi if needed */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
226 origsnac = aim_remsnac(od, snac->id);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
227
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
228 if ((redir.group == SNAC_FAMILY_CHAT) && origsnac) {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
229 struct chatsnacinfo *csi = (struct chatsnacinfo *)origsnac->data;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
230
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
231 redir.chat.exchange = csi->exchange;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
232 redir.chat.room = csi->name;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
233 redir.chat.instance = csi->instance;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
234 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
235
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
236 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
237 ret = userfunc(od, conn, frame, &redir);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
238
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
239 g_free((void *)redir.ip);
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
240 g_free((void *)redir.cookie);
25127
5fc0c3f2a102 Part 2 of the continuing effort to get OSCAR over SSL working.
Paul Aurich <darkrain42@pidgin.im>
parents: 24114
diff changeset
241 g_free((void *)redir.ssl_cert_cn);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
242
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
243 if (origsnac)
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
244 g_free(origsnac->data);
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
245 g_free(origsnac);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
246
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
247 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
248
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
249 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
250 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
251
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
252 /* Subtype 0x0006 - Request Rate Information. */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
253 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
254 aim_srv_reqrates(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
255 {
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
256 aim_genericreq_n_snacid(od, conn, SNAC_FAMILY_OSERVICE, 0x0006);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
257 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
258
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
259 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
260 * OSCAR defines several 'rate classes'. Each class has separate
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
261 * rate limiting properties (limit level, alert level, disconnect
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
262 * level, etc), and a set of SNAC family/type pairs associated with
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
263 * it. The rate classes, their limiting properties, and the definitions
14708
6006e069317c [gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents: 14614
diff changeset
264 * of which SNACs belong to which class are defined in the
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
265 * Rate Response packet at login to each host.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
266 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
267 * Logically, all rate offenses within one class count against further
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
268 * offenses for other SNACs in the same class (ie, sending messages
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
269 * too fast will limit the number of user info requests you can send,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
270 * since those two SNACs are in the same rate class).
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
271 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
272 * Since the rate classes are defined dynamically at login, the values
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
273 * below may change. But they seem to be fairly constant.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
274 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
275 * Currently, BOS defines five rate classes, with the commonly used
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
276 * members as follows...
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
277 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
278 * Rate class 0x0001:
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
279 * - Everything thats not in any of the other classes
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
280 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
281 * Rate class 0x0002:
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
282 * - Buddy list add/remove
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
283 * - Permit list add/remove
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
284 * - Deny list add/remove
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
285 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
286 * Rate class 0x0003:
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
287 * - User information requests
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
288 * - Outgoing ICBMs
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
289 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
290 * Rate class 0x0004:
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
291 * - A few unknowns: 2/9, 2/b, and f/2
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
292 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
293 * Rate class 0x0005:
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
294 * - Chat room create
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
295 * - Outgoing chat ICBMs
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
296 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
297 * The only other thing of note is that class 5 (chat) has slightly looser
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
298 * limiting properties than class 3 (normal messages). But thats just a
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
299 * small bit of trivia for you.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301 * The last thing that needs to be learned about the rate limiting
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302 * system is how the actual numbers relate to the passing of time. This
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
303 * seems to be a big mystery.
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
304 *
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
305 * See joscar's javadoc for the RateClassInfo class for a great
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
306 * explanation. You might be able to find it at
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
307 * http://dscoder.com/RateClassInfo.html
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
308 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
309
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
310 static struct rateclass *
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
311 rateclass_find(GSList *rateclasses, guint16 id)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
312 {
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
313 GSList *tmp;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
314
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
315 for (tmp = rateclasses; tmp != NULL; tmp = tmp->next)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
316 {
15152
6eb1a86c7729 [gaim-migrate @ 17876]
Mark Doliner <markdoliner@pidgin.im>
parents: 15149
diff changeset
317 struct rateclass *rateclass;
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
318 rateclass = tmp->data;
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
319 if (rateclass->classid == id)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
320 return rateclass;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
321 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
322
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
323 return NULL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
324 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
325
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
326 /* Subtype 0x0007 - Rate Parameters */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
327 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
328 rateresp(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
329 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
330 guint16 numclasses, i;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
331 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
332
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
333 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
334 * First are the parameters for each rate class.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
335 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
336 numclasses = byte_stream_get16(bs);
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
337 for (i = 0; i < numclasses; i++)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
338 {
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
339 struct rateclass *rateclass;
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
340 guint32 delta;
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
341 struct timeval now;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
342
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
343 gettimeofday(&now, NULL);
29254
49bb9cb05e38 We set every field of this struct explicitly when we create it, so don't
Mark Doliner <markdoliner@pidgin.im>
parents: 28804
diff changeset
344 rateclass = g_new(struct rateclass, 1);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
345
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
346 rateclass->classid = byte_stream_get16(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
347 rateclass->windowsize = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
348 rateclass->clear = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
349 rateclass->alert = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
350 rateclass->limit = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
351 rateclass->disconnect = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
352 rateclass->current = byte_stream_get32(bs);
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
353 rateclass->max = byte_stream_get32(bs);
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
354 if (mod->version >= 3) {
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
355 delta = byte_stream_get32(bs);
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
356 rateclass->dropping_snacs = byte_stream_get8(bs);
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
357 } else {
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
358 delta = 0;
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
359 rateclass->dropping_snacs = 0;
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
360 }
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
361
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
362 rateclass->last.tv_sec = now.tv_sec - delta / 1000;
29257
887e473a2be1 Let's just do this mod on the fly instead of changing the variable
Mark Doliner <markdoliner@pidgin.im>
parents: 29256
diff changeset
363 rateclass->last.tv_usec = now.tv_usec - (delta % 1000) * 1000;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
364
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
365 conn->rateclasses = g_slist_prepend(conn->rateclasses, rateclass);
29259
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
366
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
367 if (rateclass->classid == OSCAR_DEFAULT_RATECLASS)
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
368 conn->default_rateclass = rateclass;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
369 }
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
370 conn->rateclasses = g_slist_reverse(conn->rateclasses);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
371
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
372 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
373 * Then the members of each class.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
374 */
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
375 for (i = 0; i < numclasses; i++)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
376 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
377 guint16 classid, count;
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
378 struct rateclass *rateclass;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
379 int j;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
380
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
381 classid = byte_stream_get16(bs);
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
382 count = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
383
29259
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
384 if (classid == OSCAR_DEFAULT_RATECLASS) {
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
385 /*
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
386 * Don't bother adding these SNACs to the hash table. See the
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
387 * comment for OSCAR_DEFAULT_RATECLASS at the top of this file.
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
388 */
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
389 byte_stream_advance(bs, 4 * count);
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
390 continue;
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
391 }
87336a2f470d optimization to the oscar prpl to use less memory, care of Shaun Lindsay
Mark Doliner <markdoliner@pidgin.im>
parents: 29257
diff changeset
392
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
393 rateclass = rateclass_find(conn->rateclasses, classid);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
394
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
395 for (j = 0; j < count; j++)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
396 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
397 guint16 group, subtype;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
398
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
399 group = byte_stream_get16(bs);
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
400 subtype = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
401
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
402 if (rateclass != NULL)
29261
e39105368ed6 Put all our rateclass members in a single hash table instead of in one
Mark Doliner <markdoliner@pidgin.im>
parents: 29259
diff changeset
403 g_hash_table_insert(conn->rateclass_members,
15168
4e604d302448 [gaim-migrate @ 17892]
Mark Doliner <markdoliner@pidgin.im>
parents: 15153
diff changeset
404 GUINT_TO_POINTER((group << 16) + subtype),
29261
e39105368ed6 Put all our rateclass members in a single hash table instead of in one
Mark Doliner <markdoliner@pidgin.im>
parents: 29259
diff changeset
405 rateclass);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
406 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
407 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
408
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
409 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
410 * We don't pass the rate information up to the client, as it really
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
411 * doesn't care. The information is stored in the connection, however
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
412 * so that we can do rate limiting management when sending SNACs.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
413 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
414
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
415 /*
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
416 * Subscribe to rate change information for all rate classes.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
417 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
418 aim_srv_rates_addparam(od, conn);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
419
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
420 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
421 * Finally, tell the client it's ready to go...
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
422 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
423 if ((userfunc = aim_callhandler(od, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNINITDONE)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
424 userfunc(od, conn, frame);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
425
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
426 return 1;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
427 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
428
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
429 /* Subtype 0x0008 - Add Rate Parameter */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
430 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
431 aim_srv_rates_addparam(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
432 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
433 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
434 aim_snacid_t snacid;
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
435 GSList *tmp;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
436
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
437 byte_stream_new(&bs, 502);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
438
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
439 for (tmp = conn->rateclasses; tmp != NULL; tmp = tmp->next)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
440 {
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
441 struct rateclass *rateclass;
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
442 rateclass = tmp->data;
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
443 byte_stream_put16(&bs, rateclass->classid);
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
444 }
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
445
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
446 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0008, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
447 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0008, 0x0000, snacid, &bs);
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
448
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
449 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
450 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
451
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
452 /* Subtype 0x0009 - Delete Rate Parameter */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
453 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
454 aim_srv_rates_delparam(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
455 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
456 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
457 aim_snacid_t snacid;
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
458 GSList *tmp;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
459
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
460 byte_stream_new(&bs, 502);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
461
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
462 for (tmp = conn->rateclasses; tmp != NULL; tmp = tmp->next)
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
463 {
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
464 struct rateclass *rateclass;
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
465 rateclass = tmp->data;
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
466 byte_stream_put16(&bs, rateclass->classid);
15148
48ce0abb422a [gaim-migrate @ 17872]
Mark Doliner <markdoliner@pidgin.im>
parents: 15147
diff changeset
467 }
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
468
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
469 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0009, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
470 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0009, 0x0000, snacid, &bs);
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
471
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
472 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
473 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
474
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
475 /* Subtype 0x000a - Rate Change */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
476 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
477 ratechange(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
478 {
15149
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
479 guint16 code, classid;
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
480 struct rateclass *rateclass;
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
481 guint32 delta;
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
482 struct timeval now;
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
483 static const char *codes[5] = {
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
484 "invalid",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
485 "change",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
486 "warning",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
487 "limit",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
488 "limit cleared",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
489 };
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
490
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
491 gettimeofday(&now, NULL);
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
492 code = byte_stream_get16(bs);
15149
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
493 classid = byte_stream_get16(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
494
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
495 rateclass = rateclass_find(conn->rateclasses, classid);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
496 if (rateclass == NULL)
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
497 /* This should never really happen */
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
498 return 0;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
499
15149
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
500 rateclass->windowsize = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
501 rateclass->clear = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
502 rateclass->alert = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
503 rateclass->limit = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
504 rateclass->disconnect = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
505 rateclass->current = byte_stream_get32(bs);
d7c7d3e54f14 [gaim-migrate @ 17873]
Mark Doliner <markdoliner@pidgin.im>
parents: 15148
diff changeset
506 rateclass->max = byte_stream_get32(bs);
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
507 if (mod->version >= 3) {
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
508 delta = byte_stream_get32(bs);
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
509 rateclass->dropping_snacs = byte_stream_get8(bs);
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
510 } else {
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
511 delta = 0;
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
512 rateclass->dropping_snacs = 0;
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
513 }
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
514
29255
244dcac8ada2 We don't need to keep the delta in memory. We keep the actual time of
Mark Doliner <markdoliner@pidgin.im>
parents: 29254
diff changeset
515 rateclass->last.tv_sec = now.tv_sec - delta / 1000;
29257
887e473a2be1 Let's just do this mod on the fly instead of changing the variable
Mark Doliner <markdoliner@pidgin.im>
parents: 29256
diff changeset
516 rateclass->last.tv_usec = now.tv_usec - (delta % 1000) * 1000;
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
517
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
518 purple_debug_misc("oscar", "rate %s (param ID 0x%04hx): curavg = %u, "
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
519 "maxavg = %u, alert at %u, clear warning at %u, limit at %u, "
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
520 "disconnect at %u, delta is %u, dropping is %u (window size = %u)\n",
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
521 (code < 5) ? codes[code] : codes[0], rateclass->classid,
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
522 rateclass->current, rateclass->max, rateclass->alert,
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
523 rateclass->clear, rateclass->limit, rateclass->disconnect,
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
524 delta, rateclass->dropping_snacs, rateclass->windowsize);
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
525
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
526 if (code == AIM_RATE_CODE_LIMIT) {
29312
2d56a0fadf5a Good call, this doesn't need to be translated. This messaged used to be
Mark Doliner <markdoliner@pidgin.im>
parents: 29261
diff changeset
527 purple_debug_warning("oscar", "The last action you attempted "
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
528 "could not be performed because you are over the rate "
29312
2d56a0fadf5a Good call, this doesn't need to be translated. This messaged used to be
Mark Doliner <markdoliner@pidgin.im>
parents: 29261
diff changeset
529 "limit. Please wait 10 seconds and try again.\n");
28804
24b032f5d478 oscar: Update the rate calculations based on OSCAR docs.
Aman Gupta <aman@tmm1.net>
parents: 27112
diff changeset
530 }
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
531
29256
333a12d3c0ee Move two logging statements from oscar.c to family_oservice.c so we
Mark Doliner <markdoliner@pidgin.im>
parents: 29255
diff changeset
532 return 1;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
533 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
534
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
535 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
536 * How Migrations work.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
537 *
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
538 * The server sends a Server Pause message, which the client should respond to
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
539 * with a Server Pause Ack, which contains the families it needs on this
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
540 * connection. The server will send a Migration Notice with an IP address, and
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
541 * then disconnect. Next the client should open the connection and send the
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
542 * cookie. Repeat the normal login process and pretend this never happened.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
543 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
544 * The Server Pause contains no data.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
545 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
546 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
547
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
548 /* Subtype 0x000b - Service Pause */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
549 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
550 serverpause(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
551 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
552 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
553 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
554
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
555 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
556 ret = userfunc(od, conn, frame);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
557
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
558 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
559 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
560
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
561 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
562 * Subtype 0x000c - Service Pause Acknowledgement
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
563 *
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
564 * It is rather important that aim_srv_sendpauseack() gets called for the exact
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
565 * same connection that the Server Pause callback was called for, since
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
566 * libfaim extracts the data for the SNAC from the connection structure.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
567 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
568 * Of course, if you don't do that, more bad things happen than just what
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
569 * libfaim can cause.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
570 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
571 */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
572 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
573 aim_srv_sendpauseack(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
574 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
575 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
576 aim_snacid_t snacid;
14410
a5ae93474db6 [gaim-migrate @ 17050]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
577 GSList *cur;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
578
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
579 byte_stream_new(&bs, 1014);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
580
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
581 /*
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
582 * This list should have all the groups that the original
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
583 * Host Online / Server Ready said this host supports. And
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
584 * we want them all back after the migration.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
585 */
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
586 for (cur = conn->groups; cur != NULL; cur = cur->next)
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
587 byte_stream_put16(&bs, GPOINTER_TO_UINT(cur->data));
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
588
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
589 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x000c, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
590 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x000c, 0x0000, snacid, &bs);
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
591
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
592 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
593 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
594
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
595 /* Subtype 0x000d - Service Resume */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
596 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
597 serverresume(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
598 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
599 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
600 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
601
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
602 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
603 ret = userfunc(od, conn, frame);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
604
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
605 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
606 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
607
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
608 /* Subtype 0x000e - Request self-info */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
609 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
610 aim_srv_reqpersonalinfo(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
611 {
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
612 aim_genericreq_n_snacid(od, conn, SNAC_FAMILY_OSERVICE, 0x000e);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
613 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
614
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
615 /* Subtype 0x000f - Self User Info */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
616 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
617 selfinfo(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
618 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
619 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
620 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
621 aim_userinfo_t userinfo;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
622
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
623 aim_info_extract(od, bs, &userinfo);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
624
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
625 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
626 ret = userfunc(od, conn, frame, &userinfo);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
627
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
628 aim_info_free(&userinfo);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
629
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
630 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
631 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
632
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
633 /* Subtype 0x0010 - Evil Notification */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
634 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
635 evilnotify(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
636 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
637 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
638 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
639 guint16 newevil;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
640 aim_userinfo_t userinfo;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
641
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
642 memset(&userinfo, 0, sizeof(aim_userinfo_t));
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
643
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
644 newevil = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
645
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
646 if (byte_stream_empty(bs))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
647 aim_info_extract(od, bs, &userinfo);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
648
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
649 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
650 ret = userfunc(od, conn, frame, newevil, &userinfo);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
651
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
652 aim_info_free(&userinfo);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
653
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
654 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
655 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
656
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
657 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
658 * Subtype 0x0011 - Idle Notification
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
659 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
660 * Should set your current idle time in seconds. Note that this should
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
661 * never be called consecutively with a non-zero idle time. That makes
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
662 * OSCAR do funny things. Instead, just set it once you go idle, and then
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
663 * call it again with zero when you're back.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
664 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
665 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
666 void
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
667 aim_srv_setidle(OscarData *od, guint32 idletime)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
668 {
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
669 FlapConnection *conn;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
670
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
671 conn = flap_connection_findbygroup(od, SNAC_FAMILY_BOS);
15341
486e3de35514 [gaim-migrate @ 18069]
Evan Schoenberg <evands@pidgin.im>
parents: 15168
diff changeset
672 if(!conn)
486e3de35514 [gaim-migrate @ 18069]
Evan Schoenberg <evands@pidgin.im>
parents: 15168
diff changeset
673 return;
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
674
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
675 aim_genericreq_l(od, conn, SNAC_FAMILY_OSERVICE, 0x0011, &idletime);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
676 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
677
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
678 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
679 * Subtype 0x0012 - Service Migrate
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
680 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
681 * This is the final SNAC sent on the original connection during a migration.
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
682 * It contains the IP and cookie used to connect to the new server, and
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
683 * optionally a list of the SNAC groups being migrated.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
684 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
685 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
686 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
687 migrate(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
688 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
689 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
690 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
691 guint16 groupcount, i;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
692 GSList *tlvlist;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
693 char *ip = NULL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
694 aim_tlv_t *cktlv;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
695
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
696 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
697 * Apparently there's some fun stuff that can happen right here. The
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
698 * migration can actually be quite selective about what groups it
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
699 * moves to the new server. When not all the groups for a connection
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
700 * are migrated, or they are all migrated but some groups are moved
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
701 * to a different server than others, it is called a bifurcated
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
702 * migration.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
703 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
704 * Let's play dumb and not support that.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
705 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
706 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
707 groupcount = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
708 for (i = 0; i < groupcount; i++) {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
709 guint16 group;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
710
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
711 group = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
712
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
713 purple_debug_misc("oscar", "bifurcated migration unsupported -- group 0x%04x\n", group);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
714 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
715
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
716 tlvlist = aim_tlvlist_read(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
717
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
718 if (aim_tlv_gettlv(tlvlist, 0x0005, 1))
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
719 ip = aim_tlv_getstr(tlvlist, 0x0005, 1);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
720
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
721 cktlv = aim_tlv_gettlv(tlvlist, 0x0006, 1);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
722
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
723 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
724 ret = userfunc(od, conn, frame, ip, cktlv ? cktlv->value : NULL);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
725
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
726 aim_tlvlist_free(tlvlist);
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
727 g_free(ip);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
728
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
729 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
730 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
731
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
732 /* Subtype 0x0013 - Message of the Day */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
733 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
734 motd(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
735 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
736 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
737 char *msg = NULL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
738 int ret = 0;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
739 GSList *tlvlist;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
740 guint16 id;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
741
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
742 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
743 * Code.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
744 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
745 * Valid values:
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
746 * 1 Mandatory upgrade
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
747 * 2 Advisory upgrade
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
748 * 3 System bulletin
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
749 * 4 Nothing's wrong ("top o the world" -- normal)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
750 * 5 Lets-break-something.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
751 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
752 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
753 id = byte_stream_get16(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
754
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
755 /*
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
756 * TLVs follow
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
757 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
758 tlvlist = aim_tlvlist_read(bs);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
759
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
760 msg = aim_tlv_getstr(tlvlist, 0x000b, 1);
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
761
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
762 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
763 ret = userfunc(od, conn, frame, id, msg);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
764
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
765 g_free(msg);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
766
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
767 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
768
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
769 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
770 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
771
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
772 /*
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
773 * Subtype 0x0014 - Set privacy flags
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
774 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
775 * Normally 0x03.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
776 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
777 * Bit 1: Allows other AIM users to see how long you've been idle.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
778 * Bit 2: Allows other AIM users to see how long you've been a member.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
779 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
780 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
781 void
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
782 aim_srv_setprivacyflags(OscarData *od, FlapConnection *conn, guint32 flags)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
783 {
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
784 aim_genericreq_l(od, conn, SNAC_FAMILY_OSERVICE, 0x0014, &flags);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
785 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
786
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
787 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
788 * Subtype 0x0016 - No-op
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
789 *
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
790 * WinAIM sends these every 4min or so to keep the connection alive. Its not
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
791 * really necessary.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
792 *
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
793 * Wha? No? Since when? I think WinAIM sends an empty channel 5
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
794 * FLAP as a no-op...
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
795 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
796 void
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
797 aim_srv_nop(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
798 {
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
799 aim_genericreq_n(od, conn, SNAC_FAMILY_OSERVICE, 0x0016);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
800 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
801
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
802 /*
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
803 * Subtype 0x0017 - Set client versions
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
804 *
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
805 * If you've seen the clientonline/clientready SNAC you're probably
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
806 * wondering what the point of this one is. And that point seems to be
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
807 * that the versions in the client online SNAC are sent too late for the
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
808 * server to be able to use them to change the protocol for the earlier
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
809 * login packets (client versions are sent right after Host Online is
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
810 * received, but client online versions aren't sent until quite a bit later).
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
811 * We can see them already making use of this by changing the format of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
812 * the rate information based on what version of group 1 we advertise here.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
813 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
814 */
13610
b2c15a312144 [gaim-migrate @ 15995]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
815 void
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
816 aim_srv_setversions(OscarData *od, FlapConnection *conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
817 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
818 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
819 aim_snacid_t snacid;
14410
a5ae93474db6 [gaim-migrate @ 17050]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
820 GSList *cur;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
821
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
822 byte_stream_new(&bs, 1142);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
823
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
824 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
825 * Send only the versions that the server cares about (that it
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
826 * marked as supporting in the server ready SNAC).
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
827 */
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
828 for (cur = conn->groups; cur != NULL; cur = cur->next)
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
829 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
830 aim_module_t *mod;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
831
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
832 if ((mod = aim__findmodulebygroup(od, GPOINTER_TO_UINT(cur->data))))
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
833 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
834 byte_stream_put16(&bs, mod->family);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
835 byte_stream_put16(&bs, mod->version);
13612
c51da9e6fec1 [gaim-migrate @ 15997]
Mark Doliner <markdoliner@pidgin.im>
parents: 13610
diff changeset
836 }
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
837 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
838
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
839 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0017, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
840 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0017, 0x0000, snacid, &bs);
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
841
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
842 byte_stream_destroy(&bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
843 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
844
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
845 /* Subtype 0x0018 - Host versions */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
846 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
847 hostversions(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
848 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
849 int vercount;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
850 guint8 *versions;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
851
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
852 /* This is frivolous. (Thank you SmarterChild.) */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
853 vercount = byte_stream_empty(bs)/4;
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
854 versions = byte_stream_getraw(bs, byte_stream_empty(bs));
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
855 g_free(versions);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
856
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
857 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
858 * Now request rates.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
859 */
15147
101192282f5d [gaim-migrate @ 17871]
Mark Doliner <markdoliner@pidgin.im>
parents: 14708
diff changeset
860 aim_srv_reqrates(od, conn);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
861
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
862 return 1;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
863 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
864
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
865 /**
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
866 * Subtype 0x001e - Extended Status/Extra Info.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
867 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
868 * These settings are transient, not server-stored (i.e. they only
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
869 * apply to this session, and must be re-set the next time you sign
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
870 * on).
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
871 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
872 * You can set your ICQ status (available, away, do not disturb,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
873 * etc.), or whether your IP address should be hidden or not, or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
874 * if your status is visible on ICQ web sites, and you can set
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
875 * your IP address info and what not.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
876 *
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
877 * You can also set your "available" message. This is currently
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
878 * only supported by iChat, Purple and other 3rd party clients.
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
879 *
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
880 * These are the same TLVs seen in user info. You can
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
881 * also set 0x0008 and 0x000c.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
882 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
883 int
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
884 aim_srv_setextrainfo(OscarData *od,
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
885 gboolean seticqstatus, guint32 icqstatus,
26070
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
886 gboolean setstatusmsg, const char *statusmsg, const char *itmsurl)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
887 {
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
888 FlapConnection *conn;
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
889 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
890 aim_snacid_t snacid;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
891 GSList *tlvlist = NULL;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
892
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
893 if (!od || !(conn = flap_connection_findbygroup(od, SNAC_FAMILY_ICBM)))
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
894 return -EINVAL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
895
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
896 if (seticqstatus)
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
897 {
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
898 aim_tlvlist_add_32(&tlvlist, 0x0006, icqstatus |
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
899 AIM_ICQ_STATE_HIDEIP | AIM_ICQ_STATE_DIRECTREQUIREAUTH);
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
900 }
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
901
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
902 #if 0
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
903 if (other_stuff_that_isnt_implemented)
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
904 {
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
905 aim_tlvlist_add_raw(&tlvlist, 0x000c, 0x0025,
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
906 chunk_of_x25_bytes_with_ip_address_etc);
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
907 aim_tlvlist_add_raw(&tlvlist, 0x0011, 0x0005, unknown 0x01 61 10 f6 41);
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
908 aim_tlvlist_add_16(&tlvlist, 0x0012, unknown 0x00 00);
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
909 }
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
910 #endif
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
911
26070
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
912 if (setstatusmsg)
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
913 {
26070
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
914 size_t statusmsglen, itmsurllen;
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
915 ByteStream tmpbs;
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
916
26070
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
917 statusmsglen = (statusmsg != NULL) ? strlen(statusmsg) : 0;
15689
bcf3c0ddb974 Allow setting of the iTunes Music Store URL for AIM accounts. It's
Mark Doliner <markdoliner@pidgin.im>
parents: 15686
diff changeset
918 itmsurllen = (itmsurl != NULL) ? strlen(itmsurl) : 0;
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
919
26070
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
920 byte_stream_new(&tmpbs, statusmsglen + 8 + itmsurllen + 8);
32029cc3ca2a Rename "availmsg" to "statusmsg" here. I think recent official AIM
Mark Doliner <markdoliner@pidgin.im>
parents: 26069
diff changeset
921 byte_stream_put_bart_asset_str(&tmpbs, 0x0002, statusmsg);
26069
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25519
diff changeset
922 byte_stream_put_bart_asset_str(&tmpbs, 0x0009, itmsurl);
15689
bcf3c0ddb974 Allow setting of the iTunes Music Store URL for AIM accounts. It's
Mark Doliner <markdoliner@pidgin.im>
parents: 15686
diff changeset
923
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
924 aim_tlvlist_add_raw(&tlvlist, 0x001d,
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
925 byte_stream_curpos(&tmpbs), tmpbs.data);
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
926 byte_stream_destroy(&tmpbs);
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
927 }
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
928
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
929 byte_stream_new(&bs, aim_tlvlist_size(tlvlist));
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
930
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
931 aim_tlvlist_write(&bs, &tlvlist);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
932 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
933
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
934 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x001e, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
935 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x001e, 0x0000, snacid, &bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
936
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
937 byte_stream_destroy(&bs);
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
938
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
939 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
940 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
941
15686
b6d016a42e34 Combine two functions that did similar things. This is a little
Mark Doliner <markdoliner@pidgin.im>
parents: 15435
diff changeset
942 /**
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
943 * Starting this past week (26 Mar 2001, say), AOL has started sending
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
944 * this nice little extra SNAC. AFAIK, it has never been used until now.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
945 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
946 * The request contains eight bytes. The first four are an offset, the
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
947 * second four are a length.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
948 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
949 * The offset is an offset into aim.exe when it is mapped during execution
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
950 * on Win32. So far, AOL has only been requesting bytes in static regions
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
951 * of memory. (I won't put it past them to start requesting data in
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
952 * less static regions -- regions that are initialized at run time, but still
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
953 * before the client receives this request.)
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
954 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
955 * When the client receives the request, it adds it to the current ds
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
956 * (0x00400000) and dereferences it, copying the data into a buffer which
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
957 * it then runs directly through the MD5 hasher. The 16 byte output of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
958 * the hash is then sent back to the server.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
959 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
960 * If the client does not send any data back, or the data does not match
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
961 * the data that the specific client should have, the client will get the
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
962 * following message from "AOL Instant Messenger":
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
963 * "You have been disconnected from the AOL Instant Message Service (SM)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
964 * for accessing the AOL network using unauthorized software. You can
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
965 * download a FREE, fully featured, and authorized client, here
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
966 * http://www.aol.com/aim/download2.html"
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
967 * The connection is then closed, receiving disconnect code 1, URL
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
968 * http://www.aim.aol.com/errors/USER_LOGGED_OFF_NEW_LOGIN.html.
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
969 *
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
970 * Note, however, that numerous inconsistencies can cause the above error,
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
971 * not just sending back a bad hash. Do not immediatly suspect this code
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
972 * if you get disconnected. AOL and the open/free software community have
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
973 * played this game for a couple years now, generating the above message
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
974 * on numerous ocassions.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
975 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
976 * Anyway, neener. We win again.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
977 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
978 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
979 /* Subtype 0x001f - Client verification */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
980 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
981 memrequest(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
982 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
983 int ret = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
984 aim_rxcallback_t userfunc;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
985 guint32 offset, len;
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
986 GSList *tlvlist;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
987 char *modname;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
988
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
989 offset = byte_stream_get32(bs);
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
990 len = byte_stream_get32(bs);
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
991 tlvlist = aim_tlvlist_read(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
992
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
993 modname = aim_tlv_getstr(tlvlist, 0x0001, 1);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
994
22622
1ecb840b5101 Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents: 19859
diff changeset
995 purple_debug_info("oscar", "Got memory request for data at 0x%08x (%u bytes) of requested %s\n", offset, len, modname ? modname : "aim.exe");
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
996
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
997 if ((userfunc = aim_callhandler(od, snac->family, snac->subtype)))
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
998 ret = userfunc(od, conn, frame, offset, len, modname);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
999
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
1000 g_free(modname);
17443
bae8548d98b3 Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
1001 aim_tlvlist_free(tlvlist);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1002
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1003 return ret;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1004 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1005
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1006 /* Subtype 0x0020 - Client verification reply */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1007 int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1008 aim_sendmemblock(OscarData *od, FlapConnection *conn, guint32 offset, guint32 len, const guint8 *buf, guint8 flag)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1009 {
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1010 ByteStream bs;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1011 aim_snacid_t snacid;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1012
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1013 if (!od || !conn)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1014 return -EINVAL;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1015
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1016 byte_stream_new(&bs, 2+16);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1017
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1018 byte_stream_put16(&bs, 0x0010); /* md5 is always 16 bytes */
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1019
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1020 if ((flag == AIM_SENDMEMBLOCK_FLAG_ISHASH) && buf && (len == 0x10)) { /* we're getting a hash */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1021
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1022 byte_stream_putraw(&bs, buf, 0x10);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1023
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1024 } else if (buf && (len > 0)) { /* use input buffer */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1025 PurpleCipherContext *context;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1026 guchar digest[16];
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1027
23526
23c321e72167 Helper functions are cool
Mark Doliner <markdoliner@pidgin.im>
parents: 23456
diff changeset
1028 context = purple_cipher_context_new_by_name("md5", NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1029 purple_cipher_context_append(context, buf, len);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1030 purple_cipher_context_digest(context, 16, digest, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1031 purple_cipher_context_destroy(context);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1032
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1033 byte_stream_putraw(&bs, digest, 0x10);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1034
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1035 } else if (len == 0) { /* no length, just hash NULL (buf is optional) */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1036 PurpleCipherContext *context;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1037 guchar digest[16];
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1038 guint8 nil = '\0';
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1039
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1040 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1041 * I'm not sure if we really need the empty append with the
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1042 * new MD5 functions, so I'll leave it in, just in case.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1043 */
23526
23c321e72167 Helper functions are cool
Mark Doliner <markdoliner@pidgin.im>
parents: 23456
diff changeset
1044 context = purple_cipher_context_new_by_name("md5", NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1045 purple_cipher_context_append(context, &nil, 0);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1046 purple_cipher_context_digest(context, 16, digest, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1047 purple_cipher_context_destroy(context);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1048
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1049 byte_stream_putraw(&bs, digest, 0x10);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1050
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1051 } else {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1052
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1053 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1054 * This data is correct for AIM 3.5.1670.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1055 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1056 * Using these blocks is as close to "legal" as you can get
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1057 * without using an AIM binary.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1058 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1059 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1060 if ((offset == 0x03ffffff) && (len == 0x03ffffff)) {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1061
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1062 #if 1 /* with "AnrbnrAqhfzcd" */
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1063 byte_stream_put32(&bs, 0x44a95d26);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1064 byte_stream_put32(&bs, 0xd2490423);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1065 byte_stream_put32(&bs, 0x93b8821f);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1066 byte_stream_put32(&bs, 0x51c54b01);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1067 #else /* no filename */
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1068 byte_stream_put32(&bs, 0x1df8cbae);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1069 byte_stream_put32(&bs, 0x5523b839);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1070 byte_stream_put32(&bs, 0xa0e10db3);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1071 byte_stream_put32(&bs, 0xa46d3b39);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1072 #endif
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1073
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1074 } else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15689
diff changeset
1075 purple_debug_warning("oscar", "sendmemblock: unknown hash request\n");
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1076
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1077 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1078
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
1079 snacid = aim_cachesnac(od, SNAC_FAMILY_OSERVICE, 0x0020, 0x0000, NULL, 0);
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
1080 flap_connection_send_snac(od, conn, SNAC_FAMILY_OSERVICE, 0x0020, 0x0000, snacid, &bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1081
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 22622
diff changeset
1082 byte_stream_destroy(&bs);
23004
0d9272ff5e50 Minor changes... mostly whitespace related.
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
1083
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1084 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1085 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1086
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1087 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1088 * Subtype 0x0021 - Receive our extended status
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1089 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1090 * This is used for iChat's "available" messages, and maybe ICQ extended
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1091 * status messages? It's also used to tell the client whether or not it
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1092 * needs to upload an SSI buddy icon... who engineers this stuff, anyway?
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1093 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1094 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1095 aim_parse_extstatus(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1096 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1097 guint16 type;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1098 guint8 flags, length;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1099
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1100 type = byte_stream_get16(bs);
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1101 flags = byte_stream_get8(bs);
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1102 length = byte_stream_get8(bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1103
13952
2bc729a80bd3 [gaim-migrate @ 16372]
Mark Doliner <markdoliner@pidgin.im>
parents: 13665
diff changeset
1104 /*
2bc729a80bd3 [gaim-migrate @ 16372]
Mark Doliner <markdoliner@pidgin.im>
parents: 13665
diff changeset
1105 * A flag of 0x01 could mean "this is the checksum we have for you"
2bc729a80bd3 [gaim-migrate @ 16372]
Mark Doliner <markdoliner@pidgin.im>
parents: 13665
diff changeset
1106 * A flag of 0x40 could mean "I don't have your icon, upload it"
2bc729a80bd3 [gaim-migrate @ 16372]
Mark Doliner <markdoliner@pidgin.im>
parents: 13665
diff changeset
1107 */
2bc729a80bd3 [gaim-migrate @ 16372]
Mark Doliner <markdoliner@pidgin.im>
parents: 13665
diff changeset
1108
29986
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1109 switch (type) {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1110 case 0x0000:
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1111 case 0x0001: { /* buddy icon checksum */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1112 /* not sure what the difference between 1 and 0 is */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1113 guint8 *md5 = byte_stream_getraw(bs, length);
29986
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1114
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1115 if ((flags == 0x00) || (flags == 0x41)) {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1116 if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1117 od->iconconnecting = TRUE;
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1118 od->set_icon = TRUE;
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1119 aim_srv_requestnew(od, SNAC_FAMILY_BART);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1120 } else {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1121 PurpleAccount *account = purple_connection_get_account(od->gc);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1122 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1123 if (img == NULL) {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1124 aim_ssi_delicon(od);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1125 } else {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1126
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1127 purple_debug_info("oscar",
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1128 "Uploading icon to icon server\n");
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1129 aim_bart_upload(od, purple_imgstore_get_data(img),
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1130 purple_imgstore_get_size(img));
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1131 purple_imgstore_unref(img);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1132 }
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1133 }
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1134 } else if (flags == 0x81) {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1135 PurpleAccount *account = purple_connection_get_account(od->gc);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1136 PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1137 if (img == NULL)
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1138 aim_ssi_delicon(od);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1139 else {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1140 aim_ssi_seticon(od, md5, length);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1141 purple_imgstore_unref(img);
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1142 }
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1143 }
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1144
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
1145 g_free(md5);
29986
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1146 } break;
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1147
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1148 case 0x0002: {
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1149 /* We just set an available message? */
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1150 /* there is a second length that is just for the message */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1151 char *msg = byte_stream_getstr(bs, byte_stream_get16(bs));
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
1152 g_free(msg);
29986
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1153 } break;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1154 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1155
29986
ac5cbbbd080d There's no reason to call into oscar.c anymore, so move this icon stuff
Mark Doliner <markdoliner@pidgin.im>
parents: 29978
diff changeset
1156 return 0;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1157 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1158
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1159 static int
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1160 snachandler(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1161 {
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1162 if (snac->subtype == 0x0003)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1163 return hostonline(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1164 else if (snac->subtype == 0x0005)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1165 return redirect(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1166 else if (snac->subtype == 0x0007)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1167 return rateresp(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1168 else if (snac->subtype == 0x000a)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1169 return ratechange(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1170 else if (snac->subtype == 0x000b)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1171 return serverpause(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1172 else if (snac->subtype == 0x000d)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1173 return serverresume(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1174 else if (snac->subtype == 0x000f)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1175 return selfinfo(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1176 else if (snac->subtype == 0x0010)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1177 return evilnotify(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1178 else if (snac->subtype == 0x0012)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1179 return migrate(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1180 else if (snac->subtype == 0x0013)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1181 return motd(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1182 else if (snac->subtype == 0x0018)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1183 return hostversions(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1184 else if (snac->subtype == 0x001f)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1185 return memrequest(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1186 else if (snac->subtype == 0x0021)
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1187 return aim_parse_extstatus(od, conn, mod, frame, snac, bs);
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1188
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1189 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1190 }
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1191
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13254
diff changeset
1192 int service_modfirst(OscarData *od, aim_module_t *mod)
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1193 {
23456
66ab07770438 Replaced family_*'s magic numbers of FLAP families with the constants
Evan Schoenberg <evands@pidgin.im>
parents: 23004
diff changeset
1194 mod->family = SNAC_FAMILY_OSERVICE;
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1195 mod->version = 0x0003;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1196 mod->toolid = 0x0110;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1197 mod->toolversion = 0x0629;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1198 mod->flags = 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1199 strncpy(mod->name, "oservice", sizeof(mod->name));
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1200 mod->snachandler = snachandler;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1201
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1202 return 0;
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1203 }

mercurial