libpurple/protocols/qq/buddy_list.c

Wed, 22 Oct 2008 14:43:46 +0000

author
SHiNE CsyFeK <csyfek@gmail.com>
date
Wed, 22 Oct 2008 14:43:46 +0000
branch
openq
changeset 24346
98c009d1f4e0
parent 24343
9c695a1f475b
child 24348
1249d8b99aa9
permissions
-rw-r--r--

2009.10.02 - ccpaging <ccpaging(at)gmail.com>
* Added 'Captcha Display' function
* Most functions from patch written by Emil Alexiev merged into trunk,
except 'buddy operations'
* 'online buddy status' and 'qun buddies' still have problems

13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
1 /**
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
diff changeset
2 * @file buddy_list.c
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15541
diff changeset
4 * purple
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
5 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15541
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14691
diff changeset
8 * source distribution.
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
9 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
13 * (at your option) any later version.
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
14 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
18 * GNU General Public License for more details.
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
19 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18273
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
23 */
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
24
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
25 #include <string.h>
18273
e61c53184c52 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16271
diff changeset
26
e61c53184c52 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16271
diff changeset
27 #include "qq.h"
e61c53184c52 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16271
diff changeset
28
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
29 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
30 #include "notify.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
31 #include "utils.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
32 #include "packet_parse.h"
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15133
diff changeset
33 #include "buddy_info.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
34 #include "buddy_list.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
35 #include "buddy_opt.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
36 #include "char_conv.h"
24340
36ceebf026a0 patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24337
diff changeset
37 #include "qq_define.h"
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
38 #include "qq_base.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
39 #include "group.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
40 #include "group_find.h"
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
41 #include "group_internal.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
42 #include "group_info.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
43
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23190
diff changeset
44 #include "qq_network.h"
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
45
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
46 #define QQ_GET_ONLINE_BUDDY_02 0x02
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
47 #define QQ_GET_ONLINE_BUDDY_03 0x03 /* unknown function */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
48
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
49 typedef struct _qq_buddy_online {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
50 qq_buddy_status bs;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
51 guint16 unknown1;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
52 guint8 ext_flag;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
53 guint8 comm_flag;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
54 guint16 unknown2;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
55 guint8 ending; /* 0x00 */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
56 } qq_buddy_online;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
57
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
58 /* get a list of online_buddies */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
59 void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, gint update_class)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
60 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
61 qq_data *qd;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
62 guint8 *raw_data;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
63 gint bytes = 0;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
64
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
65 qd = (qq_data *) gc->proto_data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
66 raw_data = g_newa(guint8, 5);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
67
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
68 /* 000-000 get online friends cmd
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
69 * only 0x02 and 0x03 returns info from server, other valuse all return 0xff
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
70 * I can also only send the first byte (0x02, or 0x03)
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
71 * and the result is the same */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
72 bytes += qq_put8(raw_data + bytes, QQ_GET_ONLINE_BUDDY_02);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
73 /* 001-001 seems it supports 255 online buddies at most */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
74 bytes += qq_put8(raw_data + bytes, position);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
75 /* 002-002 */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
76 bytes += qq_put8(raw_data + bytes, 0x00);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
77 /* 003-004 */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
78 bytes += qq_put16(raw_data + bytes, 0x0000);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
79
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
80 qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_ONLINE, raw_data, 5, update_class, 0);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
81 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
82
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
83 /* position starts with 0x0000,
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
84 * server may return a position tag if list is too long for one packet */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
85 void qq_request_get_buddies_list(PurpleConnection *gc, guint16 position, gint update_class)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
86 {
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
87 qq_data *qd;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
88 guint8 raw_data[16] = {0};
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
89 gint bytes = 0;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
90
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
91 qd = (qq_data *) gc->proto_data;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
92
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
93 /* 000-001 starting position, can manually specify */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
94 bytes += qq_put16(raw_data + bytes, position);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
95 /* before Mar 18, 2004, any value can work, and we sent 00
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
96 * I do not know what data QQ server is expecting, as QQ2003iii 0304 itself
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
97 * even can sending packets 00 and get no response.
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
98 * Now I tested that 00,00,00,00,00,01 work perfectly
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
99 * March 22, found the 00,00,00 starts to work as well */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
100 bytes += qq_put8(raw_data + bytes, 0x00);
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
101 if (qd->client_version >= 2007) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
102 bytes += qq_put16(raw_data + bytes, 0x0000);
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
103 }
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
104
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
105 qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_LIST, raw_data, bytes, update_class, 0);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
106 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
107
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
108 /* get all list, buddies & Quns with groupsid support */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
109 void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, gint update_class)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
110 {
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
111 guint8 raw_data[16] = {0};
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
112 gint bytes = 0;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
113
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
114 /* 0x01 download, 0x02, upload */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
115 bytes += qq_put8(raw_data + bytes, 0x01);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
116 /* unknown 0x02 */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
117 bytes += qq_put8(raw_data + bytes, 0x02);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
118 /* unknown 00 00 00 00 */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
119 bytes += qq_put32(raw_data + bytes, 0x00000000);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
120 bytes += qq_put32(raw_data + bytes, position);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
121
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
122 qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_AND_ROOMS, raw_data, bytes, update_class, 0);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
123 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
124
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
125 /* parse the data into qq_buddy_status */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
126 static gint get_buddy_status(qq_buddy_status *bs, guint8 *data)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
127 {
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
128 gint bytes = 0;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
129
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
130 g_return_val_if_fail(data != NULL && bs != NULL, -1);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
131
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
132 /* 000-003: uid */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
133 bytes += qq_get32(&bs->uid, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
134 /* 004-004: 0x01 */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
135 bytes += qq_get8(&bs->unknown1, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
136 /* this is no longer the IP, it seems QQ (as of 2006) no longer sends
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
137 * the buddy's IP in this packet. all 0s */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
138 /* 005-008: ip */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
139 bytes += qq_getIP(&bs->ip, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
140 /* port info is no longer here either */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
141 /* 009-010: port */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
142 bytes += qq_get16(&bs->port, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
143 /* 011-011: 0x00 */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
144 bytes += qq_get8(&bs->unknown2, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
145 /* 012-012: status */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
146 bytes += qq_get8(&bs->status, data + bytes);
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
147 /* 013-014: client tag */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
148 bytes += qq_get16(&bs->unknown3, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
149 /* 015-030: unknown key */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
150 bytes += qq_getdata(&(bs->unknown_key[0]), QQ_KEY_LENGTH, data + bytes);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
151
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
152 purple_debug_info("QQ_STATUS",
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
153 "uid: %d, U1: %d, ip: %s:%d, U2:%d, status:%d, U3:%04X\n",
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
154 bs->uid, bs->unknown1, inet_ntoa(bs->ip), bs->port,
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
155 bs->unknown2, bs->status, bs->unknown3);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
156
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
157 return bytes;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
158 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
159
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
160 #define QQ_ONLINE_BUDDY_ENTRY_LEN 38
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
161
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
162 /* process the reply packet for get_buddies_online packet */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
163 guint8 qq_process_get_buddies_online_reply(guint8 *data, gint data_len, PurpleConnection *gc)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
164 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
165 qq_data *qd;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
166 gint bytes, bytes_buddy;
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
167 gint count;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
168 guint8 position;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15541
diff changeset
169 PurpleBuddy *b;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
170 qq_buddy *q_bud;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
171 qq_buddy_online bo;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
172 gchar *purple_name;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
173
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
174 g_return_val_if_fail(data != NULL && data_len != 0, -1);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
175
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
176 qd = (qq_data *) gc->proto_data;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
177
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
178 /* qq_show_packet("Get buddies online reply packet", data, len); */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
179
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
180 bytes = 0;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
181 bytes += qq_get8(&position, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
182
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
183 count = 0;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
184 while (bytes < data_len) {
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
185 if (data_len - bytes < QQ_ONLINE_BUDDY_ENTRY_LEN) {
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
186 purple_debug_error("QQ", "[buddies online] only %d, need %d\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
187 (data_len - bytes), QQ_ONLINE_BUDDY_ENTRY_LEN);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
188 break;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
189 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
190 memset(&bo, 0 ,sizeof(bo));
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
191
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
192 /* set flag */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
193 bytes_buddy = bytes;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
194 /* based on one online buddy entry */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
195 /* 000-030 qq_buddy_status */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
196 bytes += get_buddy_status(&(bo.bs), data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
197 /* 031-032: */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
198 bytes += qq_get16(&bo.unknown1, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
199 /* 033-033: ext_flag */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
200 bytes += qq_get8(&bo.ext_flag, data + bytes);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
201 /* 034-034: comm_flag */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
202 bytes += qq_get8(&bo.comm_flag, data + bytes);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
203 /* 035-036: */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
204 bytes += qq_get16(&bo.unknown2, data + bytes);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
205 /* 037-037: */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
206 bytes += qq_get8(&bo.ending, data + bytes); /* 0x00 */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
207
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
208 if (bo.bs.uid == 0 || (bytes - bytes_buddy) != QQ_ONLINE_BUDDY_ENTRY_LEN) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
209 purple_debug_error("QQ", "uid=0 or entry complete len(%d) != %d",
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
210 (bytes - bytes_buddy), QQ_ONLINE_BUDDY_ENTRY_LEN);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
211 continue;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
212 } /* check if it is a valid entry */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
213
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
214 if (bo.bs.uid == qd->uid) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
215 purple_debug_warning("QQ", "I am in online list %d\n", bo.bs.uid);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
216 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
217
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
218 /* update buddy information */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
219 purple_name = uid_to_purple_name(bo.bs.uid);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
220 if (purple_name == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
221 purple_debug_error("QQ",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
222 "Got an online buddy %d, but not find purple name\n", bo.bs.uid);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
223 continue;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
224 }
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
225 b = purple_find_buddy(purple_connection_get_account(gc), purple_name);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
226 g_free(purple_name);
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
227
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
228 q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
229 if (q_bud == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
230 purple_debug_error("QQ",
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
231 "Got an online buddy %d, but not in my buddy list\n", bo.bs.uid);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
232 continue;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
233 }
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
234 /* we find one and update qq_buddy */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
235 /*
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
236 if(0 != fe->s->client_tag)
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24340
diff changeset
237 q_bud->client_tag = fe->s->client_tag;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
238 */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
239 q_bud->ip.s_addr = bo.bs.ip.s_addr;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
240 q_bud->port = bo.bs.port;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
241 q_bud->status = bo.bs.status;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
242 q_bud->ext_flag = bo.ext_flag;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
243 q_bud->comm_flag = bo.comm_flag;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
244 qq_update_buddy_contact(gc, q_bud);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
245 count++;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
246 }
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
247
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
248 if(bytes > data_len) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
249 purple_debug_error("QQ",
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
250 "qq_process_get_buddies_online_reply: Dangerous error! maybe protocol changed, notify developers!\n");
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
251 }
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
252
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
253 purple_debug_info("QQ", "Received %d online buddies, nextposition=%u\n",
23212
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
254 count, (guint) position);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
255 return position;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
256 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
257
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
258
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
259 /* process reply for get_buddies_list */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
260 guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleConnection *gc)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
261 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
262 qq_data *qd;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
263 qq_buddy *q_bud;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
264 gint bytes_expected, count;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
265 gint bytes, buddy_bytes;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
266 guint16 position, unknown;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
267 guint8 pascal_len;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
268 gchar *name;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15541
diff changeset
269 PurpleBuddy *b;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
270
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
271 g_return_val_if_fail(data != NULL && data_len != 0, -1);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
272
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
273 qd = (qq_data *) gc->proto_data;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
274
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
275 if (data_len <= 2) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
276 purple_debug_error("QQ", "empty buddies list");
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
277 return -1;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
278 }
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
279 /* qq_show_packet("QQ get buddies list", data, data_len); */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
280 bytes = 0;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
281 bytes += qq_get16(&position, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
282 /* the following data is buddy list in this packet */
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
283 count = 0;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
284 while (bytes < data_len) {
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
285 q_bud = g_new0(qq_buddy, 1);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
286 /* set flag */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
287 buddy_bytes = bytes;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
288 /* 000-003: uid */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
289 bytes += qq_get32(&q_bud->uid, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
290 /* 004-005: icon index (1-255) */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
291 bytes += qq_get16(&q_bud->face, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
292 /* 006-006: age */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
293 bytes += qq_get8(&q_bud->age, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
294 /* 007-007: gender */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
295 bytes += qq_get8(&q_bud->gender, data + bytes);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
296
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
297 pascal_len = convert_as_pascal_string(data + bytes, &q_bud->nickname, QQ_CHARSET_DEFAULT);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
298 bytes += pascal_len;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
299 qq_filter_str(q_bud->nickname);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
300
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
301 /* Fixme: merge following as 32bit flag */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
302 bytes += qq_get16(&unknown, data + bytes);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
303 bytes += qq_get8(&q_bud->ext_flag, data + bytes);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
304 bytes += qq_get8(&q_bud->comm_flag, data + bytes);
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
305
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
306 if (qd->client_version >= 2007) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
307 bytes += 4; /* skip 4 bytes */
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
308 bytes_expected = 16 + pascal_len;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
309 } else {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
310 bytes_expected = 12 + pascal_len;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
311 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
312
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
313
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
314 if (q_bud->uid == 0 || (bytes - buddy_bytes) != bytes_expected) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
315 purple_debug_info("QQ",
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
316 "Buddy entry, expect %d bytes, read %d bytes\n", bytes_expected, bytes - buddy_bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
317 g_free(q_bud->nickname);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
318 g_free(q_bud);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
319 continue;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
320 } else {
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
321 count++;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
322 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
323
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
324 #if 1
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
325 purple_debug_info("QQ", "buddy [%09d]: ext_flag=0x%02x, comm_flag=0x%02x, nick=%s\n",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
326 q_bud->uid, q_bud->ext_flag, q_bud->comm_flag, q_bud->nickname);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
327 #endif
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
328
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
329 name = uid_to_purple_name(q_bud->uid);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
330 b = purple_find_buddy(gc->account, name);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
331 g_free(name);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
332
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
333 if (b == NULL) {
24337
09fc304dae73 2008.09.19 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
334 b = qq_create_buddy(gc, q_bud->uid, TRUE, FALSE);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
335 }
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
336
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
337 b->proto_data = q_bud;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
338 qd->buddies = g_list_append(qd->buddies, q_bud);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
339 qq_update_buddy_contact(gc, q_bud);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
340 }
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
341
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
342 if(bytes > data_len) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
343 purple_debug_error("QQ",
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
344 "qq_process_get_buddies_list_reply: Dangerous error! maybe protocol changed, notify developers!");
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
345 }
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
346
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
347 purple_debug_info("QQ", "Received %d buddies, nextposition=%u\n",
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
348 count, (guint) position);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
349 return position;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
350 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
351
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
352 guint32 qq_process_get_buddies_and_rooms(guint8 *data, gint data_len, PurpleConnection *gc)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
353 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
354 qq_data *qd;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
355 gint i, j;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
356 gint bytes;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
357 guint8 sub_cmd, reply_code;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
358 guint32 unknown, position;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
359 guint32 uid;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
360 guint8 type, groupid;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
361 qq_group *group;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
362
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
363 g_return_val_if_fail(data != NULL && data_len != 0, -1);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
364
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
365 qd = (qq_data *) gc->proto_data;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
366
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
367 bytes = 0;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
368 bytes += qq_get8(&sub_cmd, data + bytes);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
369 g_return_val_if_fail(sub_cmd == 0x01, -1);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
370
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
371 bytes += qq_get8(&reply_code, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
372 if(0 != reply_code) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
373 purple_debug_warning("QQ", "qq_process_get_buddies_and_rooms, %d", reply_code);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
374 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
375
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
376 bytes += qq_get32(&unknown, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
377 bytes += qq_get32(&position, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
378 /* the following data is all list in this packet */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
379 i = 0;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
380 j = 0;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
381 while (bytes < data_len) {
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
382 /* 00-03: uid */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
383 bytes += qq_get32(&uid, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
384 /* 04: type 0x1:buddy 0x4:Qun */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
385 bytes += qq_get8(&type, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
386 /* 05: groupid*4 */ /* seems to always be 0 */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
387 bytes += qq_get8(&groupid, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
388 /*
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
389 purple_debug_info("QQ", "groupid: %i\n", groupid);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
390 groupid >>= 2;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
391 */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
392 if (uid == 0 || (type != 0x1 && type != 0x4)) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
393 purple_debug_info("QQ", "Buddy entry, uid=%d, type=%d", uid, type);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
394 continue;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
395 }
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
396 if(0x1 == type) { /* a buddy */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
397 /* don't do anything but count - buddies are handled by
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
398 * qq_request_get_buddies_list */
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
399 ++i;
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
400 } else { /* a group */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
401 group = qq_room_search_id(gc, uid);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
402 if(group == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
403 purple_debug_info("QQ",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
404 "Not find room id %d in qq_process_get_buddies_and_rooms\n", uid);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
405 qq_set_pending_id(&qd->adding_groups_from_server, uid, TRUE);
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
406 //group = g_newa(qq_group, 1);
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
407 //group->id = uid;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
408 qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, uid, NULL, 0,
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
409 0, 0);
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
410 } else {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
411 group->my_role = QQ_ROOM_ROLE_YES;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
412 qq_group_refresh(gc, group);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
413 }
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
414 ++j;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
415 }
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
416 }
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
417
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
418 if(bytes > data_len) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
419 purple_debug_error("QQ",
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
420 "qq_process_get_buddies_and_rooms: Dangerous error! maybe protocol changed, notify developers!");
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
421 }
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 22685
diff changeset
422
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
423 purple_debug_info("QQ", "Received %d buddies and %d groups, nextposition=%u\n", i, j, (guint) position);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
424 return position;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
425 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
426
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
427 #define QQ_MISC_STATUS_HAVING_VIIDEO 0x00000001
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
428 #define QQ_CHANGE_ONLINE_STATUS_REPLY_OK 0x30 /* ASCII value of "0" */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
429
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
430 /* TODO: figure out what's going on with the IP region. Sometimes I get valid IP addresses,
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
431 * but the port number's weird, other times I get 0s. I get these simultaneously on the same buddy,
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
432 * using different accounts to get info. */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
433
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
434 /* check if status means online or offline */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
435 gboolean is_online(guint8 status)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
436 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
437 switch(status) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
438 case QQ_BUDDY_ONLINE_NORMAL:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
439 case QQ_BUDDY_ONLINE_AWAY:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
440 case QQ_BUDDY_ONLINE_INVISIBLE:
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
441 case QQ_BUDDY_ONLINE_BUSY:
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
442 return TRUE;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
443 case QQ_BUDDY_CHANGE_TO_OFFLINE:
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
444 return FALSE;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
445 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
446 return FALSE;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
447 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
448
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
449 /* Help calculate the correct icon index to tell the server. */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
450 gint get_icon_offset(PurpleConnection *gc)
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
451 {
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
452 PurpleAccount *account;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
453 PurplePresence *presence;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
454
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
455 account = purple_connection_get_account(gc);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
456 presence = purple_account_get_presence(account);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
457
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
458 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
459 return 2;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
460 } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
461 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
462 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
463 return 1;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
464 } else {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
465 return 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
466 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
467 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
468
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
469 /* send a packet to change my online status */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
470 void qq_request_change_status(PurpleConnection *gc, gint update_class)
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
471 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
472 qq_data *qd;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
473 guint8 raw_data[16] = {0};
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
474 gint bytes = 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
475 guint8 away_cmd;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
476 guint32 misc_status;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
477 gboolean fake_video;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
478 PurpleAccount *account;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
479 PurplePresence *presence;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
480
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
481 account = purple_connection_get_account(gc);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
482 presence = purple_account_get_presence(account);
23212
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
483
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
484 qd = (qq_data *) gc->proto_data;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
485 if (!qd->is_login)
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
486 return;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
487
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
488 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
489 away_cmd = QQ_BUDDY_ONLINE_INVISIBLE;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
490 } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE))
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
491 {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
492 if (qd->client_version >= 2007) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
493 away_cmd = QQ_BUDDY_ONLINE_BUSY;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
494 } else {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
495 away_cmd = QQ_BUDDY_ONLINE_INVISIBLE;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
496 }
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
497 } else if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_AWAY)
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
498 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_EXTENDED_AWAY)
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
499 || purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_UNAVAILABLE)) {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
500 away_cmd = QQ_BUDDY_ONLINE_AWAY;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
501 } else {
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
502 away_cmd = QQ_BUDDY_ONLINE_NORMAL;
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
503 }
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
504
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
505 misc_status = 0x00000000;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
506 fake_video = purple_prefs_get_bool("/plugins/prpl/qq/show_fake_video");
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
507 if (fake_video)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
508 misc_status |= QQ_MISC_STATUS_HAVING_VIIDEO;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
509
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
510 if (qd->client_version >= 2007) {
24343
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
511 bytes = 0;
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
512 bytes += qq_put8(raw_data + bytes, away_cmd);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
513 /* status version */
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
514 bytes += qq_put16(raw_data + bytes, 0);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
515 bytes += qq_put16(raw_data + bytes, 0);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
516 bytes += qq_put32(raw_data + bytes, misc_status);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
517 /* Fixme: custom status message, now is empty */
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
518 bytes += qq_put16(raw_data + bytes, 0);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
519 } else {
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
520 bytes = 0;
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
521 bytes += qq_put8(raw_data + bytes, away_cmd);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
522 bytes += qq_put32(raw_data + bytes, misc_status);
9c695a1f475b 2008.09.28 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24341
diff changeset
523 }
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
524 qq_send_cmd_mess(gc, QQ_CMD_CHANGE_STATUS, raw_data, bytes, update_class, 0);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
525 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
526
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
527 /* parse the reply packet for change_status */
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
528 void qq_process_change_status_reply(guint8 *data, gint data_len, PurpleConnection *gc)
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
529 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
530 qq_data *qd;
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
531 gint bytes;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
532 guint8 reply;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
533 PurpleBuddy *b;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
534 qq_buddy *q_bud;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
535 gchar *name;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
536
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
537 g_return_if_fail(data != NULL && data_len != 0);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
538
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
539 qd = (qq_data *) gc->proto_data;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
540
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
541 bytes = 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
542 bytes = qq_get8(&reply, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
543 if (reply != QQ_CHANGE_ONLINE_STATUS_REPLY_OK) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
544 purple_debug_warning("QQ", "Change status fail 0x%02X\n", reply);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
545 return;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
546 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
547
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
548 /* purple_debug_info("QQ", "Change status OK\n"); */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
549 name = uid_to_purple_name(qd->uid);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
550 b = purple_find_buddy(gc->account, name);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
551 g_free(name);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
552 q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
553 if (q_bud != NULL) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
554 qq_update_buddy_contact(gc, q_bud);
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
555 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
556 }
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
557
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
558 /* it is a server message indicating that one of my buddies has changed its status */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
559 void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnection *gc)
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
560 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
561 qq_data *qd;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
562 gint bytes;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
563 guint32 my_uid;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
564 PurpleBuddy *b;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
565 qq_buddy *q_bud;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
566 qq_buddy_status bs;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
567 gchar *name;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
568
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
569 g_return_if_fail(data != NULL && data_len != 0);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
570
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
571 qd = (qq_data *) gc->proto_data;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
572
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
573 if (data_len < 35) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
574 purple_debug_error("QQ", "[buddy status change] only %d, need 35 bytes\n", data_len);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
575 return;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
576 }
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
577
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
578 memset(&bs, 0, sizeof(bs));
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
579 bytes = 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
580 /* 000-030: qq_buddy_status */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
581 bytes += get_buddy_status(&bs, data + bytes);
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
582 /* 031-034: Unknow, maybe my uid */
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
583 /* This has a value of 0 when we've changed our status to
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
584 * QQ_BUDDY_ONLINE_INVISIBLE */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
585 bytes += qq_get32(&my_uid, data + bytes);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
586
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
587 name = uid_to_purple_name(bs.uid);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
588 b = purple_find_buddy(gc->account, name);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
589 g_free(name);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
590 q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
591 if (q_bud == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
592 purple_debug_warning("QQ", "Get status of unknown buddy %d\n", bs.uid);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
593 return;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
594 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
595
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
596 if(bs.ip.s_addr != 0) {
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
597 q_bud->ip.s_addr = bs.ip.s_addr;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
598 q_bud->port = bs.port;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
599 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
600 q_bud->status =bs.status;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
601
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
602 if (q_bud->status == QQ_BUDDY_ONLINE_NORMAL && q_bud->level <= 0) {
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
603 qq_request_get_level(gc, q_bud->uid);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
604 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
605 qq_update_buddy_contact(gc, q_bud);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
606 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
607
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
608 /*TODO: maybe this should be qq_update_buddy_status() ?*/
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
609 void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
610 {
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
611 gchar *purple_name;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
612 PurpleBuddy *bud;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
613 gchar *status_id;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
614
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
615 g_return_if_fail(q_bud != NULL);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
616
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
617 purple_name = uid_to_purple_name(q_bud->uid);
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
618 if (purple_name == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
619 purple_debug_error("QQ", "Not find purple name: %d\n", q_bud->uid);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
620 return;
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
621 }
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
622
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
623 bud = purple_find_buddy(gc->account, purple_name);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
624 if (bud == NULL) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
625 purple_debug_error("QQ", "Not find buddy: %d\n", q_bud->uid);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
626 g_free(purple_name);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
627 return;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
628 }
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
629
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
630 purple_blist_server_alias_buddy(bud, q_bud->nickname); /* server */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
631 q_bud->last_update = time(NULL);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
632
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
633 /* purple supports signon and idle time
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
634 * but it is not much use for QQ, I do not use them */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
635 /* serv_got_update(gc, name, online, 0, q_bud->signon, q_bud->idle, bud->uc); */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
636 status_id = "available";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
637 switch(q_bud->status) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
638 case QQ_BUDDY_OFFLINE:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
639 status_id = "offline";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
640 break;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
641 case QQ_BUDDY_ONLINE_NORMAL:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
642 status_id = "available";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
643 break;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
644 case QQ_BUDDY_CHANGE_TO_OFFLINE:
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
645 status_id = "offline";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
646 break;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
647 case QQ_BUDDY_ONLINE_AWAY:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
648 status_id = "away";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
649 break;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
650 case QQ_BUDDY_ONLINE_INVISIBLE:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
651 status_id = "invisible";
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
652 break;
24346
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
653 case QQ_BUDDY_ONLINE_BUSY:
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
654 status_id = "busy";
98c009d1f4e0 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24343
diff changeset
655 break;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
656 default:
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
657 status_id = "invisible";
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
658 purple_debug_error("QQ", "unknown status: %x\n", q_bud->status);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
659 break;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
660 }
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
661 purple_debug_info("QQ", "buddy %d %s\n", q_bud->uid, status_id);
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
662 purple_prpl_got_user_status(gc->account, purple_name, status_id, NULL);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
663
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
664 if (q_bud->comm_flag & QQ_COMM_FLAG_MOBILE && q_bud->status != QQ_BUDDY_OFFLINE)
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
665 purple_prpl_got_user_status(gc->account, purple_name, "mobile", NULL);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
666 else
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
667 purple_prpl_got_user_status_deactive(gc->account, purple_name, "mobile");
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
668
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
669 g_free(purple_name);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
670 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
671
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
672 /* refresh all buddies online/offline,
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
673 * after receiving reply for get_buddies_online packet */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
674 void qq_refresh_all_buddy_status(PurpleConnection *gc)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
675 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
676 time_t now;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
677 GList *list;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
678 qq_data *qd;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
679 qq_buddy *q_bud;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
680
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
681 qd = (qq_data *) (gc->proto_data);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
682 now = time(NULL);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
683 list = qd->buddies;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
684
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
685 while (list != NULL) {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
686 q_bud = (qq_buddy *) list->data;
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
687 if (q_bud != NULL && now > q_bud->last_update + QQ_UPDATE_ONLINE_INTERVAL
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
688 && q_bud->status != QQ_BUDDY_ONLINE_INVISIBLE) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
689 q_bud->status = QQ_BUDDY_CHANGE_TO_OFFLINE;
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
690 qq_update_buddy_contact(gc, q_bud);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
691 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
692 list = list->next;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
693 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
694 }

mercurial