libpurple/protocols/qq/utils.c

Mon, 23 Aug 2010 00:52:24 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 23 Aug 2010 00:52:24 +0000
changeset 30706
612b36b49058
parent 28981
4e3922ab4844
child 31393
04447b1f6403
permissions
-rw-r--r--

Kill off many dead assignments and any useless remaining variables.
I think some of those QQ ones were actual logic errors, too.
Let me know if there were any side-effects that were cut.

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
28981
4e3922ab4844 Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <darkrain42@pidgin.im>
parents: 25699
diff changeset
25 #include "internal.h"
4e3922ab4844 Include 'internal.h' before all other headers to make some non-gcc compilers happy.
Paul Aurich <darkrain42@pidgin.im>
parents: 25699
diff changeset
26
14304
1b119ac26ec3 [gaim-migrate @ 16924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14299
diff changeset
27 #include "limits.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
28 #include "stdlib.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
29 #include "string.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
30
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
31 #ifdef _WIN32
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
32 #include "win32dep.h"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
33 #endif
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
34
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
35 #include "cipher.h"
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
36
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
37 #include "char_conv.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
38 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
39 #include "prefs.h"
14304
1b119ac26ec3 [gaim-migrate @ 16924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14299
diff changeset
40 #include "qq.h"
14117
760e247123ee [gaim-migrate @ 16668]
Richard Laager <rlaager@pidgin.im>
parents: 14116
diff changeset
41 #include "util.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
42 #include "utils.h"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
43
23193
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
44 /* These functions are used only in development phase */
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
45 /*
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
46 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
47 struct sockaddr_in sin;
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
48 socklen_t len = sizeof(sin);
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
49 getsockname(fd, (struct sockaddr *)&sin, &len);
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
50 purple_debug_info(desc, "%s:%d\n",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
51 inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port));
23193
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
52 }
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
53 */
384ba35bfa8f patch-05-reconnect-and-code-cleanup
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
54
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
55 void qq_get_md5(guint8 *md5, gint md5_len, const guint8* const src, gint src_len)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
56 {
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
57 PurpleCipher *cipher;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
58 PurpleCipherContext *context;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
59
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
60 g_return_if_fail(md5 != NULL && md5_len > 0);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
61 g_return_if_fail(src != NULL && src_len > 0);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
62
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
63 cipher = purple_ciphers_find_cipher("md5");
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
64 context = purple_cipher_context_new(cipher, NULL);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
65 purple_cipher_context_append(context, src, src_len);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
66 purple_cipher_context_digest(context, md5_len, md5, NULL);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
67 purple_cipher_context_destroy(context);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
68 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
69
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
70 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
71 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
72 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
73
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
74 index = atoi(index_str);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
75 if (index < 0 || index >= amount)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
76 index = 0;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
77
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
78 return array[index];
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
79 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
80
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
81 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
82 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
83 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
84
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
85 for (index = 0; index <= amount; index++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
86 if (g_ascii_strcasecmp(array[index], name) == 0)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
87 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
88
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
89 if (index >= amount)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
90 index = 0; /* meaning no match */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
91 return g_strdup_printf("%d", index);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
92 }
13932
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 /* split the given data(len) with delimit,
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
95 * 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
96 * 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
97 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
98 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
99 guint8 *input;
25364
aaae94b6ffdf g_strsplit_set is new in glib 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 25072
diff changeset
100 gchar **segments, **seg;
aaae94b6ffdf g_strsplit_set is new in glib 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 25072
diff changeset
101 gint count = 0, j;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
102
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
103 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
104
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
105 /* 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
106 * 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
107 input = g_newa(guint8, len + 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
108 g_memmove(input, data, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
109 input[len] = 0x00;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
110
25364
aaae94b6ffdf g_strsplit_set is new in glib 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 25072
diff changeset
111 segments = g_strsplit((gchar *) input, delimit, 0);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
112 if (expected_fields <= 0)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
113 return segments;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
114
25364
aaae94b6ffdf g_strsplit_set is new in glib 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 25072
diff changeset
115 for (seg = segments; *seg != NULL; seg++)
aaae94b6ffdf g_strsplit_set is new in glib 2.4
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 25072
diff changeset
116 count++;
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
117 if (count < expected_fields) { /* not enough fields */
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
118 purple_debug_error("QQ", "Less fields %d then %d\n", count, expected_fields);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
119 return NULL;
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
120 } else if (count > expected_fields) { /* more fields, OK */
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
121 purple_debug_warning("QQ", "More fields %d than %d\n", count, expected_fields);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
122 /* free up those not used */
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
123 for (j = expected_fields; j < count; j++) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
124 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
125 g_free(segments[j]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
126 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
127 segments[expected_fields] = NULL;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
128 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
129
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
130 return segments;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
131 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
132
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
133 /* convert Purple name to original QQ UID */
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
134 guint32 purple_name_to_uid(const gchar *const name)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
135 {
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
136 guint32 ret;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
137 g_return_val_if_fail(name != NULL, 0);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
138
25044
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
139 ret = strtoul(name, NULL, 10);
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
140 if (errno == ERANGE)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
141 return 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
142 else
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
143 return ret;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
144 }
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
145
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
146 gchar *gen_ip_str(guint8 *ip) {
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
147 gchar *ret;
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
148 if (ip == NULL || ip[0] == 0) {
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
149 ret = g_new(gchar, 1);
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
150 *ret = '\0';
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
151 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
152 } else {
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
153 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
154 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
155 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
156
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
157 guint8 *str_ip_gen(gchar *str) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
158 guint8 *ip = g_new(guint8, 4);
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
159 gint a, b, c, d;
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
160
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
161 sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
162 ip[0] = a;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
163 ip[1] = b;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
164 ip[2] = c;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
165 ip[3] = d;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
166 return ip;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
167 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
168
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
169 /* 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
170 * the return needs to be freed */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
171 gchar *uid_to_purple_name(guint32 uid)
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
172 {
25044
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
173 return g_strdup_printf("%u", uid);
14466
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
174 }
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
175
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
176 /* try to dump the data as GBK */
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
177 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
178 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
179 gint i;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
180 guint8 *incoming;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
181 gchar *msg_utf8;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
182
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
183 incoming = g_newa(guint8, len + 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
184 g_memmove(incoming, data, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
185 incoming[len] = 0x00;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
186 /* GBK code:
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
187 * Single-byte ASCII: 0x21-0x7E
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
188 * GBK first byte range: 0x81-0xFE
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
189 * GBK second byte range: 0x40-0x7E and 0x80-0xFE */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
190 for (i = 0; i < len; i++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
191 if (incoming[i] >= 0x81)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
192 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
193
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
194 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
195
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
196 if (msg_utf8 != NULL) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
197 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
198 }
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
199 return msg_utf8;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
200 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
201
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
202 /* strips whitespace */
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
203 static gchar *strstrip(const gchar *const buffer)
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
204 {
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
205 GString *stripped;
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
206 gchar *ret, cur;
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
207 gint i;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
208
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
209 g_return_val_if_fail(buffer != NULL, NULL);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
210
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
211 stripped = g_string_new("");
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
212 for (i=0; i<strlen(buffer); i++) {
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
213 cur = buffer[i];
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
214 if (cur != ' ' && cur != '\n')
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
215 g_string_append_c(stripped, buffer[i]);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
216 }
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
217 ret = stripped->str;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
218 g_string_free(stripped, FALSE);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
219
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
220 return ret;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
221 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
222
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
223 /* 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
224 * The return should be freed later. */
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
225 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
226 {
25699
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
227 gchar *hex_str, *hex_buffer, *cursor;
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
228 gchar tmp[2];
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
229 guint8 *bytes, nibble1, nibble2;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
230 gint index;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
231
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
232 g_return_val_if_fail(buffer != NULL, NULL);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
233
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
234 hex_buffer = strstrip(buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
235
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
236 if (strlen(hex_buffer) % 2 != 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
237 purple_debug_warning("QQ",
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
238 "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
239 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
240 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
241 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
242 bytes = g_newa(guint8, strlen(hex_buffer) / 2);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
243 hex_str = g_ascii_strdown(hex_buffer, -1);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
244 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
245 index = 0;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
246 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
247 if (g_ascii_isdigit(*cursor)) {
25699
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
248 tmp[0] = *cursor;
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
249 tmp[1] = '\0';
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
250 nibble1 = atoi(tmp);
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
251 } 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
252 nibble1 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
253 } else {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
254 purple_debug_warning("QQ", "Invalid char \'%c\' found in hex string!\n",
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
255 *cursor);
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
256 g_free(hex_str);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
257 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
258 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
259 nibble1 = nibble1 << 4;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
260 cursor++;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
261 if (g_ascii_isdigit(*cursor)) {
25699
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
262 tmp[0] = *cursor;
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
263 tmp[1] = '\0';
f425c94ef860 Make sure we call atoi on a NUL-terminated string. It isn't safe to call on
Daniel Atallah <datallah@pidgin.im>
parents: 25364
diff changeset
264 nibble2 = atoi(tmp);
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
265 } 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
266 nibble2 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
267 } else {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
268 purple_debug_warning("QQ", "Invalid char found in hex string!\n");
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
269 g_free(hex_str);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
270 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
271 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
272 bytes[index++] = nibble1 + nibble2;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
273 }
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
274 *out_len = strlen(hex_str) / 2;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
275 g_free(hex_str);
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
276 return g_memdup(bytes, *out_len);
14077
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
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
279 /* 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
280 * The return should be freed later. */
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
281 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
282 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
283 GString *str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
284 gchar *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
285 gint i, j, ch;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
286
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
287 str = g_string_new("");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
288 for (i = 0; i < bytes; i += 16) {
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
289 /* length label */
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
290 g_string_append_printf(str, "%07x: ", i);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
291
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
292 /* dump hex value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
293 for (j = 0; j < 16; j++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
294 if ((i + j) < bytes)
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
295 g_string_append_printf(str, " %02x", buffer[i + j]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
296 else
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
297 g_string_append(str, " --");
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
298 g_string_append(str, " ");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
299
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
300 /* dump ascii value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
301 for (j = 0; j < 16 && (i + j) < bytes; j++) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
302 ch = buffer[i + j] & 127;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
303 if (ch < ' ' || ch == 127)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
304 g_string_append_c(str, '.');
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
305 else
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
306 g_string_append_c(str, ch);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
307 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
308 g_string_append_c(str, '\n');
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
309 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
310
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
311 ret = str->str;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
312 /* GString can be freed without freeing it character data */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
313 g_string_free(str, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
314
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
315 return ret;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
316 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
317
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
318 void qq_hex_dump(PurpleDebugLevel level, const char *category,
24341
02abffea97fe 2008.09.26 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24314
diff changeset
319 const guint8 *pdata, gint bytes,
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
320 const char *format, ...)
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
321 {
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
322 va_list args;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
323 char *arg_s = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
324 gchar *phex = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
325
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
326 g_return_if_fail(level != PURPLE_DEBUG_ALL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
327 g_return_if_fail(format != NULL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
328
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
329 va_start(args, format);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
330 arg_s = g_strdup_vprintf(format, args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
331 va_end(args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
332
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
333 if (bytes <= 0) {
24683
3481a3320313 Backport the 'purple_debug_*(msg)' -> 'purple_debug_*("%s", msg);' fixes.
Richard Laager <rlaager@pidgin.im>
parents: 24367
diff changeset
334 purple_debug(level, category, "%s", arg_s);
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
335 return;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
336 }
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
337
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
338 phex = hex_dump_to_str(pdata, bytes);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
339 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
340 g_free(phex);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
341 }
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
342
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
343 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
344 {
24367
80bead6c1577 2008.10.14 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24360
diff changeset
345 qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ", buf, len, desc);
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
346 }
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
347
25044
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
348 void qq_filter_str(gchar *str) {
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
349 gchar *temp;
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
350 if (str == NULL) {
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
351 return;
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
352 }
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
353
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
354 for (temp = str; *temp != 0; temp++) {
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
355 /*if (*temp == '\r' || *temp == '\n') *temp = ' ';*/
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
356 if (*temp > 0 && *temp < 0x20) *temp = ' ';
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
357 }
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
358 g_strstrip(str);
b8b56dbb9ec7 Move function qq_filter_str in
Hu Yong <ccpaging@gmail.com>
parents: 24367
diff changeset
359 }

mercurial