libpurple/protocols/qq/utils.c

Fri, 14 Nov 2008 19:58:32 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Fri, 14 Nov 2008 19:58:32 +0000
changeset 24652
7cdb83d14427
parent 24367
80bead6c1577
child 24683
3481a3320313
child 25044
b8b56dbb9ec7
permissions
-rw-r--r--

String changes. I'm kind of blindly making changes to the qq strings

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
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
33 #include "cipher.h"
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
34
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
35 #include "char_conv.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
36 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
37 #include "prefs.h"
14304
1b119ac26ec3 [gaim-migrate @ 16924]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14299
diff changeset
38 #include "qq.h"
14117
760e247123ee [gaim-migrate @ 16668]
Richard Laager <rlaager@pidgin.im>
parents: 14116
diff changeset
39 #include "util.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
40 #include "utils.h"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
41
14381
f61d2e267c67 [gaim-migrate @ 17012]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14327
diff changeset
42 #define QQ_NAME_FORMAT "%d"
13932
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;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
100 gchar **segments;
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
101 gint count, 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
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
111 segments = g_strsplit_set((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
24356
48097e816313 2008.10.07 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24352
diff changeset
115 count = g_strv_length(segments);
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
116 if (count < expected_fields) { /* not enough fields */
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
117 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
118 return NULL;
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
119 } else if (count > expected_fields) { /* more fields, OK */
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
120 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
121 /* free up those not used */
24352
871c27553af6 Flos Lonicerae <lonicerae(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24351
diff changeset
122 for (j = expected_fields; j < count; j++) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
123 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
124 g_free(segments[j]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
125 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
126 segments[expected_fields] = NULL;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
127 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
128
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
129 return segments;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
130 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
131
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
132 /* 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
133 guint32 purple_name_to_uid(const gchar *const name)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
134 {
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
135 guint32 ret;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
136 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
137
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
138 ret = strtol(name, NULL, 10);
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
139 if (errno == ERANGE)
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
140 return 0;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
141 else
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
142 return ret;
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
143 }
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 gchar *gen_ip_str(guint8 *ip) {
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
146 gchar *ret;
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
147 if (ip == NULL || ip[0] == 0) {
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
148 ret = g_new(gchar, 1);
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
149 *ret = '\0';
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
150 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
151 } else {
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
152 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
153 }
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
154 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
155
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
156 guint8 *str_ip_gen(gchar *str) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
157 guint8 *ip = g_new(guint8, 4);
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
158 gint a, b, c, d;
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
159
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
160 sscanf(str, "%d.%d.%d.%d", &a, &b, &c, &d);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
161 ip[0] = a;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
162 ip[1] = b;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
163 ip[2] = c;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
164 ip[3] = d;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
165 return ip;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
166 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
167
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
168 /* 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
169 * the return needs to be freed */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
170 gchar *uid_to_purple_name(guint32 uid)
14466
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 return g_strdup_printf(QQ_NAME_FORMAT, uid);
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
173 }
4fcd9fdc8060 [gaim-migrate @ 17112]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14381
diff changeset
174
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
175 /* try to dump the data as GBK */
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
176 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
177 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
178 gint i;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
179 guint8 *incoming;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
180 gchar *msg_utf8;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
181
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
182 incoming = g_newa(guint8, len + 1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
183 g_memmove(incoming, data, len);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
184 incoming[len] = 0x00;
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
185 /* GBK code:
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
186 * Single-byte ASCII: 0x21-0x7E
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
187 * GBK first byte range: 0x81-0xFE
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
188 * GBK second byte range: 0x40-0x7E and 0x80-0xFE */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
189 for (i = 0; i < len; i++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
190 if (incoming[i] >= 0x81)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
191 break;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
192
14079
d336a66cd39f [gaim-migrate @ 16610]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14077
diff changeset
193 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
194
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
195 if (msg_utf8 != NULL) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
196 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
197 }
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
198 return msg_utf8;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
199 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
200
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
201 /* strips whitespace */
14298
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
202 static gchar *strstrip(const gchar *const buffer)
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
203 {
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
204 GString *stripped;
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
205 gchar *ret, cur;
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
206 gint i;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
207
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
208 g_return_val_if_fail(buffer != NULL, NULL);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
209
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
210 stripped = g_string_new("");
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
211 for (i=0; i<strlen(buffer); i++) {
14299
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
212 cur = buffer[i];
28dd8ab08304 [gaim-migrate @ 16919]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14298
diff changeset
213 if (cur != ' ' && cur != '\n')
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
214 g_string_append_c(stripped, buffer[i]);
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
215 }
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
216 ret = stripped->str;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
217 g_string_free(stripped, FALSE);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
218
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
219 return ret;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
220 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
221
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
222 /* 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
223 * The return should be freed later. */
3b1b5a48e75b [gaim-migrate @ 16918]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
224 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
225 {
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
226 gchar *hex_str, *hex_buffer, *cursor, tmp;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
227 guint8 *bytes, nibble1, nibble2;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
228 gint index;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
229
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
230 g_return_val_if_fail(buffer != NULL, NULL);
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
231
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
232 hex_buffer = strstrip(buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
233
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
234 if (strlen(hex_buffer) % 2 != 0) {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
235 purple_debug_warning("QQ",
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
236 "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
237 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
238 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
239 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
240 bytes = g_newa(guint8, strlen(hex_buffer) / 2);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
241 hex_str = g_ascii_strdown(hex_buffer, -1);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
242 g_free(hex_buffer);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
243 index = 0;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
244 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
245 if (g_ascii_isdigit(*cursor)) {
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
246 tmp = *cursor; nibble1 = atoi(&tmp);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
247 } 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
248 nibble1 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
249 } else {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
250 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
251 *cursor);
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
252 g_free(hex_str);
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
253 return NULL;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
254 }
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
255 nibble1 = nibble1 << 4;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
256 cursor++;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
257 if (g_ascii_isdigit(*cursor)) {
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
258 tmp = *cursor; nibble2 = atoi(&tmp);
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
259 } 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
260 nibble2 = (gint) *cursor - 87;
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
261 } else {
24019
c0801ae3c886 applied changes from f12c8903079425d7850fa183df0b3f937b2952be
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24018
diff changeset
262 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
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 bytes[index++] = nibble1 + nibble2;
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
267 }
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
268 *out_len = strlen(hex_str) / 2;
14077
c7742fbe41fc [gaim-migrate @ 16607]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14051
diff changeset
269 g_free(hex_str);
14111
0adb61f87bbb [gaim-migrate @ 16662]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14083
diff changeset
270 return g_memdup(bytes, *out_len);
14077
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
15137
28f227957781 [gaim-migrate @ 17859]
Daniel Atallah <datallah@pidgin.im>
parents: 15133
diff changeset
273 /* 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
274 * The return should be freed later. */
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
275 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
276 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
277 GString *str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
278 gchar *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
279 gint i, j, ch;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
280
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
281 str = g_string_new("");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
282 for (i = 0; i < bytes; i += 16) {
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
283 /* length label */
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23193
diff changeset
284 g_string_append_printf(str, "%07x: ", i);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
285
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
286 /* dump hex value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
287 for (j = 0; j < 16; j++)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
288 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
289 g_string_append_printf(str, " %02x", buffer[i + j]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
290 else
24018
91f0294f2377 2008.08.10 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23950
diff changeset
291 g_string_append(str, " --");
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
292 g_string_append(str, " ");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
293
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
294 /* dump ascii value */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
295 for (j = 0; j < 16 && (i + j) < bytes; j++) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
296 ch = buffer[i + j] & 127;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
297 if (ch < ' ' || ch == 127)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
298 g_string_append_c(str, '.');
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
299 else
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
300 g_string_append_c(str, ch);
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
301 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
302 g_string_append_c(str, '\n');
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
303 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
304
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
305 ret = str->str;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14079
diff changeset
306 /* GString can be freed without freeing it character data */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
307 g_string_free(str, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
308
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
309 return ret;
14051
6bc807df2a0a [gaim-migrate @ 16562]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
310 }
15133
9d5bbb9f8248 [gaim-migrate @ 17855]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 15087
diff changeset
311
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
312 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
313 const guint8 *pdata, gint bytes,
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
314 const char *format, ...)
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
315 {
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
316 va_list args;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
317 char *arg_s = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
318 gchar *phex = NULL;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
319
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
320 g_return_if_fail(level != PURPLE_DEBUG_ALL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
321 g_return_if_fail(format != NULL);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
322
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
323 va_start(args, format);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
324 arg_s = g_strdup_vprintf(format, args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
325 va_end(args);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
326
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
327 if (bytes <= 0) {
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
328 purple_debug(level, category, arg_s);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
329 return;
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
330 }
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 phex = hex_dump_to_str(pdata, bytes);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
333 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
334 g_free(phex);
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
335 }
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
336
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
337 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
338 {
24367
80bead6c1577 2008.10.14 - ccpaging <ccpaging(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 24360
diff changeset
339 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
340 }
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
341

mercurial