libfaim/aim_info.c

Sun, 30 Apr 2000 21:47:04 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Sun, 30 Apr 2000 21:47:04 +0000
changeset 200
aa9fbd9e68a3
parent 2
62fbb00c531a
child 237
83ff5f92ee7e
permissions
-rw-r--r--

[gaim-migrate @ 210]
Made the receive non-blocking, added a cancel button, and a few other updates.
No, sending a file to someone does not work yet. Be patient.

2
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 /*
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2 aim_info.c
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 The functions here are responsible for requesting and parsing information-
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 gathering SNACs.
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 #include "aim.h" /* for most everything */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 u_long aim_getinfo(struct aim_conn_t *conn, const char *sn)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14 struct command_tx_struct newpacket;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 if (conn)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17 newpacket.conn = conn;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 else
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19 newpacket.conn = aim_getconn_type(AIM_CONN_TYPE_BOS);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21 newpacket.lock = 1;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
22 newpacket.type = 0x0002;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
23
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 newpacket.commandlen = 12 + 1 + strlen(sn);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
25 newpacket.data = (char *) malloc(newpacket.commandlen);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 newpacket.data[0] = 0x00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28 newpacket.data[1] = 0x02;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 newpacket.data[2] = 0x00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
30 newpacket.data[3] = 0x05;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
31 newpacket.data[4] = 0x00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 newpacket.data[5] = 0x00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
33
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
34 /* SNAC reqid */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
35 newpacket.data[6] = (aim_snac_nextid >> 24) & 0xFF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36 newpacket.data[7] = (aim_snac_nextid >> 16) & 0xFF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37 newpacket.data[8] = (aim_snac_nextid >> 8) & 0xFF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
38 newpacket.data[9] = (aim_snac_nextid) & 0xFF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
39
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
40 /* TLV: Screen Name */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
41 /* t(0x0001) */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42 newpacket.data[10] = 0x00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
43 newpacket.data[11] = 0x01;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44 /* l() */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45 newpacket.data[12] = strlen(sn);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46 /* v() */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47 memcpy(&(newpacket.data[13]), sn, strlen(sn));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 aim_tx_enqueue(&newpacket);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
51 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
52 struct aim_snac_t snac;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
53
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
54 snac.id = aim_snac_nextid;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
55 snac.family = 0x0002;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
56 snac.type = 0x0005;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
57 snac.flags = 0x0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
58
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
59 snac.data = malloc(strlen(sn)+1);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
60 memcpy(snac.data, sn, strlen(sn)+1);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
61
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
62 aim_newsnac(&snac);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
63 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
64
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
65 return (aim_snac_nextid++);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
66 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
67
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
68 /*
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
69 * This parses the user info stuff out all nice and pretty then calls
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
70 * the higher-level callback (in the user app).
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
71 *
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
72 */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
73
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
74 int aim_parse_userinfo_middle(struct command_rx_struct *command)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
75 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
76 char *sn = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
77 char *prof_encoding = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
78 char *prof = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
79 u_short warnlevel = 0x0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
80 u_short idletime = 0x0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
81 u_short class = 0x0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
82 u_long membersince = 0x00000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
83 u_long onlinesince = 0x00000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
84 int tlvcnt = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
85 int i = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
86
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
87 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
88 u_long snacid = 0x000000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
89 struct aim_snac_t *snac = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
90
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
91 snacid = (command->data[6] << 24) & 0xFF000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
92 snacid+= (command->data[7] << 16) & 0x00FF0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
93 snacid+= (command->data[8] << 8) & 0x0000FF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
94 snacid+= (command->data[9]) & 0x000000FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
95
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
96 snac = aim_remsnac(snacid);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
97
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
98 free(snac->data);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
99 free(snac);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
100
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
101 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
102
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
103 sn = (char *) malloc(command->data[10]+1);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
104 memcpy(sn, &(command->data[11]), command->data[10]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
105 sn[(int)command->data[10]] = '\0';
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
106
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
107 i = 11 + command->data[10];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
108 warnlevel = ((command->data[i++]) << 8) & 0xFF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
109 warnlevel += (command->data[i++]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
110
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
111 tlvcnt = ((command->data[i++]) << 8) & 0xFF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
112 tlvcnt += (command->data[i++]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
113
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
114 /* a mini TLV parser */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
115 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
116 int curtlv = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
117 int tlv1 = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
118
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
119 while (curtlv < tlvcnt)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
120 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
121 if ((command->data[i] == 0x00) &&
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
122 (command->data[i+1] == 0x01) )
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
123 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
124 if (tlv1)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
125 break;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
126 /* t(0001) = class */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
127 class = ((command->data[i+4]) << 8) & 0xFF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
128 class += (command->data[i+5]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
129 i += (2 + 2 + command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
130 tlv1++;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
131 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
132 else if ((command->data[i] == 0x00) &&
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
133 (command->data[i+1] == 0x02))
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
134 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
135 /* t(0002) = member since date */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
136 if (command->data[i+3] != 0x04)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
137 printf("faim: userinfo: **warning: strange v(%x) for t(2)\n", command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
138
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
139 membersince = ((command->data[i+4]) << 24) & 0xFF000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
140 membersince += ((command->data[i+5]) << 16) & 0x00FF0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
141 membersince += ((command->data[i+6]) << 8) & 0x0000FF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
142 membersince += ((command->data[i+7]) ) & 0x000000FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
143 i += (2 + 2 + command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
144 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
145 else if ((command->data[i] == 0x00) &&
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
146 (command->data[i+1] == 0x03))
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
147 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
148 /* t(0003) = on since date */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
149 if (command->data[i+3] != 0x04)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
150 printf("faim: userinfo: **warning: strange v(%x) for t(3)\n", command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
151
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
152 onlinesince = ((command->data[i+4]) << 24) & 0xFF000000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
153 onlinesince += ((command->data[i+5]) << 16) & 0x00FF0000;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
154 onlinesince += ((command->data[i+6]) << 8) & 0x0000FF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
155 onlinesince += ((command->data[i+7]) ) & 0x000000FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
156 i += (2 + 2 + command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
157 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
158 else if ((command->data[i] == 0x00) &&
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
159 (command->data[i+1] == 0x04) )
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
160 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
161 /* t(0004) = idle time */
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
162 if (command->data[i+3] != 0x02)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
163 printf("faim: userinfo: **warning: strange v(%x) for t(4)\n", command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
164 idletime = ((command->data[i+4]) << 8) & 0xFF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
165 idletime += (command->data[i+5]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
166 i += (2 + 2 + command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
167 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
168 else
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
169 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
170 printf("faim: userinfo: **warning: unexpected TLV t(%02x%02x) l(%02x%02x)\n", command->data[i], command->data[i+1], command->data[i+2], command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
171 i += (2 + 2 + command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
172 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
173 curtlv++;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
174 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
175 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
176 if (i < command->commandlen)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
177 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
178 if ( (command->data[i] == 0x00) &&
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
179 (command->data[i+1] == 0x01) )
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
180 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
181 int len = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
182
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
183 len = ((command->data[i+2] << 8) & 0xFF00);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
184 len += (command->data[i+3]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
185
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
186 prof_encoding = (char *) malloc(len+1);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
187 memcpy(prof_encoding, &(command->data[i+4]), len);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
188 prof_encoding[len] = '\0';
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
189
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
190 i += (2+2+len);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
191 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
192 else
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
193 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
194 printf("faim: userinfo: **warning: unexpected TLV after TLVblock t(%02x%02x) l(%02x%02x)\n", command->data[i], command->data[i+1], command->data[i+2], command->data[i+3]);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
195 i += 2 + 2 + command->data[i+3];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
196 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
197 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
198
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
199 if (i < command->commandlen)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
200 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
201 int len = 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
202
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
203 len = ((command->data[i+2]) << 8) & 0xFF00;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
204 len += (command->data[i+3]) & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
205
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
206 prof = (char *) malloc(len+1);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
207 memcpy(prof, &(command->data[i+4]), len);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
208 prof[len] = '\0';
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
209 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
210 else
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
211 printf("faim: userinfo: **early parse abort...no profile?\n");
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
212
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
213 i = (aim_callbacks[AIM_CB_USERINFO])(command, sn, prof_encoding, prof, warnlevel, idletime, class, membersince, onlinesince);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
214
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
215 free(sn);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
216 free(prof_encoding);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
217 free(prof);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
218
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
219 return i;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
220 }

mercurial