libpurple/protocols/qq/utils.c

Tue, 24 Jun 2008 12:28:38 +0000

author
SHiNE CsyFeK <csyfek@gmail.com>
date
Tue, 24 Jun 2008 12:28:38 +0000
branch
release-2.4.3
changeset 23193
384ba35bfa8f
parent 23192
2f00b04db5cb
child 23194
e8c312705ee8
permissions
-rw-r--r--

patch-05-reconnect-and-code-cleanup


*** patch-05-reconnect-and-code-cleanup ***
* Clean code and apply patches from QuLogic
* Reconnect server 5 time in 5000 ms, when connect failed
* Rename sendqueue.c/sendqueue.h to qq_trans.c/qq_trans.h
* Rewrite packet_process
* Rewrite qq_send_cmd
* Create server list, try to connect every server when failed

Apply patch from #5934.

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: 14466
diff changeset
2 * @file utils.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: 15435
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: 15435
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: 14466
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: 14466
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: 15884
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
14304
1b119ac26ec3 [gaim-migrate @ 16924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14299
diff changeset
25 #include "limits.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
26 #include "stdlib.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
27 #include "string.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
28
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
29 #ifdef _WIN32
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
30 #include "win32dep.h"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
31 #endif
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
32
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
33 #include "char_conv.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
34 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
35 #include "prefs.h"
14304
1b119ac26ec3 [gaim-migrate @ 16924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14299
diff changeset
36 #include "qq.h"
14117
760e247123ee [gaim-migrate @ 16668]
Richard Laager <rlaager@pidgin.im>
parents: 14116
diff changeset
37 #include "util.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
38 #include "utils.h"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
39
14381
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
40 #define QQ_NAME_FORMAT "%d"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
41
23193
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
42 /* These functions are used only in development phase */
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
43 /*
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
44 static void _qq_show_socket(gchar *desc, gint fd) {
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
45 struct sockaddr_in sin;
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
46 socklen_t len = sizeof(sin);
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
47 getsockname(fd, (struct sockaddr *)&sin, &len);
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
48 purple_debug(PURPLE_DEBUG_INFO, desc, "%s:%d\n",
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
49 inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port));
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
50 }
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
51 */
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
52
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
53 gchar *get_name_by_index_str(gchar **array, const gchar *index_str, gint amount)
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
54 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
55 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
56
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
57 index = atoi(index_str);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
58 if (index < 0 || index >= amount)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
59 index = 0;
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 return array[index];
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
62 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
63
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
64 gchar *get_index_str_by_name(gchar **array, const gchar *name, gint amount)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
65 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
66 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
67
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
68 for (index = 0; index <= amount; index++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
69 if (g_ascii_strcasecmp(array[index], name) == 0)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
70 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
71
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
72 if (index >= amount)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
73 index = 0; /* meaning no match */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
74 return g_strdup_printf("%d", index);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
75 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
76
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
77 gint qq_string_to_dec_value(const gchar *str)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
78 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
79 g_return_val_if_fail(str != NULL, 0);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
80 return strtol(str, NULL, 10);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
81 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
82
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
83 /* split the given data(len) with delimit,
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
84 * check the number of field matches the expected_fields (<=0 means all)
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
85 * return gchar* array (needs to be freed by g_strfreev later), or NULL */
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
86 gchar **split_data(guint8 *data, gint len, const gchar *delimit, gint expected_fields)
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
87 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
88 guint8 *input;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
89 gchar **segments;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
90 gint i, j;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
91
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
92 g_return_val_if_fail(data != NULL && len != 0 && delimit != 0, NULL);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
93
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
94 /* as the last field would be string, but data is not ended with 0x00
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
95 * we have to duplicate the data and append a 0x00 at the end */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
96 input = g_newa(guint8, len + 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
97 g_memmove(input, data, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
98 input[len] = 0x00;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
99
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
100 segments = g_strsplit((gchar *) input, delimit, 0);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
101 if (expected_fields <= 0)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
102 return segments;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
103
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
104 for (i = 0; segments[i] != NULL; i++) {;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
105 }
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
106 if (i < expected_fields) { /* not enough fields */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
107 purple_debug(PURPLE_DEBUG_ERROR, "QQ",
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
108 "Invalid data, expect %d fields, found only %d, discard\n", expected_fields, i);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
109 g_strfreev(segments);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
110 return NULL;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
111 } else if (i > expected_fields) { /* more fields, OK */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
112 purple_debug(PURPLE_DEBUG_WARNING, "QQ",
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
113 "Dangerous data, expect %d fields, found %d, return all\n", expected_fields, i);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
114 /* free up those not used */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
115 for (j = expected_fields; j < i; j++) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
116 purple_debug(PURPLE_DEBUG_WARNING, "QQ", "field[%d] is %s\n", j, segments[j]);
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
117 g_free(segments[j]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
118 }
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
119
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
120 segments[expected_fields] = NULL;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
121 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
122
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
123 return segments;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
124 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
125
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
126 /* given a four-byte ip data, convert it into a human readable ip string
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
127 * the return needs to be freed */
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
128 gchar *gen_ip_str(guint8 *ip)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
129 {
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
130 gchar *ret;
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
131 if (ip == NULL || ip[0] == 0) {
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
132 ret = g_new(gchar, 1);
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
133 *ret = '\0';
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
134 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
135 } else {
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
136 return g_strdup_printf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
137 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
138 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
139
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
140 guint8 *str_ip_gen(gchar *str) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
141 guint8 *ip = g_new(guint8, 4);
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
142 gint a, b, c, d;
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
143
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
144 sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
145 ip[0] = a;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
146 ip[1] = b;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
147 ip[2] = c;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
148 ip[3] = d;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
149 return ip;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
150 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
151
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
152 /* convert Purple name to original QQ UID */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
153 guint32 purple_name_to_uid(const gchar *const name)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
154 {
14381
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
155 guint32 ret;
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
156 g_return_val_if_fail(name != NULL, 0);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
157
14381
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
158 ret = strtol(name, NULL, 10);
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
159 if (errno == ERANGE)
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
160 return 0;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
161 else
14381
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
162 return ret;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
163 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
164
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
165 /* convert a QQ UID to a unique name of Purple
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
166 * the return needs to be freed */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
167 gchar *uid_to_purple_name(guint32 uid)
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
168 {
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
169 return g_strdup_printf(QQ_NAME_FORMAT, uid);
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
170 }
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
171
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
172 /* convert name displayed in a chat channel to original QQ UID */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
173 gchar *chat_name_to_purple_name(const gchar *const name)
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
174 {
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
175 const gchar *tmp;
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
176 gchar *ret;
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
177
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
178 g_return_val_if_fail(name != NULL, NULL);
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
179
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
180 tmp = (gchar *) purple_strcasestr(name, "(qq-");
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
181 ret = g_strndup(tmp + 4, strlen(name) - (tmp - name) - 4 - 1);
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
182
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
183 return ret;
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
184 }
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
185
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
186 /* try to dump the data as GBK */
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
187 gchar* try_dump_as_gbk(const guint8 *const data, gint len)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
188 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
189 gint i;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
190 guint8 *incoming;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
191 gchar *msg_utf8;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
192
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
193 incoming = g_newa(guint8, len + 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
194 g_memmove(incoming, data, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
195 incoming[len] = 0x00;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
196 /* GBK code:
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
197 * Single-byte ASCII: 0x21-0x7E
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
198 * GBK first byte range: 0x81-0xFE
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
199 * GBK second byte range: 0x40-0x7E and 0x80-0xFE */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
200 for (i = 0; i < len; i++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
201 if (incoming[i] >= 0x81)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
202 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
203
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
204 msg_utf8 = i < len ? qq_to_utf8((gchar *) &incoming[i], QQ_CHARSET_DEFAULT) : NULL;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
205
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
206 if (msg_utf8 != NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
207 purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Try extract GB msg: %s\n", msg_utf8);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
208 }
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
209 return msg_utf8;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
210 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
211
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
212 /* strips whitespace */
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
213 static gchar *strstrip(const gchar *const buffer)
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
214 {
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
215 GString *stripped;
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
216 gchar *ret, cur;
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
217 gint i;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
218
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
219 g_return_val_if_fail(buffer != NULL, NULL);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
220
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
221 stripped = g_string_new("");
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
222 for (i=0; i<strlen(buffer); i++) {
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
223 cur = buffer[i];
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
224 if (cur != ' ' && cur != '\n')
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
225 g_string_append_c(stripped, buffer[i]);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
226 }
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
227 ret = stripped->str;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
228 g_string_free(stripped, FALSE);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
229
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
230 return ret;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
231 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
232
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
233 /* Attempts to dump an ASCII hex string to a string of bytes.
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
234 * The return should be freed later. */
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
235 guint8 *hex_str_to_bytes(const gchar *const buffer, gint *out_len)
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
236 {
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
237 gchar *hex_str, *hex_buffer, *cursor, tmp;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
238 guint8 *bytes, nibble1, nibble2;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
239 gint index;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
240
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
241 g_return_val_if_fail(buffer != NULL, NULL);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
242
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
243 hex_buffer = strstrip(buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
244
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
245 if (strlen(hex_buffer) % 2 != 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
246 purple_debug(PURPLE_DEBUG_WARNING, "QQ",
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
247 "Unable to convert an odd number of nibbles to a string of bytes!\n");
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
248 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
249 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
250 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
251 bytes = g_newa(guint8, strlen(hex_buffer) / 2);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
252 hex_str = g_ascii_strdown(hex_buffer, -1);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
253 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
254 index = 0;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
255 for (cursor = hex_str; cursor < hex_str + sizeof(gchar) * (strlen(hex_str)) - 1; cursor++) {
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
256 if (g_ascii_isdigit(*cursor)) {
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
257 tmp = *cursor; nibble1 = atoi(&tmp);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
258 } else if (g_ascii_isalpha(*cursor) && (gint) *cursor - 87 < 16) {
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
259 nibble1 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
260 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
261 purple_debug(PURPLE_DEBUG_WARNING, "QQ",
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
262 "Invalid char \'%c\' found in hex string!\n", *cursor);
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
263 g_free(hex_str);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
264 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
265 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
266 nibble1 = nibble1 << 4;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
267 cursor++;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
268 if (g_ascii_isdigit(*cursor)) {
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
269 tmp = *cursor; nibble2 = atoi(&tmp);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
270 } else if (g_ascii_isalpha(*cursor) && (gint) (*cursor - 87) < 16) {
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
271 nibble2 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
272 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
273 purple_debug(PURPLE_DEBUG_WARNING, "QQ",
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
274 "Invalid char found in hex string!\n");
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
275 g_free(hex_str);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
276 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
277 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
278 bytes[index++] = nibble1 + nibble2;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
279 }
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
280 *out_len = strlen(hex_str) / 2;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
281 g_free(hex_str);
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
282 return g_memdup(bytes, *out_len);
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
283 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
284
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
285 /* Dumps a chunk of raw data into an ASCII hex string.
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
286 * The return should be freed later. */
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
287 static gchar *hex_dump_to_str(const guint8 *const buffer, gint bytes)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
288 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
289 GString *str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
290 gchar *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
291 gint i, j, ch;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
292
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
293 str = g_string_new("");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
294 for (i = 0; i < bytes; i += 16) {
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
295 /* length label */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
296 g_string_append_printf(str, "%04d: ", i);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
297
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
298 /* dump hex value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
299 for (j = 0; j < 16; j++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
300 if ((i + j) < bytes)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
301 g_string_append_printf(str, " %02X", buffer[i + j]);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
302 else
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
303 g_string_append(str, " ");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
304 g_string_append(str, " ");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
305
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
306 /* dump ascii value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
307 for (j = 0; j < 16 && (i + j) < bytes; j++) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
308 ch = buffer[i + j] & 127;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
309 if (ch < ' ' || ch == 127)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
310 g_string_append_c(str, '.');
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
311 else
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
312 g_string_append_c(str, ch);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
313 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
314 g_string_append_c(str, '\n');
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
315 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
316
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
317 ret = str->str;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
318 /* GString can be freed without freeing it character data */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
319 g_string_free(str, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
320
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
321 return ret;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
322 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
323
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
324 void qq_hex_dump(PurpleDebugLevel level, const char *category,
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
325 const guint8 *pdata, gint bytes,
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
326 const char *format, ...)
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
327 {
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
328 va_list args;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
329 char *arg_s = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
330 gchar *phex = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
331
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
332 g_return_if_fail(level != PURPLE_DEBUG_ALL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
333 g_return_if_fail(format != NULL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
334
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
335 va_start(args, format);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
336 arg_s = g_strdup_vprintf(format, args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
337 va_end(args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
338
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
339 if (bytes <= 0) {
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
340 purple_debug(level, category, arg_s);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
341 return;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
342 }
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
343
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
344 phex = hex_dump_to_str(pdata, bytes);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
345 purple_debug(level, category, "%s - (len %d)\n%s", arg_s, bytes, phex);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
346 g_free(phex);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
347 }
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
348
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
349 void qq_show_packet(const gchar *desc, const guint8 *buf, gint len)
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
350 {
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
351 /*
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
352 char buf1[8*len+2], buf2[10];
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
353 int i;
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
354 buf1[0] = 0;
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
355 for (i = 0; i < len; i++) {
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
356 sprintf(buf2, " %02x(%d)", buf[i] & 0xff, buf[i] & 0xff);
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
357 strcat(buf1, buf2);
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
358 }
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
359 strcat(buf1, "\n");
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
360 purple_debug(PURPLE_DEBUG_INFO, desc, "%s", buf1);
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
361 */
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
362
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
363 /* modified by s3e, 20080424 */
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
364 qq_hex_dump(PURPLE_DEBUG_INFO, desc,
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
365 buf, len,
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
366 "");
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
367 }
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
368
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
369 /* convert face num from packet (0-299) to local face (1-100) */
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
370 gchar *face_to_icon_str(gint face)
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
371 {
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
372 gchar *icon_num_str;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
373 gint icon_num = face / 3 + 1;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
374 icon_num_str = g_strdup_printf("%d", icon_num);
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
375 return icon_num_str;
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
376 }
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
377
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
378 /* return the location of the buddy icon dir
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
379 * any application using libpurple but not installing the QQ buddy icons
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
380 * under datadir needs to set the pref below, or buddy icons won't work */
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
381 const char *qq_buddy_icon_dir(void)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
382 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
383 if (purple_prefs_exists("/prpl/qq/buddy_icon_dir"))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
384 return purple_prefs_get_string("/prpl/qq/buddy_icon_dir");
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
385 else
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
386 return QQ_BUDDY_ICON_DIR;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
387 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
388
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
389 #ifdef _WIN32
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
390 const char *qq_win32_buddy_icon_dir(void)
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
391 {
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
392 static char *dir = NULL;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
393 if (dir == NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
394 dir = g_build_filename(wpurple_install_dir(), "pixmaps",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
395 "purple", "buddy_icons", "qq", NULL);
15200
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
396 return dir;
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
397 }
a28a70a4e7ce [gaim-migrate @ 17924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15137
diff changeset
398 #endif

mercurial