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);