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);