Mercurial > pidgin
comparison libpurple/protocols/qq/group_info.c @ 23052:ebad75b719f5
Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
* 20080629-fixed-qun-processing
Merged patches from moo, ccpaging and coly
Tickets:
References #6199
Sat Jun 28 13:25:40 CST 2008 csyfek@gmail.com
* 20080628-get-friends
Patches from moo and ccpaging.
Tickets:
Fixes #4956.
Fixes #2998.
author | SHiNE CsyFeK <csyfek@gmail.com> |
---|---|
date | Sun, 29 Jun 2008 14:24:21 +0000 |
parents | 9a5d140400f1 |
children | bdb38a8bf721 |
comparison
equal
deleted
inserted
replaced
23051:55f986ccbb6a | 23052:ebad75b719f5 |
---|---|
139 } | 139 } |
140 | 140 |
141 qq_send_group_cmd(gc, group, raw_data, bytes); | 141 qq_send_group_cmd(gc, group, raw_data, bytes); |
142 } | 142 } |
143 | 143 |
144 /** | |
145 * @brief 处理群信息.当前群信息的处理还不完善,由于版本的不同导致协议的解读有差异. | |
146 */ | |
144 void qq_process_group_cmd_get_group_info(guint8 *data, gint len, PurpleConnection *gc) | 147 void qq_process_group_cmd_get_group_info(guint8 *data, gint len, PurpleConnection *gc) |
145 { | 148 { |
146 qq_group *group; | 149 qq_group *group; |
147 qq_buddy *member; | 150 qq_buddy *member; |
148 qq_data *qd; | 151 qq_data *qd; |
161 bytes = 0; | 164 bytes = 0; |
162 bytes += qq_get32(&(internal_group_id), data + bytes); | 165 bytes += qq_get32(&(internal_group_id), data + bytes); |
163 g_return_if_fail(internal_group_id > 0); | 166 g_return_if_fail(internal_group_id > 0); |
164 | 167 |
165 bytes += qq_get32(&(external_group_id), data + bytes); | 168 bytes += qq_get32(&(external_group_id), data + bytes); |
166 g_return_if_fail(internal_group_id > 0); | 169 g_return_if_fail(external_group_id > 0); |
167 | 170 |
168 pending_id = qq_get_pending_id(qd->adding_groups_from_server, internal_group_id); | 171 pending_id = qq_get_pending_id(qd->adding_groups_from_server, internal_group_id); |
169 if (pending_id != NULL) { | 172 if (pending_id != NULL) { |
170 qq_set_pending_id(&qd->adding_groups_from_server, internal_group_id, FALSE); | 173 qq_set_pending_id(&qd->adding_groups_from_server, internal_group_id, FALSE); |
171 qq_group_create_internal_record(gc, internal_group_id, external_group_id, NULL); | 174 qq_group_create_internal_record(gc, internal_group_id, external_group_id, NULL); |
181 bytes += qq_get32(&unknown4, data + bytes); /* oldCategory */ | 184 bytes += qq_get32(&unknown4, data + bytes); /* oldCategory */ |
182 bytes += qq_get16(&unknown, data + bytes); | 185 bytes += qq_get16(&unknown, data + bytes); |
183 bytes += qq_get32(&(group->group_category), data + bytes); | 186 bytes += qq_get32(&(group->group_category), data + bytes); |
184 bytes += qq_get16(&max_members, data + bytes); | 187 bytes += qq_get16(&max_members, data + bytes); |
185 bytes += qq_get8(&unknown1, data + bytes); | 188 bytes += qq_get8(&unknown1, data + bytes); |
186 bytes += qq_get32(&(unknown4), data + bytes); /* versionID */ | 189 /* XXX |
187 | 190 * the following, while Eva: |
191 * 4(unk), 4(verID), 1(nameLen), nameLen(qunNameContent), 1(0x00), | |
192 * 2(qunNoticeLen), qunNoticeLen(qunNoticeContent, 1(qunDescLen), | |
193 * qunDestLen(qunDestcontent)) */ | |
194 bytes += qq_get8(&unknown1, data + bytes); | |
195 purple_debug(PURPLE_DEBUG_INFO, "QQ", "type=%u creatorid=%u category=%u\n", | |
196 group->group_type, group->creator_uid, group->group_category); | |
197 purple_debug(PURPLE_DEBUG_INFO, "QQ", "maxmembers=%u", max_members); | |
198 | |
188 /* strlen + <str content> */ | 199 /* strlen + <str content> */ |
189 bytes += convert_as_pascal_string(data + bytes, &(group->group_name_utf8), QQ_CHARSET_DEFAULT); | 200 bytes += convert_as_pascal_string(data + bytes, &(group->group_name_utf8), QQ_CHARSET_DEFAULT); |
201 purple_debug(PURPLE_DEBUG_INFO, "QQ", "group \"%s\"\n", group->group_name_utf8); | |
190 bytes += qq_get16(&unknown, data + bytes); /* 0x0000 */ | 202 bytes += qq_get16(&unknown, data + bytes); /* 0x0000 */ |
191 bytes += convert_as_pascal_string(data + bytes, &(group->notice_utf8), QQ_CHARSET_DEFAULT); | 203 bytes += convert_as_pascal_string(data + bytes, &(group->notice_utf8), QQ_CHARSET_DEFAULT); |
204 purple_debug(PURPLE_DEBUG_INFO, "QQ", "notice \"%s\"\n", group->notice_utf8); | |
192 bytes += convert_as_pascal_string(data + bytes, &(group->group_desc_utf8), QQ_CHARSET_DEFAULT); | 205 bytes += convert_as_pascal_string(data + bytes, &(group->group_desc_utf8), QQ_CHARSET_DEFAULT); |
206 purple_debug(PURPLE_DEBUG_INFO, "QQ", "group_desc \"%s\"\n", group->group_desc_utf8); | |
193 | 207 |
194 num = 0; | 208 num = 0; |
195 /* now comes the member list separated by 0x00 */ | 209 /* now comes the member list separated by 0x00 */ |
196 while (bytes < len) { | 210 while (bytes < len) { |
197 bytes += qq_get32(&member_uid, data + bytes); | 211 bytes += qq_get32(&member_uid, data + bytes); |