comparison libpurple/protocols/qq/qq_process.c @ 24088:1ee91ff0d5fe

2008.10.09 - ccpaging <ccpaging(at)gmail.com> * Update 'group' protocol * Functions of group_find, group_free, group_search merged into group_join and group_internal * Removed group_find.c/h, group_free.c/h, group_search.c/h
author SHiNE CsyFeK <csyfek@gmail.com>
date Tue, 28 Oct 2008 16:38:16 +0000
parents 3c52353b83ae
children 9be95f0b9472
comparison
equal deleted inserted replaced
24087:147f1b17b6ce 24088:1ee91ff0d5fe
31 #include "buddy_opt.h" 31 #include "buddy_opt.h"
32 #include "group_info.h" 32 #include "group_info.h"
33 #include "char_conv.h" 33 #include "char_conv.h"
34 #include "qq_crypt.h" 34 #include "qq_crypt.h"
35 35
36 #include "group_search.h"
37 #include "group_find.h"
38 #include "group_internal.h" 36 #include "group_internal.h"
39 #include "group_im.h" 37 #include "group_im.h"
40 #include "group_info.h" 38 #include "group_info.h"
41 #include "group_join.h" 39 #include "group_join.h"
42 #include "group_opt.h" 40 #include "group_opt.h"
527 } 525 }
528 526
529 void qq_update_room(PurpleConnection *gc, guint8 room_cmd, guint32 room_id) 527 void qq_update_room(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
530 { 528 {
531 qq_data *qd; 529 qq_data *qd;
532 qq_group *group;
533 gint ret; 530 gint ret;
534 531
535 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 532 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
536 qd = (qq_data *) gc->proto_data; 533 qd = (qq_data *) gc->proto_data;
537
538 group = qq_room_search_id(gc, room_id);
539 if (group == NULL && room_id <= 0) {
540 purple_debug_info("QQ", "No room, nothing update\n");
541 return;
542 }
543 if (group == NULL ) {
544 purple_debug_warning("QQ", "Failed search room id [%d]\n", room_id);
545 return;
546 }
547 534
548 switch (room_cmd) { 535 switch (room_cmd) {
549 case 0: 536 case 0:
550 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, group->id, NULL, 0, 537 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, room_id, NULL, 0,
551 QQ_CMD_CLASS_UPDATE_ROOM, 0); 538 QQ_CMD_CLASS_UPDATE_ROOM, 0);
552 break; 539 break;
553 case QQ_ROOM_CMD_GET_INFO: 540 case QQ_ROOM_CMD_GET_INFO:
554 ret = qq_request_room_get_buddies(gc, group, QQ_CMD_CLASS_UPDATE_ROOM); 541 ret = qq_request_room_get_buddies(gc, room_id, QQ_CMD_CLASS_UPDATE_ROOM);
555 if (ret <= 0) { 542 if (ret <= 0) {
556 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0, 543 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, room_id, NULL, 0,
557 QQ_CMD_CLASS_UPDATE_ROOM, 0); 544 QQ_CMD_CLASS_UPDATE_ROOM, 0);
558 } 545 }
559 break; 546 break;
560 case QQ_ROOM_CMD_GET_BUDDIES: 547 case QQ_ROOM_CMD_GET_BUDDIES:
561 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0, 548 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, room_id, NULL, 0,
562 QQ_CMD_CLASS_UPDATE_ROOM, 0); 549 QQ_CMD_CLASS_UPDATE_ROOM, 0);
563 break; 550 break;
564 case QQ_ROOM_CMD_GET_ONLINES: 551 case QQ_ROOM_CMD_GET_ONLINES:
565 /* last command */ 552 /* last command */
566 default: 553 default:
570 557
571 void qq_update_all_rooms(PurpleConnection *gc, guint8 room_cmd, guint32 room_id) 558 void qq_update_all_rooms(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
572 { 559 {
573 qq_data *qd; 560 qq_data *qd;
574 gboolean is_new_turn = FALSE; 561 gboolean is_new_turn = FALSE;
575 qq_group *next_group; 562 guint32 next_id;
576 563
577 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 564 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
578 qd = (qq_data *) gc->proto_data; 565 qd = (qq_data *) gc->proto_data;
579 566
580 next_group = qq_room_get_next(gc, room_id); 567 next_id = qq_room_get_next(gc, room_id);
581 if (next_group == NULL && room_id <= 0) { 568 purple_debug_info("QQ", "Update rooms, next id %d, prev id %d\n", next_id, room_id);
582 purple_debug_info("QQ", "No room. Finished update\n"); 569
583 return; 570 if (next_id <= 0) {
584 } 571 if (room_id > 0) {
585 if (next_group == NULL ) { 572 is_new_turn = TRUE;
586 is_new_turn = TRUE; 573 next_id = qq_room_get_next(gc, 0);
587 next_group = qq_room_get_next(gc, 0); 574 purple_debug_info("QQ", "new turn, id %d\n", next_id);
588 g_return_if_fail(next_group != NULL); 575 } else {
576 purple_debug_info("QQ", "No room. Finished update\n");
577 return;
578 }
589 } 579 }
590 580
591 switch (room_cmd) { 581 switch (room_cmd) {
592 case 0: 582 case 0:
593 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0, 583 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_id, NULL, 0,
594 QQ_CMD_CLASS_UPDATE_ALL, 0); 584 QQ_CMD_CLASS_UPDATE_ALL, 0);
595 break; 585 break;
596 case QQ_ROOM_CMD_GET_INFO: 586 case QQ_ROOM_CMD_GET_INFO:
597 if (!is_new_turn) { 587 if (!is_new_turn) {
598 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0, 588 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_id, NULL, 0,
599 QQ_CMD_CLASS_UPDATE_ALL, 0); 589 QQ_CMD_CLASS_UPDATE_ALL, 0);
600 } else { 590 } else {
601 qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL); 591 qq_request_room_get_buddies(gc, next_id, QQ_CMD_CLASS_UPDATE_ALL);
602 } 592 }
603 break; 593 break;
604 case QQ_ROOM_CMD_GET_BUDDIES: 594 case QQ_ROOM_CMD_GET_BUDDIES:
605 /* last command */ 595 /* last command */
606 if (!is_new_turn) { 596 if (!is_new_turn) {
607 qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL); 597 qq_request_room_get_buddies(gc, next_id, QQ_CMD_CLASS_UPDATE_ALL);
608 } else { 598 } else {
609 purple_debug_info("QQ", "Finished update\n"); 599 purple_debug_info("QQ", "Finished update\n");
610 } 600 }
611 break; 601 break;
612 default: 602 default:
656 } 646 }
657 647
658 static void update_all_rooms_online(PurpleConnection *gc, guint8 room_cmd, guint32 room_id) 648 static void update_all_rooms_online(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
659 { 649 {
660 qq_data *qd; 650 qq_data *qd;
661 qq_group *next_group; 651 guint32 next_id;
662 652
663 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 653 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
664 qd = (qq_data *) gc->proto_data; 654 qd = (qq_data *) gc->proto_data;
665 655
666 next_group = qq_room_get_next_conv(gc, room_id); 656 next_id = qq_room_get_next_conv(gc, room_id);
667 if (next_group == NULL && room_id <= 0) { 657 if (next_id <= 0 && room_id <= 0) {
668 purple_debug_info("QQ", "No room in conversation, no update online buddies\n"); 658 purple_debug_info("QQ", "No room in conversation, no update online buddies\n");
669 return; 659 return;
670 } 660 }
671 if (next_group == NULL ) { 661 if (next_id <= 0 ) {
672 purple_debug_info("QQ", "finished update rooms' online buddies\n"); 662 purple_debug_info("QQ", "finished update rooms' online buddies\n");
673 return; 663 return;
674 } 664 }
675 665
676 switch (room_cmd) { 666 switch (room_cmd) {
677 case 0: 667 case 0:
678 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0, 668 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_id, NULL, 0,
679 QQ_CMD_CLASS_UPDATE_ALL, 0); 669 QQ_CMD_CLASS_UPDATE_ALL, 0);
680 break; 670 break;
681 case QQ_ROOM_CMD_GET_ONLINES: 671 case QQ_ROOM_CMD_GET_ONLINES:
682 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0, 672 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_id, NULL, 0,
683 QQ_CMD_CLASS_UPDATE_ALL, 0); 673 QQ_CMD_CLASS_UPDATE_ALL, 0);
684 break; 674 break;
685 default: 675 default:
686 break; 676 break;
687 } 677 }
712 gint update_class, guint32 ship32) 702 gint update_class, guint32 ship32)
713 { 703 {
714 qq_data *qd; 704 qq_data *qd;
715 guint8 *data; 705 guint8 *data;
716 gint data_len; 706 gint data_len;
717 qq_group *group; 707 qq_room_data *rmd;
718 gint bytes; 708 gint bytes;
719 guint8 reply_cmd, reply; 709 guint8 reply_cmd, reply;
720 710
721 g_return_if_fail (gc != NULL && gc->proto_data != NULL); 711 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
722 qd = (qq_data *) gc->proto_data; 712 qd = (qq_data *) gc->proto_data;
758 748
759 /* now process the packet */ 749 /* now process the packet */
760 if (reply != QQ_ROOM_CMD_REPLY_OK) { 750 if (reply != QQ_ROOM_CMD_REPLY_OK) {
761 switch (reply) { /* this should be all errors */ 751 switch (reply) { /* this should be all errors */
762 case QQ_ROOM_CMD_REPLY_NOT_MEMBER: 752 case QQ_ROOM_CMD_REPLY_NOT_MEMBER:
763 group = qq_room_search_id(gc, room_id); 753 rmd = qq_room_data_find(gc, room_id);
764 if (group == NULL) { 754 if (rmd == NULL) {
765 purple_debug_warning("QQ", 755 purple_debug_warning("QQ",
766 "Missing room id in [%05d], 0x%02X %s for %d, len %d\n", 756 "Missing room id in [%05d], 0x%02X %s for %d, len %d\n",
767 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len); 757 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
768 } else { 758 } else {
769 purple_debug_warning("QQ", 759 purple_debug_warning("QQ",
770 _("You are not a member of QQ Qun \"%s\"\n"), group->title_utf8); 760 _("Not a member of room \"%s\"\n"), rmd->title_utf8);
771 group->my_role = QQ_ROOM_ROLE_NO; 761 rmd->my_role = QQ_ROOM_ROLE_NO;
772 qq_group_refresh(gc, group);
773 } 762 }
774 break; 763 break;
775 case QQ_ROOM_CMD_REPLY_SEARCH_ERROR: 764 case QQ_ROOM_CMD_REPLY_SEARCH_ERROR:
776 if (qd->roomlist != NULL) { 765 if (qd->roomlist != NULL) {
777 if (purple_roomlist_get_in_progress(qd->roomlist)) 766 if (purple_roomlist_get_in_progress(qd->roomlist))
970 purple_debug_info("QQ", "Login repliess OK; everything is fine\n"); 959 purple_debug_info("QQ", "Login repliess OK; everything is fine\n");
971 purple_connection_set_state(gc, PURPLE_CONNECTED); 960 purple_connection_set_state(gc, PURPLE_CONNECTED);
972 qd->is_login = TRUE; /* must be defined after sev_finish_login */ 961 qd->is_login = TRUE; /* must be defined after sev_finish_login */
973 962
974 /* now initiate QQ Qun, do it first as it may take longer to finish */ 963 /* now initiate QQ Qun, do it first as it may take longer to finish */
975 qq_group_init(gc); 964 qq_room_data_initial(gc);
976 965
977 /* is_login, but we have packets before login */ 966 /* is_login, but we have packets before login */
978 qq_trans_process_remained(gc); 967 qq_trans_process_remained(gc);
979 968
980 qq_update_all(gc, 0); 969 qq_update_all(gc, 0);