Mercurial > pidgin.yaz
diff 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 |
line wrap: on
line diff
--- a/src/protocols/oscar/auth.c Fri Nov 30 21:16:28 2001 +0000 +++ b/src/protocols/oscar/auth.c Sat Dec 01 00:56:31 2001 +0000 @@ -172,12 +172,12 @@ aim_addtlvtochain_raw(&tl, 0x0001, strlen(sn), sn); aim_addtlvtochain_raw(&tl, 0x0002, strlen(password), password_encoded); aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientstr), clientstr); - aim_addtlvtochain16(&tl, 0x0016, 0x010a); - aim_addtlvtochain16(&tl, 0x0017, 0x0004); - aim_addtlvtochain16(&tl, 0x0018, 0x0041); - aim_addtlvtochain16(&tl, 0x0019, 0x0001); - aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); - aim_addtlvtochain32(&tl, 0x0014, 0x00000055); + aim_addtlvtochain16(&tl, 0x0016, 0x010a); /* cliend ID */ + aim_addtlvtochain16(&tl, 0x0017, 0x0004); /* major version */ + aim_addtlvtochain16(&tl, 0x0018, 0x0041); /* minor version */ + aim_addtlvtochain16(&tl, 0x0019, 0x0001); /* point version */ + aim_addtlvtochain16(&tl, 0x001a, 0x0cd1); /* build */ + aim_addtlvtochain32(&tl, 0x0014, 0x00000055); /* distribution chan */ aim_addtlvtochain_raw(&tl, 0x000f, strlen(lang), lang); aim_addtlvtochain_raw(&tl, 0x000e, strlen(country), country); @@ -200,12 +200,22 @@ * then the client information you send here must exactly match the * executable that you're pulling the data from. * - * Latest WinAIM: + * WinAIM 4.8.2540 + * clientstring = "AOL Instant Messenger (SM), version 4.8.2540/WIN32" + * clientid = 0x0109 + * major = 0x0004 + * minor = 0x0008 + * point = 0x0000 + * build = 0x09ec + * t(0x0014) = 0x000000af + * t(0x004a) = 0x01 + * + * WinAIM 4.3.2188: * clientstring = "AOL Instant Messenger (SM), version 4.3.2188/WIN32" - * major2 = 0x0109 + * clientid = 0x0109 * major = 0x0400 * minor = 0x0003 - * minor2 = 0x0000 + * point = 0x0000 * build = 0x088c * unknown = 0x00000086 * lang = "en" @@ -214,70 +224,64 @@ * * Latest WinAIM that libfaim can emulate without server-side buddylists: * clientstring = "AOL Instant Messenger (SM), version 4.1.2010/WIN32" - * major2 = 0x0004 + * clientid = 0x0004 * major = 0x0004 * minor = 0x0001 - * minor2 = 0x0000 + * point = 0x0000 * build = 0x07da * unknown= 0x0000004b * * WinAIM 3.5.1670: * clientstring = "AOL Instant Messenger (SM), version 3.5.1670/WIN32" - * major2 = 0x0004 + * clientid = 0x0004 * major = 0x0003 * minor = 0x0005 - * minor2 = 0x0000 + * point = 0x0000 * build = 0x0686 * unknown =0x0000002a * * Java AIM 1.1.19: * 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" - * major2 = 0x0001 + * clientid = 0x0001 * major = 0x0001 * minor = 0x0001 - * minor2 = (not sent) + * point = (not sent) * build = 0x0013 * unknown= (not sent) * * AIM for Linux 1.1.112: * clientstring = "AOL Instant Messenger (SM)" - * major2 = 0x1d09 + * clientid = 0x1d09 * major = 0x0001 * minor = 0x0001 - * minor2 = 0x0001 + * point = 0x0001 * build = 0x0070 * unknown= 0x0000008b * serverstore = 0x01 * */ -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) +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) { aim_frame_t *fr; aim_tlvlist_t *tl = NULL; fu8_t digest[16]; aim_snacid_t snacid; - if (!clientinfo || !sn || !password) + if (!ci || !sn || !password) return -EINVAL; + /* + * What the XORLOGIN flag _really_ means is that its an ICQ login, + * which is really stupid and painful, so its not done here. + * + */ if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) return goddamnicq2(sess, conn, sn, password); + if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x02, 1152))) return -ENOMEM; - if (sess->flags & AIM_SESS_FLAGS_XORLOGIN) { - fr->hdr.flap.type = 0x01; - - /* Use very specific version numbers to further indicate hack */ - clientinfo->major2 = 0x010a; - clientinfo->major = 0x0004; - clientinfo->minor = 0x003c; - clientinfo->minor2 = 0x0001; - clientinfo->build = 0x0cce; - clientinfo->unknown = 0x00000055; - } - snacid = aim_cachesnac(sess, 0x0017, 0x0002, 0x0000, NULL, 0); aim_putsnac(&fr->data, 0x0017, 0x0002, 0x0000, snacid); @@ -286,15 +290,22 @@ aim_encode_password_md5(password, key, digest); aim_addtlvtochain_raw(&tl, 0x0025, 16, digest); - aim_addtlvtochain_raw(&tl, 0x0003, strlen(clientinfo->clientstring), clientinfo->clientstring); - aim_addtlvtochain16(&tl, 0x0016, (fu16_t)clientinfo->major2); - aim_addtlvtochain16(&tl, 0x0017, (fu16_t)clientinfo->major); - aim_addtlvtochain16(&tl, 0x0018, (fu16_t)clientinfo->minor); - aim_addtlvtochain16(&tl, 0x0019, (fu16_t)clientinfo->minor2); - aim_addtlvtochain16(&tl, 0x001a, (fu16_t)clientinfo->build); - aim_addtlvtochain_raw(&tl, 0x000e, strlen(clientinfo->country), clientinfo->country); - aim_addtlvtochain_raw(&tl, 0x000f, strlen(clientinfo->lang), clientinfo->lang); - aim_addtlvtochain16(&tl, 0x0009, 0x0015); + if (ci->clientstring) + aim_addtlvtochain_raw(&tl, 0x0003, strlen(ci->clientstring), ci->clientstring); + aim_addtlvtochain16(&tl, 0x0016, (fu16_t)ci->clientid); + aim_addtlvtochain16(&tl, 0x0017, (fu16_t)ci->major); + aim_addtlvtochain16(&tl, 0x0018, (fu16_t)ci->minor); + aim_addtlvtochain16(&tl, 0x0019, (fu16_t)ci->point); + aim_addtlvtochain16(&tl, 0x001a, (fu16_t)ci->build); + aim_addtlvtochain_raw(&tl, 0x000e, strlen(ci->country), ci->country); + aim_addtlvtochain_raw(&tl, 0x000f, strlen(ci->lang), ci->lang); + + /* + * If set, old-fashioned buddy lists will not work. You will need + * to use SSI. + */ + if (0) + aim_addtlvtochain8(&tl, 0x004a, 0x01); aim_writetlvchain(&fr->data, &tl);