libpurple/protocols/qq/qq_process.c

Wed, 22 Oct 2008 14:47:39 +0000

author
SHiNE CsyFeK <csyfek@gmail.com>
date
Wed, 22 Oct 2008 14:47:39 +0000
branch
openq
changeset 24349
a77c0e009d10
parent 24348
1249d8b99aa9
child 24350
a092f0a371d8
permissions
-rw-r--r--

2008.10.04 - ccpaging <ccpagint(at)gmail.com>
* Update protocol for 2007
* Code cleanup

23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1 /**
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
2 * @file qq_network.c
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
3 *
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
4 * purple
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
5 *
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
8 * source distribution.
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
9 *
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
13 * (at your option) any later version.
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
14 *
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
18 * GNU General Public License for more details.
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
19 *
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
23 */
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
24
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
25 #include "cipher.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
26 #include "debug.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
27 #include "internal.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
28
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
29 #include "buddy_info.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
30 #include "buddy_list.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
31 #include "buddy_opt.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
32 #include "group_info.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
33 #include "char_conv.h"
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
34 #include "qq_crypt.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
35
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
36 #include "group_search.h"
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
37 #include "group_conv.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
38 #include "group_find.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
39 #include "group_internal.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
40 #include "group_im.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
41 #include "group_info.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
42 #include "group_join.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
43 #include "group_opt.h"
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
44
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
45 #include "qq_define.h"
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
46 #include "qq_base.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
47 #include "im.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
48 #include "qq_process.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
49 #include "packet_parse.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
50 #include "qq_network.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
51 #include "qq_trans.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
52 #include "utils.h"
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
53
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
54 enum {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
55 QQ_ROOM_CMD_REPLY_OK = 0x00,
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
56 QQ_ROOM_CMD_REPLY_SEARCH_ERROR = 0x02,
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
57 QQ_ROOM_CMD_REPLY_NOT_MEMBER = 0x0a
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
58 };
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
59
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
60 /* default process, decrypt and dump */
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
61 static void process_unknow_cmd(PurpleConnection *gc,const gchar *title, guint8 *data, gint data_len, guint16 cmd, guint16 seq)
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
62 {
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
63 qq_data *qd;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
64 gchar *msg_utf8 = NULL;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
65
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
66 g_return_if_fail(data != NULL && data_len != 0);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
67
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
68 qq_show_packet(title, data, data_len);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
69
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
70 qd = (qq_data *) gc->proto_data;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
71
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
72 qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ",
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
73 data, data_len,
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
74 ">>> [%d] %s -> [default] decrypt and dump",
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
75 seq, qq_get_cmd_desc(cmd));
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
76
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
77 msg_utf8 = try_dump_as_gbk(data, data_len);
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
78 if (msg_utf8 != NULL) {
24021
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
79 purple_notify_info(gc, _("QQ Error"), title, msg_utf8);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
80 g_free(msg_utf8);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
81 }
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
82 }
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
83
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
84 /* parse the reply to send_im */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
85 static void do_im_ack(guint8 *data, gint data_len, PurpleConnection *gc)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
86 {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
87 qq_data *qd;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
88
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
89 g_return_if_fail(data != NULL && data_len != 0);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
90
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
91 qd = gc->proto_data;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
92
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
93 if (data[0] != 0) {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
94 purple_debug_warning("QQ", "Failed sent IM\n");
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
95 purple_notify_error(gc, _("Error"), _("Failed to send IM."), NULL);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
96 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
97 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
98
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
99 purple_debug_info("QQ", "OK sent IM\n");
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
100 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
101
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
102 static void do_server_news(guint8 *data, gint data_len, PurpleConnection *gc)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
103 {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
104 qq_data *qd = (qq_data *) gc->proto_data;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
105 gint bytes;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
106 guint8 *temp;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
107 guint8 temp_len;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
108 gchar *title, *brief, *url;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
109 gchar *title_utf8;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
110 gchar *content, *content_utf8;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
111
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
112 g_return_if_fail(data != NULL && data_len != 0);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
113
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
114 /* qq_show_packet("Rcv news", data, data_len); */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
115
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
116 temp = g_newa(guint8, data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
117 bytes = 4; /* ignore unknown 4 bytes */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
118
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
119 bytes += qq_get8(&temp_len, data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
120 g_return_if_fail(bytes + temp_len <= data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
121 bytes += qq_getdata(temp, temp_len, data+bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
122 title = g_strndup((gchar *)temp, temp_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
123
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
124 bytes += qq_get8(&temp_len, data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
125 g_return_if_fail(bytes + temp_len <= data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
126 bytes += qq_getdata(temp, temp_len, data+bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
127 brief = g_strndup((gchar *)temp, temp_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
128
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
129 bytes += qq_get8(&temp_len, data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
130 g_return_if_fail(bytes + temp_len <= data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
131 bytes += qq_getdata(temp, temp_len, data+bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
132 url = g_strndup((gchar *)temp, temp_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
133
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
134 title_utf8 = qq_to_utf8(title, QQ_CHARSET_DEFAULT);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
135 content = g_strdup_printf(_("Server News:\n%s\n%s\n%s"), title, brief, url);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
136 content_utf8 = qq_to_utf8(content, QQ_CHARSET_DEFAULT);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
137
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
138 if (qd->is_show_news) {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
139 qq_got_attention(gc, content_utf8);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
140 } else {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
141 purple_debug_info("QQ", "QQ Server news:\n%s\n%s", title_utf8, content_utf8);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
142 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
143 g_free(title);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
144 g_free(title_utf8);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
145 g_free(brief);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
146 g_free(url);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
147 g_free(content);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
148 g_free(content_utf8);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
149 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
150
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
151 /* process im from system administrator */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
152 static void do_server_im(guint8 *data, gint data_len, PurpleConnection *gc)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
153 {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
154 gint len;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
155 guint8 reply;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
156 gchar **segments, *msg_utf8;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
157
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
158 g_return_if_fail(data != NULL && data_len != 0);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
159
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
160 len = data_len;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
161
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
162 if (NULL == (segments = split_data(data, len, "\x2f", 2)))
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
163 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
164
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
165 reply = strtol(segments[0], NULL, 10);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
166 if (reply == 1)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
167 purple_debug_warning("QQ", "We are kicked out by QQ server\n");
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
168
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
169 msg_utf8 = qq_to_utf8(segments[1], QQ_CHARSET_DEFAULT);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
170 purple_notify_warning(gc, NULL, _("System Message"), msg_utf8);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
171 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
172
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
173 static const gchar *get_im_type_desc(gint type)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
174 {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
175 switch (type) {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
176 case QQ_RECV_IM_TO_BUDDY:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
177 return "QQ_RECV_IM_TO_BUDDY";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
178 case QQ_RECV_IM_TO_UNKNOWN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
179 return "QQ_RECV_IM_TO_UNKNOWN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
180 case QQ_RECV_IM_UNKNOWN_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
181 return "QQ_RECV_IM_UNKNOWN_QUN_IM";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
182 case QQ_RECV_IM_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
183 return "QQ_RECV_IM_ADD_TO_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
184 case QQ_RECV_IM_DEL_FROM_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
185 return "QQ_RECV_IM_DEL_FROM_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
186 case QQ_RECV_IM_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
187 return "QQ_RECV_IM_APPLY_ADD_TO_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
188 case QQ_RECV_IM_CREATE_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
189 return "QQ_RECV_IM_CREATE_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
190 case QQ_RECV_IM_SYS_NOTIFICATION:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
191 return "QQ_RECV_IM_SYS_NOTIFICATION";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
192 case QQ_RECV_IM_APPROVE_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
193 return "QQ_RECV_IM_APPROVE_APPLY_ADD_TO_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
194 case QQ_RECV_IM_REJCT_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
195 return "QQ_RECV_IM_REJCT_APPLY_ADD_TO_QUN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
196 case QQ_RECV_IM_TEMP_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
197 return "QQ_RECV_IM_TEMP_QUN_IM";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
198 case QQ_RECV_IM_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
199 return "QQ_RECV_IM_QUN_IM";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
200 case QQ_RECV_IM_NEWS:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
201 return "QQ_RECV_IM_NEWS";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
202 case QQ_RECV_IM_EXTEND:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
203 return "QQ_RECV_IM_EXTEND";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
204 case QQ_RECV_IM_EXTEND_85:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
205 return "QQ_RECV_IM_EXTEND_85";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
206 default:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
207 return "QQ_RECV_IM_UNKNOWN";
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
208 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
209 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
210
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
211 /* I receive a message, mainly it is text msg,
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
212 * but we need to proess other types (group etc) */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
213 static void process_private_msg(guint8 *data, gint data_len, guint16 seq, PurpleConnection *gc)
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
214 {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
215 qq_data *qd;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
216 gint bytes;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
217
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
218 struct {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
219 guint32 uid_from;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
220 guint32 uid_to;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
221 guint32 seq;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
222 struct in_addr ip_from;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
223 guint16 port_from;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
224 guint16 im_type;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
225 } header;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
226
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
227 g_return_if_fail(data != NULL && data_len != 0);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
228
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
229 qd = (qq_data *) gc->proto_data;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
230
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
231 if (data_len < 16) { /* we need to ack with the first 16 bytes */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
232 purple_debug_error("QQ", "MSG is too short\n");
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
233 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
234 } else {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
235 /* when we receive a message,
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
236 * we send an ACK which is the first 16 bytes of incoming packet */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
237 qq_send_server_reply(gc, QQ_CMD_RECV_IM, seq, data, 16);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
238 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
239
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
240 /* check len first */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
241 if (data_len < 20) { /* length of im_header */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
242 purple_debug_error("QQ", "Invald MSG header, len %d < 20\n", data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
243 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
244 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
245
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
246 bytes = 0;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
247 bytes += qq_get32(&(header.uid_from), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
248 bytes += qq_get32(&(header.uid_to), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
249 bytes += qq_get32(&(header.seq), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
250 /* if the message is delivered via server, it is server IP/port */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
251 bytes += qq_getIP(&(header.ip_from), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
252 bytes += qq_get16(&(header.port_from), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
253 bytes += qq_get16(&(header.im_type), data + bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
254 /* im_header prepared */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
255
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
256 if (header.uid_to != qd->uid) { /* should not happen */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
257 purple_debug_error("QQ", "MSG to [%d], NOT me\n", header.uid_to);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
258 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
259 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
260
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
261 /* check bytes */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
262 if (bytes >= data_len - 1) {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
263 purple_debug_warning("QQ", "Empty MSG\n");
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
264 return;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
265 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
266
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
267 switch (header.im_type) {
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
268 case QQ_RECV_IM_NEWS:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
269 do_server_news(data + bytes, data_len - bytes, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
270 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
271 case QQ_RECV_IM_EXTEND:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
272 case QQ_RECV_IM_EXTEND_85:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
273 purple_debug_info("QQ", "MSG from buddy [%d]\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
274 qq_process_extend_im(gc, data + bytes, data_len - bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
275 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
276 case QQ_RECV_IM_TO_UNKNOWN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
277 case QQ_RECV_IM_TO_BUDDY:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
278 purple_debug_info("QQ", "MSG from buddy [%d]\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
279 qq_process_im(gc, data + bytes, data_len - bytes);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
280 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
281 case QQ_RECV_IM_UNKNOWN_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
282 case QQ_RECV_IM_TEMP_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
283 case QQ_RECV_IM_QUN_IM:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
284 purple_debug_info("QQ", "MSG from room [%d]\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
285 /* uid_from is in fact id */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
286 qq_process_room_msg_normal(data + bytes, data_len - bytes, header.uid_from, gc, header.im_type);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
287 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
288 case QQ_RECV_IM_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
289 purple_debug_info("QQ", "Notice from [%d], Added\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
290 /* uid_from is group id
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
291 * we need this to create a dummy group and add to blist */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
292 qq_process_room_msg_been_added(data + bytes, data_len - bytes, header.uid_from, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
293 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
294 case QQ_RECV_IM_DEL_FROM_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
295 purple_debug_info("QQ", "Notice from room [%d], Removed\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
296 /* uid_from is group id */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
297 qq_process_room_msg_been_removed(data + bytes, data_len - bytes, header.uid_from, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
298 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
299 case QQ_RECV_IM_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
300 purple_debug_info("QQ", "Notice from room [%d], Joined\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
301 /* uid_from is group id */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
302 qq_process_room_msg_apply_join(data + bytes, data_len - bytes, header.uid_from, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
303 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
304 case QQ_RECV_IM_APPROVE_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
305 purple_debug_info("QQ", "Notice from room [%d], Confirm add in\n",
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
306 header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
307 /* uid_from is group id */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
308 qq_process_room_msg_been_approved(data + bytes, data_len - bytes, header.uid_from, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
309 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
310 case QQ_RECV_IM_REJCT_APPLY_ADD_TO_QUN:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
311 purple_debug_info("QQ", "Notice from room [%d], Refuse add in\n",
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
312 header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
313 /* uid_from is group id */
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
314 qq_process_room_msg_been_rejected(data + bytes, data_len - bytes, header.uid_from, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
315 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
316 case QQ_RECV_IM_SYS_NOTIFICATION:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
317 purple_debug_info("QQ", "Admin notice from [%d]\n", header.uid_from);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
318 do_server_im(data + bytes, data_len - bytes, gc);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
319 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
320 default:
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
321 purple_debug_warning("QQ", "MSG from [%d], unknown type %s [0x%02x]\n",
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
322 header.uid_from, get_im_type_desc(header.im_type),
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
323 header.im_type);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
324 qq_show_packet("Unknown MSG type", data, data_len);
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
325 break;
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
326 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
327 }
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
328
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
329 /* Send ACK if the sys message needs an ACK */
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
330 static void request_server_ack(PurpleConnection *gc, guint8 code, guint32 from, guint16 seq)
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
331 {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
332 qq_data *qd;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
333 guint8 bar, *ack;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
334 gchar *str;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
335 gint ack_len, bytes;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
336
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
337 qd = (qq_data *) gc->proto_data;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
338
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
339 str = g_strdup_printf("%d", from);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
340 bar = 0x1e;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
341 ack_len = 1 + 1 + strlen(str) + 1 + 2;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
342 ack = g_newa(guint8, ack_len);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
343
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
344 bytes = 0;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
345 bytes += qq_put8(ack + bytes, code);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
346 bytes += qq_put8(ack + bytes, bar);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
347 bytes += qq_putdata(ack + bytes, (guint8 *) str, strlen(str));
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
348 bytes += qq_put8(ack + bytes, bar);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
349 bytes += qq_put16(ack + bytes, seq);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
350
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
351 g_free(str);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
352
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
353 if (bytes == ack_len) /* creation OK */
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
354 qq_send_server_reply(gc, QQ_CMD_ACK_SYS_MSG, 0, ack, ack_len);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
355 else
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
356 purple_debug_error("QQ",
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
357 "Fail creating sys msg ACK, expect %d bytes, build %d bytes\n", ack_len, bytes);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
358 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
359
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
360 static void do_server_notice(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8)
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
361 {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
362 qq_data *qd = (qq_data *) gc->proto_data;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
363 gchar *title, *content;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
364
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
365 g_return_if_fail(from != NULL && to != NULL);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
366
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
367 title = g_strdup_printf(_("From %s:"), from);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
368 content = g_strdup_printf(_("Server notice From %s: \n%s"), from, msg_utf8);
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
369
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
370 if (qd->is_show_notice) {
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
371 qq_got_attention(gc, content);
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
372 } else {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
373 purple_debug_info("QQ", "QQ Server notice from %s:\n%s", from, msg_utf8);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
374 }
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
375 g_free(title);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
376 g_free(content);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
377 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
378
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
379 static void process_server_msg(guint8 *data, gint data_len, guint16 seq, PurpleConnection *gc)
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
380 {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
381 qq_data *qd;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
382 gchar **segments, *code, *from, *to, *msg, *msg_utf8;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
383 int funct;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
384
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
385 g_return_if_fail(data != NULL && data_len != 0);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
386
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
387 qd = (qq_data *) gc->proto_data;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
388
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
389 if (NULL == (segments = split_data(data, data_len, "\x1f", 4)))
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
390 return;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
391 code = segments[0];
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
392 from = segments[1];
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
393 to = segments[2];
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
394 msg = segments[3];
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
395
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
396 request_server_ack(gc, code[0], strtol(from, NULL, 10), seq);
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
397
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
398 if (strtol(to, NULL, 10) != qd->uid) { /* not to me */
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
399 purple_debug_error("QQ", "Recv sys msg to [%s], not me!, discard\n", to);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
400 g_strfreev(segments);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
401 return;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
402 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
403
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
404 msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
405 if (from == NULL && msg_utf8) {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
406 purple_debug_error("QQ", "Recv NULL sys msg to [%s], discard\n", to);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
407 g_strfreev(segments);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
408 g_free(msg_utf8);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
409 return;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
410 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
411
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
412 funct = strtol(code, NULL, 10);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
413 switch (funct) {
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
414 case QQ_SERVER_BUDDY_ADDED:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
415 case QQ_SERVER_BUDDY_ADD_REQUEST:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
416 case QQ_SERVER_BUDDY_ADDED_ME:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
417 case QQ_SERVER_BUDDY_REJECTED_ME:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
418 qq_process_buddy_from_server(gc, funct, from, to, msg_utf8);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
419 break;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
420 case QQ_SERVER_NOTICE:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
421 do_server_notice(gc, from, to, msg_utf8);
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
422 break;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
423 case QQ_SERVER_NEW_CLIENT:
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
424 purple_debug_warning("QQ", "QQ Server has newer client version\n");
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
425 break;
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
426 default:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
427 purple_debug_warning("QQ", "Recv unknown sys msg code: %s\nMsg: %s\n", code, msg_utf8);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
428 break;
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
429 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
430 g_free(msg_utf8);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
431 g_strfreev(segments);
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
432 }
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
433
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
434 void qq_proc_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len)
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
435 {
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
436 qq_data *qd;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
437
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
438 guint8 *data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
439 gint data_len;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
440
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
441 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
442 qd = (qq_data *) gc->proto_data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
443
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
444 data = g_newa(guint8, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
445 data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
446 if (data_len < 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
447 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
448 "Can not decrypt server cmd by session key, [%05d], 0x%04X %s, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
449 seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
450 qq_show_packet("Can not decrypted", rcved, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
451 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
452 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
453
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
454 if (data_len <= 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
455 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
456 "Server cmd decrypted is empty, [%05d], 0x%04X %s, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
457 seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
458 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
459 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
460
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
461 /* now process the packet */
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
462 switch (cmd) {
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
463 case QQ_CMD_RECV_IM:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
464 process_private_msg(data, data_len, seq, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
465 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
466 case QQ_CMD_RECV_MSG_SYS:
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
467 process_server_msg(data, data_len, seq, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
468 break;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
469 case QQ_CMD_BUDDY_CHANGE_STATUS:
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
470 qq_process_buddy_change_status(data, data_len, gc);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
471 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
472 default:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
473 process_unknow_cmd(gc, _("Unknow SERVER CMD"), data, data_len, cmd, seq);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
474 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
475 }
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
476 }
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
477
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
478 static void process_room_cmd_notify(PurpleConnection *gc,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
479 guint8 room_cmd, guint8 room_id, guint8 reply, guint8 *data, gint data_len)
24300
aa3947bf4a6a disapproval of revision 'b3ebedfac7cbad2b4bdd322c45aa572c3cd2795b'
Daniel Atallah <datallah@pidgin.im>
parents: 24299
diff changeset
480 {
24021
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
481 gchar *prim;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
482 gchar *msg, *msg_utf8;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
483 g_return_if_fail(data != NULL && data_len > 0);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
484
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
485 msg = g_strndup((gchar *) data, data_len); /* it will append 0x00 */
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
486 msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
487 g_free(msg);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
488
24021
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
489 prim = g_strdup_printf(_("Error reply of %s(0x%02X)\nRoom %d, reply 0x%02X"),
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
490 qq_get_room_cmd_desc(room_cmd), room_cmd, room_id, reply);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
491
24021
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
492 purple_notify_error(gc, _("QQ Qun Command"), prim, msg_utf8);
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
493
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
494 g_free(prim);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
495 g_free(msg_utf8);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
496 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
497
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
498 void qq_update_room(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
499 {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
500 qq_data *qd;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
501 qq_group *group;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
502 gint ret;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
503
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
504 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
505 qd = (qq_data *) gc->proto_data;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
506
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
507 group = qq_room_search_id(gc, room_id);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
508 if (group == NULL && room_id <= 0) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
509 purple_debug_info("QQ", "No room, nothing update\n");
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
510 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
511 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
512 if (group == NULL ) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
513 purple_debug_warning("QQ", "Failed search room id [%d]\n", room_id);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
514 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
515 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
516
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
517 switch (room_cmd) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
518 case 0:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
519 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
520 QQ_CMD_CLASS_UPDATE_ROOM, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
521 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
522 case QQ_ROOM_CMD_GET_INFO:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
523 ret = qq_request_room_get_buddies(gc, group, QQ_CMD_CLASS_UPDATE_ROOM);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
524 if (ret <= 0) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
525 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
526 QQ_CMD_CLASS_UPDATE_ROOM, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
527 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
528 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
529 case QQ_ROOM_CMD_GET_BUDDIES:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
530 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
531 QQ_CMD_CLASS_UPDATE_ROOM, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
532 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
533 case QQ_ROOM_CMD_GET_ONLINES:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
534 /* last command */
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
535 default:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
536 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
537 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
538 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
539
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
540 void qq_update_all_rooms(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
541 {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
542 qq_data *qd;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
543 gboolean is_new_turn = FALSE;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
544 qq_group *next_group;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
545
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
546 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
547 qd = (qq_data *) gc->proto_data;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
548
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
549 next_group = qq_room_get_next(gc, room_id);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
550 if (next_group == NULL && room_id <= 0) {
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
551 purple_debug_info("QQ", "No room. Finished update\n");
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
552 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
553 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
554 if (next_group == NULL ) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
555 is_new_turn = TRUE;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
556 next_group = qq_room_get_next(gc, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
557 g_return_if_fail(next_group != NULL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
558 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
559
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
560 switch (room_cmd) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
561 case 0:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
562 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
563 QQ_CMD_CLASS_UPDATE_ALL, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
564 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
565 case QQ_ROOM_CMD_GET_INFO:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
566 if (!is_new_turn) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
567 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
568 QQ_CMD_CLASS_UPDATE_ALL, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
569 } else {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
570 qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
571 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
572 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
573 case QQ_ROOM_CMD_GET_BUDDIES:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
574 /* last command */
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
575 if (!is_new_turn) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
576 qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
577 } else {
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
578 purple_debug_info("QQ", "Finished update\n");
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
579 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
580 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
581 default:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
582 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
583 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
584 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
585
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
586 void qq_update_all(PurpleConnection *gc, guint16 cmd)
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
587 {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
588 qq_data *qd;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
589
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
590 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
591 qd = (qq_data *) gc->proto_data;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
592
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
593 switch (cmd) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
594 case 0:
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
595 qq_request_buddy_info(gc, qd->uid, QQ_CMD_CLASS_UPDATE_ALL, 0);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
596 break;
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
597 case QQ_CMD_GET_BUDDY_INFO:
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
598 qq_request_change_status(gc, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
599 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
600 case QQ_CMD_CHANGE_STATUS:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
601 qq_request_get_buddies_list(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
602 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
603 case QQ_CMD_GET_BUDDIES_LIST:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
604 qq_request_get_buddies_and_rooms(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
605 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
606 case QQ_CMD_GET_BUDDIES_AND_ROOMS:
24348
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
607 if (qd->client_version >= 2007) {
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
608 /* QQ2007/2008 can not get buddies level*/
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
609 qq_request_get_buddies_online(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
610 } else {
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
611 qq_request_get_buddies_level(gc, QQ_CMD_CLASS_UPDATE_ALL);
1249d8b99aa9 2008.10.03 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24346
diff changeset
612 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
613 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
614 case QQ_CMD_GET_LEVEL:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
615 qq_request_get_buddies_online(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
616 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
617 case QQ_CMD_GET_BUDDIES_ONLINE:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
618 /* last command */
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
619 qq_update_all_rooms(gc, 0, 0);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
620 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
621 default:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
622 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
623 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
624 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
625
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
626 static void update_all_rooms_online(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
627 {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
628 qq_data *qd;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
629 qq_group *next_group;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
630
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
631 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
632 qd = (qq_data *) gc->proto_data;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
633
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
634 next_group = qq_room_get_next_conv(gc, room_id);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
635 if (next_group == NULL && room_id <= 0) {
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
636 purple_debug_info("QQ", "No room in conversation, no update online buddies\n");
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
637 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
638 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
639 if (next_group == NULL ) {
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
640 purple_debug_info("QQ", "finished update rooms' online buddies\n");
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
641 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
642 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
643
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
644 switch (room_cmd) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
645 case 0:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
646 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
647 QQ_CMD_CLASS_UPDATE_ALL, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
648 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
649 case QQ_ROOM_CMD_GET_ONLINES:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
650 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
651 QQ_CMD_CLASS_UPDATE_ALL, 0);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
652 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
653 default:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
654 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
655 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
656 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
657
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
658 void qq_update_online(PurpleConnection *gc, guint16 cmd)
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
659 {
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
660 qq_data *qd;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
661 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
662 qd = (qq_data *) gc->proto_data;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
663
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
664 switch (cmd) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
665 case 0:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
666 qq_request_get_buddies_online(gc, 0, QQ_CMD_CLASS_UPDATE_ONLINE);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
667 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
668 case QQ_CMD_GET_BUDDIES_ONLINE:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
669 /* last command */
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
670 update_all_rooms_online(gc, 0, 0);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
671 qd->online_last_update = time(NULL);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
672 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
673 default:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
674 break;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
675 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
676 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
677
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
678 void qq_proc_room_cmds(PurpleConnection *gc, guint16 seq,
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
679 guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len,
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
680 gint update_class, guint32 ship32)
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
681 {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
682 qq_data *qd;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
683 guint8 *data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
684 gint data_len;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
685 qq_group *group;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
686 gint bytes;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
687 guint8 reply_cmd, reply;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
688
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
689 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
690 qd = (qq_data *) gc->proto_data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
691
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
692 data = g_newa(guint8, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
693 data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
694 if (data_len < 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
695 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
696 "Can not decrypt room cmd by session key, [%05d], 0x%02X %s for %d, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
697 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
698 qq_show_packet("Can not decrypted", rcved, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
699 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
700 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
701
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
702 if (room_id <= 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
703 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
704 "Invaild room id, [%05d], 0x%02X %s for %d, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
705 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
24021
ac2108c5b5f4 applied changes from 92d52eef2994d2697999177804e3665989cfa352
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24020
diff changeset
706 /* Some room cmd has no room id, like QQ_ROOM_CMD_SEARCH */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
707 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
708
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
709 if (data_len <= 2) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
710 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
711 "Invaild len of room cmd decrypted, [%05d], 0x%02X %s for %d, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
712 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
713 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
714 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
715
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
716 group = qq_room_search_id(gc, room_id);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
717 if (group == NULL) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
718 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
719 "Missing room id in [%05d], 0x%02X %s for %d, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
720 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
721 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
722
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
723 bytes = 0;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
724 bytes += qq_get8(&reply_cmd, data + bytes);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
725 bytes += qq_get8(&reply, data + bytes);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
726
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
727 if (reply_cmd != room_cmd) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
728 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
729 "Missing room cmd in reply 0x%02X %s, [%05d], 0x%02X %s for %d, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
730 reply_cmd, qq_get_room_cmd_desc(reply_cmd),
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
731 seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
732 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
733
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
734 /* now process the packet */
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
735 if (reply != QQ_ROOM_CMD_REPLY_OK) {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
736 if (group != NULL) {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
737 qq_set_pending_id(&qd->joining_groups, group->ext_id, FALSE);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
738 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
739
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
740 switch (reply) { /* this should be all errors */
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
741 case QQ_ROOM_CMD_REPLY_NOT_MEMBER:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
742 if (group != NULL) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
743 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
744 _("You are not a member of QQ Qun \"%s\"\n"), group->title_utf8);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
745 group->my_role = QQ_ROOM_ROLE_NO;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
746 qq_group_refresh(gc, group);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
747 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
748 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
749 case QQ_ROOM_CMD_REPLY_SEARCH_ERROR:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
750 if (qd->roomlist != NULL) {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
751 if (purple_roomlist_get_in_progress(qd->roomlist))
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
752 purple_roomlist_set_in_progress(qd->roomlist, FALSE);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
753 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
754 default:
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
755 process_room_cmd_notify(gc, reply_cmd, room_id, reply, data + bytes, data_len - bytes);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
756 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
757 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
758 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
759
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
760 /* seems ok so far, so we process the reply according to sub_cmd */
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
761 switch (reply_cmd) {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
762 case QQ_ROOM_CMD_GET_INFO:
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
763 qq_process_room_cmd_get_info(data + bytes, data_len - bytes, ship32, gc);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
764 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
765 case QQ_ROOM_CMD_CREATE:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
766 qq_group_process_create_group_reply(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
767 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
768 case QQ_ROOM_CMD_CHANGE_INFO:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
769 qq_group_process_modify_info_reply(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
770 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
771 case QQ_ROOM_CMD_MEMBER_OPT:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
772 qq_group_process_modify_members_reply(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
773 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
774 case QQ_ROOM_CMD_ACTIVATE:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
775 qq_group_process_activate_group_reply(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
776 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
777 case QQ_ROOM_CMD_SEARCH:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
778 qq_process_group_cmd_search_group(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
779 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
780 case QQ_ROOM_CMD_JOIN:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
781 qq_process_group_cmd_join_group(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
782 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
783 case QQ_ROOM_CMD_AUTH:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
784 qq_process_group_cmd_join_group_auth(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
785 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
786 case QQ_ROOM_CMD_QUIT:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
787 qq_process_group_cmd_exit_group(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
788 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
789 case QQ_ROOM_CMD_SEND_MSG:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
790 qq_process_group_cmd_im(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
791 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
792 case QQ_ROOM_CMD_GET_ONLINES:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
793 qq_process_room_cmd_get_onlines(data + bytes, data_len - bytes, gc);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
794 if (group != NULL)
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
795 qq_group_conv_refresh_online_member(gc, group);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
796 break;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
797 case QQ_ROOM_CMD_GET_BUDDIES:
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
798 qq_process_room_cmd_get_buddies(data + bytes, data_len - bytes, gc);
24022
d01a6b8ccfad applied changes from 5688199e261449d33b5803dafff50d860896ebcb
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24021
diff changeset
799 if (group != NULL) {
d01a6b8ccfad applied changes from 5688199e261449d33b5803dafff50d860896ebcb
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24021
diff changeset
800 group->is_got_info = TRUE;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
801 qq_group_conv_refresh_online_member(gc, group);
24022
d01a6b8ccfad applied changes from 5688199e261449d33b5803dafff50d860896ebcb
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24021
diff changeset
802 }
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
803 break;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
804 default:
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
805 purple_debug_warning("QQ", "Unknow room cmd 0x%02X %s\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
806 reply_cmd, qq_get_room_cmd_desc(reply_cmd));
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
807 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
808
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
809 if (update_class == QQ_CMD_CLASS_NONE)
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
810 return;
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
811
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
812 if (update_class == QQ_CMD_CLASS_UPDATE_ALL) {
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
813 qq_update_all_rooms(gc, room_cmd, room_id);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
814 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
815 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
816 if (update_class == QQ_CMD_CLASS_UPDATE_ONLINE) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
817 update_all_rooms_online(gc, room_cmd, room_id);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
818 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
819 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
820 if (update_class == QQ_CMD_CLASS_UPDATE_ROOM) {
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
821 qq_update_room(gc, room_cmd, room_id);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
822 }
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
823 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
824
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
825 guint8 qq_proc_login_cmds(PurpleConnection *gc, guint16 cmd, guint16 seq,
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
826 guint8 *rcved, gint rcved_len, gint update_class, guint32 ship32)
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
827 {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
828 qq_data *qd;
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
829 guint8 *data = NULL;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
830 gint data_len = 0;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
831 guint ret_8 = QQ_LOGIN_REPLY_ERR;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
832
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
833 g_return_val_if_fail (gc != NULL && gc->proto_data != NULL, QQ_LOGIN_REPLY_ERR);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
834 qd = (qq_data *) gc->proto_data;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
835
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
836 g_return_val_if_fail(rcved_len > 0, QQ_LOGIN_REPLY_ERR);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
837 data = g_newa(guint8, rcved_len);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
838
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
839 switch (cmd) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
840 case QQ_CMD_TOKEN:
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
841 if (qq_process_token(gc, rcved, rcved_len) == QQ_LOGIN_REPLY_OK) {
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
842 if (qd->client_version >= 2007) {
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
843 qq_request_token_ex(gc);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
844 } else {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
845 qq_request_login(gc);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
846 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
847 return QQ_LOGIN_REPLY_OK;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
848 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
849 return QQ_LOGIN_REPLY_ERR;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
850 case QQ_CMD_GET_SERVER:
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
851 case QQ_CMD_TOKEN_EX:
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
852 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key);
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
853 break;
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
854 case QQ_CMD_CHECK_PWD:
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
855 /* May use password_twice_md5 in the past version like QQ2005 */
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
856 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key);
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
857 if (data_len >= 0) {
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
858 purple_debug_warning("QQ", "Decrypt login packet by random_key, %d bytes\n", data_len);
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
859 } else {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
860 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_twice_md5);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
861 if (data_len >= 0) {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
862 purple_debug_warning("QQ", "Decrypt login packet by pwd_twice_md5, %d bytes\n", data_len);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
863 }
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
864 }
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
865 break;
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
866 case QQ_CMD_LOGIN:
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
867 default:
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
868 if (qd->client_version >= 2007) {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
869 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_twice_md5);
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
870 if (data_len >= 0) {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
871 purple_debug_warning("QQ", "Decrypt login packet by pwd_twice_md5\n");
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
872 } else {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
873 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.login_key);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
874 if (data_len >= 0) {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
875 purple_debug_warning("QQ", "Decrypt login packet by login_key\n");
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
876 }
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
877 }
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
878 } else {
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
879 /* May use password_twice_md5 in the past version like QQ2005 */
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
880 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.random_key);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
881 if (data_len >= 0) {
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
882 purple_debug_warning("QQ", "Decrypt login packet by random_key\n");
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
883 } else {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
884 data_len = qq_decrypt(data, rcved, rcved_len, qd->ld.pwd_twice_md5);
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
885 if (data_len >= 0) {
24344
712295f3bf6d 2008.09.29 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
886 purple_debug_warning("QQ", "Decrypt login packet by pwd_twice_md5\n");
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
887 }
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
888 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
889 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
890 break;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
891 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
892
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
893 if (data_len < 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
894 purple_debug_warning("QQ",
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
895 "Can not decrypt login cmd, [%05d], 0x%04X %s, len %d\n",
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
896 seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
897 qq_show_packet("Can not decrypted", rcved, rcved_len);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
898 purple_connection_error_reason(gc,
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
899 PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR,
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
900 _("Can not decrypt login reply"));
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
901 return QQ_LOGIN_REPLY_ERR;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
902 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
903
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
904 switch (cmd) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
905 case QQ_CMD_GET_SERVER:
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
906 ret_8 = qq_process_get_server(gc, data, data_len);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
907 if ( ret_8 == QQ_LOGIN_REPLY_OK) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
908 qq_request_token(gc);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
909 } else if ( ret_8 == QQ_LOGIN_REPLY_REDIRECT) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
910 return QQ_LOGIN_REPLY_REDIRECT;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
911 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
912 break;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
913 case QQ_CMD_TOKEN_EX:
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
914 ret_8 = qq_process_token_ex(gc, data, data_len);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
915 if (ret_8 == QQ_LOGIN_REPLY_OK) {
24345
8c97fe081183 2008.09.30 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24344
diff changeset
916 qq_request_check_pwd(gc);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
917 } else if (ret_8 == QQ_LOGIN_REPLY_NEXT_TOKEN_EX) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
918 qq_request_token_ex_next(gc);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
919 } else if (ret_8 == QQ_LOGIN_REPLY_CAPTCHA_DLG) {
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
920 qq_captcha_input_dialog(gc, &(qd->captcha));
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
921 g_free(qd->captcha.token);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
922 g_free(qd->captcha.data);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
923 memset(&qd->captcha, 0, sizeof(qd->captcha));
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
924 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
925 break;
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
926 case QQ_CMD_CHECK_PWD:
24345
8c97fe081183 2008.09.30 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24344
diff changeset
927 ret_8 = qq_process_check_pwd(gc, data, data_len);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
928 if (ret_8 != QQ_LOGIN_REPLY_OK) {
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
929 return ret_8;
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
930 }
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
931 if (qd->client_version == 2008) {
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
932 qq_request_login_2008(gc);
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
933 } else {
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
934 qq_request_login_2007(gc);
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
935 }
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
936 break;
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
937 case QQ_CMD_LOGIN:
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
938 if (qd->client_version == 2008) {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
939 ret_8 = qq_process_login_2008(gc, data, data_len);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
940 } else if (qd->client_version == 2007) {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
941 ret_8 = qq_process_login_2007(gc, data, data_len);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
942 } else {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
943 ret_8 = qq_process_login(gc, data, data_len);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
944 }
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
945 if (ret_8 != QQ_LOGIN_REPLY_OK) {
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
946 return ret_8;
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
947 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
948
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
949 purple_connection_update_progress(gc, _("Logined"), QQ_CONNECT_STEPS - 1, QQ_CONNECT_STEPS);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
950 purple_debug_info("QQ", "Login repliess OK; everything is fine\n");
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
951 purple_connection_set_state(gc, PURPLE_CONNECTED);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
952 qd->is_login = TRUE; /* must be defined after sev_finish_login */
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
953
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
954 /* now initiate QQ Qun, do it first as it may take longer to finish */
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
955 qq_group_init(gc);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
956
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
957 /* is_login, but we have packets before login */
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
958 qq_trans_process_remained(gc);
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
959
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
960 qq_update_all(gc, 0);
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
961 break;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
962 default:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
963 process_unknow_cmd(gc, _("Unknow LOGIN CMD"), data, data_len, cmd, seq);
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
964 return QQ_LOGIN_REPLY_ERR;
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
965 }
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
966 return QQ_LOGIN_REPLY_OK;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
967 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
968
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
969 void qq_proc_client_cmds(PurpleConnection *gc, guint16 cmd, guint16 seq,
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
970 guint8 *rcved, gint rcved_len, gint update_class, guint32 ship32)
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
971 {
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
972 qq_data *qd;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
973
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
974 guint8 *data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
975 gint data_len;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
976
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
977 guint8 ret_8 = 0;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
978 guint16 ret_16 = 0;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
979 guint32 ret_32 = 0;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
980 gboolean is_unknow = FALSE;
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
981
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
982 g_return_if_fail(rcved_len > 0);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
983
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
984 g_return_if_fail (gc != NULL && gc->proto_data != NULL);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
985 qd = (qq_data *) gc->proto_data;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
986
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
987 data = g_newa(guint8, rcved_len);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
988 data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
989 if (data_len < 0) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
990 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
991 "Reply can not be decrypted by session key, [%05d], 0x%04X %s, len %d\n",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
992 seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
993 qq_show_packet("Can not decrypted", rcved, rcved_len);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
994 return;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
995 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
996
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
997 if (data_len <= 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
998 purple_debug_warning("QQ",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
999 "Reply decrypted is empty, [%05d], 0x%04X %s, len %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1000 seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1001 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1002 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1003
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1004 switch (cmd) {
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1005 case QQ_CMD_UPDATE_INFO:
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1006 qq_process_modify_info_reply(data, data_len, gc);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1007 break;
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1008 case QQ_CMD_BUDDY_ADD_NO_AUTH:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1009 qq_process_buddy_add_no_auth(data, data_len, ship32, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1010 break;
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1011 case QQ_CMD_BUDDY_REMOVE:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1012 qq_process_buddy_remove(data, data_len, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1013 break;
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1014 case QQ_CMD_REMOVE_ME:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1015 qq_process_buddy_remove_me(data, data_len, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1016 break;
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1017 case QQ_CMD_BUDDY_ADD_AUTH:
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1018 qq_process_buddy_add_auth(data, data_len, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1019 break;
24020
fe90d74977b6 applied changes from 8cebefbc6cd5d84acb69c74e69e8821f11dd225d
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24019
diff changeset
1020 case QQ_CMD_GET_BUDDY_INFO:
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
1021 qq_process_get_buddy_info(data, data_len, ship32, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1022 break;
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1023 case QQ_CMD_CHANGE_STATUS:
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1024 qq_process_change_status_reply(data, data_len, gc);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1025 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1026 case QQ_CMD_SEND_IM:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
1027 do_im_ack(data, data_len, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1028 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1029 case QQ_CMD_KEEP_ALIVE:
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1030 if (qd->client_version >= 2008) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1031 qq_process_keep_alive_2008(data, data_len, gc);
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1032 } else if (qd->client_version >= 2007) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1033 qq_process_keep_alive_2007(data, data_len, gc);
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1034 } else {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1035 qq_process_keep_alive(data, data_len, gc);
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24345
diff changeset
1036 }
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1037 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1038 case QQ_CMD_GET_BUDDIES_ONLINE:
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1039 ret_8 = qq_process_get_buddies_online_reply(data, data_len, gc);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1040 if (ret_8 > 0 && ret_8 < 0xff) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1041 purple_debug_info("QQ", "Requesting for more online buddies\n");
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1042 qq_request_get_buddies_online(gc, ret_8, update_class);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1043 return;
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1044 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1045 purple_debug_info("QQ", "All online buddies received\n");
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1046 qq_refresh_all_buddy_status(gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1047 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1048 case QQ_CMD_GET_LEVEL:
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1049 qq_process_get_level_reply(data, data_len, gc);
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1050 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1051 case QQ_CMD_GET_BUDDIES_LIST:
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1052 ret_16 = qq_process_get_buddies_list_reply(data, data_len, gc);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1053 if (ret_16 > 0 && ret_16 < 0xffff) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1054 purple_debug_info("QQ", "Requesting for more buddies\n");
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1055 qq_request_get_buddies_list(gc, ret_16, update_class);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1056 return;
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1057 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1058 purple_debug_info("QQ", "All buddies received. Requesting buddies' levels\n");
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1059 break;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1060 case QQ_CMD_GET_BUDDIES_AND_ROOMS:
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23956
diff changeset
1061 ret_32 = qq_process_get_buddies_and_rooms(data, data_len, gc);
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1062 if (ret_32 > 0 && ret_32 < 0xffffffff) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1063 purple_debug_info("QQ", "Requesting for more buddies and groups\n");
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1064 qq_request_get_buddies_and_rooms(gc, ret_32, update_class);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1065 return;
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1066 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1067 purple_debug_info("QQ", "All buddies and groups received\n");
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1068 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1069 default:
24349
a77c0e009d10 2008.10.04 - ccpaging <ccpagint(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24348
diff changeset
1070 process_unknow_cmd(gc, _("Unknow CLIENT CMD"), data, data_len, cmd, seq);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1071 is_unknow = TRUE;
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1072 break;
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1073 }
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1074 if (is_unknow)
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1075 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1076
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1077 if (update_class == QQ_CMD_CLASS_NONE)
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1078 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1079
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1080 purple_debug_info("QQ", "Update class %d\n", update_class);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1081 if (update_class == QQ_CMD_CLASS_UPDATE_ALL) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1082 qq_update_all(gc, cmd);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1083 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1084 }
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1085 if (update_class == QQ_CMD_CLASS_UPDATE_ONLINE) {
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1086 qq_update_online(gc, cmd);
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1087 return;
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
1088 }
23953
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1089 }
918c72f0ff7f 2008.08.03 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents:
diff changeset
1090

mercurial