Mercurial > pidgin.yaz
comparison src/protocols/oscar/auth.c @ 2821:9467e4ee81be
[gaim-migrate @ 2834]
new libfaim stuff.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Sat, 01 Dec 2001 00:56:31 +0000 |
parents | fee85ed7fc3f |
children | 1b64206cfbdc |
comparison
equal
deleted
inserted
replaced
2820:b917845dad3c | 2821:9467e4ee81be |
---|---|
170 | 170 |
171 aimbs_put32(&fr->data, 0x00000001); | 171 aimbs_put32(&fr->data, 0x00000001); |
172 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); | 172 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); |
173 aim_addtlvtochain_raw(&tl, 0x0002, strlen(password), password_encoded); | 173 aim_addtlvtochain_raw(&tl, 0x0002, strlen(password), password_encoded); |
174 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientstr), clientstr); | 174 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientstr), clientstr); |
175 aim_addtlvtochain16(&tl, 0x0016, 0x010a); | 175 aim_addtlvtochain16(&tl, 0x0016, 0x010a); /* cliend ID */ |
176 aim_addtlvtochain16(&tl, 0x0017, 0x0004); | 176 aim_addtlvtochain16(&tl, 0x0017, 0x0004); /* major version */ |
177 aim_addtlvtochain16(&tl, 0x0018, 0x0041); | 177 aim_addtlvtochain16(&tl, 0x0018, 0x0041); /* minor version */ |
178 aim_addtlvtochain16(&tl, 0x0019, 0x0001); | 178 aim_addtlvtochain16(&tl, 0x0019, 0x0001); /* point version */ |
179 aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); | 179 aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); /* build */ |
180 aim_addtlvtochain32(&tl, 0x0014, 0x00000055); | 180 aim_addtlvtochain32(&tl, 0x0014, 0x00000055); /* distribution chan */ |
181 aim_addtlvtochain_raw(&tl, 0x000f, strlen(lang), lang); | 181 aim_addtlvtochain_raw(&tl, 0x000f, strlen(lang), lang); |
182 aim_addtlvtochain_raw(&tl, 0x000e, strlen(country), country); | 182 aim_addtlvtochain_raw(&tl, 0x000e, strlen(country), country); |
183 | 183 |
184 aim_writetlvchain(&fr->data, &tl); | 184 aim_writetlvchain(&fr->data, &tl); |
185 | 185 |
198 * | 198 * |
199 * NOTE!! If you want/need to make use of the aim_sendmemblock() function, | 199 * NOTE!! If you want/need to make use of the aim_sendmemblock() function, |
200 * then the client information you send here must exactly match the | 200 * then the client information you send here must exactly match the |
201 * executable that you're pulling the data from. | 201 * executable that you're pulling the data from. |
202 * | 202 * |
203 * Latest WinAIM: | 203 * WinAIM 4.8.2540 |
204 * clientstring = "AOL Instant Messenger (SM), version 4.8.2540/WIN32" | |
205 * clientid = 0x0109 | |
206 * major = 0x0004 | |
207 * minor = 0x0008 | |
208 * point = 0x0000 | |
209 * build = 0x09ec | |
210 * t(0x0014) = 0x000000af | |
211 * t(0x004a) = 0x01 | |
212 * | |
213 * WinAIM 4.3.2188: | |
204 * clientstring = "AOL Instant Messenger (SM), version 4.3.2188/WIN32" | 214 * clientstring = "AOL Instant Messenger (SM), version 4.3.2188/WIN32" |
205 * major2 = 0x0109 | 215 * clientid = 0x0109 |
206 * major = 0x0400 | 216 * major = 0x0400 |
207 * minor = 0x0003 | 217 * minor = 0x0003 |
208 * minor2 = 0x0000 | 218 * point = 0x0000 |
209 * build = 0x088c | 219 * build = 0x088c |
210 * unknown = 0x00000086 | 220 * unknown = 0x00000086 |
211 * lang = "en" | 221 * lang = "en" |
212 * country = "us" | 222 * country = "us" |
213 * unknown4a = 0x01 | 223 * unknown4a = 0x01 |
214 * | 224 * |
215 * Latest WinAIM that libfaim can emulate without server-side buddylists: | 225 * Latest WinAIM that libfaim can emulate without server-side buddylists: |
216 * clientstring = "AOL Instant Messenger (SM), version 4.1.2010/WIN32" | 226 * clientstring = "AOL Instant Messenger (SM), version 4.1.2010/WIN32" |
217 * major2 = 0x0004 | 227 * clientid = 0x0004 |
218 * major = 0x0004 | 228 * major = 0x0004 |
219 * minor = 0x0001 | 229 * minor = 0x0001 |
220 * minor2 = 0x0000 | 230 * point = 0x0000 |
221 * build = 0x07da | 231 * build = 0x07da |
222 * unknown= 0x0000004b | 232 * unknown= 0x0000004b |
223 * | 233 * |
224 * WinAIM 3.5.1670: | 234 * WinAIM 3.5.1670: |
225 * clientstring = "AOL Instant Messenger (SM), version 3.5.1670/WIN32" | 235 * clientstring = "AOL Instant Messenger (SM), version 3.5.1670/WIN32" |
226 * major2 = 0x0004 | 236 * clientid = 0x0004 |
227 * major = 0x0003 | 237 * major = 0x0003 |
228 * minor = 0x0005 | 238 * minor = 0x0005 |
229 * minor2 = 0x0000 | 239 * point = 0x0000 |
230 * build = 0x0686 | 240 * build = 0x0686 |
231 * unknown =0x0000002a | 241 * unknown =0x0000002a |
232 * | 242 * |
233 * Java AIM 1.1.19: | 243 * Java AIM 1.1.19: |
234 * clientstring = "AOL Instant Messenger (TM) version 1.1.19 for Java built 03/24/98, freeMem 215871 totalMem 1048567, i686, Linus, #2 SMP Sun Feb 11 03:41:17 UTC 2001 2.4.1-ac9, IBM Corporation, 1.1.8, 45.3, Tue Mar 27 12:09:17 PST 2001" | 244 * clientstring = "AOL Instant Messenger (TM) version 1.1.19 for Java built 03/24/98, freeMem 215871 totalMem 1048567, i686, Linus, #2 SMP Sun Feb 11 03:41:17 UTC 2001 2.4.1-ac9, IBM Corporation, 1.1.8, 45.3, Tue Mar 27 12:09:17 PST 2001" |
235 * major2 = 0x0001 | 245 * clientid = 0x0001 |
236 * major = 0x0001 | 246 * major = 0x0001 |
237 * minor = 0x0001 | 247 * minor = 0x0001 |
238 * minor2 = (not sent) | 248 * point = (not sent) |
239 * build = 0x0013 | 249 * build = 0x0013 |
240 * unknown= (not sent) | 250 * unknown= (not sent) |
241 * | 251 * |
242 * AIM for Linux 1.1.112: | 252 * AIM for Linux 1.1.112: |
243 * clientstring = "AOL Instant Messenger (SM)" | 253 * clientstring = "AOL Instant Messenger (SM)" |
244 * major2 = 0x1d09 | 254 * clientid = 0x1d09 |
245 * major = 0x0001 | 255 * major = 0x0001 |
246 * minor = 0x0001 | 256 * minor = 0x0001 |
247 * minor2 = 0x0001 | 257 * point = 0x0001 |
248 * build = 0x0070 | 258 * build = 0x0070 |
249 * unknown= 0x0000008b | 259 * unknown= 0x0000008b |
250 * serverstore = 0x01 | 260 * serverstore = 0x01 |
251 * | 261 * |
252 */ | 262 */ |
253 faim_export int aim_send_login(aim_session_t *sess, aim_conn_t *conn, const char *sn, const char *password, struct client_info_s *clientinfo, const char *key) | 263 faim_export int aim_send_login(aim_session_t *sess, aim_conn_t *conn, const char *sn, const char *password, struct client_info_s *ci, const char *key) |
254 { | 264 { |
255 aim_frame_t *fr; | 265 aim_frame_t *fr; |
256 aim_tlvlist_t *tl = NULL; | 266 aim_tlvlist_t *tl = NULL; |
257 fu8_t digest[16]; | 267 fu8_t digest[16]; |
258 aim_snacid_t snacid; | 268 aim_snacid_t snacid; |
259 | 269 |
260 if (!clientinfo || !sn || !password) | 270 if (!ci || !sn || !password) |
261 return -EINVAL; | 271 return -EINVAL; |
262 | 272 |
273 /* | |
274 * What the XORLOGIN flag _really_ means is that its an ICQ login, | |
275 * which is really stupid and painful, so its not done here. | |
276 * | |
277 */ | |
263 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) | 278 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) |
264 return goddamnicq2(sess, conn, sn, password); | 279 return goddamnicq2(sess, conn, sn, password); |
265 | 280 |
281 | |
266 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152))) | 282 if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152))) |
267 return -ENOMEM; | 283 return -ENOMEM; |
268 | 284 |
269 if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) { | |
270 fr->hdr.flap.type = 0x01; | |
271 | |
272 /* Use very specific version numbers to further indicate hack */ | |
273 clientinfo->major2 = 0x010a; | |
274 clientinfo->major = 0x0004; | |
275 clientinfo->minor = 0x003c; | |
276 clientinfo->minor2 = 0x0001; | |
277 clientinfo->build = 0x0cce; | |
278 clientinfo->unknown = 0x00000055; | |
279 } | |
280 | |
281 snacid = aim_cachesnac(sess, 0x0017, 0x0002, 0x0000, NULL, 0); | 285 snacid = aim_cachesnac(sess, 0x0017, 0x0002, 0x0000, NULL, 0); |
282 aim_putsnac(&fr->data, 0x0017, 0x0002, 0x0000, snacid); | 286 aim_putsnac(&fr->data, 0x0017, 0x0002, 0x0000, snacid); |
283 | 287 |
284 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); | 288 aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); |
285 | 289 |
286 aim_encode_password_md5(password, key, digest); | 290 aim_encode_password_md5(password, key, digest); |
287 aim_addtlvtochain_raw(&tl, 0x0025, 16, digest); | 291 aim_addtlvtochain_raw(&tl, 0x0025, 16, digest); |
288 | 292 |
289 aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientinfo->clientstring), clientinfo->clientstring); | 293 if (ci->clientstring) |
290 aim_addtlvtochain16(&tl, 0x0016, (fu16_t)clientinfo->major2); | 294 aim_addtlvtochain_raw(&tl, 0x0003, strlen(ci->clientstring), ci->clientstring); |
291 aim_addtlvtochain16(&tl, 0x0017, (fu16_t)clientinfo->major); | 295 aim_addtlvtochain16(&tl, 0x0016, (fu16_t)ci->clientid); |
292 aim_addtlvtochain16(&tl, 0x0018, (fu16_t)clientinfo->minor); | 296 aim_addtlvtochain16(&tl, 0x0017, (fu16_t)ci->major); |
293 aim_addtlvtochain16(&tl, 0x0019, (fu16_t)clientinfo->minor2); | 297 aim_addtlvtochain16(&tl, 0x0018, (fu16_t)ci->minor); |
294 aim_addtlvtochain16(&tl, 0x001a, (fu16_t)clientinfo->build); | 298 aim_addtlvtochain16(&tl, 0x0019, (fu16_t)ci->point); |
295 aim_addtlvtochain_raw(&tl, 0x000e, strlen(clientinfo->country), clientinfo->country); | 299 aim_addtlvtochain16(&tl, 0x001a, (fu16_t)ci->build); |
296 aim_addtlvtochain_raw(&tl, 0x000f, strlen(clientinfo->lang), clientinfo->lang); | 300 aim_addtlvtochain_raw(&tl, 0x000e, strlen(ci->country), ci->country); |
297 aim_addtlvtochain16(&tl, 0x0009, 0x0015); | 301 aim_addtlvtochain_raw(&tl, 0x000f, strlen(ci->lang), ci->lang); |
302 | |
303 /* | |
304 * If set, old-fashioned buddy lists will not work. You will need | |
305 * to use SSI. | |
306 */ | |
307 if (0) | |
308 aim_addtlvtochain8(&tl, 0x004a, 0x01); | |
298 | 309 |
299 aim_writetlvchain(&fr->data, &tl); | 310 aim_writetlvchain(&fr->data, &tl); |
300 | 311 |
301 aim_freetlvchain(&tl); | 312 aim_freetlvchain(&tl); |
302 | 313 |