Mercurial > pidgin
annotate libgaim/protocols/qq/group_search.c @ 14629:6b8bc59414f0
[gaim-migrate @ 17375]
Get rid of these useless checks.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Huetsch <markhuetsch> |
---|---|
date | Tue, 26 Sep 2006 22:54:24 +0000 |
parents | e548832f0e82 |
children | c039c920e11c |
rev | line source |
---|---|
14192 | 1 /** |
2 * The QQ2003C protocol plugin | |
3 * | |
4 * for gaim | |
5 * | |
6 * Copyright (C) 2004 Puzzlebird | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify | |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 */ | |
22 | |
23 #include "debug.h" | |
24 | |
25 #include "char_conv.h" | |
14404 | 26 #include "group_find.h" |
14192 | 27 #include "group_free.h" |
14404 | 28 #include "group_internal.h" |
29 #include "group_join.h" | |
14192 | 30 #include "group_network.h" |
31 #include "group_search.h" | |
32 #include "utils.h" | |
33 | |
34 enum { | |
35 QQ_GROUP_SEARCH_TYPE_BY_ID = 0x01, | |
36 QQ_GROUP_SEARCH_TYPE_DEMO = 0x02 | |
37 }; | |
38 | |
39 /* send packet to search for qq_group */ | |
40 void qq_send_cmd_group_search_group(GaimConnection *gc, guint32 external_group_id) | |
41 { | |
42 guint8 *raw_data, *cursor, type; | |
43 gint bytes, data_len; | |
44 | |
45 data_len = 6; | |
46 raw_data = g_newa(guint8, data_len); | |
47 cursor = raw_data; | |
48 type = (external_group_id == 0x00000000) ? QQ_GROUP_SEARCH_TYPE_DEMO : QQ_GROUP_SEARCH_TYPE_BY_ID; | |
49 | |
50 bytes = 0; | |
51 bytes += create_packet_b(raw_data, &cursor, QQ_GROUP_CMD_SEARCH_GROUP); | |
52 bytes += create_packet_b(raw_data, &cursor, type); | |
53 bytes += create_packet_dw(raw_data, &cursor, external_group_id); | |
54 | |
55 if (bytes != data_len) | |
56 gaim_debug(GAIM_DEBUG_ERROR, "QQ", | |
57 "Fail create packet for %s\n", qq_group_cmd_get_desc(QQ_GROUP_CMD_SEARCH_GROUP)); | |
58 else | |
59 qq_send_group_cmd(gc, NULL, raw_data, data_len); | |
60 } | |
61 | |
14404 | 62 static void _qq_setup_roomlist(qq_data *qd, qq_group *group) |
63 { | |
64 GaimRoomlistRoom *room; | |
14519 | 65 gchar field[11]; |
14404 | 66 |
67 room = gaim_roomlist_room_new(GAIM_ROOMLIST_ROOMTYPE_ROOM, group->group_name_utf8, NULL); | |
14519 | 68 g_snprintf(field, sizeof(field), "%d", group->external_group_id); |
14404 | 69 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
14519 | 70 g_snprintf(field, sizeof(field), "%d", group->creator_uid); |
14404 | 71 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
72 gaim_roomlist_room_add_field(qd->roomlist, room, group->group_desc_utf8); | |
14519 | 73 g_snprintf(field, sizeof(field), "%d", group->internal_group_id); |
14404 | 74 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
14519 | 75 g_snprintf(field, sizeof(field), "%d", group->group_type); |
14404 | 76 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
14519 | 77 g_snprintf(field, sizeof(field), "%d", group->auth_type); |
14404 | 78 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
14519 | 79 g_snprintf(field, sizeof(field), "%d", group->group_category); |
14404 | 80 gaim_roomlist_room_add_field(qd->roomlist, room, field); |
81 gaim_roomlist_room_add_field(qd->roomlist, room, group->group_name_utf8); | |
82 gaim_roomlist_room_add(qd->roomlist, room); | |
83 | |
84 gaim_roomlist_set_in_progress(qd->roomlist, FALSE); | |
85 } | |
86 | |
14192 | 87 /* process group cmd reply "search group" */ |
88 void qq_process_group_cmd_search_group(guint8 *data, guint8 **cursor, gint len, GaimConnection *gc) | |
89 { | |
90 guint8 search_type; | |
91 guint16 unknown; | |
14492
a85299caf0c3
[gaim-migrate @ 17211]
Richard Laager <rlaager@wiktel.com>
parents:
14404
diff
changeset
|
92 gint bytes, pascal_len; |
14192 | 93 qq_data *qd; |
94 qq_group *group; | |
14404 | 95 GSList *pending_id; |
14192 | 96 |
97 g_return_if_fail(data != NULL && len > 0); | |
98 qd = (qq_data *) gc->proto_data; | |
99 | |
14243 | 100 read_packet_b(data, cursor, len, &search_type); |
14192 | 101 group = g_newa(qq_group, 1); |
102 | |
103 /* now it starts with group_info_entry */ | |
14404 | 104 bytes = 0; |
105 bytes += read_packet_dw(data, cursor, len, &(group->internal_group_id)); | |
106 bytes += read_packet_dw(data, cursor, len, &(group->external_group_id)); | |
107 bytes += read_packet_b(data, cursor, len, &(group->group_type)); | |
108 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
109 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
110 bytes += read_packet_dw(data, cursor, len, &(group->creator_uid)); | |
111 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
112 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
113 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
114 bytes += read_packet_dw(data, cursor, len, &(group->group_category)); | |
115 pascal_len = convert_as_pascal_string(*cursor, &(group->group_name_utf8), QQ_CHARSET_DEFAULT); | |
116 bytes += pascal_len; | |
117 *cursor += pascal_len; | |
118 bytes += read_packet_w(data, cursor, len, &(unknown)); | |
119 bytes += read_packet_b(data, cursor, len, &(group->auth_type)); | |
120 pascal_len = convert_as_pascal_string(*cursor, &(group->group_desc_utf8), QQ_CHARSET_DEFAULT); | |
121 bytes += pascal_len; | |
122 *cursor += pascal_len; | |
123 /* end of one qq_group */ | |
124 if(*cursor != (data + len)) { | |
14192 | 125 gaim_debug(GAIM_DEBUG_ERROR, "QQ", |
126 "group_cmd_search_group: Dangerous error! maybe protocol changed, notify developers!"); | |
127 } | |
14404 | 128 |
129 pending_id = qq_get_pending_id(qd->joining_groups, group->external_group_id); | |
130 if (pending_id != NULL) { | |
131 qq_set_pending_id(&qd->joining_groups, group->external_group_id, FALSE); | |
132 if (qq_group_find_by_id(gc, group->internal_group_id, QQ_INTERNAL_ID) == NULL) | |
133 qq_group_create_internal_record(gc, | |
134 group->internal_group_id, group->external_group_id, group->group_name_utf8); | |
135 qq_send_cmd_group_join_group(gc, group); | |
136 } else { | |
137 _qq_setup_roomlist(qd, group); | |
138 } | |
14192 | 139 } |