annotate src/protocols/oscar/locate.c @ 8092:697221d5d0ff

[gaim-migrate @ 8791] Give a nice little warning if you add an AIM or ICQ buddy with an invalid name. I'm thinking some of those bug reports on SF about "Could not add buddy with no name" are caused by this. Hopefully. Sometime before the next release I'll probably actually remove invalid people from the local list. Also recognize the WinAIM Video and Camera caps. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 13 Jan 2004 05:44:37 +0000
parents 0a0be07f066a
children fec4c1fb2ac8
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
7582
3e0404393761 [gaim-migrate @ 8200]
Mark Doliner <mark@kingant.net>
parents: 7510
diff changeset
45 {AIM_CAPS_VIDEO,
3e0404393761 [gaim-migrate @ 8200]
Mark Doliner <mark@kingant.net>
parents: 7510
diff changeset
46 {0x09, 0x46, 0x01, 0x00, 0x4c, 0x7f, 0x11, 0xd1,
3e0404393761 [gaim-migrate @ 8200]
Mark Doliner <mark@kingant.net>
parents: 7510
diff changeset
47 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
3e0404393761 [gaim-migrate @ 8200]
Mark Doliner <mark@kingant.net>
parents: 7510
diff changeset
48
8092
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
49 /* "Live Video" support in Windows AIM 5.5.3501 and newer */
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
50 {AIM_CAPS_LIVEVIDEO,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
51 {0x09, 0x46, 0x01, 0x01, 0x4c, 0x7f, 0x11, 0xd1,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
52 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
53
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
54 /* "Camera" support in Windows AIM 5.5.3501 and newer */
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
55 {AIM_CAPS_CAMERA,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
56 {0x09, 0x46, 0x01, 0x02, 0x4c, 0x7f, 0x11, 0xd1,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
57 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
58
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
59 /* In Windows AIM 5.5.3501 and newer */
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
60 {AIM_CAPS_GENERICUNKNOWN,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
61 {0x09, 0x46, 0x01, 0x03, 0x4c, 0x7f, 0x11, 0xd1,
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
62 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
63
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
64 /* In iChatAV (version numbers...?) */
7945
0a0be07f066a [gaim-migrate @ 8619]
Mark Doliner <mark@kingant.net>
parents: 7582
diff changeset
65 {AIM_CAPS_ICHATAV,
0a0be07f066a [gaim-migrate @ 8619]
Mark Doliner <mark@kingant.net>
parents: 7582
diff changeset
66 {0x09, 0x46, 0x01, 0x05, 0x4c, 0x7f, 0x11, 0xd1,
0a0be07f066a [gaim-migrate @ 8619]
Mark Doliner <mark@kingant.net>
parents: 7582
diff changeset
67 0x82, 0x22, 0x44, 0x45, 0x45, 0x53, 0x54, 0x00}},
0a0be07f066a [gaim-migrate @ 8619]
Mark Doliner <mark@kingant.net>
parents: 7582
diff changeset
68
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
69 /*
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
70 * Not really sure about this one. In an email from
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
71 * 26 Sep 2003, Matthew Sachs suggested that, "this
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
72 * is probably the capability for the SMS features."
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
73 */
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
74 {AIM_CAPS_SMS,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
75 {0x09, 0x46, 0x01, 0xff, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
76 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
77
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
78 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
79 {0x09, 0x46, 0xf0, 0x03, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
80 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
81
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
82 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
83 {0x09, 0x46, 0xf0, 0x04, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
84 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
85
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
86 {AIM_CAPS_GENERICUNKNOWN,
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
87 {0x09, 0x46, 0xf0, 0x05, 0x4c, 0x7f, 0x11, 0xd1,
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
88 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
89
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
90 {AIM_CAPS_HIPTOP,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
91 {0x09, 0x46, 0x13, 0x23, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
92 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93
8092
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
94 {AIM_CAPS_TALK,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 {0x09, 0x46, 0x13, 0x41, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
97
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 {AIM_CAPS_SENDFILE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99 {0x09, 0x46, 0x13, 0x43, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
102 {AIM_CAPS_ICQ_DIRECT,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 {0x09, 0x46, 0x13, 0x44, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
104 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
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 {AIM_CAPS_DIRECTIM,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
107 {0x09, 0x46, 0x13, 0x45, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
108 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
109
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
110 {AIM_CAPS_BUDDYICON,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
111 {0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
112 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
113
8092
697221d5d0ff [gaim-migrate @ 8791]
Mark Doliner <mark@kingant.net>
parents: 7945
diff changeset
114 {AIM_CAPS_ADDINS,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
115 {0x09, 0x46, 0x13, 0x47, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
116 0x82, 0x22, 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_GETFILE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
119 {0x09, 0x46, 0x13, 0x48, 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 {AIM_CAPS_ICQSERVERRELAY,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
123 {0x09, 0x46, 0x13, 0x49, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
124 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
125
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
126 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
127 * Indeed, there are two of these. The former appears to be correct,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
128 * 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
129 * 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
130 * matter which.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
131 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
132 {AIM_CAPS_GAMES,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
133 {0x09, 0x46, 0x13, 0x4a, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
134 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
135 {AIM_CAPS_GAMES2,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
136 {0x09, 0x46, 0x13, 0x4a, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
137 0x22, 0x82, 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_SENDBUDDYLIST,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
140 {0x09, 0x46, 0x13, 0x4b, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
141 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
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 * Setting this lets AIM users receive messages from ICQ users, and ICQ
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
145 * users receive messages from AIM users. It also lets ICQ users show
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
146 * 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
147 * for ICQ users. And ICQ privacy/invisibility acts like AIM privacy,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
148 * 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
149 * see them as online (previous you could still see them, but they
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
150 * couldn't see you.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
151 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
152 {AIM_CAPS_INTEROPERATE,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
153 {0x09, 0x46, 0x13, 0x4d, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
154 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
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_ICQUTF8,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
157 {0x09, 0x46, 0x13, 0x4e, 0x4c, 0x7f, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
158 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
159
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
160 {AIM_CAPS_ICQUTF8OLD,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
161 {0x2e, 0x7a, 0x64, 0x75, 0xfa, 0xdf, 0x4d, 0xc8,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
162 0x88, 0x6f, 0xea, 0x35, 0x95, 0xfd, 0xb6, 0xdf}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
163
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 * Chat is oddball.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
166 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
167 {AIM_CAPS_CHAT,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
168 {0x74, 0x8f, 0x24, 0x20, 0x62, 0x87, 0x11, 0xd1,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
169 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
170
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
171 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
172 {AIM_CAPS_ICQ2GO,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
173 {0x56, 0x3f, 0xc8, 0x09, 0x0b, 0x6f, 0x41, 0xbd,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
174 0x9f, 0x79, 0x42, 0x26, 0x09, 0xdf, 0xa2, 0xf3}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
175 */
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_ICQRTF,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
178 {0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
179 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x92}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
180
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
181 /* 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
182 {AIM_CAPS_GENERICUNKNOWN,
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
183 {0x97, 0xb1, 0x27, 0x51, 0x24, 0x3c, 0x43, 0x34,
7091
7b31e3e22f59 [gaim-migrate @ 7656]
Mark Doliner <mark@kingant.net>
parents: 7046
diff changeset
184 0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x09}},
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
185
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
186 {AIM_CAPS_APINFO,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
187 {0xaa, 0x4a, 0x32, 0xb5, 0xf8, 0x84, 0x48, 0xc6,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
188 0xa3, 0xd7, 0x8c, 0x50, 0x97, 0x19, 0xfd, 0x5b}},
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 {AIM_CAPS_TRILLIANCRYPT,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
191 {0xf2, 0xe7, 0xc7, 0xf4, 0xfe, 0xad, 0x4d, 0xfb,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
192 0xb2, 0x35, 0x36, 0x79, 0x8b, 0xdf, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
193
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
194 {AIM_CAPS_EMPTY,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
195 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}},
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
197
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
198 {AIM_CAPS_LAST}
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
199 };
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
200
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
201 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
202 * Add the userinfo to our linked list. If we already have userinfo
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
203 * for this buddy, then just overwrite parts of the old data.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
204 * @param userinfo Contains the new information for the buddy.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
205 */
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
206 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
207 aim_userinfo_t *cur;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
208
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
209 cur = aim_locate_finduserinfo(sess, userinfo->sn);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
210
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
211 if (cur == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
212 cur = (aim_userinfo_t *)calloc(1, sizeof(aim_userinfo_t));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
213 cur->sn = strdup(userinfo->sn);
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
214 cur->next = sess->locate.userinfo;
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
215 sess->locate.userinfo = cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
216 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
217
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
218 cur->warnlevel = userinfo->warnlevel;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
219 cur->idletime = userinfo->idletime;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
220 if (userinfo->flags != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
221 cur->flags = userinfo->flags;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
222 if (userinfo->createtime != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
223 cur->createtime = userinfo->createtime;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
224 if (userinfo->membersince != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
225 cur->membersince = userinfo->membersince;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
226 if (userinfo->onlinesince != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
227 cur->onlinesince = userinfo->onlinesince;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
228 if (userinfo->sessionlen != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
229 cur->sessionlen = userinfo->sessionlen;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
230 if (userinfo->capabilities != 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
231 cur->capabilities = userinfo->capabilities;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
232 cur->present |= userinfo->present;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
233
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
234 if (userinfo->iconcsumlen > 0) {
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
235 free(cur->iconcsum);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
236 cur->iconcsum = (fu8_t *)malloc(userinfo->iconcsumlen);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
237 memcpy(cur->iconcsum, userinfo->iconcsum, userinfo->iconcsumlen);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
238 cur->iconcsumlen = userinfo->iconcsumlen;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
239 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
240
7301
0ed0ac132b1b [gaim-migrate @ 7885]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
241 if (userinfo->info != NULL) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
242 free(cur->info);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
243 free(cur->info_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
244 cur->info = (char *)malloc(userinfo->info_len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
245 memcpy(cur->info, userinfo->info, userinfo->info_len);
7235
03f22e564311 [gaim-migrate @ 7810]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
246 cur->info_encoding = strdup(userinfo->info_encoding);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
247 cur->info_len = userinfo->info_len;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
248 }
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
249
7301
0ed0ac132b1b [gaim-migrate @ 7885]
Mark Doliner <mark@kingant.net>
parents: 7282
diff changeset
250 if (userinfo->away != NULL) {
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
251 free(cur->away);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
252 free(cur->away_encoding);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
253 cur->away = (char *)malloc(userinfo->away_len);
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
254 memcpy(cur->away, userinfo->away, userinfo->away_len);
7235
03f22e564311 [gaim-migrate @ 7810]
Mark Doliner <mark@kingant.net>
parents: 7167
diff changeset
255 cur->away_encoding = strdup(userinfo->away_encoding);
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
256 cur->away_len = userinfo->away_len;
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
257 }
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
258 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
259
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
260 static void aim_locate_dorequest(aim_session_t *sess) {
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
261 struct userinfo_node *cur = sess->locate.torequest;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
262
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
263 if (cur == NULL)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
264 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
265
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
266 if (sess->locate.waiting_for_response == TRUE)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
267 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
268
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
269 sess->locate.waiting_for_response = TRUE;
7166
e6b01bd8d6cd [gaim-migrate @ 7733]
Mark Doliner <mark@kingant.net>
parents: 7141
diff changeset
270 aim_locate_getinfoshort(sess, cur->sn, 0x00000003);
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
271
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
272 /* Move this node to the "requested" queue */
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
273 sess->locate.torequest = cur->next;
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
274 cur->next = sess->locate.requested;
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
275 sess->locate.requested = cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
276 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
277
7447
0e7a835e2433 [gaim-migrate @ 8058]
Mark Doliner <mark@kingant.net>
parents: 7334
diff changeset
278 /**
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
279 * Remove this screen name from our queue. If this info was resquested
7447
0e7a835e2433 [gaim-migrate @ 8058]
Mark Doliner <mark@kingant.net>
parents: 7334
diff changeset
280 * by our info request queue, then pop the next element off of the queue.
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
281 *
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
282 * @param sess The aim session.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
283 * @param sn Screen name of the info we just received.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
284 * @return True if the request was explicit (client requested the info),
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
285 * false if the request was implicit (libfaim request the info).
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
286 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
287 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
288 struct userinfo_node *cur, *del;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
289 int was_explicit = TRUE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
290
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
291 while ((sess->locate.requested != NULL) && (aim_sncmp(sn, sess->locate.requested->sn) == 0)) {
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
292 del = sess->locate.requested;
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
293 sess->locate.requested = del->next;
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
294 was_explicit = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
295 free(del->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
296 free(del);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
297 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
298
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
299 cur = sess->locate.requested;
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
300 while ((cur != NULL) && (cur->next != NULL)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
301 if (aim_sncmp(sn, cur->next->sn) == 0) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
302 del = cur->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
303 cur->next = del->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
304 was_explicit = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
305 free(del->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
306 free(del);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
307 } else
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
308 cur = cur->next;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
309 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
310
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
311 if (!was_explicit) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
312 sess->locate.waiting_for_response = FALSE;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
313 aim_locate_dorequest(sess);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
314 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
315
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
316 return was_explicit;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
317 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
318
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
319 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
320 struct userinfo_node *cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
321
7266
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
322 /* Make sure we aren't already requesting info for this buddy */
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
323 cur = sess->locate.torequest;
7266
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
324 while (cur != NULL) {
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
325 if (aim_sncmp(sn, cur->sn) == 0)
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
326 return;
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
327 cur = cur->next;
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
328 }
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
329
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
330 /* Add a new node to our request queue */
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
331 cur = (struct userinfo_node *)malloc(sizeof(struct userinfo_node));
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
332 cur->sn = strdup(sn);
7466
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
333 cur->next = sess->locate.torequest;
fa0324675ed9 [gaim-migrate @ 8079]
Mark Doliner <mark@kingant.net>
parents: 7447
diff changeset
334 sess->locate.torequest = cur;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
335
7266
dc3918a729e8 [gaim-migrate @ 7843]
Mark Doliner <mark@kingant.net>
parents: 7259
diff changeset
336 /* Actually request some info up in this piece */
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
337 aim_locate_dorequest(sess);
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
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
340 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
341 aim_userinfo_t *cur = sess->locate.userinfo;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
342
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
343 while (cur != NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
344 if (aim_sncmp(cur->sn, sn) == 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
345 return cur;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
346 cur = cur->next;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
347 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
348
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
349 return NULL;
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
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
352 faim_internal fu32_t aim_locate_getcaps(aim_session_t *sess, aim_bstream_t *bs, int len)
7011
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 fu32_t flags = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
355 int offset;
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 for (offset = 0; aim_bstream_empty(bs) && (offset < len); offset += 0x10) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
358 fu8_t *cap;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
359 int i, identified;
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 cap = aimbs_getraw(bs, 0x10);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
362
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
363 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
364 if (memcmp(&aim_caps[i].data, cap, 0x10) == 0) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
365 flags |= aim_caps[i].flag;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
366 identified++;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
367 break; /* should only match once... */
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 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
370
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
371 if (!identified)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
372 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
373 cap[0], cap[1], cap[2], cap[3],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
374 cap[4], cap[5],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
375 cap[6], cap[7],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
376 cap[8], cap[9],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
377 cap[10], cap[11], cap[12], cap[13],
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
378 cap[14], cap[15]);
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
379
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
380 free(cap);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
381 }
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
382
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
383 return flags;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
384 }
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
385
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
386 faim_internal fu32_t aim_locate_getcaps_short(aim_session_t *sess, aim_bstream_t *bs, int len)
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
387 {
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
388 fu32_t flags = 0;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
389 int offset;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
390
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
391 for (offset = 0; aim_bstream_empty(bs) && (offset < len); offset += 0x02) {
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
392 fu8_t *cap;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
393 int i, identified;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
394
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
395 cap = aimbs_getraw(bs, 0x02);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
396
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
397 for (i = 0, identified = 0; !(aim_caps[i].flag & AIM_CAPS_LAST); i++) {
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
398 if (memcmp(&aim_caps[i].data[2], cap, 0x02) == 0) {
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
399 flags |= aim_caps[i].flag;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
400 identified++;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
401 break; /* should only match once... */
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
402 }
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
403 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
404
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
405 if (!identified)
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
406 faimdprintf(sess, 0, "unknown short capability: {%02x%02x}\n", cap[0], cap[1]);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
407
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
408 free(cap);
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 return flags;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
412 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
413
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
414 faim_internal int aim_putcap(aim_bstream_t *bs, fu32_t caps)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
415 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
416 int i;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
417
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
418 if (!bs)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
419 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
420
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
421 for (i = 0; aim_bstream_empty(bs); i++) {
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 if (aim_caps[i].flag == AIM_CAPS_LAST)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
424 break;
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 if (caps & aim_caps[i].flag)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
427 aimbs_putraw(bs, aim_caps[i].data, 0x10);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
428
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
431 return 0;
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 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
435 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
436 int i;
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 if (!sess || !bs || !len)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
439 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
440
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
441 faimdprintf(sess, 0, "userinfo: type =0x%04x\n", type);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
442 faimdprintf(sess, 0, "userinfo: length=0x%04x\n", len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
443 faimdprintf(sess, 0, "userinfo: value:\n");
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 for (i = 0; i < len; i++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
446 if ((i % 8) == 0)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
447 faimdprintf(sess, 0, "\nuserinfo: ");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
448 faimdprintf(sess, 0, "0x%2x ", aimbs_get8(bs));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
449 }
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 faimdprintf(sess, 0, "\n");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
452
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
453 return;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
454 }
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 faim_internal void aim_info_free(aim_userinfo_t *info)
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 free(info->sn);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
459 free(info->iconcsum);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
460 free(info->info);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
461 free(info->info_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
462 free(info->avail);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
463 free(info->avail_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
464 free(info->away);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
465 free(info->away_encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
466 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
467
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 * AIM is fairly regular about providing user info. This is a generic
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
470 * routine to extract it in its standard form.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
471 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
472 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
473 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
474 int curtlv, tlvcnt;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
475 fu8_t snlen;
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 if (!bs || !outinfo)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
478 return -EINVAL;
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 /* Clear out old data first */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
481 memset(outinfo, 0x00, sizeof(aim_userinfo_t));
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 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
484 * Screen name. Stored as an unterminated string prepended with a
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
485 * byte containing its length.
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 snlen = aimbs_get8(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
488 outinfo->sn = aimbs_getstr(bs, snlen);
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 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
491 * Warning Level. Stored as an unsigned short.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
492 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
493 outinfo->warnlevel = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
494
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
495 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
496 * TLV Count. Unsigned short representing the number of
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
497 * Type-Length-Value triples that follow.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
498 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
499 tlvcnt = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
500
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 * Parse out the Type-Length-Value triples as they're found.
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 for (curtlv = 0; curtlv < tlvcnt; curtlv++) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
505 int endpos;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
506 fu16_t type, length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
507
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
508 type = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
509 length = aimbs_get16(bs);
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 endpos = aim_bstream_curpos(bs) + length;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
512
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
513 if (type == 0x0001) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
514 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
515 * Type = 0x0001: User flags
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
516 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
517 * Specified as any of the following ORed together:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
518 * 0x0001 Trial (user less than 60days)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
519 * 0x0002 Unknown bit 2
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
520 * 0x0004 AOL Main Service user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
521 * 0x0008 Unknown bit 4
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
522 * 0x0010 Free (AIM) user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
523 * 0x0020 Away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
524 * 0x0400 ActiveBuddy
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
525 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
526 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
527 outinfo->flags = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
528 outinfo->present |= AIM_USERINFO_PRESENT_FLAGS;
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 } else if (type == 0x0002) {
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 * Type = 0x0002: Account creation time.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
533 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
534 * The time/date that the user originally registered for
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
535 * the service, stored in time_t format.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
536 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
537 * I'm not sure how this differs from type 5 ("member
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
538 * since").
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
539 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
540 * Note: This is the field formerly known as "member
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
541 * since". All these years and I finally found out
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
542 * that I got the name wrong.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
543 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
544 outinfo->createtime = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
545 outinfo->present |= AIM_USERINFO_PRESENT_CREATETIME;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
546
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
547 } else if (type == 0x0003) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
548 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
549 * Type = 0x0003: On-Since date.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
550 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
551 * The time/date that the user started their current
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
552 * session, stored in time_t format.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
553 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
554 outinfo->onlinesince = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
555 outinfo->present |= AIM_USERINFO_PRESENT_ONLINESINCE;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
556
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
557 } else if (type == 0x0004) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
558 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
559 * Type = 0x0004: Idle time.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
560 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
561 * Number of minutes since the user actively used the
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
562 * service.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
563 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
564 * Note that the client tells the server when to start
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
565 * counting idle times, so this may or may not be
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
566 * related to reality.
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 outinfo->idletime = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
569 outinfo->present |= AIM_USERINFO_PRESENT_IDLE;
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 == 0x0005) {
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 = 0x0005: Member since date.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
574 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
575 * The time/date that the user originally registered for
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
576 * the service, stored in time_t format.
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 * This is sometimes sent instead of type 2 ("account
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
579 * creation time"), particularly in the self-info.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
580 * And particularly for ICQ?
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
581 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
582 outinfo->membersince = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
583 outinfo->present |= AIM_USERINFO_PRESENT_MEMBERSINCE;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
584
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
585 } else if (type == 0x0006) {
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 * Type = 0x0006: ICQ Online Status
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 * ICQ's Away/DND/etc "enriched" status. Some decoding
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
590 * of values done by Scott <darkagl@pcnet.com>
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
591 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
592 aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
593 outinfo->icqinfo.status = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
594 outinfo->present |= AIM_USERINFO_PRESENT_ICQEXTSTATUS;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
595
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
596 } else if (type == 0x0008) {
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
597 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
598 * Type = 0x0008
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
599 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
600 * Client type, or some such.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
601 */
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
602
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
603 } else if (type == 0x000a) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
604 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
605 * Type = 0x000a
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
606 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
607 * ICQ User IP Address.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
608 * Ahh, the joy of ICQ security.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
609 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
610 outinfo->icqinfo.ipaddr = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
611 outinfo->present |= AIM_USERINFO_PRESENT_ICQIPADDR;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
612
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
613 } else if (type == 0x000c) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
614 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
615 * Type = 0x000c
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
616 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
617 * random crap containing the IP address,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
618 * apparently a port number, and some Other Stuff.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
619 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
620 * Format is:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
621 * 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
622 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
623 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
624 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
625 aimbs_getrawbuf(bs, outinfo->icqinfo.crap, 0x25);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
626 outinfo->present |= AIM_USERINFO_PRESENT_ICQDATA;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
627
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
628 } else if (type == 0x000d) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
629 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
630 * Type = 0x000d
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
631 *
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
632 * OSCAR Capability information.
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
633 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
634 */
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
635 outinfo->capabilities |= aim_locate_getcaps(sess, bs, length);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
636 outinfo->present |= AIM_USERINFO_PRESENT_CAPABILITIES;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
637
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
638 } else if (type == 0x000e) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
639 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
640 * Type = 0x000e
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
641 *
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
642 * AOL capability information.
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
643 *
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
646 } else if ((type == 0x000f) || (type == 0x0010)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
647 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
648 * Type = 0x000f: Session Length. (AIM)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
649 * Type = 0x0010: Session Length. (AOL)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
650 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
651 * The duration, in seconds, of the user's current
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
652 * session.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
653 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
654 * Which TLV type this comes in depends on the
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
655 * service the user is using (AIM or AOL).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
656 *
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 outinfo->sessionlen = aimbs_get32(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
659 outinfo->present |= AIM_USERINFO_PRESENT_SESSIONLEN;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
660
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
661 } else if (type == 0x0019) {
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
662 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
663 * Type = 0x0019
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
664 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
665 * OSCAR short capability information. A shortened
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
666 * form of the normal capabilities.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
667 */
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
668 outinfo->capabilities |= aim_locate_getcaps_short(sess, bs, length);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
669 outinfo->present |= AIM_USERINFO_PRESENT_CAPABILITIES;
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
670
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
671 } else if (type == 0x001b) {
7141
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
672 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
673 * Type = 0x001a
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
674 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
675 * AOL short capability information. A shortened
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
676 * form of the normal capabilities.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
677 */
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
678
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
679 } else if (type == 0x001b) {
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
680 /*
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
681 * Type = 0x0019
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
682 *
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
683 * Encryption certification MD5 checksum.
af8ac078d4c2 [gaim-migrate @ 7708]
Mark Doliner <mark@kingant.net>
parents: 7091
diff changeset
684 */
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
685
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
686 } else if (type == 0x001d) {
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 * Type = 0x001d
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
689 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
690 * Buddy icon information and available messages.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
691 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
692 * This almost seems like the AIM protocol guys gave
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
693 * the iChat guys a Type, and the iChat guys tried to
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
694 * cram as much cool shit into it as possible. Then
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
695 * the Windows AIM guys were like, "hey, that's
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
696 * pretty neat, let's copy those prawns."
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
697 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
698 * In that spirit, this can contain a custom message,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
699 * kind of like an away message, but you're not away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
700 * (it's called an "available" message). Or it can
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
701 * contain information about the buddy icon the user
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
702 * has stored on the server.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
703 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
704 int type2, number, length2;
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 while (aim_bstream_curpos(bs) < endpos) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
707 type2 = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
708 number = aimbs_get8(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
709 length2 = aimbs_get8(bs);
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 switch (type2) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
712 case 0x0000: { /* This is an official buddy icon? */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
713 /* This is always 5 bytes of "0x02 01 d2 04 72"? */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
714 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
715 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
716
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
717 case 0x0001: { /* A buddy icon checksum */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
718 if ((length2 > 0) && (number == 0x01)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
719 free(outinfo->iconcsum);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
720 outinfo->iconcsum = aimbs_getraw(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
721 outinfo->iconcsumlen = length2;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
722 } else
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
723 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
724 } break;
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 case 0x0002: { /* An available message */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
727 if (length2 > 4) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
728 free(outinfo->avail);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
729 outinfo->avail_len = aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
730 outinfo->avail = aimbs_getstr(bs, outinfo->avail_len);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
731 if (aimbs_get16(bs) == 0x0001) { /* We have an encoding */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
732 aimbs_get16(bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
733 outinfo->avail_encoding = aimbs_getstr(bs, aimbs_get16(bs));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
734 } else {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
735 /* No explicit encoding, client should use UTF-8 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
736 outinfo->avail_encoding = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
737 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
738 } else
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
739 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
740 } break;
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 default: {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
743 aim_bstream_advance(bs, length2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
744 } break;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
745 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
746 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
747
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
748 } else if (type == 0x001e) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
749 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
750 * Type 30: Unknown.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
751 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
752 * Always four bytes, but it doesn't look like an int.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
753 */
7025
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
754
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
755 } else if (type == 0x001f) {
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
756 /*
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
757 * Type 31: Unknown.
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
758 *
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
759 * Seen on a buddy using DeadAIM. Data was 4 bytes:
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
760 * 0x00 00 00 10
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
761 */
db041f206848 [gaim-migrate @ 7588]
Mark Doliner <mark@kingant.net>
parents: 7011
diff changeset
762
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
763 } else {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
764
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 * Reaching here indicates that either AOL has
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
767 * added yet another TLV for us to deal with,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
768 * or the parsing has gone Terribly Wrong.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
769 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
770 * Either way, inform the owner and attempt
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
771 * recovery.
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 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
774 faimdprintf(sess, 0, "userinfo: **warning: unexpected TLV:\n");
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
775 faimdprintf(sess, 0, "userinfo: sn =%s\n", outinfo->sn);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
776 dumptlv(sess, type, bs, length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
777 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
778
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
779 /* Save ourselves. */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
780 aim_bstream_setpos(bs, endpos);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
781 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
782
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
783 aim_locate_adduserinfo(sess, outinfo);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
784
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
785 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
786 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
787
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
788 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
789 * Inverse of aim_info_extract()
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
790 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
791 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
792 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
793 aim_tlvlist_t *tlvlist = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
794
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
795 if (!bs || !info)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
796 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
797
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
798 aimbs_put8(bs, strlen(info->sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
799 aimbs_putraw(bs, info->sn, strlen(info->sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
800
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
801 aimbs_put16(bs, info->warnlevel);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
802
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
803 if (info->present & AIM_USERINFO_PRESENT_FLAGS)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
804 aim_tlvlist_add_16(&tlvlist, 0x0001, info->flags);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
805 if (info->present & AIM_USERINFO_PRESENT_MEMBERSINCE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
806 aim_tlvlist_add_32(&tlvlist, 0x0002, info->membersince);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
807 if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
808 aim_tlvlist_add_32(&tlvlist, 0x0003, info->onlinesince);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
809 if (info->present & AIM_USERINFO_PRESENT_IDLE)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
810 aim_tlvlist_add_16(&tlvlist, 0x0004, info->idletime);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
811
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
812 /* XXX - So, ICQ_OSCAR_SUPPORT is never defined anywhere... */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
813 #if ICQ_OSCAR_SUPPORT
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
814 if (atoi(info->sn) != 0) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
815 if (info->present & AIM_USERINFO_PRESENT_ICQEXTSTATUS)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
816 aim_tlvlist_add_16(&tlvlist, 0x0006, info->icqinfo.status);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
817 if (info->present & AIM_USERINFO_PRESENT_ICQIPADDR)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
818 aim_tlvlist_add_32(&tlvlist, 0x000a, info->icqinfo.ipaddr);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
819 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
820 #endif
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
821
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
822 if (info->present & AIM_USERINFO_PRESENT_CAPABILITIES)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
823 aim_tlvlist_add_caps(&tlvlist, 0x000d, info->capabilities);
7011
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 if (info->present & AIM_USERINFO_PRESENT_SESSIONLEN)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
826 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
827
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
828 aimbs_put16(bs, aim_tlvlist_count(&tlvlist));
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
829 aim_tlvlist_write(bs, &tlvlist);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
830 aim_tlvlist_free(&tlvlist);
7011
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 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
833 }
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 /*
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
836 * Subtype 0x0001
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
837 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
838 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
839 {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
840 int ret = 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
841 aim_rxcallback_t userfunc;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
842 aim_snac_t *snac2;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
843 fu16_t reason;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
844 char *sn;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
845 int was_explicit;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
846
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
847 if (!(snac2 = aim_remsnac(sess, snac->id))) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
848 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
849 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
850 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
851
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
852 if ((snac2->family != 0x0002) && (snac2->type != 0x0015)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
853 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
854 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
855 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
856
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
857 if (!(sn = snac2->data)) {
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
858 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
859 return 0;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
860 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
861
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
862 reason = aimbs_get16(bs);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
863
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
864 /*
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
865 * Remove this screen name from our queue. If the client requested
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
866 * 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
867 * info for this buddy.
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
868 */
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
869 was_explicit = aim_locate_gotuserinfo(sess, sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
870 if (was_explicit == TRUE)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
871 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
872 ret = userfunc(sess, rx, reason, sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
873
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
874 if (snac2)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
875 free(snac2->data);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
876 free(snac2);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
877
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
878 return ret;
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
879 }
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
880
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
881 /*
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
882 * Subtype 0x0002
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
883 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
884 * Request Location services rights.
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_reqrights(aim_session_t *sess)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
888 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
889 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
890
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
891 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
892 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
893
7282
ad243bc63184 [gaim-migrate @ 7861]
Mark Doliner <mark@kingant.net>
parents: 7266
diff changeset
894 return aim_genericreq_n_snacid(sess, conn, AIM_CB_FAM_LOC, AIM_CB_LOC_REQRIGHTS);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
895 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
896
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
897 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
898 * Subtype 0x0003
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
899 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
900 * Normally contains:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
901 * t(0001) - short containing max profile length (value = 1024)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
902 * t(0002) - short - unknown (value = 16) [max MIME type length?]
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
903 * t(0003) - short - unknown (value = 10)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
904 * t(0004) - short - unknown (value = 2048) [ICQ only?]
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 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
907 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
908 aim_tlvlist_t *tlvlist;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
909 aim_rxcallback_t userfunc;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
910 int ret = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
911 fu16_t maxsiglen = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
912
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
913 tlvlist = aim_tlvlist_read(bs);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
914
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
915 if (aim_tlv_gettlv(tlvlist, 0x0001, 1))
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
916 maxsiglen = aim_tlv_get16(tlvlist, 0x0001, 1);
7011
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 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
919 ret = userfunc(sess, rx, maxsiglen);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
920
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
921 aim_tlvlist_free(&tlvlist);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
922
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
923 return ret;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
924 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
925
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 * Subtype 0x0004
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
928 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
929 * Gives BOS your profile.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
930 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
931 * profile_encoding and awaymsg_encoding MUST be set if profile or
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
932 * away are set, respectively, and their value may or may not be
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
933 * restricted to a few choices. I am currently aware of:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
934 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
935 * us-ascii Just that
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
936 * unicode-2-0 UCS2-BE
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
937 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
938 * profile_len and awaymsg_len MUST be set similarly, and they MUST
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
939 * be the length of their respective strings in bytes.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
940 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
941 * To get the previous behavior of awaymsg == "" un-setting the away
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
942 * 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
943 * obvious equivalent).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
944 *
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 faim_export int aim_locate_setprofile(aim_session_t *sess,
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
947 const char *profile_encoding, const char *profile, const int profile_len,
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
948 const char *awaymsg_encoding, const char *awaymsg, const int awaymsg_len)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
949 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
950 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
951 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
952 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
953 aim_tlvlist_t *tl = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
954 char *encoding;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
955 static const char defencoding[] = {"text/aolrtf; charset=\"%s\""};
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 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
958 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
959
7510
ef3e646152a1 [gaim-migrate @ 8123]
Mark Doliner <mark@kingant.net>
parents: 7466
diff changeset
960 if (!profile && !awaymsg)
ef3e646152a1 [gaim-migrate @ 8123]
Mark Doliner <mark@kingant.net>
parents: 7466
diff changeset
961 return -EINVAL;
ef3e646152a1 [gaim-migrate @ 8123]
Mark Doliner <mark@kingant.net>
parents: 7466
diff changeset
962
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
963 if ((profile && profile_encoding == NULL) || (awaymsg && awaymsg_len && awaymsg_encoding == NULL)) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
964 return -EINVAL;
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
967 /* Build the packet first to get real length */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
968 if (profile) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
969 /* no + 1 here because of %s */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
970 encoding = malloc(strlen(defencoding) + strlen(profile_encoding));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
971 if (encoding == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
972 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
973 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
974 snprintf(encoding, strlen(defencoding) + strlen(profile_encoding), defencoding, profile_encoding);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
975 aim_tlvlist_add_raw(&tl, 0x0001, strlen(encoding), encoding);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
976 aim_tlvlist_add_raw(&tl, 0x0002, profile_len, profile);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
977 free(encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
978 }
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 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
981 * So here's how this works:
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
982 * - 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
983 * - You become unaway when you clear the TLV with a zero-length
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
984 * type 4 TLV.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
985 * - 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
986 * (that is, if you were away, you'll remain away).
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
987 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
988 if (awaymsg) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
989 if (awaymsg_len) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
990 encoding = malloc(strlen(defencoding) + strlen(awaymsg_encoding));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
991 if (encoding == NULL) {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
992 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
993 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
994 snprintf(encoding, strlen(defencoding) + strlen(awaymsg_encoding), defencoding, awaymsg_encoding);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
995 aim_tlvlist_add_raw(&tl, 0x0003, strlen(encoding), encoding);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
996 aim_tlvlist_add_raw(&tl, 0x0004, awaymsg_len, awaymsg);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
997 free(encoding);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
998 } else
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
999 aim_tlvlist_add_noval(&tl, 0x0004);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1000 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1001
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1002 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + aim_tlvlist_size(&tl))))
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1003 return -ENOMEM;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1004
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1005 snacid = aim_cachesnac(sess, 0x0002, 0x0004, 0x0000, NULL, 0);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1006 aim_putsnac(&fr->data, 0x0002, 0x004, 0x0000, snacid);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1007
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1008 aim_tlvlist_write(&fr->data, &tl);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1009 aim_tlvlist_free(&tl);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1010
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1011 aim_tx_enqueue(sess, fr);
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1012
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1013 return 0;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1014 }
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1015
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1016 /*
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1017 * Subtype 0x0004 - Set your client's capabilities.
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1018 */
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1019 faim_export int aim_locate_setcaps(aim_session_t *sess, fu32_t caps)
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1020 {
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1021 aim_conn_t *conn;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1022 aim_frame_t *fr;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1023 aim_snacid_t snacid;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1024 aim_tlvlist_t *tl = NULL;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1025
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1026 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1027 return -EINVAL;
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1028
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1029 aim_tlvlist_add_caps(&tl, 0x0005, caps);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1030
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1031 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
1032 return -ENOMEM;
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 snacid = aim_cachesnac(sess, 0x0002, 0x0004, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1035 aim_putsnac(&fr->data, 0x0002, 0x004, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1036
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1037 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1038 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1039
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1040 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1041
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1042 return 0;
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
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 * Subtype 0x0005 - Request info of another AIM user.
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 * @param sn The screenname whose info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1049 * @param infotype The type of info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1050 * 0x0001 - Info/profile
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1051 * 0x0003 - Away message
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1052 * 0x0004 - Capabilities
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_getinfo(aim_session_t *sess, const char *sn, fu16_t infotype)
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1060 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1061 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1062
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1063 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
1064 return -ENOMEM;
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 snacid = aim_cachesnac(sess, 0x0002, 0x0005, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1067
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1068 aim_putsnac(&fr->data, 0x0002, 0x0005, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1069 aimbs_put16(&fr->data, infotype);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1070 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1071 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1072
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1073 aim_tx_enqueue(sess, fr);
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 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1076 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1077
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1078 /* Subtype 0x0006 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1079 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
1080 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1081 int ret = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1082 aim_rxcallback_t userfunc;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1083 aim_userinfo_t *userinfo, *userinfo2;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1084 aim_tlvlist_t *tlvlist;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1085 aim_tlv_t *tlv = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1086 int was_explicit;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1087
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1088 userinfo = (aim_userinfo_t *)malloc(sizeof(aim_userinfo_t));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1089 aim_info_extract(sess, bs, userinfo);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1090 tlvlist = aim_tlvlist_read(bs);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1091
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1092 /* Profile will be 1 and 2 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1093 userinfo->info_encoding = aim_tlv_getstr(tlvlist, 0x0001, 1);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1094 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0002, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1095 userinfo->info = (char *)malloc(tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1096 memcpy(userinfo->info, tlv->value, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1097 userinfo->info_len = tlv->length;
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1100 /* Away message will be 3 and 4 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1101 userinfo->away_encoding = aim_tlv_getstr(tlvlist, 0x0003, 1);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1102 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0004, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1103 userinfo->away = (char *)malloc(tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1104 memcpy(userinfo->away, tlv->value, tlv->length);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1105 userinfo->away_len = tlv->length;
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
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1108 /* Caps will be 5 */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1109 if ((tlv = aim_tlv_gettlv(tlvlist, 0x0005, 1))) {
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1110 aim_bstream_t cbs;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1111 aim_bstream_init(&cbs, tlv->value, tlv->length);
7334
83e8faa7f6d5 [gaim-migrate @ 7922]
Mark Doliner <mark@kingant.net>
parents: 7313
diff changeset
1112 userinfo->capabilities = aim_locate_getcaps(sess, &cbs, tlv->length);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1113 userinfo->present = AIM_USERINFO_PRESENT_CAPABILITIES;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1114 }
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1115 aim_tlvlist_free(&tlvlist);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1116
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1117 aim_locate_adduserinfo(sess, userinfo);
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1118 userinfo2 = aim_locate_finduserinfo(sess, userinfo->sn);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1119 aim_info_free(userinfo);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1120 free(userinfo);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1121
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1122 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1123 * Remove this screen name from our queue. If the client requested
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1124 * this buddy's info explicitly, then notify them that we have info
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1125 * for this buddy.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1126 */
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1127 was_explicit = aim_locate_gotuserinfo(sess, userinfo2->sn);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1128 if (was_explicit == TRUE)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1129 if ((userfunc = aim_callhandler(sess, rx->conn, snac->family, snac->subtype)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1130 ret = userfunc(sess, rx, userinfo2);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1131
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1132 return ret;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1133 }
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 * Subtype 0x0009 - Set directory profile data.
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 * This is not the same as aim_location_setprofile!
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1139 * privacy: 1 to allow searching, 0 to disallow.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1140 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1141 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1142 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
1143 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1144 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1145 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1146 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1147 aim_tlvlist_t *tl = NULL;
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 (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1150 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1151
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1152 aim_tlvlist_add_16(&tl, 0x000a, privacy);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1153
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1154 if (first)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1155 aim_tlvlist_add_raw(&tl, 0x0001, strlen(first), first);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1156 if (last)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1157 aim_tlvlist_add_raw(&tl, 0x0002, strlen(last), last);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1158 if (middle)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1159 aim_tlvlist_add_raw(&tl, 0x0003, strlen(middle), middle);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1160 if (maiden)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1161 aim_tlvlist_add_raw(&tl, 0x0004, strlen(maiden), maiden);
7011
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 if (state)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1164 aim_tlvlist_add_raw(&tl, 0x0007, strlen(state), state);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1165 if (city)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1166 aim_tlvlist_add_raw(&tl, 0x0008, strlen(city), city);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1167
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1168 if (nickname)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1169 aim_tlvlist_add_raw(&tl, 0x000c, strlen(nickname), nickname);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1170 if (zip)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1171 aim_tlvlist_add_raw(&tl, 0x000d, strlen(zip), zip);
7011
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 if (street)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1174 aim_tlvlist_add_raw(&tl, 0x0021, strlen(street), street);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1175
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1176 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
1177 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1178
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1179 snacid = aim_cachesnac(sess, 0x0002, 0x0009, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1180
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1181 aim_putsnac(&fr->data, 0x0002, 0x0009, 0x0000, snacid);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1182 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1183 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1184
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1185 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1186
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1187 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1188 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1189
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1190 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1191 * Subtype 0x000b - Huh? What is this?
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1192 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1193 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
1194 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1195 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1196 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1197 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1198
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1199 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1200
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1201 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1202 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1203
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1204 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
1205 return -ENOMEM;
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 snacid = aim_cachesnac(sess, 0x0002, 0x000b, 0x0000, NULL, 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 aim_putsnac(&fr->data, 0x0002, 0x000b, 0x0000, snacid);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1210 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1211 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1212
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1213 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1214
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1215 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1216 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1217
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1218 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1219 * Subtype 0x000f
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1220 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1221 * XXX pass these in better
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 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1224 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
1225 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1226 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1227 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1228 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1229 aim_tlvlist_t *tl = NULL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1230
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1231 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)))
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1232 return -EINVAL;
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 /* ?? privacy ?? */
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1235 aim_tlvlist_add_16(&tl, 0x000a, privacy);
7011
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 if (interest1)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1238 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest1), interest1);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1239 if (interest2)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1240 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest2), interest2);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1241 if (interest3)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1242 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest3), interest3);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1243 if (interest4)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1244 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest4), interest4);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1245 if (interest5)
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1246 aim_tlvlist_add_raw(&tl, 0x0000b, strlen(interest5), interest5);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1247
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1248 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
1249 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1250
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1251 snacid = aim_cachesnac(sess, 0x0002, 0x000f, 0x0000, NULL, 0);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1252
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1253 aim_putsnac(&fr->data, 0x0002, 0x000f, 0x0000, 0);
7167
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1254 aim_tlvlist_write(&fr->data, &tl);
6d3d8f11e765 [gaim-migrate @ 7734]
Mark Doliner <mark@kingant.net>
parents: 7166
diff changeset
1255 aim_tlvlist_free(&tl);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1256
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1257 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1258
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1259 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1260 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1261
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1262 /*
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1263 * 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
1264 * what iChat uses. It normally is VERY leniently rate limited.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1265 *
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1266 * @param sn The screen name whose info you wish to request.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1267 * @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
1268 * 0x00000001 - Info/profile.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1269 * 0x00000002 - Away message.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1270 * 0x00000004 - Capabilities.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1271 * 0x00000008 - Certification.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1272 * @return Return 0 if no errors, otherwise return the error number.
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1273 */
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1274 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
1275 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1276 aim_conn_t *conn;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1277 aim_frame_t *fr;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1278 aim_snacid_t snacid;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1279
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1280 if (!sess || !(conn = aim_conn_findbygroup(sess, AIM_CB_FAM_LOC)) || !sn)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1281 return -EINVAL;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1282
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1283 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
1284 return -ENOMEM;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1285
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1286 snacid = aim_cachesnac(sess, 0x0002, 0x0015, 0x0000, sn, strlen(sn)+1);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1287
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1288 aim_putsnac(&fr->data, 0x0002, 0x0015, 0x0000, snacid);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1289 aimbs_put32(&fr->data, flags);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1290 aimbs_put8(&fr->data, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1291 aimbs_putraw(&fr->data, sn, strlen(sn));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1292
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1293 aim_tx_enqueue(sess, fr);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1294
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1295 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1296 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1297
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1298 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
1299 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1300
7259
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1301 if (snac->subtype == 0x0001)
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1302 return error(sess, mod, rx, snac, bs);
22b5b81ca7e0 [gaim-migrate @ 7836]
Mark Doliner <mark@kingant.net>
parents: 7253
diff changeset
1303 else if (snac->subtype == 0x0003)
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1304 return rights(sess, mod, rx, snac, bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1305 else if (snac->subtype == 0x0006)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1306 return userinfo(sess, mod, rx, snac, bs);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1307
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1308 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1309 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1310
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1311 static void locate_shutdown(aim_session_t *sess, aim_module_t *mod)
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1312 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1313 aim_userinfo_t *del;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1314
7045
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1315 while (sess->locate.userinfo) {
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1316 del = sess->locate.userinfo;
237ad253dd34 [gaim-migrate @ 7608]
Mark Doliner <mark@kingant.net>
parents: 7025
diff changeset
1317 sess->locate.userinfo = sess->locate.userinfo->next;
7046
4003419d753b [gaim-migrate @ 7609]
Mark Doliner <mark@kingant.net>
parents: 7045
diff changeset
1318 aim_info_free(del);
7011
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1319 free(del);
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1320 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1321 }
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1322
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1323 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
1324 {
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1325
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1326 mod->family = AIM_CB_FAM_LOC;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1327 mod->version = 0x0001;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1328 mod->toolid = 0x0110;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1329 mod->toolversion = 0x0629;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1330 mod->flags = 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1331 strncpy(mod->name, "locate", sizeof(mod->name));
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1332 mod->snachandler = snachandler;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1333 mod->shutdown = locate_shutdown;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1334
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1335 return 0;
4375bf2d9020 [gaim-migrate @ 7574]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1336 }