libpurple/protocols/qq/qq_process.c

branch
openq
changeset 24343
9c695a1f475b
parent 24341
02abffea97fe
child 24344
712295f3bf6d
--- a/libpurple/protocols/qq/qq_process.c	Wed Oct 22 14:38:06 2008 +0000
+++ b/libpurple/protocols/qq/qq_process.c	Wed Oct 22 14:40:04 2008 +0000
@@ -613,15 +613,28 @@
 				}
 			}
 			break;
+		case QQ_CMD_LOGIN:
 		default:
-			/* May use password_twice_md5 in the past version like QQ2005 */
-			data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key);
-			if (data_len >= 0) {
-				purple_debug_warning("QQ", "Decrypt login packet by random_key, %d bytes\n", data_len);
+			if (qd->client_version > 2005) {
+				data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_4th_md5);
+				if (data_len >= 0) {
+					purple_debug_warning("QQ", "Decrypt login packet by pwd_4th_md5\n");
+				} else {
+					data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.login_key);
+					if (data_len >= 0) {
+						purple_debug_warning("QQ", "Decrypt login packet by login_key\n");
+					}
+				}
 			} else {
-				data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_2nd_md5);
+				/* May use password_twice_md5 in the past version like QQ2005 */
+				data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key);
 				if (data_len >= 0) {
-					purple_debug_warning("QQ", "Decrypt login packet by pwd_2nd_md5, %d bytes\n", data_len);
+					purple_debug_warning("QQ", "Decrypt login packet by random_key\n");
+				} else {
+					data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_2nd_md5);
+					if (data_len >= 0) {
+						purple_debug_warning("QQ", "Decrypt login packet by pwd_2nd_md5\n");
+					}
 				}
 			}
 			break;
@@ -680,7 +693,13 @@
 			}
 			break;
 		case QQ_CMD_LOGIN:
-			ret_8 = qq_process_login(gc, data, data_len);
+			if (qd->client_version == 2008) {
+				ret_8 = qq_process_login_2008(gc, data, data_len);
+			} else if (qd->client_version == 2007) {
+				ret_8 = qq_process_login_2007(gc, data, data_len);
+			} else {
+				ret_8 = qq_process_login(gc, data, data_len);
+			}
 			if (ret_8 != QQ_LOGIN_REPLY_OK) {
 				return  ret_8;
 			}

mercurial