| 611 if (data_len >= 0) { |
611 if (data_len >= 0) { |
| 612 purple_debug_warning("QQ", "Decrypt login packet by pwd_4th_md5, %d bytes\n", data_len); |
612 purple_debug_warning("QQ", "Decrypt login packet by pwd_4th_md5, %d bytes\n", data_len); |
| 613 } |
613 } |
| 614 } |
614 } |
| 615 break; |
615 break; |
| 616 default: |
616 case QQ_CMD_LOGIN: |
| 617 /* May use password_twice_md5 in the past version like QQ2005 */ |
617 default: |
| 618 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key); |
618 if (qd->client_version > 2005) { |
| 619 if (data_len >= 0) { |
619 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_4th_md5); |
| 620 purple_debug_warning("QQ", "Decrypt login packet by random_key, %d bytes\n", data_len); |
620 if (data_len >= 0) { |
| |
621 purple_debug_warning("QQ", "Decrypt login packet by pwd_4th_md5\n"); |
| |
622 } else { |
| |
623 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.login_key); |
| |
624 if (data_len >= 0) { |
| |
625 purple_debug_warning("QQ", "Decrypt login packet by login_key\n"); |
| |
626 } |
| |
627 } |
| 621 } else { |
628 } else { |
| 622 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_2nd_md5); |
629 /* May use password_twice_md5 in the past version like QQ2005 */ |
| |
630 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key); |
| 623 if (data_len >= 0) { |
631 if (data_len >= 0) { |
| 624 purple_debug_warning("QQ", "Decrypt login packet by pwd_2nd_md5, %d bytes\n", data_len); |
632 purple_debug_warning("QQ", "Decrypt login packet by random_key\n"); |
| |
633 } else { |
| |
634 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_2nd_md5); |
| |
635 if (data_len >= 0) { |
| |
636 purple_debug_warning("QQ", "Decrypt login packet by pwd_2nd_md5\n"); |
| |
637 } |
| 625 } |
638 } |
| 626 } |
639 } |
| 627 break; |
640 break; |
| 628 } |
641 } |
| 629 |
642 |
| 678 } else { |
691 } else { |
| 679 qq_request_login_2007(gc); |
692 qq_request_login_2007(gc); |
| 680 } |
693 } |
| 681 break; |
694 break; |
| 682 case QQ_CMD_LOGIN: |
695 case QQ_CMD_LOGIN: |
| 683 ret_8 = qq_process_login(gc, data, data_len); |
696 if (qd->client_version == 2008) { |
| |
697 ret_8 = qq_process_login_2008(gc, data, data_len); |
| |
698 } else if (qd->client_version == 2007) { |
| |
699 ret_8 = qq_process_login_2007(gc, data, data_len); |
| |
700 } else { |
| |
701 ret_8 = qq_process_login(gc, data, data_len); |
| |
702 } |
| 684 if (ret_8 != QQ_LOGIN_REPLY_OK) { |
703 if (ret_8 != QQ_LOGIN_REPLY_OK) { |
| 685 return ret_8; |
704 return ret_8; |
| 686 } |
705 } |
| 687 |
706 |
| 688 purple_debug_info("QQ", "Login repliess OK; everything is fine\n"); |
707 purple_debug_info("QQ", "Login repliess OK; everything is fine\n"); |