annotate libpurple/protocols/qq/group_im.c @ 31836:8d6630912021

Add two hash tables to the oscar code that deals with your server stored buddy list. One hash table is indexed by a combination of group id and buddy id. The other hash table is indexed by a combination of item type and item name. This should reduce the number of times we iterate through a linked list by A LOT. This is a modified version of Oliver's patch from #4816. Fixes #4816.
author Mark Doliner <mark@kingant.net>
date Sun, 20 Mar 2011 20:20:52 +0000
parents 4deef745de87
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file group_im.c
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
4 * purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * source distribution.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18807
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24
18210
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 18141
diff changeset
25 #include "internal.h"
b8572b937c09 #include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents: 18141
diff changeset
26
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "conversation.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "prefs.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "request.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "util.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "char_conv.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #include "group_internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36 #include "group_info.h"
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
37 #include "group_join.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 #include "group_im.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 #include "group_opt.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 #include "im.h"
24134
bdfcfd71449c patch 20080922 from ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24115
diff changeset
41 #include "qq_define.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42 #include "packet_parse.h"
23695
5f454b975a99 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23638
diff changeset
43 #include "qq_network.h"
24115
bcfc98c7a55f merge of '546bf87105ac5b97c3962c083dfab015d37d9b05'
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24114
diff changeset
44 #include "qq_process.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 #include "utils.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
47 /* show group conversation window */
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
48 PurpleConversation *qq_room_conv_open(PurpleConnection *gc, qq_room_data *rmd)
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
49 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
50 PurpleConversation *conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
51 gchar *topic_utf8;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
52
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
53 g_return_val_if_fail(rmd != NULL, NULL);
27537
32d2caa6a777 Commit the QQ null chat room name crash on the *right* branch.
Paul Aurich <paul@darkrain42.org>
parents: 25232
diff changeset
54 g_return_val_if_fail(rmd->title_utf8, NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
55
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
56 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
57 rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
58 if (conv != NULL) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
59 /* show only one conversation per room */
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
60 return conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
61 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
62
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
63 serv_got_joined_chat(gc, rmd->id, rmd->title_utf8);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
64 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
65 if (conv != NULL) {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
66 if (rmd->notice_utf8 != NULL) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
67 topic_utf8 = g_strdup_printf("%u %s", rmd->ext_id, rmd->notice_utf8);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
68 } else {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
69 topic_utf8 = g_strdup_printf("%u", rmd->ext_id);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
70 }
24633
2df8b8f3c3f6 Clean debug info
Hu Yong <ccpaging@gmail.com>
parents: 24613
diff changeset
71 purple_debug_info("QQ", "Chat topic = %s\n", topic_utf8);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
72 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(conv), NULL, topic_utf8);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
73 g_free(topic_utf8);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
74
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
75 if (rmd->is_got_buddies)
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
76 qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, rmd->id);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
77 else
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
78 qq_update_room(gc, 0, rmd->id);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
79 return conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
80 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
81 return NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
82 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
83
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
84 /* refresh online member in group conversation window */
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
85 void qq_room_conv_set_onlines(PurpleConnection *gc, qq_room_data *rmd)
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
86 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
87 GList *names, *list, *flags;
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
88 qq_buddy_data *bd;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
89 gchar *member_name, *member_uid;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
90 PurpleConversation *conv;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
91 gint flag;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
92 gboolean is_find;
24154
237e5a94e11c 2008.10.08 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24149
diff changeset
93
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
94 g_return_if_fail(rmd != NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
95
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
96 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
97 rmd->title_utf8, purple_connection_get_account(gc));
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
98 if (conv == NULL) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
99 purple_debug_warning("QQ", "Conversation \"%s\" is not opened\n", rmd->title_utf8);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
100 return;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
101 }
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
102 g_return_if_fail(rmd->members != NULL);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
103
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
104 names = NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
105 flags = NULL;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
106
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
107 list = rmd->members;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
108 while (list != NULL) {
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
109 bd = (qq_buddy_data *) list->data;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
110
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
111 /* we need unique identifiers for everyone in the chat or else we'll
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
112 * run into problems with functions like get_cb_real_name from qq.c */
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
113 member_name = (bd->nickname != NULL && *(bd->nickname) != '\0') ?
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
114 g_strdup_printf("%s (%u)", bd->nickname, bd->uid) :
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
115 g_strdup_printf("(%u)", bd->uid);
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
116 member_uid = g_strdup_printf("(%u)", bd->uid);
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
117
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
118 flag = 0;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
119 /* TYPING to put online above OP and FOUNDER */
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
120 if (is_online(bd->status)) flag |= (PURPLE_CBFLAGS_TYPING | PURPLE_CBFLAGS_VOICE);
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
121 if(1 == (bd->role & 1)) flag |= PURPLE_CBFLAGS_OP;
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
122 if(bd->uid == rmd->creator_uid) flag |= PURPLE_CBFLAGS_FOUNDER;
24148
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
123
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
124 is_find = TRUE;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
125 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_name))
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
126 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
127 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv),
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
128 member_name,
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
129 flag);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
130 } else if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), member_uid))
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
131 {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
132 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(conv),
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
133 member_uid,
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
134 flag);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
135 purple_conv_chat_rename_user(PURPLE_CONV_CHAT(conv), member_uid, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
136 } else {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
137 is_find = FALSE;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
138 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
139 if (!is_find) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
140 /* always put it even offline */
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
141 names = g_list_append(names, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
142 flags = g_list_append(flags, GINT_TO_POINTER(flag));
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
143 } else {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
144 g_free(member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
145 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
146 g_free(member_uid);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
147 list = list->next;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
148 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
149
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
150 if (names != NULL && flags != NULL) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
151 purple_conv_chat_add_users(PURPLE_CONV_CHAT(conv), names, NULL, flags, FALSE);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
152 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
153
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
154 /* clean up names */
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
155 while (names != NULL) {
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
156 member_name = (gchar *) names->data;
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
157 names = g_list_remove(names, member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
158 g_free(member_name);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
159 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
160 g_list_free(flags);
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
161 }
1bdf7b602684 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24146
diff changeset
162
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
163 void qq_room_got_chat_in(PurpleConnection *gc,
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
164 guint32 room_id, UID uid_from, const gchar *msg, time_t in_time)
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
165 {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
166 PurpleConversation *conv;
25232
effbf24b39b1 2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24719
diff changeset
167 qq_data *qd;
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
168 qq_buddy_data *bd;
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
169 qq_room_data *rmd;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
170 gchar *from;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
171
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
172 g_return_if_fail(gc != NULL && room_id != 0);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
173 g_return_if_fail(msg != NULL);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
174
25232
effbf24b39b1 2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24719
diff changeset
175 qd = (qq_data *)gc->proto_data;
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
176 conv = purple_find_chat(gc, room_id);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
177 rmd = qq_room_data_find(gc, room_id);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
178 g_return_if_fail(rmd != NULL);
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
179
25232
effbf24b39b1 2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24719
diff changeset
180 purple_debug_info("QQ", "is_show_chat:%d\n", qd->is_show_chat);
effbf24b39b1 2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24719
diff changeset
181 if (NULL == conv && qd->is_show_chat) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
182 conv = qq_room_conv_open(gc, rmd);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
183 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
184
25232
effbf24b39b1 2009.02.08 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24719
diff changeset
185 if (NULL == conv) {
28212
73a30365c293 Add newline at end of debug messages.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 27537
diff changeset
186 purple_debug_info("QQ", "Conversion of %u is not open, missing from %d:/n%s/v\n",
24603
4afc4a1c36d8 Fixed double free
Hu Yong <ccpaging@gmail.com>
parents: 24162
diff changeset
187 room_id, uid_from, msg);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
188 return;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
189 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
190
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
191 if (uid_from != 0) {
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
192
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
193 bd = qq_room_buddy_find(rmd, uid_from);
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
194 if (bd == NULL || bd->nickname == NULL)
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
195 from = g_strdup_printf("%u", uid_from);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
196 else
24149
818ab62006f5 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24148
diff changeset
197 from = g_strdup(bd->nickname);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
198 } else {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
199 from = g_strdup("");
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
200 }
24157
1ee91ff0d5fe 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24155
diff changeset
201 serv_got_chat_in(gc, room_id, from, 0, msg, in_time);
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
202 g_free(from);
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
203 }
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
204
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
205 /* recv an IM from a group chat */
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
206 void qq_process_room_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 msg_type)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
207 {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
208 gchar *msg_smiley, *msg_fmt, *msg_utf8;
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
209 gint bytes, tail_len;
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
210 qq_data *qd;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
211 struct {
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
212 guint32 ext_id;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
213 guint8 type8;
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
214 UID member_uid;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
215 guint16 unknown;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
216 guint16 msg_seq;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
217 time_t send_time;
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
218 guint32 version;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
219 guint16 msg_len;
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
220 gchar *msg;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
221 } im_text;
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
222 guint32 temp_id;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
223 guint16 content_type;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
224 guint8 frag_count, frag_index;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
225 guint16 msg_id;
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
226 guint32 use_default_font;
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
227 qq_im_format *fmt = NULL;
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
228 qd = (qq_data *) gc->proto_data;
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
229
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
230 /* at least include im_text.msg_len */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
231 g_return_if_fail(data != NULL && data_len > 23);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
232
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
233 use_default_font = (qd->custom) & QQ_CUSTOM_USE_DEFAULT_FONT;
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
234
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
235 /* qq_show_packet("ROOM_IM", data, data_len); */
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
236 memset(&im_text, 0, sizeof(im_text));
24135
dbc7a9742f8d 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24134
diff changeset
237 bytes = 0;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
238 bytes += qq_get32(&(im_text.ext_id), data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
239 bytes += qq_get8(&(im_text.type8), data + bytes);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
240
24146
ce94189f15ad Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24145
diff changeset
241 if(QQ_MSG_TEMP_QUN_IM == msg_type) {
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
242 bytes += qq_get32(&temp_id, data + bytes);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
243 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
244
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
245 bytes += qq_get32(&(im_text.member_uid), bytes + data);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
246 bytes += qq_get16(&im_text.unknown, data + bytes); /* 0x0001? */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
247 bytes += qq_get16(&(im_text.msg_seq), data + bytes);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
248 bytes += qq_getime(&im_text.send_time, data + bytes);
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
249 bytes += qq_get32(&im_text.version, data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
250 bytes += qq_get16(&(im_text.msg_len), data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
251 purple_debug_info("QQ", "Room IM, ext id %u, seq %u, version 0x%04X, len %u\n",
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
252 im_text.ext_id, im_text.msg_seq, im_text.version, im_text.msg_len);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
253
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
254 if (im_text.msg_len != data_len - bytes) {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
255 purple_debug_warning("QQ", "Room IM length %d should be %d\n",
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
256 im_text.msg_len, data_len - bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
257 im_text.msg_len = data_len - bytes;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
258 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
260 g_return_if_fail(im_text.msg_len > 0 && bytes + im_text.msg_len <= data_len);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
261 if(msg_type != QQ_MSG_QUN_IM_UNKNOWN) {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
262 g_return_if_fail(im_text.msg_len >= 10);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
263
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
264 bytes += qq_get16(&content_type, data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
265 bytes += qq_get8(&frag_count, data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
266 bytes += qq_get8(&frag_index, data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
267 bytes += qq_get16(&msg_id, data + bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
268 bytes += 4; /* skip 0x(00 00 00 00) */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
269 purple_debug_info("QQ", "Room IM, content %d, frag %d-%d, msg id %u\n",
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
270 content_type, frag_count, frag_index, msg_id);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
271 im_text.msg_len -= 10;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
272 }
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
273 g_return_if_fail(im_text.msg_len > 0);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
274
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
275 /* qq_show_packet("Message", data + bytes, data_len - bytes); */
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
276 if (frag_count <= 1 || frag_count == frag_index + 1) {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
277 fmt = qq_im_fmt_new();
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
278 tail_len = qq_get_im_tail(fmt, data + bytes, data_len - bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
279 im_text.msg = g_strndup((gchar *)(data + bytes), data_len - tail_len);
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
280 } else {
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
281 im_text.msg = g_strndup((gchar *)(data + bytes), data_len - bytes);
24158
b6f09c1c79ce 2008.10.09 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24157
diff changeset
282 }
24159
9be95f0b9472 2008.10.10 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24158
diff changeset
283
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
284 /* group im_group has no flag to indicate whether it has font_attr or not */
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
285 msg_smiley = qq_emoticon_to_purple(im_text.msg);
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
286 if (fmt != NULL) {
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
287 purple_debug_info("QQ", "going to use_default_font\n");
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
288 if (QQ_CUSTOM_USE_DEFAULT_FONT == use_default_font) {
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
289 qq_im_fmt_reset_font(fmt);
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
290 purple_debug_info("QQ", "use_default_font set\n");
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
291 }
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
292 msg_fmt = qq_im_fmt_to_purple(fmt, msg_smiley);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
293 msg_utf8 = qq_to_utf8(msg_fmt, QQ_CHARSET_DEFAULT);
31191
4deef745de87 2010.01.23 - flos <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 30430
diff changeset
294 purple_debug_info("QQ", "passed!\n");
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
295 g_free(msg_fmt);
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
296 qq_im_fmt_free(fmt);
24140
619ac2303c46 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24135
diff changeset
297 } else {
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
298 msg_utf8 = qq_to_utf8(msg_smiley, QQ_CHARSET_DEFAULT);
24140
619ac2303c46 2009.10.02 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24135
diff changeset
299 }
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
300 g_free(msg_smiley);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
301
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
302 purple_debug_info("QQ", "Room (%u) IM from %u: %s\n",
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
303 im_text.ext_id, im_text.member_uid, msg_utf8);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
304 qq_room_got_chat_in(gc, id, im_text.member_uid, msg_utf8, im_text.send_time);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
305
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
306 g_free(msg_utf8);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
307 g_free(im_text.msg);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
308 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
309
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
310 /* send IM to a group */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
311 static void request_room_send_im(PurpleConnection *gc, guint32 room_id, qq_im_format *fmt, const gchar *msg)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
312 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
313 guint8 raw_data[MAX_PACKET_SIZE - 16];
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
314 gint bytes;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
315
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
316 g_return_if_fail(room_id != 0 && msg != NULL);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
317
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
318 bytes = 0;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
319 bytes += qq_put16(raw_data + bytes, 0);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
320 bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg));
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
321 bytes += qq_put_im_tail(raw_data + bytes, fmt);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
322 /* reset first two bytes */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
323 qq_put16(raw_data, bytes - 2);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
324
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
325 qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_IM, room_id, raw_data, bytes);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
326 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
327
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
328 /* this is the ACK */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
329 void qq_process_room_send_im(PurpleConnection *gc, guint8 *data, gint len)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
330 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
331 /* return should be the internal group id
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
332 * but we have nothing to do with it */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
333 return;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
334 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
336 void qq_process_room_send_im_ex(PurpleConnection *gc, guint8 *data, gint len)
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
337 {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
338 /* return should be the internal group id
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
339 * but we have nothing to do with it */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
340 return;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
341 }
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
342
24657
59aae7636111 #if 0 out an unused function to suppress a compiler warning.
Richard Laager <rlaager@wiktel.com>
parents: 24651
diff changeset
343 #if 0
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
344 static void request_room_send_im_ex(PurpleConnection *gc, guint32 room_id,
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
345 qq_im_format *fmt, gchar *msg, guint16 msg_id, guint8 frag_count, guint8 frag_index)
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
346 {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
347 guint8 raw_data[MAX_PACKET_SIZE - 16];
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
348 gint bytes;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
349
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
350
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
351 g_return_if_fail(room_id != 0 && msg != NULL);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
352
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
353 bytes = 0;
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
354 bytes += qq_put16(raw_data + bytes, 0); /* packet len */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
355 /* type 0x0001, text only; 0x0002, with custom emoticon */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
356 bytes += qq_put16(raw_data + bytes, 0x0001);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
357 bytes += qq_put8(raw_data + bytes, frag_count);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
358 bytes += qq_put8(raw_data + bytes, frag_index);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
359 bytes += qq_put16(raw_data + bytes, msg_id);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
360 bytes += qq_put32(raw_data + bytes, 0); /* unknow 4 bytes */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
361 bytes += qq_putdata(raw_data + bytes, (guint8 *)msg, strlen(msg));
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
362 if (frag_count == frag_index + 1) {
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
363 bytes += qq_put8(raw_data + bytes, 0x20); /* add extra SPACE */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
364 bytes += qq_put_im_tail(raw_data + bytes, fmt);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
365 }
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
366
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
367 /* reset first two bytes as length */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
368 qq_put16(raw_data, bytes - 2);
24651
2df1d0449ba6 Fix bug in send IM
Hu Yong <ccpaging@gmail.com>
parents: 24640
diff changeset
369
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
370 /*qq_show_packet("QQ_ROOM_CMD_SEND_IM_EX", raw_data, bytes); */
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
371 qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_IM_EX, room_id, raw_data, bytes);
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
372 }
24657
59aae7636111 #if 0 out an unused function to suppress a compiler warning.
Richard Laager <rlaager@wiktel.com>
parents: 24651
diff changeset
373 #endif
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
374
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
375 /* send a chat msg to a QQ Qun
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
376 * called by purple */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
377 int qq_chat_send(PurpleConnection *gc, int id, const char *what, PurpleMessageFlags flags)
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
378 {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
379 qq_data *qd;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
380 qq_im_format *fmt;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
381 gchar *msg_stripped, *tmp;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
382 GSList *segments, *it;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
383 gint msg_len;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
384 const gchar *start_invalid;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
385 gboolean is_smiley_none;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
386
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
387 g_return_val_if_fail(NULL != gc && NULL != gc->proto_data, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
388 g_return_val_if_fail(id != 0 && what != NULL, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
389
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
390 qd = (qq_data *) gc->proto_data;
24719
5ec72dbdd28e Fix warnings where size_t/gsize was used for printf with the wrong format
Paul Aurich <paul@darkrain42.org>
parents: 24657
diff changeset
391 purple_debug_info("QQ", "Send chat IM to %u, len %" G_GSIZE_FORMAT ":\n%s\n", id, strlen(what), what);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
392
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
393 /* qq_show_packet("chat IM UTF8", (guint8 *)what, strlen(what)); */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
394
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
395 msg_stripped = purple_markup_strip_html(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
396 g_return_val_if_fail(msg_stripped != NULL, -1);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
397 /* qq_show_packet("IM Stripped", (guint8 *)what, strlen(what)); */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
398
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
399 /* Check and valid utf8 string */
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
400 msg_len = strlen(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
401 if (!g_utf8_validate(msg_stripped, msg_len, &start_invalid)) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
402 if (start_invalid > msg_stripped) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
403 tmp = g_strndup(msg_stripped, start_invalid - msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
404 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
405 msg_stripped = g_strconcat(tmp, _("(Invalid UTF-8 string)"), NULL);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
406 g_free(tmp);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
407 } else {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
408 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
409 msg_stripped = g_strdup(_("(Invalid UTF-8 string)"));
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
410 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
411 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
412
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
413 is_smiley_none = qq_im_smiley_none(what);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
414 segments = qq_im_get_segments(msg_stripped, is_smiley_none);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
415 g_free(msg_stripped);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
416
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
417 if (segments == NULL) {
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
418 return -1;
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
419 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
420
24640
2cfdcaf6b5f3 Support long qun im
Hu Yong <ccpaging@gmail.com>
parents: 24633
diff changeset
421 qd->send_im_id++;
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
422 fmt = qq_im_fmt_new_by_purple(what);
30430
351d07aefb09 Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 28212
diff changeset
423 for (it = segments; it; it = g_slist_delete_link(it, it)) {
351d07aefb09 Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 28212
diff changeset
424 request_room_send_im(gc, id, fmt, (gchar *)it->data);
351d07aefb09 Kill off many dead assignments and any useless remaining variables.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 28212
diff changeset
425 g_free(it->data);
24613
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
426 }
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
427 qq_im_fmt_free(fmt);
6607ebd41053 Change Qun number to unsigned long
Hu Yong <ccpaging@gmail.com>
parents: 24603
diff changeset
428 return 1;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
429 }