annotate src/protocols/oscar/locate.c @ 7259:22b5b81ca7e0

[gaim-migrate @ 7836] Correctly handle failed get info requests. This should fix that bug that's assigned to me, and also the problem SimGuy (and other people) have had where you need to Get Info twice before it works. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 14 Oct 2003 04:35:46 +0000
parents 0ed4d53c46f9
children dc3918a729e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 * Family 0x0002 - Locate.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 * The functions here are responsible for requesting and parsing information-
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 * gathering SNACs. Or something like that. This family contains the SNACs
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * for getting and setting info, away messages, directory profile thingy, etc.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 #define FAIM_INTERNAL
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10 #include <aim.h>
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 #ifdef _WIN32
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 #include "win32dep.h"
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13 #endif
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
14
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
16 * Capability blocks.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
17 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
18 * These are CLSIDs. They should actually be of the form:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
19 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 * {0x0946134b, 0x4c7f, 0x11d1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 * {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23 * But, eh.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25 static const struct {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26 fu32_t flag;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27 fu8_t data[16];
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28 } aim_caps[] = {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
31 * These are in ascending numerical order.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 */
7253
0ed4d53c46f9 [gaim-migrate @ 7830]
Mark Doliner <mark@kingant.net>
parents: 7235
diff changeset
33
0ed4d53c46f9 [gaim-migrate @ 7830]
Mark Doliner <mark@kingant.net>
parents: 7235
diff changeset
34 /*
0ed4d53c46f9 [gaim-migrate @ 7830]
Mark Doliner <mark@kingant.net>
parents: 7235
diff changeset
35 * Perhaps better called AIM_CAPS_SHORTCAPS
0ed4d53c46f9 [gaim-migrate @ 7830]
Mark Doliner <mark@kingant.net>
parents: 7235
diff changeset
36 */
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
37 {AIM_CAPS_ICHAT,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
38 {0x09, 0x46, 0x00, 0x00, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
39 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
40
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
41 {AIM_CAPS_SECUREIM,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
42 {0x09, 0x46, 0x00, 0x01, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
43 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
44
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
45 /*
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
46 * Not really sure about this one. In an email from
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
47 * 26 Sep 2003, Matthew Sachs suggested that, "this
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
48 * is probably the capability for the SMS features."
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
49 */
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
50 {AIM_CAPS_SMS,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
51 {0x09, 0x46, 0x01, 0xff, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
52 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
53
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
54 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
55 {0x09, 0x46, 0xf0, 0x03, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
56 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
57
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
58 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
59 {0x09, 0x46, 0xf0, 0x04, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
60 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
61
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
62 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
63 {0x09, 0x46, 0xf0, 0x05, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
64 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
65
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66 {AIM_CAPS_HIPTOP,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
67 {0x09, 0x46, 0x13, 0x23, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
68 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
70 {AIM_CAPS_VOICE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 {0x09, 0x46, 0x13, 0x41, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 {AIM_CAPS_SENDFILE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
75 {0x09, 0x46, 0x13, 0x43, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
77
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
78 {AIM_CAPS_ICQ_DIRECT,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 {0x09, 0x46, 0x13, 0x44, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 {AIM_CAPS_DIRECTIM,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
83 {0x09, 0x46, 0x13, 0x45, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86 {AIM_CAPS_BUDDYICON,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 {0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
88 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
89
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
90 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
91 * Windows AIM calls this "Add-ins," which is probably more accurate
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
92 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93 {AIM_CAPS_SAVESTOCKS,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
94 {0x09, 0x46, 0x13, 0x47, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
97 {AIM_CAPS_GETFILE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 {0x09, 0x46, 0x13, 0x48, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101 {AIM_CAPS_ICQSERVERRELAY,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 {0x09, 0x46, 0x13, 0x49, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
104
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
105 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
106 * Indeed, there are two of these. The former appears to be correct,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
107 * but in some versions of winaim, the second one is set. Either they
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
108 * forgot to fix endianness, or they made a typo. It really doesn't
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
109 * matter which.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
110 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
111 {AIM_CAPS_GAMES,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
112 {0x09, 0x46, 0x13, 0x4a, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
113 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
114 {AIM_CAPS_GAMES2,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
115 {0x09, 0x46, 0x13, 0x4a, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
116 0x22, 0x82, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
117
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
118 {AIM_CAPS_SENDBUDDYLIST,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
119 {0x09, 0x46, 0x13, 0x4b, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
120 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
121
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
122 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
123 * Setting this lets AIM users receive messages from ICQ users, and ICQ
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
124 * users receive messages from AIM users. It also lets ICQ users show
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
125 * up in buddy lists for AIM users, and AIM users show up in buddy lists
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
126 * for ICQ users. And ICQ privacy/invisibility acts like AIM privacy,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
127 * in that if you add a user to your deny list, you will not be able to
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
128 * see them as online (previous you could still see them, but they
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
129 * couldn't see you.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
130 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
131 {AIM_CAPS_INTEROPERATE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
132 {0x09, 0x46, 0x13, 0x4d, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
133 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
134
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
135 {AIM_CAPS_ICQUTF8,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
136 {0x09, 0x46, 0x13, 0x4e, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
137 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
138
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
139 {AIM_CAPS_ICQUTF8OLD,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
140 {0x2e, 0x7a, 0x64, 0x75, 0xfa, 0xdf, 0x4d, 0xc8,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
141 0x88, 0x6f, 0xea, 0x35, 0x95, 0xfd, 0xb6, 0xdf}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
142
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
143 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
144 * Chat is oddball.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
145 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
146 {AIM_CAPS_CHAT,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
147 {0x74, 0x8f, 0x24, 0x20, 0x62, 0x87, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
148 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
149
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
150 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
151 {AIM_CAPS_ICQ2GO,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
152 {0x56, 0x3f, 0xc8, 0x09, 0x0b, 0x6f, 0x41, 0xbd,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
153 0x9f, 0x79, 0x42, 0x26, 0x09, 0xdf, 0xa2, 0xf3}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
154 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
155
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
156 {AIM_CAPS_ICQRTF,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
157 {0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
158 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x92}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
159
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
160 /* This is added by the servers and it only shows up for ourselves... */
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
161 {AIM_CAPS_GENERICUNKNOWN,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
162 {0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34,
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
163 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x09}},
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
164
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
165 {AIM_CAPS_APINFO,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
166 {0xaa, 0x4a, 0x32, 0xb5, 0xf8, 0x84, 0x48, 0xc6,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
167 0xa3, 0xd7, 0x8c, 0x50, 0x97, 0x19, 0xfd, 0x5b}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
168
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
169 {AIM_CAPS_TRILLIANCRYPT,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
170 {0xf2, 0xe7, 0xc7, 0xf4, 0xfe, 0xad, 0x4d, 0xfb,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
171 0xb2, 0x35, 0x36, 0x79, 0x8b, 0xdf, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
172
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
173 {AIM_CAPS_EMPTY,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
174 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
176
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
177 {AIM_CAPS_LAST}
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
178 };
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
179
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
180 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
181 * Add the userinfo to our linked list. If we already have userinfo
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
182 * for this buddy, then just overwrite parts of the old data.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
183 * @param userinfo Contains the new information for the buddy.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
184 */
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
185 static void aim_locate_adduserinfo(aim_session_t *sess, aim_userinfo_t *userinfo) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
186 aim_userinfo_t *cur;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
187
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
188 cur = aim_locate_finduserinfo(sess, userinfo->sn);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
189
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
190 if (cur == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
191 cur = (aim_userinfo_t *)calloc(1, sizeof(aim_userinfo_t));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
192 cur->sn = strdup(userinfo->sn);
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
193 cur->next = sess->locate.userinfo;
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
194 sess->locate.userinfo = cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
195 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
196
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
197 cur->warnlevel = userinfo->warnlevel;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
198 cur->idletime = userinfo->idletime;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
199 if (userinfo->flags != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
200 cur->flags = userinfo->flags;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
201 if (userinfo->createtime != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
202 cur->createtime = userinfo->createtime;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
203 if (userinfo->membersince != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
204 cur->membersince = userinfo->membersince;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
205 if (userinfo->onlinesince != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
206 cur->onlinesince = userinfo->onlinesince;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
207 if (userinfo->sessionlen != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
208 cur->sessionlen = userinfo->sessionlen;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
209 if (userinfo->capabilities != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
210 cur->capabilities = userinfo->capabilities;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
211 cur->present |= userinfo->present;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
212
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
213 if (userinfo->iconcsumlen > 0) {
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
214 free(cur->iconcsum);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
215 cur->iconcsum = (fu8_t *)malloc(userinfo->iconcsumlen);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
216 memcpy(cur->iconcsum, userinfo->iconcsum, userinfo->iconcsumlen);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
217 cur->iconcsumlen = userinfo->iconcsumlen;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
218 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
219
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
220 if ((userinfo->info != NULL) && (userinfo->info_len > 0)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
221 free(cur->info);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
222 free(cur->info_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
223 cur->info = (char *)malloc(userinfo->info_len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
224 memcpy(cur->info, userinfo->info, userinfo->info_len);
7235
03f22e564311 [gaim-migrate @ 7810]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
225 cur->info_encoding = strdup(userinfo->info_encoding);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
226 cur->info_len = userinfo->info_len;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
227 }
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
228
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
229 if ((userinfo->away != NULL) && (userinfo->away_len > 0)) {
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
230 free(cur->away);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
231 free(cur->away_encoding);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
232 cur->away = (char *)malloc(userinfo->away_len);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
233 memcpy(cur->away, userinfo->away, userinfo->away_len);
7235
03f22e564311 [gaim-migrate @ 7810]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
234 cur->away_encoding = strdup(userinfo->away_encoding);
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
235 cur->away_len = userinfo->away_len;
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
236 }
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
237 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
238
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
239 static void aim_locate_dorequest(aim_session_t *sess) {
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
240 struct userinfo_node *cur = sess->locate.request_queue;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
241
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
242 if (cur == NULL)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
243 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
244
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
245 if (sess->locate.waiting_for_response == TRUE)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
246 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
247
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
248 sess->locate.waiting_for_response = TRUE;
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7141
diff changeset
249 aim_locate_getinfoshort(sess, cur->sn, 0x00000003);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
250 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
251
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
252 /*
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
253 * Remove this screen name from our queue. If this info was resquested
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
254 * by our info request queue, then pop off the next element of the queue.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
255 *
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
256 * @param sess The aim session.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
257 * @param sn Screen name of the info we just received.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
258 * @return True if the request was explicit (client requested the info),
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
259 * false if the request was implicit (libfaim request the info).
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
260 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
261 static int aim_locate_gotuserinfo(aim_session_t *sess, const char *sn) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
262 struct userinfo_node *cur, *del;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
263 int was_explicit = TRUE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
264
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
265 while ((sess->locate.request_queue != NULL) && (aim_sncmp(sn, sess->locate.request_queue->sn) == 0)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
266 del = sess->locate.request_queue;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
267 sess->locate.request_queue = del->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
268 was_explicit = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
269 free(del->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
270 free(del);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
271 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
272
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
273 cur = sess->locate.request_queue;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
274 while ((cur != NULL) && (cur->next != NULL)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
275 if (aim_sncmp(sn, cur->next->sn) == 0) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
276 del = cur->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
277 cur->next = del->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
278 was_explicit = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
279 free(del->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
280 free(del);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
281 } else
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
282 cur = cur->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
283 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
284
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
285 if (!was_explicit) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
286 sess->locate.waiting_for_response = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
287 aim_locate_dorequest(sess);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
288 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
289
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
290 return was_explicit;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
291 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
292
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
293 faim_internal void aim_locate_requestuserinfo(aim_session_t *sess, const char *sn) {
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
294 struct userinfo_node *cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
295
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
296 cur = (struct userinfo_node *)malloc(sizeof(struct userinfo_node));
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
297 cur->sn = strdup(sn);
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
298 cur->next = sess->locate.request_queue;
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
299 sess->locate.request_queue = cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
300
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
301 aim_locate_dorequest(sess);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
302 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
303
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
304 faim_export aim_userinfo_t *aim_locate_finduserinfo(aim_session_t *sess, const char *sn) {
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
305 aim_userinfo_t *cur = sess->locate.userinfo;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
306
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
307 while (cur != NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
308 if (aim_sncmp(cur->sn, sn) == 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
309 return cur;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
310 cur = cur->next;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
311 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
312
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
313 return NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
314 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
315
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
316 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
317 * This still takes a length parameter even with a bstream because capabilities
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
318 * are not naturally bounded.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
319 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
320 faim_internal fu32_t aim_getcap(aim_session_t *sess, aim_bstream_t *bs, int len)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
321 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
322 fu32_t flags = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
323 int offset;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
324
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
325 for (offset = 0; aim_bstream_empty(bs) && (offset < len); offset += 0x10) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
326 fu8_t *cap;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
327 int i, identified;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
328
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
329 cap = aimbs_getraw(bs, 0x10);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
330
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
331 for (i = 0, identified = 0; !(aim_caps[i].flag & AIM_CAPS_LAST); i++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
332
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
333 if (memcmp(&aim_caps[i].data, cap, 0x10) == 0) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
334 flags |= aim_caps[i].flag;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
335 identified++;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
336 break; /* should only match once... */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
337
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
338 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
339 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
340
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
341 if (!identified) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
342 faimdprintf(sess, 0, "unknown capability: {%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
343 cap[0], cap[1], cap[2], cap[3],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
344 cap[4], cap[5],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
345 cap[6], cap[7],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
346 cap[8], cap[9],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
347 cap[10], cap[11], cap[12], cap[13],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
348 cap[14], cap[15]);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
349 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
350
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
351 free(cap);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
352 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
353
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
354 return flags;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
355 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
356
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
357 faim_internal int aim_putcap(aim_bstream_t *bs, fu32_t caps)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
358 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
359 int i;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
360
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
361 if (!bs)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
362 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
363
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
364 for (i = 0; aim_bstream_empty(bs); i++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
365
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
366 if (aim_caps[i].flag == AIM_CAPS_LAST)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
367 break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
368
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
369 if (caps & aim_caps[i].flag)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
370 aimbs_putraw(bs, aim_caps[i].data, 0x10);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
371
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
372 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
373
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
374 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
375 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
376
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
377 static void dumptlv(aim_session_t *sess, fu16_t type, aim_bstream_t *bs, fu8_t len)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
378 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
379 int i;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
380
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
381 if (!sess || !bs || !len)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
382 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
383
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
384 faimdprintf(sess, 0, "userinfo: type =0x%04x\n", type);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
385 faimdprintf(sess, 0, "userinfo: length=0x%04x\n", len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
386 faimdprintf(sess, 0, "userinfo: value:\n");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
387
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
388 for (i = 0; i < len; i++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
389 if ((i % 8) == 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
390 faimdprintf(sess, 0, "\nuserinfo: ");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
391 faimdprintf(sess, 0, "0x%2x ", aimbs_get8(bs));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
392 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
393
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
394 faimdprintf(sess, 0, "\n");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
395
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
396 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
397 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
398
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
399 faim_internal void aim_info_free(aim_userinfo_t *info)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
400 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
401 free(info->sn);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
402 free(info->iconcsum);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
403 free(info->info);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
404 free(info->info_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
405 free(info->avail);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
406 free(info->avail_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
407 free(info->away);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
408 free(info->away_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
409 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
410
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
411 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
412 * AIM is fairly regular about providing user info. This is a generic
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
413 * routine to extract it in its standard form.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
414 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
415 faim_internal int aim_info_extract(aim_session_t *sess, aim_bstream_t *bs, aim_userinfo_t *outinfo)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
416 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
417 int curtlv, tlvcnt;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
418 fu8_t snlen;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
419
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
420 if (!bs || !outinfo)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
421 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
422
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
423 /* Clear out old data first */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
424 memset(outinfo, 0x00, sizeof(aim_userinfo_t));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
425
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
426 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
427 * Screen name. Stored as an unterminated string prepended with a
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
428 * byte containing its length.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
429 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
430 snlen = aimbs_get8(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
431 outinfo->sn = aimbs_getstr(bs, snlen);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
432
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
433 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
434 * Warning Level. Stored as an unsigned short.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
435 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
436 outinfo->warnlevel = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
437
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
438 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
439 * TLV Count. Unsigned short representing the number of
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
440 * Type-Length-Value triples that follow.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
441 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
442 tlvcnt = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
443
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
444 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
445 * Parse out the Type-Length-Value triples as they're found.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
446 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
447 for (curtlv = 0; curtlv < tlvcnt; curtlv++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
448 int endpos;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
449 fu16_t type, length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
450
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
451 type = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
452 length = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
453
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
454 endpos = aim_bstream_curpos(bs) + length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
455
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
456 if (type == 0x0001) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
457 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
458 * Type = 0x0001: User flags
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
459 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
460 * Specified as any of the following ORed together:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
461 * 0x0001 Trial (user less than 60days)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
462 * 0x0002 Unknown bit 2
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
463 * 0x0004 AOL Main Service user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
464 * 0x0008 Unknown bit 4
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
465 * 0x0010 Free (AIM) user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
466 * 0x0020 Away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
467 * 0x0400 ActiveBuddy
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
468 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
469 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
470 outinfo->flags = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
471 outinfo->present |= AIM_USERINFO_PRESENT_FLAGS;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
472
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
473 } else if (type == 0x0002) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
474 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
475 * Type = 0x0002: Account creation time.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
476 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
477 * The time/date that the user originally registered for
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
478 * the service, stored in time_t format.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
479 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
480 * I'm not sure how this differs from type 5 ("member
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
481 * since").
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
482 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
483 * Note: This is the field formerly known as "member
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
484 * since". All these years and I finally found out
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
485 * that I got the name wrong.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
486 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
487 outinfo->createtime = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
488 outinfo->present |= AIM_USERINFO_PRESENT_CREATETIME;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
489
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
490 } else if (type == 0x0003) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
491 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
492 * Type = 0x0003: On-Since date.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
493 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
494 * The time/date that the user started their current
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
495 * session, stored in time_t format.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
496 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
497 outinfo->onlinesince = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
498 outinfo->present |= AIM_USERINFO_PRESENT_ONLINESINCE;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
499
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
500 } else if (type == 0x0004) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
501 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
502 * Type = 0x0004: Idle time.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
503 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
504 * Number of minutes since the user actively used the
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
505 * service.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
506 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
507 * Note that the client tells the server when to start
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
508 * counting idle times, so this may or may not be
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
509 * related to reality.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
510 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
511 outinfo->idletime = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
512 outinfo->present |= AIM_USERINFO_PRESENT_IDLE;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
513
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
514 } else if (type == 0x0005) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
515 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
516 * Type = 0x0005: Member since date.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
517 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
518 * The time/date that the user originally registered for
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
519 * the service, stored in time_t format.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
520 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
521 * This is sometimes sent instead of type 2 ("account
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
522 * creation time"), particularly in the self-info.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
523 * And particularly for ICQ?
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
524 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
525 outinfo->membersince = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
526 outinfo->present |= AIM_USERINFO_PRESENT_MEMBERSINCE;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
527
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
528 } else if (type == 0x0006) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
529 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
530 * Type = 0x0006: ICQ Online Status
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
531 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
532 * ICQ's Away/DND/etc "enriched" status. Some decoding
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
533 * of values done by Scott <darkagl@pcnet.com>
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
534 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
535 aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
536 outinfo->icqinfo.status = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
537 outinfo->present |= AIM_USERINFO_PRESENT_ICQEXTSTATUS;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
538
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
539 } else if (type == 0x0008) {
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
540 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
541 * Type = 0x0008
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
542 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
543 * Client type, or some such.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
544 */
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
545
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
546 } else if (type == 0x000a) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
547 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
548 * Type = 0x000a
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
549 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
550 * ICQ User IP Address.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
551 * Ahh, the joy of ICQ security.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
552 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
553 outinfo->icqinfo.ipaddr = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
554 outinfo->present |= AIM_USERINFO_PRESENT_ICQIPADDR;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
555
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
556 } else if (type == 0x000c) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
557 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
558 * Type = 0x000c
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
559 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
560 * random crap containing the IP address,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
561 * apparently a port number, and some Other Stuff.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
562 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
563 * Format is:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
564 * 4 bytes - Our IP address, 0xc0 a8 01 2b for 192.168.1.43
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
565 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
566 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
567 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
568 aimbs_getrawbuf(bs, outinfo->icqinfo.crap, 0x25);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
569 outinfo->present |= AIM_USERINFO_PRESENT_ICQDATA;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
570
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
571 } else if (type == 0x000d) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
572 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
573 * Type = 0x000d
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
574 *
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
575 * OSCAR Capability information.
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
576 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
577 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
578 outinfo->capabilities = aim_getcap(sess, bs, length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
579 outinfo->present |= AIM_USERINFO_PRESENT_CAPABILITIES;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
580
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
581 } else if (type == 0x000e) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
582 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
583 * Type = 0x000e
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
584 *
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
585 * AOL capability information.
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
586 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
587 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
588
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
589 } else if ((type == 0x000f) || (type == 0x0010)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
590 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
591 * Type = 0x000f: Session Length. (AIM)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
592 * Type = 0x0010: Session Length. (AOL)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
593 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
594 * The duration, in seconds, of the user's current
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
595 * session.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
596 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
597 * Which TLV type this comes in depends on the
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
598 * service the user is using (AIM or AOL).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
599 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
600 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
601 outinfo->sessionlen = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
602 outinfo->present |= AIM_USERINFO_PRESENT_SESSIONLEN;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
603
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
604 } else if (type == 0x0019) {
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
605 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
606 * Type = 0x0019
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
607 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
608 * OSCAR short capability information. A shortened
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
609 * form of the normal capabilities.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
610 */
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
611
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
612 } else if (type == 0x001b) {
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
613 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
614 * Type = 0x001a
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
615 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
616 * AOL short capability information. A shortened
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
617 * form of the normal capabilities.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
618 */
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
619
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
620 } else if (type == 0x001b) {
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
621 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
622 * Type = 0x0019
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
623 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
624 * Encryption certification MD5 checksum.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
625 */
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
626
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
627 } else if (type == 0x001d) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
628 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
629 * Type = 0x001d
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
630 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
631 * Buddy icon information and available messages.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
632 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
633 * This almost seems like the AIM protocol guys gave
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
634 * the iChat guys a Type, and the iChat guys tried to
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
635 * cram as much cool shit into it as possible. Then
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
636 * the Windows AIM guys were like, "hey, that's
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
637 * pretty neat, let's copy those prawns."
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
638 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
639 * In that spirit, this can contain a custom message,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
640 * kind of like an away message, but you're not away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
641 * (it's called an "available" message). Or it can
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
642 * contain information about the buddy icon the user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
643 * has stored on the server.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
644 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
645 int type2, number, length2;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
646
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
647 while (aim_bstream_curpos(bs) < endpos) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
648 type2 = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
649 number = aimbs_get8(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
650 length2 = aimbs_get8(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
651
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
652 switch (type2) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
653 case 0x0000: { /* This is an official buddy icon? */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
654 /* This is always 5 bytes of "0x02 01 d2 04 72"? */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
655 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
656 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
657
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
658 case 0x0001: { /* A buddy icon checksum */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
659 if ((length2 > 0) && (number == 0x01)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
660 free(outinfo->iconcsum);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
661 outinfo->iconcsum = aimbs_getraw(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
662 outinfo->iconcsumlen = length2;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
663 } else
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
664 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
665 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
666
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
667 case 0x0002: { /* An available message */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
668 if (length2 > 4) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
669 free(outinfo->avail);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
670 outinfo->avail_len = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
671 outinfo->avail = aimbs_getstr(bs, outinfo->avail_len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
672 if (aimbs_get16(bs) == 0x0001) { /* We have an encoding */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
673 aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
674 outinfo->avail_encoding = aimbs_getstr(bs, aimbs_get16(bs));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
675 } else {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
676 /* No explicit encoding, client should use UTF-8 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
677 outinfo->avail_encoding = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
678 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
679 } else
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
680 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
681 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
682
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
683 default: {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
684 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
685 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
686 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
687 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
688
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
689 } else if (type == 0x001e) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
690 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
691 * Type 30: Unknown.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
692 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
693 * Always four bytes, but it doesn't look like an int.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
694 */
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
695
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
696 } else if (type == 0x001f) {
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
697 /*
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
698 * Type 31: Unknown.
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
699 *
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
700 * Seen on a buddy using DeadAIM. Data was 4 bytes:
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
701 * 0x00 00 00 10
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
702 */
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
703
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
704 } else {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
705
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
706 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
707 * Reaching here indicates that either AOL has
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
708 * added yet another TLV for us to deal with,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
709 * or the parsing has gone Terribly Wrong.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
710 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
711 * Either way, inform the owner and attempt
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
712 * recovery.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
713 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
714 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
715 faimdprintf(sess, 0, "userinfo: **warning: unexpected TLV:\n");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
716 faimdprintf(sess, 0, "userinfo: sn =%s\n", outinfo->sn);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
717 dumptlv(sess, type, bs, length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
718 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
719
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
720 /* Save ourselves. */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
721 aim_bstream_setpos(bs, endpos);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
722 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
723
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
724 aim_locate_adduserinfo(sess, outinfo);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
725
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
726 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
727 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
728
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
729 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
730 * Inverse of aim_info_extract()
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
731 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
732 faim_internal int aim_putuserinfo(aim_bstream_t *bs, aim_userinfo_t *info)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
733 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
734 aim_tlvlist_t *tlvlist = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
735
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
736 if (!bs || !info)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
737 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
738
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
739 aimbs_put8(bs, strlen(info->sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
740 aimbs_putraw(bs, info->sn, strlen(info->sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
741
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
742 aimbs_put16(bs, info->warnlevel);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
743
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
744 if (info->present & AIM_USERINFO_PRESENT_FLAGS)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
745 aim_tlvlist_add_16(&tlvlist, 0x0001, info->flags);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
746 if (info->present & AIM_USERINFO_PRESENT_MEMBERSINCE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
747 aim_tlvlist_add_32(&tlvlist, 0x0002, info->membersince);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
748 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
749 aim_tlvlist_add_32(&tlvlist, 0x0003, info->onlinesince);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
750 if (info->present & AIM_USERINFO_PRESENT_IDLE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
751 aim_tlvlist_add_16(&tlvlist, 0x0004, info->idletime);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
752
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
753 /* XXX - So, ICQ_OSCAR_SUPPORT is never defined anywhere... */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
754 #if ICQ_OSCAR_SUPPORT
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
755 if (atoi(info->sn) != 0) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
756 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
757 aim_tlvlist_add_16(&tlvlist, 0x0006, info->icqinfo.status);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
758 if (info->present & AIM_USERINFO_PRESENT_ICQIPADDR)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
759 aim_tlvlist_add_32(&tlvlist, 0x000a, info->icqinfo.ipaddr);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
760 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
761 #endif
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
762
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
763 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
764 aim_tlvlist_add_caps(&tlvlist, 0x000d, info->capabilities);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
765
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
766 if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
767 aim_tlvlist_add_32(&tlvlist, (fu16_t)((info->flags & AIM_FLAG_AOL) ? 0x0010 : 0x000f), info->sessionlen);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
768
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
769 aimbs_put16(bs, aim_tlvlist_count(&tlvlist));
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
770 aim_tlvlist_write(bs, &tlvlist);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
771 aim_tlvlist_free(&tlvlist);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
772
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
773 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
774 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
775
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
776 /*
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
777 * Subtype 0x0001
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
778 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
779 static int error(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
780 {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
781 int ret = 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
782 aim_rxcallback_t userfunc;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
783 aim_snac_t *snac2;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
784 fu16_t reason;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
785 char *sn;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
786 int was_explicit;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
787
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
788 if (!(snac2 = aim_remsnac(sess, snac->id))) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
789 faimdprintf(sess, 0, "faim: locate.c, error(): received response from unknown request!\n");
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
790 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
791 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
792
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
793 if ((snac2->family != 0x0002) && (snac2->type != 0x0015)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
794 faimdprintf(sess, 0, "faim: locate.c, error(): received response from invalid request! %d\n", snac2->family);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
795 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
796 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
797
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
798 if (!(sn = snac2->data)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
799 faimdprintf(sess, 0, "faim: locate.c, error(): received response from request without a screen name!\n");
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
800 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
801 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
802
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
803 reason = aimbs_get16(bs);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
804
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
805 /*
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
806 * Remove this screen name from our queue. If the client requested
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
807 * this buddy's info explicitly, then notify them that we do not have
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
808 * info for this buddy.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
809 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
810 was_explicit = aim_locate_gotuserinfo(sess, sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
811 if (was_explicit == TRUE)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
812 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
813 ret = userfunc(sess, rx, reason, sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
814
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
815 if (snac2)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
816 free(snac2->data);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
817 free(snac2);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
818
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
819 return ret;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
820 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
821
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
822 /*
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
823 * Subtype 0x0002
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
824 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
825 * Request Location services rights.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
826 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
827 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
828 faim_export int aim_locate_reqrights(aim_session_t *sess)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
829 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
830 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
831
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
832 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
833 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
834
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
835 return aim_genericreq_n(sess, conn, AIM_CB_FAM_LOC, AIM_CB_LOC_REQRIGHTS);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
836 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
837
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
838 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
839 * Subtype 0x0003
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
840 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
841 * Normally contains:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
842 * t(0001) - short containing max profile length (value = 1024)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
843 * t(0002) - short - unknown (value = 16) [max MIME type length?]
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
844 * t(0003) - short - unknown (value = 10)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
845 * t(0004) - short - unknown (value = 2048) [ICQ only?]
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
846 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
847 static int rights(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
848 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
849 aim_tlvlist_t *tlvlist;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
850 aim_rxcallback_t userfunc;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
851 int ret = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
852 fu16_t maxsiglen = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
853
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
854 tlvlist = aim_tlvlist_read(bs);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
855
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
856 if (aim_tlv_gettlv(tlvlist, 0x0001, 1))
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
857 maxsiglen = aim_tlv_get16(tlvlist, 0x0001, 1);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
858
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
859 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
860 ret = userfunc(sess, rx, maxsiglen);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
861
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
862 aim_tlvlist_free(&tlvlist);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
863
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
864 return ret;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
865 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
866
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
867 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
868 * Subtype 0x0004
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
869 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
870 * Gives BOS your profile.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
871 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
872 * profile_encoding and awaymsg_encoding MUST be set if profile or
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
873 * away are set, respectively, and their value may or may not be
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
874 * restricted to a few choices. I am currently aware of:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
875 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
876 * us-ascii Just that
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
877 * unicode-2-0 UCS2-BE
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
878 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
879 * profile_len and awaymsg_len MUST be set similarly, and they MUST
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
880 * be the length of their respective strings in bytes.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
881 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
882 * To get the previous behavior of awaymsg == "" un-setting the away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
883 * message, set awaymsg non-NULL and awaymsg_len to 0 (this is the
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
884 * obvious equivalent).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
885 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
886 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
887 faim_export int aim_locate_setprofile(aim_session_t *sess,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
888 const char *profile_encoding, const char *profile, const int profile_len,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
889 const char *awaymsg_encoding, const char *awaymsg, const int awaymsg_len,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
890 fu32_t caps)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
891 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
892 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
893 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
894 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
895 aim_tlvlist_t *tl = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
896 char *encoding;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
897 static const char defencoding[] = {"text/aolrtf; charset=\"%s\""};
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
898
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
899 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
900 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
901
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
902 if ((profile && profile_encoding == NULL) || (awaymsg && awaymsg_len && awaymsg_encoding == NULL)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
903 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
904 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
905
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
906 /* Build the packet first to get real length */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
907 if (profile) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
908 /* no + 1 here because of %s */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
909 encoding = malloc(strlen(defencoding) + strlen(profile_encoding));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
910 if (encoding == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
911 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
912 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
913 snprintf(encoding, strlen(defencoding) + strlen(profile_encoding), defencoding, profile_encoding);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
914 aim_tlvlist_add_raw(&tl, 0x0001, strlen(encoding), encoding);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
915 aim_tlvlist_add_raw(&tl, 0x0002, profile_len, profile);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
916 free(encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
917 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
918
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
919 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
920 * So here's how this works:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
921 * - You are away when you have a non-zero-length type 4 TLV stored.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
922 * - You become unaway when you clear the TLV with a zero-length
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
923 * type 4 TLV.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
924 * - If you do not send the type 4 TLV, your status does not change
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
925 * (that is, if you were away, you'll remain away).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
926 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
927 if (awaymsg) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
928 if (awaymsg_len) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
929 encoding = malloc(strlen(defencoding) + strlen(awaymsg_encoding));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
930 if (encoding == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
931 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
932 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
933 snprintf(encoding, strlen(defencoding) + strlen(awaymsg_encoding), defencoding, awaymsg_encoding);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
934 aim_tlvlist_add_raw(&tl, 0x0003, strlen(encoding), encoding);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
935 aim_tlvlist_add_raw(&tl, 0x0004, awaymsg_len, awaymsg);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
936 free(encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
937 } else
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
938 aim_tlvlist_add_noval(&tl, 0x0004);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
939 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
940
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
941 aim_tlvlist_add_caps(&tl, 0x0005, caps);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
942
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
943 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + aim_tlvlist_size(&tl))))
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
944 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
945
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
946 snacid = aim_cachesnac(sess, 0x0002, 0x0004, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
947 aim_putsnac(&fr->data, 0x0002, 0x004, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
948
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
949 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
950 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
951
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
952 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
953
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
954 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
955 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
956
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
957 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
958 * Subtype 0x0005 - Request info of another AIM user.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
959 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
960 * @param sn The screenname whose info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
961 * @param infotype The type of info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
962 * 0x0001 - Info/profile
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
963 * 0x0003 - Away message
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
964 * 0x0004 - Capabilities
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
965 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
966 faim_export int aim_locate_getinfo(aim_session_t *sess, const char *sn, fu16_t infotype)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
967 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
968 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
969 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
970 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
971
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
972 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
973 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
974
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
975 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 12+1+strlen(sn))))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
976 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
977
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
978 snacid = aim_cachesnac(sess, 0x0002, 0x0005, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
979
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
980 aim_putsnac(&fr->data, 0x0002, 0x0005, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
981 aimbs_put16(&fr->data, infotype);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
982 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
983 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
984
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
985 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
986
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
987 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
988 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
989
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
990 /* Subtype 0x0006 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
991 static int userinfo(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
992 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
993 int ret = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
994 aim_rxcallback_t userfunc;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
995 aim_userinfo_t *userinfo, *userinfo2;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
996 aim_tlvlist_t *tlvlist;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
997 aim_tlv_t *tlv = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
998 int was_explicit;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
999
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1000 userinfo = (aim_userinfo_t *)malloc(sizeof(aim_userinfo_t));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1001 aim_info_extract(sess, bs, userinfo);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1002 tlvlist = aim_tlvlist_read(bs);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1003
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1004 /* Profile will be 1 and 2 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1005 userinfo->info_encoding = aim_tlv_getstr(tlvlist, 0x0001, 1);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1006 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0002, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1007 userinfo->info = (char *)malloc(tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1008 memcpy(userinfo->info, tlv->value, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1009 userinfo->info_len = tlv->length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1010 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1012 /* Away message will be 3 and 4 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1013 userinfo->away_encoding = aim_tlv_getstr(tlvlist, 0x0003, 1);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1014 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0004, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1015 userinfo->away = (char *)malloc(tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1016 memcpy(userinfo->away, tlv->value, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1017 userinfo->away_len = tlv->length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1018 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1019
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1020 /* Caps will be 5 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1021 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0005, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1022 aim_bstream_t cbs;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1023 aim_bstream_init(&cbs, tlv->value, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1024 userinfo->capabilities = aim_getcap(sess, &cbs, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1025 userinfo->present = AIM_USERINFO_PRESENT_CAPABILITIES;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1026 }
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1027 aim_tlvlist_free(&tlvlist);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1028
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1029 aim_locate_adduserinfo(sess, userinfo);
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1030 userinfo2 = aim_locate_finduserinfo(sess, userinfo->sn);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1031 aim_info_free(userinfo);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1032 free(userinfo);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1033
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1034 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1035 * Remove this screen name from our queue. If the client requested
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1036 * this buddy's info explicitly, then notify them that we have info
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1037 * for this buddy.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1038 */
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1039 was_explicit = aim_locate_gotuserinfo(sess, userinfo2->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1040 if (was_explicit == TRUE)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1041 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1042 ret = userfunc(sess, rx, userinfo2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1043
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1044 return ret;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1045 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1046
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1047 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1048 * Subtype 0x0009 - Set directory profile data.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1049 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1050 * This is not the same as aim_location_setprofile!
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1051 * privacy: 1 to allow searching, 0 to disallow.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1052 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1053 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1054 faim_export int aim_locate_setdirinfo(aim_session_t *sess, const char *first, const char *middle, const char *last, const char *maiden, const char *nickname, const char *street, const char *city, const char *state, const char *zip, int country, fu16_t privacy)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1055 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1056 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1057 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1058 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1059 aim_tlvlist_t *tl = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1060
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1061 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1062 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1063
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1064 aim_tlvlist_add_16(&tl, 0x000a, privacy);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1065
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1066 if (first)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1067 aim_tlvlist_add_raw(&tl, 0x0001, strlen(first), first);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1068 if (last)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1069 aim_tlvlist_add_raw(&tl, 0x0002, strlen(last), last);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1070 if (middle)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1071 aim_tlvlist_add_raw(&tl, 0x0003, strlen(middle), middle);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1072 if (maiden)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1073 aim_tlvlist_add_raw(&tl, 0x0004, strlen(maiden), maiden);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1074
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1075 if (state)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1076 aim_tlvlist_add_raw(&tl, 0x0007, strlen(state), state);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1077 if (city)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1078 aim_tlvlist_add_raw(&tl, 0x0008, strlen(city), city);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1079
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1080 if (nickname)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1081 aim_tlvlist_add_raw(&tl, 0x000c, strlen(nickname), nickname);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1082 if (zip)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1083 aim_tlvlist_add_raw(&tl, 0x000d, strlen(zip), zip);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1084
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1085 if (street)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1086 aim_tlvlist_add_raw(&tl, 0x0021, strlen(street), street);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1087
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1088 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+aim_tlvlist_size(&tl))))
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1089 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1090
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1091 snacid = aim_cachesnac(sess, 0x0002, 0x0009, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1092
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1093 aim_putsnac(&fr->data, 0x0002, 0x0009, 0x0000, snacid);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1094 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1095 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1096
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1097 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1098
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1099 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1100 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1101
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1102 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1103 * Subtype 0x000b - Huh? What is this?
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1104 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1105 faim_export int aim_locate_000b(aim_session_t *sess, const char *sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1106 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1107 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1108 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1109 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1110
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1111 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1112
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1113 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1114 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1115
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1116 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+1+strlen(sn))))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1117 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1118
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1119 snacid = aim_cachesnac(sess, 0x0002, 0x000b, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1120
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1121 aim_putsnac(&fr->data, 0x0002, 0x000b, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1122 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1123 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1124
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1125 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1126
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1127 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1128 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1129
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1130 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1131 * Subtype 0x000f
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1132 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1133 * XXX pass these in better
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1134 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1135 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1136 faim_export int aim_locate_setinterests(aim_session_t *sess, const char *interest1, const char *interest2, const char *interest3, const char *interest4, const char *interest5, fu16_t privacy)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1137 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1138 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1139 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1140 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1141 aim_tlvlist_t *tl = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1142
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1143 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1144 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1145
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1146 /* ?? privacy ?? */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1147 aim_tlvlist_add_16(&tl, 0x000a, privacy);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1148
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1149 if (interest1)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1150 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest1), interest1);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1151 if (interest2)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1152 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest2), interest2);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1153 if (interest3)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1154 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest3), interest3);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1155 if (interest4)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1156 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest4), interest4);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1157 if (interest5)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1158 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest5), interest5);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1159
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1160 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+aim_tlvlist_size(&tl))))
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1161 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1162
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1163 snacid = aim_cachesnac(sess, 0x0002, 0x000f, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1164
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1165 aim_putsnac(&fr->data, 0x0002, 0x000f, 0x0000, 0);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1166 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1167 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1168
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1169 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1170
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1171 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1172 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1173
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1174 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1175 * Subtype 0x0015 - Request the info a user using the short method. This is
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1176 * what iChat uses. It normally is VERY leniently rate limited.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1177 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1178 * @param sn The screen name whose info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1179 * @param flags The bitmask which specifies the type of info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1180 * 0x00000001 - Info/profile.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1181 * 0x00000002 - Away message.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1182 * 0x00000004 - Capabilities.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1183 * 0x00000008 - Certification.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1184 * @return Return 0 if no errors, otherwise return the error number.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1185 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1186 faim_export int aim_locate_getinfoshort(aim_session_t *sess, const char *sn, fu32_t flags)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1187 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1188 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1189 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1190 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1191
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1192 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1193 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1194
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1195 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10+4+1+strlen(sn))))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1196 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1197
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1198 snacid = aim_cachesnac(sess, 0x0002, 0x0015, 0x0000, sn, strlen(sn)+1);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1199
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1200 aim_putsnac(&fr->data, 0x0002, 0x0015, 0x0000, snacid);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1201 aimbs_put32(&fr->data, flags);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1202 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1203 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1204
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1205 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1206
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1207 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1208 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1209
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1210 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1211 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1212
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1213 if (snac->subtype == 0x0001)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1214 return error(sess, mod, rx, snac, bs);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1215 else if (snac->subtype == 0x0003)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1216 return rights(sess, mod, rx, snac, bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1217 else if (snac->subtype == 0x0006)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1218 return userinfo(sess, mod, rx, snac, bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1219
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1220 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1221 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1222
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1223 static void locate_shutdown(aim_session_t *sess, aim_module_t *mod)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1224 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1225 aim_userinfo_t *del;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1226
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1227 while (sess->locate.userinfo) {
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1228 del = sess->locate.userinfo;
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1229 sess->locate.userinfo = sess->locate.userinfo->next;
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
1230 aim_info_free(del);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1231 free(del);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1232 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1233 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1234
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1235 faim_internal int locate_modfirst(aim_session_t *sess, aim_module_t *mod)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1236 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1237
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1238 mod->family = AIM_CB_FAM_LOC;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1239 mod->version = 0x0001;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1240 mod->toolid = 0x0110;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1241 mod->toolversion = 0x0629;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1242 mod->flags = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1243 strncpy(mod->name, "locate", sizeof(mod->name));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1244 mod->snachandler = snachandler;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1245 mod->shutdown = locate_shutdown;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1246
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1247 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1248 }