Mercurial > pidgin
annotate src/protocols/oscar/icq.c @ 6792:62aec9fd7aca
[gaim-migrate @ 7331]
Jesse Farmer (vann) writes:
" Oops! gaim_privacy_deny_add only adds someone to the
server list if they're not already in the local deny
list, but this is exactly the situation with Yahoo!
when you add someone to the deny list who is also on
your buddy list. The call to gaim_privacy_deny_add was
changed to serv_add_deny, and also some formatting
issues were cleared up (tabs instead of spaces). The
diff is against the "latest" CVS sources in that I
applied all the available patches."
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Mon, 08 Sep 2003 10:07:14 +0000 |
parents | bfe98c4d331e |
children | 6d3d8f11e765 |
rev | line source |
---|---|
2703 | 1 /* |
3952 | 2 * Family 0x0015 - Encapsulated ICQ. |
2703 | 3 * |
4 */ | |
5 | |
6 #define FAIM_INTERNAL | |
7 #include <aim.h> | |
8 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
9 faim_export int aim_icq_reqofflinemsgs(aim_session_t *sess) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
10 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
11 aim_conn_t *conn; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
12 aim_frame_t *fr; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
13 aim_snacid_t snacid; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
14 int bslen; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
15 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
16 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
17 return -EINVAL; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
18 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
19 bslen = 2 + 4 + 2 + 2; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
20 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
21 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
22 return -ENOMEM; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
23 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
24 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
25 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
26 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
27 /* For simplicity, don't bother using a tlvlist */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
28 aimbs_put16(&fr->data, 0x0001); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
29 aimbs_put16(&fr->data, bslen); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
30 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
31 aimbs_putle16(&fr->data, bslen - 2); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
32 aimbs_putle32(&fr->data, atoi(sess->sn)); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
33 aimbs_putle16(&fr->data, 0x003c); /* I command thee. */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
34 aimbs_putle16(&fr->data, snacid); /* eh. */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
35 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
36 aim_tx_enqueue(sess, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
37 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
38 return 0; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
39 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
40 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
41 faim_export int aim_icq_ackofflinemsgs(aim_session_t *sess) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
42 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
43 aim_conn_t *conn; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
44 aim_frame_t *fr; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
45 aim_snacid_t snacid; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
46 int bslen; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
47 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
48 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
49 return -EINVAL; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
50 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
51 bslen = 2 + 4 + 2 + 2; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
52 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
53 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
54 return -ENOMEM; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
55 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
56 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
57 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
58 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
59 /* For simplicity, don't bother using a tlvlist */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
60 aimbs_put16(&fr->data, 0x0001); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
61 aimbs_put16(&fr->data, bslen); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
62 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
63 aimbs_putle16(&fr->data, bslen - 2); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
64 aimbs_putle32(&fr->data, atoi(sess->sn)); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
65 aimbs_putle16(&fr->data, 0x003e); /* I command thee. */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
66 aimbs_putle16(&fr->data, snacid); /* eh. */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
67 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
68 aim_tx_enqueue(sess, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
69 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
70 return 0; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
71 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
72 |
4664 | 73 faim_export int aim_icq_hideip(aim_session_t *sess) |
74 { | |
75 aim_conn_t *conn; | |
76 aim_frame_t *fr; | |
77 aim_snacid_t snacid; | |
78 int bslen; | |
79 | |
80 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) | |
81 return -EINVAL; | |
82 | |
83 bslen = 2+4+2+2+2+4; | |
84 | |
85 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) | |
86 return -ENOMEM; | |
87 | |
88 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); | |
89 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); | |
90 | |
91 /* For simplicity, don't bother using a tlvlist */ | |
92 aimbs_put16(&fr->data, 0x0001); | |
93 aimbs_put16(&fr->data, bslen); | |
94 | |
95 aimbs_putle16(&fr->data, bslen - 2); | |
96 aimbs_putle32(&fr->data, atoi(sess->sn)); | |
97 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ | |
98 aimbs_putle16(&fr->data, snacid); /* eh. */ | |
99 aimbs_putle16(&fr->data, 0x0424); /* shrug. */ | |
100 aimbs_putle16(&fr->data, 0x0001); | |
101 aimbs_putle16(&fr->data, 0x0001); | |
102 | |
103 aim_tx_enqueue(sess, fr); | |
104 | |
105 return 0; | |
106 } | |
107 | |
5345 | 108 /** |
109 * Change your ICQ password. | |
110 * | |
111 * @param sess The oscar session | |
112 * @param passwd The new password. If this is longer than 8 characters it | |
113 * will be truncated. | |
114 * @return Return 0 if no errors, otherwise return the error number. | |
115 */ | |
4617 | 116 faim_export int aim_icq_changepasswd(aim_session_t *sess, const char *passwd) |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
117 { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
118 aim_conn_t *conn; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
119 aim_frame_t *fr; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
120 aim_snacid_t snacid; |
5345 | 121 int bslen, passwdlen; |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
122 |
4617 | 123 if (!passwd) |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
124 return -EINVAL; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
125 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
126 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
127 return -EINVAL; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
128 |
5345 | 129 passwdlen = strlen(passwd); |
130 if (passwdlen > MAXICQPASSLEN) | |
131 passwdlen = MAXICQPASSLEN; | |
132 bslen = 2+4+2+2+2+2+passwdlen+1; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
133 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
134 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
135 return -ENOMEM; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
136 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
137 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
138 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
139 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
140 /* For simplicity, don't bother using a tlvlist */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
141 aimbs_put16(&fr->data, 0x0001); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
142 aimbs_put16(&fr->data, bslen); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
143 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
144 aimbs_putle16(&fr->data, bslen - 2); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
145 aimbs_putle32(&fr->data, atoi(sess->sn)); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
146 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
147 aimbs_putle16(&fr->data, snacid); /* eh. */ |
4617 | 148 aimbs_putle16(&fr->data, 0x042e); /* shrug. */ |
5345 | 149 aimbs_putle16(&fr->data, passwdlen+1); |
150 aimbs_putraw(&fr->data, passwd, passwdlen); | |
4617 | 151 aimbs_putle8(&fr->data, '\0'); |
152 | |
153 aim_tx_enqueue(sess, fr); | |
154 | |
155 return 0; | |
156 } | |
157 | |
158 faim_export int aim_icq_getallinfo(aim_session_t *sess, const char *uin) | |
159 { | |
160 aim_conn_t *conn; | |
161 aim_frame_t *fr; | |
162 aim_snacid_t snacid; | |
163 int bslen; | |
4624 | 164 struct aim_icq_info *info; |
4617 | 165 |
166 if (!uin || uin[0] < '0' || uin[0] > '9') | |
167 return -EINVAL; | |
168 | |
169 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) | |
170 return -EINVAL; | |
171 | |
172 bslen = 2 + 4 + 2 + 2 + 2 + 4; | |
173 | |
174 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) | |
175 return -ENOMEM; | |
176 | |
177 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); | |
178 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); | |
179 | |
180 /* For simplicity, don't bother using a tlvlist */ | |
181 aimbs_put16(&fr->data, 0x0001); | |
182 aimbs_put16(&fr->data, bslen); | |
183 | |
184 aimbs_putle16(&fr->data, bslen - 2); | |
185 aimbs_putle32(&fr->data, atoi(sess->sn)); | |
186 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ | |
187 aimbs_putle16(&fr->data, snacid); /* eh. */ | |
188 aimbs_putle16(&fr->data, 0x04b2); /* shrug. */ | |
189 aimbs_putle32(&fr->data, atoi(uin)); | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
190 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
191 aim_tx_enqueue(sess, fr); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
192 |
4624 | 193 /* Keep track of this request and the ICQ number and request ID */ |
194 info = (struct aim_icq_info *)calloc(1, sizeof(struct aim_icq_info)); | |
195 info->reqid = snacid; | |
4625 | 196 info->uin = atoi(uin); |
4624 | 197 info->next = sess->icq_info; |
198 sess->icq_info = info; | |
199 | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
200 return 0; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
201 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
202 |
4759 | 203 faim_export int aim_icq_getalias(aim_session_t *sess, const char *uin) |
204 { | |
205 aim_conn_t *conn; | |
206 aim_frame_t *fr; | |
207 aim_snacid_t snacid; | |
208 int bslen; | |
4784 | 209 struct aim_icq_info *info; |
4759 | 210 |
211 if (!uin || uin[0] < '0' || uin[0] > '9') | |
212 return -EINVAL; | |
213 | |
214 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) | |
215 return -EINVAL; | |
216 | |
217 bslen = 2 + 4 + 2 + 2 + 2 + 4; | |
218 | |
219 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) | |
220 return -ENOMEM; | |
221 | |
222 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); | |
223 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); | |
224 | |
225 /* For simplicity, don't bother using a tlvlist */ | |
226 aimbs_put16(&fr->data, 0x0001); | |
227 aimbs_put16(&fr->data, bslen); | |
228 | |
229 aimbs_putle16(&fr->data, bslen - 2); | |
230 aimbs_putle32(&fr->data, atoi(sess->sn)); | |
231 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ | |
232 aimbs_putle16(&fr->data, snacid); /* eh. */ | |
233 aimbs_putle16(&fr->data, 0x04ba); /* shrug. */ | |
234 aimbs_putle32(&fr->data, atoi(uin)); | |
235 | |
236 aim_tx_enqueue(sess, fr); | |
237 | |
4784 | 238 /* Keep track of this request and the ICQ number and request ID */ |
239 info = (struct aim_icq_info *)calloc(1, sizeof(struct aim_icq_info)); | |
240 info->reqid = snacid; | |
241 info->uin = atoi(uin); | |
242 info->next = sess->icq_info; | |
243 sess->icq_info = info; | |
244 | |
4759 | 245 return 0; |
246 } | |
247 | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
248 faim_export int aim_icq_getsimpleinfo(aim_session_t *sess, const char *uin) |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
249 { |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
250 aim_conn_t *conn; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
251 aim_frame_t *fr; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
252 aim_snacid_t snacid; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
253 int bslen; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
254 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
255 if (!uin || uin[0] < '0' || uin[0] > '9') |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
256 return -EINVAL; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
257 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
258 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
259 return -EINVAL; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
260 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
261 bslen = 2 + 4 + 2 + 2 + 2 + 4; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
262 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
263 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
264 return -ENOMEM; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
265 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
266 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
267 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
268 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
269 /* For simplicity, don't bother using a tlvlist */ |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
270 aimbs_put16(&fr->data, 0x0001); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
271 aimbs_put16(&fr->data, bslen); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
272 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
273 aimbs_putle16(&fr->data, bslen - 2); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
274 aimbs_putle32(&fr->data, atoi(sess->sn)); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
275 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
276 aimbs_putle16(&fr->data, snacid); /* eh. */ |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
277 aimbs_putle16(&fr->data, 0x051f); /* shrug. */ |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
278 aimbs_putle32(&fr->data, atoi(uin)); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
279 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
280 aim_tx_enqueue(sess, fr); |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
281 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
282 return 0; |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
283 } |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
284 |
4617 | 285 faim_export int aim_icq_sendxmlreq(aim_session_t *sess, const char *xml) |
4151 | 286 { |
287 aim_conn_t *conn; | |
288 aim_frame_t *fr; | |
289 aim_snacid_t snacid; | |
290 int bslen; | |
291 | |
4617 | 292 if (!xml || !strlen(xml)) |
4151 | 293 return -EINVAL; |
294 | |
295 if (!sess || !(conn = aim_conn_findbygroup(sess, 0x0015))) | |
296 return -EINVAL; | |
297 | |
4617 | 298 bslen = 2 + 10 + 2 + strlen(xml) + 1; |
4151 | 299 |
300 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 10 + 4 + bslen))) | |
301 return -ENOMEM; | |
302 | |
303 snacid = aim_cachesnac(sess, 0x0015, 0x0002, 0x0000, NULL, 0); | |
304 aim_putsnac(&fr->data, 0x0015, 0x0002, 0x0000, snacid); | |
305 | |
306 /* For simplicity, don't bother using a tlvlist */ | |
307 aimbs_put16(&fr->data, 0x0001); | |
308 aimbs_put16(&fr->data, bslen); | |
309 | |
310 aimbs_putle16(&fr->data, bslen - 2); | |
311 aimbs_putle32(&fr->data, atoi(sess->sn)); | |
312 aimbs_putle16(&fr->data, 0x07d0); /* I command thee. */ | |
313 aimbs_putle16(&fr->data, snacid); /* eh. */ | |
4617 | 314 aimbs_putle16(&fr->data, 0x0998); /* shrug. */ |
315 aimbs_putle16(&fr->data, strlen(xml) + 1); | |
316 aimbs_putraw(&fr->data, xml, strlen(xml) + 1); | |
4151 | 317 |
318 aim_tx_enqueue(sess, fr); | |
319 | |
320 return 0; | |
321 } | |
322 | |
4624 | 323 static void aim_icq_freeinfo(struct aim_icq_info *info) { |
4625 | 324 int i; |
325 | |
4624 | 326 if (!info) |
327 return; | |
328 free(info->nick); | |
329 free(info->first); | |
330 free(info->last); | |
331 free(info->email); | |
332 free(info->homecity); | |
333 free(info->homestate); | |
334 free(info->homephone); | |
335 free(info->homefax); | |
336 free(info->homeaddr); | |
337 free(info->mobile); | |
338 free(info->homezip); | |
339 free(info->personalwebpage); | |
4625 | 340 if (info->email2) |
341 for (i = 0; i < info->numaddresses; i++) | |
342 free(info->email2[i]); | |
4624 | 343 free(info->email2); |
344 free(info->workcity); | |
345 free(info->workstate); | |
346 free(info->workphone); | |
347 free(info->workfax); | |
348 free(info->workaddr); | |
349 free(info->workzip); | |
350 free(info->workcompany); | |
351 free(info->workdivision); | |
352 free(info->workposition); | |
353 free(info->workwebpage); | |
354 free(info->info); | |
355 free(info); | |
356 } | |
357 | |
4617 | 358 /** |
359 * Subtype 0x0003 - Response to 0x0015/0x002, contains an ICQesque packet. | |
2703 | 360 */ |
361 static int icqresponse(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) | |
362 { | |
363 int ret = 0; | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
364 aim_tlvlist_t *tl; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
365 aim_tlv_t *datatlv; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
366 aim_bstream_t qbs; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
367 fu32_t ouruin; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
368 fu16_t cmdlen, cmd, reqid; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
369 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
370 if (!(tl = aim_readtlvchain(bs)) || !(datatlv = aim_gettlv(tl, 0x0001, 1))) { |
2733
eeac6ea7ade6
[gaim-migrate @ 2746]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2732
diff
changeset
|
371 aim_freetlvchain(&tl); |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
372 faimdprintf(sess, 0, "corrupt ICQ response\n"); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
373 return 0; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
374 } |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
375 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
376 aim_bstream_init(&qbs, datatlv->value, datatlv->length); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
377 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
378 cmdlen = aimbs_getle16(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
379 ouruin = aimbs_getle32(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
380 cmd = aimbs_getle16(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
381 reqid = aimbs_getle16(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
382 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
383 faimdprintf(sess, 1, "icq response: %d bytes, %ld, 0x%04x, 0x%04x\n", cmdlen, ouruin, cmd, reqid); |
2703 | 384 |
4075 | 385 if (cmd == 0x0041) { /* offline message */ |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
386 struct aim_icq_offlinemsg msg; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
387 aim_rxcallback_t userfunc; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
388 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
389 memset(&msg, 0, sizeof(msg)); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
390 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
391 msg.sender = aimbs_getle32(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
392 msg.year = aimbs_getle16(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
393 msg.month = aimbs_getle8(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
394 msg.day = aimbs_getle8(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
395 msg.hour = aimbs_getle8(&qbs); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
396 msg.minute = aimbs_getle8(&qbs); |
4173 | 397 msg.type = aimbs_getle8(&qbs); |
398 msg.flags = aimbs_getle8(&qbs); | |
4076 | 399 msg.msglen = aimbs_getle16(&qbs); |
400 msg.msg = aimbs_getstr(&qbs, msg.msglen); | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
401 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
402 if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSG))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
403 ret = userfunc(sess, rx, &msg); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
404 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
405 free(msg.msg); |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
406 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
407 } else if (cmd == 0x0042) { |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
408 aim_rxcallback_t userfunc; |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
409 |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
410 if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_OFFLINEMSGCOMPLETE))) |
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
411 ret = userfunc(sess, rx); |
4151 | 412 |
413 } else if (cmd == 0x07da) { /* information */ | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
414 fu16_t subtype; |
4151 | 415 struct aim_icq_info *info; |
416 aim_rxcallback_t userfunc; | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
417 |
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
418 subtype = aimbs_getle16(&qbs); |
4151 | 419 aim_bstream_advance(&qbs, 1); /* 0x0a */ |
420 | |
4624 | 421 /* find other data from the same request */ |
422 for (info = sess->icq_info; info && (info->reqid != reqid); info = info->next); | |
423 if (!info) { | |
424 info = (struct aim_icq_info *)calloc(1, sizeof(struct aim_icq_info)); | |
425 info->reqid = reqid; | |
426 info->next = sess->icq_info; | |
427 sess->icq_info = info; | |
428 } | |
429 | |
4151 | 430 switch (subtype) { |
4664 | 431 case 0x00a0: { /* hide ip status */ |
432 /* nothing */ | |
433 } break; | |
434 | |
4617 | 435 case 0x00aa: { /* password change status */ |
4664 | 436 /* nothing */ |
4617 | 437 } break; |
438 | |
4624 | 439 case 0x00c8: { /* general and "home" information */ |
4151 | 440 info->nick = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
441 info->first = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
442 info->last = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4624 | 443 info->email = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
4151 | 444 info->homecity = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
445 info->homestate = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4624 | 446 info->homephone = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
447 info->homefax = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4151 | 448 info->homeaddr = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
4624 | 449 info->mobile = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
4151 | 450 info->homezip = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
451 info->homecountry = aimbs_getle16(&qbs); | |
4625 | 452 /* 0x0a 00 02 00 */ |
453 /* 1 byte timezone? */ | |
454 /* 1 byte hide email flag? */ | |
4151 | 455 } break; |
456 | |
4624 | 457 case 0x00dc: { /* personal information */ |
458 info->age = aimbs_getle8(&qbs); | |
459 info->unknown = aimbs_getle8(&qbs); | |
460 info->gender = aimbs_getle8(&qbs); | |
4151 | 461 info->personalwebpage = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
4624 | 462 info->birthyear = aimbs_getle16(&qbs); |
463 info->birthmonth = aimbs_getle8(&qbs); | |
464 info->birthday = aimbs_getle8(&qbs); | |
465 info->language1 = aimbs_getle8(&qbs); | |
466 info->language2 = aimbs_getle8(&qbs); | |
467 info->language3 = aimbs_getle8(&qbs); | |
4625 | 468 /* 0x00 00 01 00 00 01 00 00 00 00 00 */ |
4151 | 469 } break; |
470 | |
471 case 0x00d2: { /* work information */ | |
472 info->workcity = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
473 info->workstate = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4624 | 474 info->workphone = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
475 info->workfax = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4151 | 476 info->workaddr = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
477 info->workzip = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
478 info->workcountry = aimbs_getle16(&qbs); | |
479 info->workcompany = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
480 info->workdivision = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
481 info->workposition = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4625 | 482 aim_bstream_advance(&qbs, 2); /* 0x01 00 */ |
4151 | 483 info->workwebpage = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); |
484 } break; | |
485 | |
486 case 0x00e6: { /* additional personal information */ | |
4624 | 487 info->info = aimbs_getstr(&qbs, aimbs_getle16(&qbs)-1); |
488 } break; | |
489 | |
490 case 0x00eb: { /* email address(es) */ | |
4625 | 491 int i; |
4624 | 492 info->numaddresses = aimbs_getle16(&qbs); |
4625 | 493 info->email2 = (char **)calloc(info->numaddresses, sizeof(char *)); |
494 for (i = 0; i < info->numaddresses; i++) { | |
495 info->email2[i] = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
496 if (i+1 != info->numaddresses) | |
497 aim_bstream_advance(&qbs, 1); /* 0x00 */ | |
498 } | |
4151 | 499 } break; |
500 | |
501 case 0x00f0: { /* personal interests */ | |
502 } break; | |
503 | |
504 case 0x00fa: { /* past background and current organizations */ | |
505 } break; | |
506 | |
4759 | 507 case 0x0104: { /* alias info */ |
508 info->nick = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
509 info->first = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
510 info->last = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
511 aim_bstream_advance(&qbs, aimbs_getle16(&qbs)); /* email address? */ | |
512 /* Then 0x00 02 00 */ | |
513 } break; | |
514 | |
4151 | 515 case 0x010e: { /* unknown */ |
4625 | 516 /* 0x00 00 */ |
4151 | 517 } break; |
518 | |
519 case 0x019a: { /* simple info */ | |
520 aim_bstream_advance(&qbs, 2); | |
521 info->uin = aimbs_getle32(&qbs); | |
522 info->nick = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
523 info->first = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
524 info->last = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
525 info->email = aimbs_getstr(&qbs, aimbs_getle16(&qbs)); | |
4154 | 526 /* Then 0x00 02 00 00 00 00 00 */ |
4151 | 527 } break; |
528 } /* End switch statement */ | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
529 |
4624 | 530 if (!(snac->flags & 0x0001)) { |
4784 | 531 if (subtype != 0x0104) |
4759 | 532 if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_INFO))) |
533 ret = userfunc(sess, rx, info); | |
534 | |
535 if (info->uin && info->nick) | |
536 if ((userfunc = aim_callhandler(sess, rx->conn, AIM_CB_FAM_ICQ, AIM_CB_ICQ_ALIAS))) | |
537 ret = userfunc(sess, rx, info); | |
2742
6f527cbd899d
[gaim-migrate @ 2755]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2733
diff
changeset
|
538 |
4624 | 539 if (sess->icq_info == info) { |
540 sess->icq_info = info->next; | |
541 } else { | |
542 struct aim_icq_info *cur; | |
543 for (cur=sess->icq_info; (cur->next && (cur->next!=info)); cur=cur->next); | |
544 if (cur->next) | |
545 cur->next = cur->next->next; | |
546 } | |
547 aim_icq_freeinfo(info); | |
548 } | |
2706
e841b14b5b89
[gaim-migrate @ 2719]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2703
diff
changeset
|
549 } |
2703 | 550 |
2732
efa3e7115cb5
[gaim-migrate @ 2745]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2731
diff
changeset
|
551 aim_freetlvchain(&tl); |
2731
e9e624d8803e
[gaim-migrate @ 2744]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2706
diff
changeset
|
552 |
2703 | 553 return ret; |
554 } | |
555 | |
556 static int snachandler(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) | |
557 { | |
558 | |
559 if (snac->subtype == 0x0003) | |
560 return icqresponse(sess, mod, rx, snac, bs); | |
561 | |
562 return 0; | |
563 } | |
564 | |
4830 | 565 static void icq_shutdown(aim_session_t *sess, aim_module_t *mod) |
566 { | |
567 struct aim_icq_info *del; | |
568 | |
569 while (sess->icq_info) { | |
570 del = sess->icq_info; | |
571 sess->icq_info = sess->icq_info->next; | |
572 aim_icq_freeinfo(del); | |
573 } | |
574 | |
575 return; | |
576 } | |
577 | |
2703 | 578 faim_internal int icq_modfirst(aim_session_t *sess, aim_module_t *mod) |
579 { | |
580 | |
581 mod->family = 0x0015; | |
582 mod->version = 0x0001; | |
583 mod->toolid = 0x0110; | |
4071 | 584 mod->toolversion = 0x047c; |
2703 | 585 mod->flags = 0; |
586 strncpy(mod->name, "icq", sizeof(mod->name)); | |
587 mod->snachandler = snachandler; | |
4830 | 588 mod->shutdown = icq_shutdown; |
2703 | 589 |
590 return 0; | |
591 } |