annotate libpurple/protocols/myspace/message.c @ 31172:e89df17f5ae7

certificate: Better validation of chains which have an intermediate signed w/ MD5. We already distribute the CAcert class 3 root as a trusted root. Newer versions of GnuTLS (combined with the changes to deal with MSN's cert breakage) require us to check if the last cert (not just its issuer) is in our trusted store.
author Paul Aurich <paul@darkrain42.org>
date Sun, 30 Jan 2011 17:51:02 +0000
parents 943fce8ef142
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
1 /** MySpaceIM protocol messages
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
2 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
3 * \author Jeff Connelly
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
4 *
17680
d87916bd1d73 Fix email address.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17661
diff changeset
5 * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
6 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
10 * (at your option) any later version.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
11 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
15 * GNU General Public License for more details.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
16 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19431
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
20 */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
21
27343
df7705d4b19a Including internal.h here fixed a Windows build ages ago but struck me as odd
Etan Reisner <pidgin@unreliablesource.net>
parents: 24805
diff changeset
22 #include "myspace.h"
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
23 #include "message.h"
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
24
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
25 static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
26
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
27 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
28 * Escape codes and associated replacement text, used for protocol message
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
29 * escaping and unescaping.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
30 */
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
31 static struct MSIM_ESCAPE_REPLACEMENT {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
32 gchar *code;
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
33 gchar text;
18889
a3a5b2e9079a Change escape code replacement text parallel arrays to an array of structs,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18882
diff changeset
34 } msim_escape_replacements[] = {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
35 { "/1", '/' },
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
36 { "/2", '\\' },
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
37 /* { "/3", "|" }, */ /* Not used here -- only for within arrays */
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
38 { NULL, 0 }
18889
a3a5b2e9079a Change escape code replacement text parallel arrays to an array of structs,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18882
diff changeset
39 };
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
40
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
41 /**
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
42 * Escape a protocol message.
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
43 *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
44 * @return The escaped message. Caller must g_free().
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
45 */
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
46 gchar *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
47 msim_escape(const gchar *msg)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
48 {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
49 GString *gs;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
50 guint i, j;
22269
0e68dab2a362 Patch from oliver:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20336
diff changeset
51 guint msg_len;
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
52
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
53 gs = g_string_new("");
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
54 msg_len = strlen(msg);
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
55
22269
0e68dab2a362 Patch from oliver:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20336
diff changeset
56 for (i = 0; i < msg_len; ++i) {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
57 struct MSIM_ESCAPE_REPLACEMENT *replacement;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
58 gchar *replace;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
59
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
60 replace = NULL;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
61
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
62 /* Check for characters that need to be escaped, and escape them. */
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
63 for (j = 0; (replacement = &msim_escape_replacements[j]) &&
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
64 replacement->code != NULL; ++j) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
65 if (msg[i] == replacement->text) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
66 replace = replacement->code;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
67 break;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
68 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
69 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
70
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
71 if (replace) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
72 g_string_append(gs, replace);
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
73 } else {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
74 g_string_append_c(gs, msg[i]);
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
75 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
76 }
18911
692b128fe74a Conditionally-compile out debugging statements of escaping.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18909
diff changeset
77
692b128fe74a Conditionally-compile out debugging statements of escaping.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18909
diff changeset
78 #ifdef MSIM_DEBUG_ESCAPE
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
79 purple_debug_info("msim", "msim_escape: msg=%s, ret=%s\n", msg, gs->str);
18911
692b128fe74a Conditionally-compile out debugging statements of escaping.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18909
diff changeset
80 #endif
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
81
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
82 return g_string_free(gs, FALSE);
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
83 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
84
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
85 /**
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
86 * Unescape a protocol message.
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
87 *
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
88 * @return The unescaped message, caller must g_free().
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
89 */
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
90 gchar *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
91 msim_unescape(const gchar *msg)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
92 {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
93 GString *gs;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
94 guint i, j;
22269
0e68dab2a362 Patch from oliver:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20336
diff changeset
95 guint msg_len;
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
96
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
97 gs = g_string_new("");
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
98 msg_len = strlen(msg);
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
99
22269
0e68dab2a362 Patch from oliver:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20336
diff changeset
100 for (i = 0; i < msg_len; ++i) {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
101 struct MSIM_ESCAPE_REPLACEMENT *replacement;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
102 gchar replace;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
103
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
104 replace = msg[i];
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
105
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
106 for (j = 0; (replacement = &msim_escape_replacements[j]) &&
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
107 replacement->code != NULL; ++j) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
108 if (msg[i] == replacement->code[0] &&
22269
0e68dab2a362 Patch from oliver:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 20336
diff changeset
109 i + 1 < msg_len &&
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
110 msg[i + 1] == replacement->code[1]) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
111 replace = replacement->text;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
112 ++i;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
113 break;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
114 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
115 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
116
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
117 g_string_append_c(gs, replace);
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
118 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
119
18911
692b128fe74a Conditionally-compile out debugging statements of escaping.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18909
diff changeset
120 #ifdef MSIM_DEBUG_ESCAPE
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
121 purple_debug_info("msim", "msim_unescape: msg=%s, ret=%s\n", msg, gs->str);
18911
692b128fe74a Conditionally-compile out debugging statements of escaping.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18909
diff changeset
122 #endif
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
123
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
124 return g_string_free(gs, FALSE);
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
125 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
126
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
127 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
128 * Create a new message from va_list and its first argument.
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
129 *
18897
d0be4366e876 Change msim_msg_new() and msim_msg_new_v() to accept the first key name as
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18895
diff changeset
130 * @param first_key The first argument (a key), or NULL to take all arguments
d0be4366e876 Change msim_msg_new() and msim_msg_new_v() to accept the first key name as
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18895
diff changeset
131 * from argp.
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
132 * @param argp A va_list of variadic arguments, already started with va_start(). Will be va_end()'d.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
133 * @return New MsimMessage *, must be freed with msim_msg_free().
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
134 *
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
135 * For internal use - users probably want msim_msg_new() or msim_send().
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
136 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
137 static MsimMessage *
18897
d0be4366e876 Change msim_msg_new() and msim_msg_new_v() to accept the first key name as
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18895
diff changeset
138 msim_msg_new_v(gchar *first_key, va_list argp)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
139 {
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
140 gchar *key, *value;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
141 MsimMessageType type;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
142 MsimMessage *msg;
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
143 gboolean first;
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
144
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
145 GString *gs;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
146 GList *gl;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
147 MsimMessage *dict;
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
148
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
149 /* Begin with an empty message. */
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
150 msg = NULL;
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
151
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
152 /* First parameter can be given explicitly. */
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
153 first = first_key != NULL;
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
154
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
155 /* Read key, type, value triplets until NULL. */
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
156 do {
19252
cfbd89a98431 Remove msim_parse_body(), obsoleted by msim_msg_get_dictionary().
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19248
diff changeset
157 if (first) {
18905
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
158 key = first_key;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
159 first = FALSE;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
160 } else {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
161 key = va_arg(argp, gchar *);
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
162 if (!key) {
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
163 break;
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
164 }
3f95e691bad2 Rewrite escaping so that it is more correct, in order to fix #2521. Test it.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18897
diff changeset
165 }
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
166
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
167 type = va_arg(argp, int);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
168
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
169 /* Interpret variadic arguments. */
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
170 switch (type) {
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
171 case MSIM_TYPE_INTEGER:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
172 case MSIM_TYPE_BOOLEAN:
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
173 msg = msim_msg_append(msg, key, type, GUINT_TO_POINTER(va_arg(argp, int)));
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
174 break;
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
175
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
176 case MSIM_TYPE_STRING:
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
177 value = va_arg(argp, char *);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
178
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
179 g_return_val_if_fail(value != NULL, FALSE);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
180
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
181 msg = msim_msg_append(msg, key, type, value);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
182 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
183
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
184 case MSIM_TYPE_BINARY:
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
185 gs = va_arg(argp, GString *);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
186
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
187 g_return_val_if_fail(gs != NULL, FALSE);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
188
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
189 /* msim_msg_free() will free this GString the caller created. */
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
190 msg = msim_msg_append(msg, key, type, gs);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
191 break;
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
192
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
193 case MSIM_TYPE_LIST:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
194 gl = va_arg(argp, GList *);
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
195
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
196 g_return_val_if_fail(gl != NULL, FALSE);
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
197
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
198 msg = msim_msg_append(msg, key, type, gl);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
199 break;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
200
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
201 case MSIM_TYPE_DICTIONARY:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
202 dict = va_arg(argp, MsimMessage *);
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
203
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
204 g_return_val_if_fail(dict != NULL, FALSE);
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
205
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
206 msg = msim_msg_append(msg, key, type, dict);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
207 break;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
208
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
209 default:
17694
231b87b76da4 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17692
diff changeset
210 purple_debug_info("msim", "msim_send: unknown type %d\n", type);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
211 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
212 }
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
213 } while(key);
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
214 va_end(argp);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
215
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
216 return msg;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
217 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
218
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
219 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
220 * Create a new MsimMessage.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
221 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
222 * @param first_key The first key in the sequence, or NULL for an empty message.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
223 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
224 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
225 * See msim_msg_append() documentation for details on types.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
226 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
227 MsimMessage *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
228 msim_msg_new(gchar *first_key, ...)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
229 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
230 va_list argp;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
231
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
232 if (first_key) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
233 va_start(argp, first_key);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
234 return msim_msg_new_v(first_key, argp);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
235 } else {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
236 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
237 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
238 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
239
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
240 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
241 * Pack a string using the given GFunc and seperator.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
242 * Used by msim_msg_dump() and msim_msg_pack().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
243 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
244 static gchar *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
245 msim_msg_pack_using(MsimMessage *msg,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
246 GFunc gf,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
247 const gchar *sep,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
248 const gchar *begin, const gchar *end)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
249 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
250 int num_items;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
251 gchar **strings;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
252 gchar **strings_tmp;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
253 gchar *joined;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
254 gchar *final;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
255 int i;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
256
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
257 g_return_val_if_fail(msg != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
258
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
259 num_items = g_list_length(msg);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
260
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
261 /* Add one for NULL terminator for g_strjoinv(). */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
262 strings = (gchar **)g_new0(gchar *, num_items + 1);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
263
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
264 strings_tmp = strings;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
265 g_list_foreach(msg, gf, &strings_tmp);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
266
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
267 joined = g_strjoinv(sep, strings);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
268 final = g_strconcat(begin, joined, end, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
269 g_free(joined);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
270
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
271 /* Clean up. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
272 for (i = 0; i < num_items; ++i) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
273 g_free(strings[i]);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
274 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
275
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
276 g_free(strings);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
277
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
278 return final;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
279 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
280
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
281 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
282 * Return a human-readable string of the message.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
283 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
284 * @return A new gchar *, must be g_free()'d.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
285 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
286 static gchar *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
287 msim_msg_dump_to_str(MsimMessage *msg)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
288 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
289 gchar *debug_str;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
290
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
291 if (!msg) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
292 debug_str = g_strdup("<MsimMessage: empty>");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
293 } else {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
294 debug_str = msim_msg_pack_using(msg, msim_msg_debug_string_element,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
295 "\n", "<MsimMessage: \n", "\n/MsimMessage>");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
296 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
297
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
298 return debug_str;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
299 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
300
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
301 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
302 * Store a human-readable string describing the element.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
303 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
304 * @param data Pointer to an MsimMessageElement.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
305 * @param user_data
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
306 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
307 static void
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
308 msim_msg_debug_string_element(gpointer data, gpointer user_data)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
309 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
310 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
311 gchar *string;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
312 GString *gs;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
313 gchar *binary;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
314 gchar ***items; /* wow, a pointer to a pointer to a pointer */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
315
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
316 gchar *s;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
317 GList *gl;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
318 guint i;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
319
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
320 elem = (MsimMessageElement *)data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
321 items = user_data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
322
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
323 switch (elem->type) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
324 case MSIM_TYPE_INTEGER:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
325 string = g_strdup_printf("%s(integer): %d", elem->name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
326 GPOINTER_TO_UINT(elem->data));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
327 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
328
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
329 case MSIM_TYPE_RAW:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
330 string = g_strdup_printf("%s(raw): %s", elem->name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
331 elem->data ? (gchar *)elem->data : "(NULL)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
332 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
333
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
334 case MSIM_TYPE_STRING:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
335 string = g_strdup_printf("%s(string): %s", elem->name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
336 elem->data ? (gchar *)elem->data : "(NULL)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
337 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
338
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
339 case MSIM_TYPE_BINARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
340 gs = (GString *)elem->data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
341 binary = purple_base64_encode((guchar*)gs->str, gs->len);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
342 string = g_strdup_printf("%s(binary, %d bytes): %s", elem->name, (int)gs->len, binary);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
343 g_free(binary);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
344 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
345
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
346 case MSIM_TYPE_BOOLEAN:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
347 string = g_strdup_printf("%s(boolean): %s", elem->name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
348 elem->data ? "TRUE" : "FALSE");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
349 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
350
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
351 case MSIM_TYPE_DICTIONARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
352 if (!elem->data) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
353 s = g_strdup("(NULL)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
354 } else {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
355 s = msim_msg_dump_to_str((MsimMessage *)elem->data);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
356 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
357
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
358 if (!s) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
359 s = g_strdup("(NULL, couldn't msim_msg_dump_to_str)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
360 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
361
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
362 string = g_strdup_printf("%s(dict): %s", elem->name, s);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
363
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
364 g_free(s);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
365 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
366
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
367 case MSIM_TYPE_LIST:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
368 gs = g_string_new("");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
369 g_string_append_printf(gs, "%s(list): \n", elem->name);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
370
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
371 i = 0;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
372 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
373 g_string_append_printf(gs, " %d. %s\n", i, (gchar *)(gl->data));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
374 ++i;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
375 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
376
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
377 string = g_string_free(gs, FALSE);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
378 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
379
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
380 default:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
381 string = g_strdup_printf("%s(unknown type %d",
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
382 elem->name ? elem->name : "(NULL)", elem->type);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
383 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
384 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
385
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
386 **items = string;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
387 ++(*items);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
388 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
389
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
390 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
391 * Search for and return the node in msg, matching name, or NULL.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
392 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
393 * @param msg Message to search within.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
394 * @param name Field name to search for.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
395 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
396 * @return The GList * node for the MsimMessageElement with the given name, or NULL if not found or name is NULL.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
397 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
398 * For internal use - users probably want to use msim_msg_get() to
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
399 * access the MsimMessageElement *, instead of the GList * container.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
400 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
401 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
402 static GList *
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
403 msim_msg_get_node(const MsimMessage *msg, const gchar *name)
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
404 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
405 GList *node;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
406
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
407 if (!name || !msg) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
408 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
409 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
410
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
411 /* Linear search for the given name. O(n) but n is small. */
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
412 for (node = (GList*)msg; node != NULL; node = g_list_next(node)) {
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
413 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
414
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
415 elem = (MsimMessageElement *)node->data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
416
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
417 g_return_val_if_fail(elem != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
418 g_return_val_if_fail(elem->name != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
419
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
420 if (strcmp(elem->name, name) == 0) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
421 return node;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
422 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
423 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
424 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
425 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
426
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
427 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
428 * Create a new MsimMessageElement * - must be g_free()'d.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
429 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
430 * For internal use; users probably want msim_msg_append() or msim_msg_insert_before().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
431 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
432 * @param dynamic_name Whether 'name' should be freed when the message is destroyed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
433 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
434 static MsimMessageElement *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
435 msim_msg_element_new(const gchar *name, MsimMessageType type, gpointer data, gboolean dynamic_name)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
436 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
437 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
438
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
439 elem = g_new0(MsimMessageElement, 1);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
440
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
441 elem->name = name;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
442 elem->dynamic_name = dynamic_name;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
443 elem->type = type;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
444 elem->data = data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
445
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
446 return elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
447 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
448
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
449 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
450 * Append a new element to a message.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
451 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
452 * @param name Textual name of element (static string, neither copied nor freed).
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
453 * @param type An MSIM_TYPE_* code.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
454 * @param data Pointer to data, see below.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
455 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
456 * @return The new message - must be assigned to as with GList*. For example:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
457 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
458 * msg = msim_msg_append(msg, ...)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
459 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
460 * The data parameter depends on the type given:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
461 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
462 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
463 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
464 * * MSIM_TYPE_BINARY: Same as integer, non-zero is TRUE and zero is FALSE.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
465 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
466 * * MSIM_TYPE_STRING: gchar *. The data WILL BE FREED - use g_strdup() if needed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
467 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
468 * * MSIM_TYPE_RAW: gchar *. The data WILL BE FREED - use g_strdup() if needed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
469 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
470 * * MSIM_TYPE_BINARY: g_string_new_len(data, length). The data AND GString will be freed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
471 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
472 * * MSIM_TYPE_DICTIONARY: An MsimMessage *. Freed when message is destroyed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
473 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
474 * * MSIM_TYPE_LIST: GList * of gchar *. Again, everything will be freed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
475 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
476 * */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
477 MsimMessage *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
478 msim_msg_append(MsimMessage *msg, const gchar *name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
479 MsimMessageType type, gpointer data)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
480 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
481 return g_list_append(msg, msim_msg_element_new(name, type, data, FALSE));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
482 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
483
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
484 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
485 * Append a new element, but with a dynamically-allocated name.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
486 * Exactly the same as msim_msg_append(), except 'name' will be freed when
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
487 * the message is destroyed. Normally, it isn't, because a static string is given.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
488 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
489 static MsimMessage *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
490 msim_msg_append_dynamic_name(MsimMessage *msg, gchar *name,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
491 MsimMessageType type, gpointer data)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
492 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
493 return g_list_append(msg, msim_msg_element_new(name, type, data, TRUE));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
494 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
495
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
496 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
497 * Insert a new element into a message, before the given element name.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
498 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
499 * @param name_before Name of the element to insert the new element before. If
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
500 * could not be found or NULL, new element will be inserted at end.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
501 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
502 * See msim_msg_append() for usage of other parameters, and an important note about return value.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
503 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
504 MsimMessage *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
505 msim_msg_insert_before(MsimMessage *msg, const gchar *name_before,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
506 const gchar *name, MsimMessageType type, gpointer data)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
507 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
508 MsimMessageElement *new_elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
509 GList *node_before;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
510
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
511 new_elem = msim_msg_element_new(name, type, data, FALSE);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
512
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
513 node_before = msim_msg_get_node(msg, name_before);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
514
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
515 return g_list_insert_before(msg, node_before, new_elem);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
516 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
517
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
518 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
519 * Perform a deep copy on a GList * of gchar * strings. Free with msim_msg_list_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
520 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
521 static GList *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
522 msim_msg_list_copy(const GList *old)
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
523 {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
524 GList *new_list;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
525
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
526 new_list = NULL;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
527
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
528 /* Deep copy (g_list_copy is shallow). Copy each string. */
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
529 for (; old != NULL; old = g_list_next(old)) {
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
530 new_list = g_list_append(new_list, g_strdup(old->data));
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
531 }
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
532
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
533 return new_list;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
534 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
535
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
536 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
537 * Clone an individual element.
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
538 *
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
539 * @param data MsimMessageElement * to clone.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
540 * @param user_data Pointer to MsimMessage * to add cloned element to.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
541 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
542 static void
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
543 msim_msg_clone_element(gpointer data, gpointer user_data)
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
544 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
545 MsimMessageElement *elem;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
546 MsimMessage **new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
547 gpointer new_data;
20336
b93e7be3847b applied changes from 9d35dde0c779cca73548172223ba557f27d61882
Luke Schierer <lschiere@pidgin.im>
parents: 20243
diff changeset
548
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
549 GString *gs;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
550 MsimMessage *dict;
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
551
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
552 elem = (MsimMessageElement *)data;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
553 new = (MsimMessage **)user_data;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
554
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
555 switch (elem->type) {
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
556 case MSIM_TYPE_BOOLEAN:
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
557 case MSIM_TYPE_INTEGER:
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
558 new_data = elem->data;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
559 break;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
560
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
561 case MSIM_TYPE_RAW:
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
562 case MSIM_TYPE_STRING:
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
563 new_data = g_strdup((gchar *)elem->data);
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
564 break;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
565
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
566 case MSIM_TYPE_LIST:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
567 new_data = (gpointer)msim_msg_list_copy((GList *)(elem->data));
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
568 break;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
569
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
570 case MSIM_TYPE_BINARY:
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
571 gs = (GString *)elem->data;
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
572
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
573 new_data = g_string_new_len(gs->str, gs->len);
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
574 break;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
575 case MSIM_TYPE_DICTIONARY:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
576 dict = (MsimMessage *)elem->data;
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
577
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
578 new_data = msim_msg_clone(dict);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
579 break;
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
580
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
581 default:
17694
231b87b76da4 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17692
diff changeset
582 purple_debug_info("msim", "msim_msg_clone_element: unknown type %d\n", elem->type);
20336
b93e7be3847b applied changes from 9d35dde0c779cca73548172223ba557f27d61882
Luke Schierer <lschiere@pidgin.im>
parents: 20243
diff changeset
583 g_return_if_reached();
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
584 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
585
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
586 /* Append cloned data. Note that the 'name' field is a static string, so it
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
587 * never needs to be copied nor freed. */
24745
0e8d91cdd63a Change the msim_msg_clone_element() function to respect the "dynamic_name"
Mark Doliner <mark@kingant.net>
parents: 24552
diff changeset
588 if (elem->dynamic_name)
0e8d91cdd63a Change the msim_msg_clone_element() function to respect the "dynamic_name"
Mark Doliner <mark@kingant.net>
parents: 24552
diff changeset
589 *new = msim_msg_append_dynamic_name(*new, g_strdup(elem->name), elem->type, new_data);
0e8d91cdd63a Change the msim_msg_clone_element() function to respect the "dynamic_name"
Mark Doliner <mark@kingant.net>
parents: 24552
diff changeset
590 else
0e8d91cdd63a Change the msim_msg_clone_element() function to respect the "dynamic_name"
Mark Doliner <mark@kingant.net>
parents: 24552
diff changeset
591 *new = msim_msg_append(*new, elem->name, elem->type, new_data);
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
592 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
593
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
594 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
595 * Clone an existing MsimMessage.
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
596 *
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
597 * @return Cloned message; caller should free with msim_msg_free().
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
598 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
599 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
600 msim_msg_clone(MsimMessage *old)
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
601 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
602 MsimMessage *new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
603
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
604 if (old == NULL) {
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
605 return NULL;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
606 }
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
607
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
608 new = msim_msg_new(FALSE);
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
609
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
610 g_list_foreach(old, msim_msg_clone_element, &new);
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
611
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
612 return new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
613 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
614
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
615 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
616 * Free the data of a message element.
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
617 *
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
618 * @param elem The MsimMessageElement *
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
619 *
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
620 * Note this only frees the element data; you may also want to free the
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
621 * element itself with g_free() (see msim_msg_free_element()).
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
622 */
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
623 void
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
624 msim_msg_free_element_data(MsimMessageElement *elem)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
625 {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
626 switch (elem->type) {
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
627 case MSIM_TYPE_BOOLEAN:
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
628 case MSIM_TYPE_INTEGER:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
629 /* Integer value stored in gpointer - no need to free(). */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
630 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
631
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
632 case MSIM_TYPE_RAW:
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
633 case MSIM_TYPE_STRING:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
634 /* Always free strings - caller should have g_strdup()'d if
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
635 * string was static or temporary and not to be freed. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
636 g_free(elem->data);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
637 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
638
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
639 case MSIM_TYPE_BINARY:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
640 /* Free the GString itself and the binary data. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
641 g_string_free((GString *)elem->data, TRUE);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
642 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
643
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
644 case MSIM_TYPE_DICTIONARY:
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
645 msim_msg_free((MsimMessage *)elem->data);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
646 break;
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
647
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
648 case MSIM_TYPE_LIST:
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
649 g_list_free((GList *)elem->data);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
650 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
651
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
652 default:
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
653 purple_debug_info("msim", "msim_msg_free_element_data: "
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
654 "not freeing unknown type %d\n", elem->type);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
655 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
656 }
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
657 }
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
658
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
659 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
660 * Free a GList * of MsimMessageElement *'s.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
661 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
662 void
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
663 msim_msg_list_free(GList *l)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
664 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
665
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
666 for (; l != NULL; l = g_list_next(l)) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
667 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
668
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
669 elem = (MsimMessageElement *)l->data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
670
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
671 /* Note that name is almost never dynamically allocated elsewhere;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
672 * it is usually a static string, but not in lists. So cast it. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
673 g_free((gchar *)elem->name);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
674 g_free(elem->data);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
675 g_free(elem);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
676 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
677 g_list_free(l);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
678 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
679
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
680 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
681 * Free an individual message element.
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
682 *
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
683 * @param data MsimMessageElement * to free.
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
684 * @param user_data Not used; required to match g_list_foreach() callback prototype.
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
685 *
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
686 * Frees both the element data and the element itself.
22334
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
687 * Also frees the name if dynamic_name is TRUE.
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
688 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
689 static void
18880
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
690 msim_msg_free_element(gpointer data, gpointer user_data)
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
691 {
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
692 MsimMessageElement *elem;
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
693
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
694 elem = (MsimMessageElement *)data;
f41db253c1af Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18879
diff changeset
695
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
696 msim_msg_free_element_data(elem);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
697
22334
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
698 if (elem->dynamic_name)
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
699 /* Need to cast to remove const-ness, because
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
700 * elem->name is almost always a constant, static
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
701 * string, but not in this case. */
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
702 g_free((gchar *)elem->name);
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
703
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
704 g_free(elem);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
705 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
706
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
707 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
708 * Free a complete message.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
709 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
710 void
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
711 msim_msg_free(MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
712 {
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
713 if (!msg) {
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
714 /* already free as can be */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
715 return;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
716 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
717
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
718 g_list_foreach(msg, msim_msg_free_element, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
719 g_list_free(msg);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
720 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
721
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
722 /**
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
723 * Pack an element into its protocol representation.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
724 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
725 * @param data Pointer to an MsimMessageElement.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
726 * @param user_data Pointer to a gchar ** array of string items.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
727 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
728 * Called by msim_msg_pack(). Will pack the MsimMessageElement into
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
729 * a part of the protocol string and append it to the array. Caller
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
730 * is responsible for creating array to correct dimensions, and
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
731 * freeing each string element of the array added by this function.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
732 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
733 static void
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
734 msim_msg_pack_element(gpointer data, gpointer user_data)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
735 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
736 MsimMessageElement *elem;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
737 gchar *string, *data_string;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
738 gchar ***items;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
739
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
740 elem = (MsimMessageElement *)data;
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
741 items = (gchar ***)user_data;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
742
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
743 /* Exclude elements beginning with '_' from packed protocol messages. */
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
744 if (elem->name[0] == '_') {
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
745 return;
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
746 }
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
747
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
748 data_string = msim_msg_pack_element_data(elem);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
749
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
750 switch (elem->type) {
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
751 /* These types are represented by key name/value pairs (converted above). */
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
752 case MSIM_TYPE_INTEGER:
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
753 case MSIM_TYPE_RAW:
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
754 case MSIM_TYPE_STRING:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
755 case MSIM_TYPE_BINARY:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
756 case MSIM_TYPE_DICTIONARY:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
757 case MSIM_TYPE_LIST:
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
758 string = g_strconcat(elem->name, "\\", data_string, NULL);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
759 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
760
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
761 /* Boolean is represented by absence or presence of name. */
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
762 case MSIM_TYPE_BOOLEAN:
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
763 if (GPOINTER_TO_UINT(elem->data)) {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
764 /* True - leave in, with blank value. */
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
765 string = g_strdup_printf("%s\\", elem->name);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
766 } else {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
767 /* False - leave out. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
768 string = g_strdup("");
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
769 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
770 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
771
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
772 default:
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
773 g_free(data_string);
20336
b93e7be3847b applied changes from 9d35dde0c779cca73548172223ba557f27d61882
Luke Schierer <lschiere@pidgin.im>
parents: 20243
diff changeset
774 g_return_if_reached();
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
775 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
776 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
777
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
778 g_free(data_string);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
779
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
780 **items = string;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
781 ++(*items);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
782 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
783
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
784 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
785 * Pack an element into its protcol representation inside a dictionary.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
786 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
787 * See msim_msg_pack_element().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
788 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
789 static void
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
790 msim_msg_pack_element_dict(gpointer data, gpointer user_data)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
791 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
792 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
793 gchar *string, *data_string, ***items;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
794
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
795 elem = (MsimMessageElement *)data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
796 items = (gchar ***)user_data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
797
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
798 /* Exclude elements beginning with '_' from packed protocol messages. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
799 if (elem->name[0] == '_') {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
800 return;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
801 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
802
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
803 data_string = msim_msg_pack_element_data(elem);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
804
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
805 g_return_if_fail(data_string != NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
806
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
807 switch (elem->type) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
808 /* These types are represented by key name/value pairs (converted above). */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
809 case MSIM_TYPE_INTEGER:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
810 case MSIM_TYPE_RAW:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
811 case MSIM_TYPE_STRING:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
812 case MSIM_TYPE_BINARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
813 case MSIM_TYPE_DICTIONARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
814 case MSIM_TYPE_LIST:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
815 case MSIM_TYPE_BOOLEAN: /* Boolean is On or Off */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
816 string = g_strconcat(elem->name, "=", data_string, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
817 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
818
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
819 default:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
820 g_free(data_string);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
821 g_return_if_fail(FALSE);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
822 break;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
823 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
824
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
825 g_free(data_string);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
826
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
827 **items = string;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
828 ++(*items);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
829 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
830
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
831 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
832 * Return a packed string of a message suitable for sending over the wire.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
833 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
834 * @return A string. Caller must g_free().
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
835 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
836 gchar *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
837 msim_msg_pack(MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
838 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
839 g_return_val_if_fail(msg != NULL, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
840
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
841 return msim_msg_pack_using(msg, msim_msg_pack_element, "\\", "\\", "\\final\\");
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
842 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
843
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
844 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
845 * Return a packed string of a dictionary, suitable for embedding in MSIM_TYPE_DICTIONARY.
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
846 *
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
847 * @return A string; caller must g_free().
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
848 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
849 static gchar *
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
850 msim_msg_pack_dict(MsimMessage *msg)
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
851 {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
852 g_return_val_if_fail(msg != NULL, NULL);
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
853
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
854 return msim_msg_pack_using(msg, msim_msg_pack_element_dict, "\034", "", "");
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
855 }
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
856
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
857 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
858 * Send an existing MsimMessage.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
859 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
860 gboolean
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
861 msim_msg_send(MsimSession *session, MsimMessage *msg)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
862 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
863 gchar *raw;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
864 gboolean success;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
865
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
866 raw = msim_msg_pack(msg);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
867 g_return_val_if_fail(raw != NULL, FALSE);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
868 success = msim_send_raw(session, raw);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
869 g_free(raw);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
870
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
871 return success;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
872 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
873
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
874 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
875 * Return a message element data as a new string for a raw protocol message,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
876 * converting from other types (integer, etc.) if necessary.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
877 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
878 * @return const gchar * The data as a string, or NULL. Caller must g_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
879 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
880 * Returns a string suitable for inclusion in a raw protocol message, not necessarily
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
881 * optimal for human consumption. For example, strings are escaped. Use
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
882 * msim_msg_get_string() if you want a string, which in some cases is same as this.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
883 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
884 gchar *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
885 msim_msg_pack_element_data(MsimMessageElement *elem)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
886 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
887 GString *gs;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
888 GList *gl;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
889
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
890 g_return_val_if_fail(elem != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
891
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
892 switch (elem->type) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
893 case MSIM_TYPE_INTEGER:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
894 return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
895
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
896 case MSIM_TYPE_RAW:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
897 /* Not un-escaped - this is a raw element, already escaped if necessary. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
898 return (gchar *)g_strdup((gchar *)elem->data);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
899
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
900 case MSIM_TYPE_STRING:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
901 /* Strings get escaped. msim_escape() creates a new string. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
902 g_return_val_if_fail(elem->data != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
903 return elem->data ? msim_escape((gchar *)elem->data) :
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
904 g_strdup("(NULL)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
905
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
906 case MSIM_TYPE_BINARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
907 gs = (GString *)elem->data;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
908 /* Do not escape! */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
909 return purple_base64_encode((guchar *)gs->str, gs->len);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
910
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
911 case MSIM_TYPE_BOOLEAN:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
912 /* Not used by messages in the wire protocol * -- see msim_msg_pack_element.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
913 * Only used by dictionaries, see msim_msg_pack_element_dict. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
914 return elem->data ? g_strdup("On") : g_strdup("Off");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
915
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
916 case MSIM_TYPE_DICTIONARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
917 return msim_msg_pack_dict((MsimMessage *)elem->data);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
918
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
919 case MSIM_TYPE_LIST:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
920 /* Pack using a|b|c|d|... */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
921 gs = g_string_new("");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
922
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
923 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl)) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
924 g_string_append_printf(gs, "%s", (gchar*)(gl->data));
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
925
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
926 /* All but last element is separated by a bar. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
927 if (g_list_next(gl))
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
928 g_string_append(gs, "|");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
929 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
930
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
931 return g_string_free(gs, FALSE);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
932
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
933 default:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
934 purple_debug_info("msim", "field %s, unknown type %d\n",
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
935 elem->name ? elem->name : "(NULL)",
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
936 elem->type);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
937 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
938 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
939 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
940
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
941 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
942 * Send a message to the server, whose contents is specified using
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
943 * variable arguments.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
944 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
945 * @param session
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
946 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
947 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
948 * This function exists for coding convenience: it allows a message to be created
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
949 * and sent in one line of code. Internally it calls msim_msg_send().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
950 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
951 * IMPORTANT: See msim_msg_append() documentation for details on element types.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
952 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
953 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
954 gboolean
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
955 msim_send(MsimSession *session, ...)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
956 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
957 gboolean success;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
958 MsimMessage *msg;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
959 va_list argp;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
960
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
961 va_start(argp, session);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
962 msg = msim_msg_new_v(NULL, argp);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
963
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
964 /* Actually send the message. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
965 success = msim_msg_send(session, msg);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
966
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
967 /* Cleanup. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
968 msim_msg_free(msg);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
969
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
970 return success;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
971 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
972
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
973 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
974 * Print a human-readable string of the message to Purple's debug log.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
975 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
976 * @param fmt_string A static string, in which '%s' will be replaced.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
977 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
978 void
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
979 msim_msg_dump(const gchar *fmt_string, MsimMessage *msg)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
980 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
981 gchar *debug_str;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
982
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
983 g_return_if_fail(fmt_string != NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
984
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
985 debug_str = msim_msg_dump_to_str(msg);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
986
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
987 g_return_if_fail(debug_str != NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
988
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
989 purple_debug_info("msim", fmt_string, debug_str);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
990
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
991 g_free(debug_str);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
992 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
993
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
994 /**
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
995 * Parse a raw protocol message string into a MsimMessage *.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
996 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
997 * @param raw The raw message string to parse, will be g_free()'d.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
998 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
999 * @return MsimMessage *. Caller should msim_msg_free() when done.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1000 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1001 MsimMessage *
24764
c1c464583f8c Mark some parameters as const char * instead of char * and don't
Mark Doliner <mark@kingant.net>
parents: 24757
diff changeset
1002 msim_parse(const gchar *raw)
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1003 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1004 MsimMessage *msg;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1005 gchar *token;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1006 gchar **tokens;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1007 gchar *key;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1008 gchar *value;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1009 int i;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1010
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1011 g_return_val_if_fail(raw != NULL, NULL);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1012
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1013 purple_debug_info("msim", "msim_parse: got <%s>\n", raw);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1014
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1015 key = NULL;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1016
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1017 /* All messages begin with a \. */
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1018 if (raw[0] != '\\' || raw[1] == 0) {
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1019 purple_debug_info("msim", "msim_parse: incomplete/bad string, "
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1020 "missing initial backslash: <%s>\n", raw);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1021 /* XXX: Should we try to recover, and read to first backslash? */
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1022
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1023 return NULL;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1024 }
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1025
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1026 msg = msim_msg_new(FALSE);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1027
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1028 for (tokens = g_strsplit(raw + 1, "\\", 0), i = 0;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1029 (token = tokens[i]);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1030 i++) {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1031 #ifdef MSIM_DEBUG_PARSE
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1032 purple_debug_info("msim", "tok=<%s>, i%2=%d\n", token, i % 2);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1033 #endif
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1034 if (i % 2) {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1035 /* Odd-numbered ordinal is a value. */
17285
4f54e8c41086 Cosmetic improvement to MsimMessage debug output.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17284
diff changeset
1036
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1037 value = token;
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1038
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1039 /* Incoming protocol messages get tagged as MSIM_TYPE_RAW, which
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1040 * represents an untyped piece of data. msim_msg_get_* will
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1041 * convert to appropriate types for caller, and handle unescaping if needed. */
24805
22fd7467f0cc Fix a few small memleaks
Mark Doliner <mark@kingant.net>
parents: 24799
diff changeset
1042 msg = msim_msg_append_dynamic_name(msg, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value));
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1043 #ifdef MSIM_DEBUG_PARSE
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1044 purple_debug_info("msim", "insert string: |%s|=|%s|\n", key, value);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1045 #endif
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1046 } else {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1047 /* Even numbered indexes are key names. */
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1048 key = token;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1049 }
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1050 }
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1051 g_strfreev(tokens);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1052
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1053 return msg;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1054 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1055
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1056 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1057 * Return the first MsimMessageElement * with given name in the MsimMessage *.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1058 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1059 * @param name Name to search for.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1060 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1061 * @return MsimMessageElement * matching name, or NULL.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1062 *
17274
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
1063 * Note: useful fields of MsimMessageElement are 'data' and 'type', which
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
1064 * you can access directly. But it is often more convenient to use
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
1065 * another msim_msg_get_* that converts the data to what type you want.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1066 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1067 MsimMessageElement *
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1068 msim_msg_get(const MsimMessage *msg, const gchar *name)
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1069 {
17301
641c96277fa6 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17298
diff changeset
1070 GList *node;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1071
17301
641c96277fa6 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17298
diff changeset
1072 node = msim_msg_get_node(msg, name);
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
1073 if (node) {
17301
641c96277fa6 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17298
diff changeset
1074 return (MsimMessageElement *)node->data;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1075 } else {
17301
641c96277fa6 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17298
diff changeset
1076 return NULL;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1077 }
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1078 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1079
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1080 gchar *
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1081 msim_msg_get_string_from_element(MsimMessageElement *elem)
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1082 {
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1083 g_return_val_if_fail(elem != NULL, NULL);
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
1084 switch (elem->type) {
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1085 case MSIM_TYPE_INTEGER:
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1086 return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1087
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1088 case MSIM_TYPE_RAW:
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1089 /* Raw element from incoming message - if its a string, it'll
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1090 * be escaped. */
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1091 return msim_unescape((gchar *)elem->data);
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1092
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1093 case MSIM_TYPE_STRING:
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1094 /* Already unescaped. */
17692
3aed9c8c6af7 Fix bug where string returned from msim_msg_get_string() is not a new
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17680
diff changeset
1095 return g_strdup((gchar *)elem->data);
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1096
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1097 default:
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1098 purple_debug_info("msim", "msim_msg_get_string_element: type %d unknown, name %s\n",
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1099 elem->type, elem->name ? elem->name : "(NULL)");
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1100 return NULL;
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1101 }
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1102 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1103
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1104 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1105 * Return the data of an element of a given name, as a string.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1106 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1107 * @param name Name of element.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1108 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1109 * @return gchar * The data as a string, or NULL if not found.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1110 * Caller must g_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1111 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1112 * Note that msim_msg_pack_element_data() is similar, but returns a string
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1113 * for inclusion into a raw protocol string (escaped and everything).
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1114 * This function unescapes the string for you, if needed.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1115 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1116 gchar *
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1117 msim_msg_get_string(const MsimMessage *msg, const gchar *name)
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1118 {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1119 MsimMessageElement *elem;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1120
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1121 elem = msim_msg_get(msg, name);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1122 if (!elem) {
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1123 return NULL;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1124 }
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1125
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1126 return msim_msg_get_string_from_element(elem);
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1127 }
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1128
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1129 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1130 * Parse a |-separated string into a new GList. Free with msim_msg_list_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1131 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1132 static GList *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1133 msim_msg_list_parse(const gchar *raw)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1134 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1135 gchar **array;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1136 GList *list;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1137 guint i;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1138
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1139 array = g_strsplit(raw, "|", 0);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1140 list = NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1141
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1142 /* TODO: escape/unescape /3 <-> | within list elements */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1143
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1144 for (i = 0; array[i] != NULL; ++i) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1145 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1146
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1147 /* Freed in msim_msg_list_free() */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1148 elem = g_new0(MsimMessageElement, 1);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1149
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1150 /* Give the element a name for debugging purposes.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1151 * Not supposed to be looked up by this name; instead,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1152 * lookup the elements by indexing the array. */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1153 elem->name = g_strdup_printf("(list item #%d)", i);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1154 elem->type = MSIM_TYPE_RAW;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1155 elem->data = g_strdup(array[i]);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1156
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1157 list = g_list_append(list, elem);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1158 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1159
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1160 g_strfreev(array);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1161
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1162 return list;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1163 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1164
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1165 static GList *
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1166 msim_msg_get_list_from_element(MsimMessageElement *elem)
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1167 {
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1168 g_return_val_if_fail(elem != NULL, NULL);
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1169 switch (elem->type) {
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1170 case MSIM_TYPE_LIST:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1171 return msim_msg_list_copy((GList *)elem->data);
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1172
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1173 case MSIM_TYPE_RAW:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1174 return msim_msg_list_parse((gchar *)elem->data);
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1175
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1176 default:
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1177 purple_debug_info("msim_msg_get_list", "type %d unknown, name %s\n",
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1178 elem->type, elem->name ? elem->name : "(NULL)");
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1179 return NULL;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1180 }
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1181 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1182
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1183 /**
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1184 * Return an element as a new list. Caller frees with msim_msg_list_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1185 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1186 GList *
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1187 msim_msg_get_list(const MsimMessage *msg, const gchar *name)
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1188 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1189 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1190
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1191 elem = msim_msg_get(msg, name);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1192 if (!elem) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1193 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1194 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1195
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1196 return msim_msg_get_list_from_element(elem);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1197 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1198
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1199 /**
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1200 * Parse a \x1c-separated "dictionary" of key=value pairs into a hash table.
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1201 *
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1202 * @param raw The text of the dictionary to parse. Often the
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1203 * value for the 'body' field.
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1204 *
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1205 * @return A new MsimMessage *. Must msim_msg_free() when done.
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1206 */
24764
c1c464583f8c Mark some parameters as const char * instead of char * and don't
Mark Doliner <mark@kingant.net>
parents: 24757
diff changeset
1207 static MsimMessage *
c1c464583f8c Mark some parameters as const char * instead of char * and don't
Mark Doliner <mark@kingant.net>
parents: 24757
diff changeset
1208 msim_msg_dictionary_parse(const gchar *raw)
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1209 {
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1210 MsimMessage *dict;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1211 gchar *item;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1212 gchar **items;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1213 gchar **elements;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1214 guint i;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1215
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1216 g_return_val_if_fail(raw != NULL, NULL);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1217
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1218 dict = msim_msg_new(NULL);
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1219
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1220 for (items = g_strsplit(raw, "\x1c", 0), i = 0;
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1221 (item = items[i]);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1222 i++) {
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1223 gchar *key, *value;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1224
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1225 elements = g_strsplit(item, "=", 2);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1226
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1227 key = elements[0];
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1228 if (!key) {
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1229 purple_debug_info("msim", "msim_msg_dictionary_parse(%s): null key\n",
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1230 raw);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1231 g_strfreev(elements);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1232 break;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1233 }
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1234
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1235 value = elements[1];
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1236 if (!value) {
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1237 purple_debug_info("msim", "msim_msg_dictionary_prase(%s): null value\n",
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1238 raw);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1239 g_strfreev(elements);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1240 break;
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1241 }
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1242
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1243 #ifdef MSIM_DEBUG_PARSE
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1244 purple_debug_info("msim_msg_dictionary_parse","-- %s: %s\n", key ? key : "(NULL)",
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1245 value ? value : "(NULL)");
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1246 #endif
22334
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
1247 /* Append with _dynamic_name since g_strdup(key) is dynamic, and
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
1248 * needs to be freed when the message is destroyed. It isn't static as usual. */
9479cf89a97d In msimprpl, support dynamically-allocated strings in message element names,
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 22269
diff changeset
1249 dict = msim_msg_append_dynamic_name(dict, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value));
19248
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1250
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1251 g_strfreev(elements);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1252 }
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1253
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1254 g_strfreev(items);
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1255
d34e49d8fac7 Implement msim_msg_dictionary_parse() based on msim_parse_body(). This allows
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18911
diff changeset
1256 return dict;
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1257 }
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1258
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1259 static MsimMessage *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1260 msim_msg_get_dictionary_from_element(MsimMessageElement *elem)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1261 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1262 g_return_val_if_fail(elem != NULL, NULL);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1263 switch (elem->type) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1264 case MSIM_TYPE_DICTIONARY:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1265 return msim_msg_clone((MsimMessage *)elem->data);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1266
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1267 case MSIM_TYPE_RAW:
24764
c1c464583f8c Mark some parameters as const char * instead of char * and don't
Mark Doliner <mark@kingant.net>
parents: 24757
diff changeset
1268 return msim_msg_dictionary_parse(elem->data);
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1269
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1270 default:
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1271 purple_debug_info("msim_msg_get_dictionary", "type %d unknown, name %s\n",
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1272 elem->type, elem->name ? elem->name : "(NULL)");
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1273 return NULL;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1274 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1275 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1276
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1277 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1278 * Return an element as a new dictionary. Caller frees with msim_msg_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1279 */
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1280 MsimMessage *
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1281 msim_msg_get_dictionary(const MsimMessage *msg, const gchar *name)
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1282 {
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1283 MsimMessageElement *elem;
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1284
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1285 elem = msim_msg_get(msg, name);
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1286 if (!elem) {
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1287 return NULL;
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1288 }
17973
acff371d7908 Fix crash when deleting buddies on Windows. This was done by
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17968
diff changeset
1289
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1290 return msim_msg_get_dictionary_from_element(elem);
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1291 }
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1292
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1293 guint
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1294 msim_msg_get_integer_from_element(MsimMessageElement *elem)
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1295 {
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1296 g_return_val_if_fail(elem != NULL, 0);
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
1297 switch (elem->type) {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1298 case MSIM_TYPE_INTEGER:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1299 return GPOINTER_TO_UINT(elem->data);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1300
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1301 case MSIM_TYPE_RAW:
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1302 case MSIM_TYPE_STRING:
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1303 /* TODO: find out if we need larger integers */
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1304 return (guint)atoi((gchar *)elem->data);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1305
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1306 default:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1307 return 0;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1308 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1309 }
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1310
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1311 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1312 * Return the data of an element of a given name, as an unsigned integer.
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1313 *
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1314 * @param name Name of element.
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1315 *
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1316 * @return guint Numeric representation of data, or 0 if could not be converted / not found.
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1317 *
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1318 * Useful to obtain an element's data if you know it should be an integer,
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1319 * even if it is not stored as an MSIM_TYPE_INTEGER. MSIM_TYPE_STRING will
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1320 * be converted handled correctly, for example.
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1321 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1322 guint
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1323 msim_msg_get_integer(const MsimMessage *msg, const gchar *name)
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1324 {
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1325 MsimMessageElement *elem;
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1326
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1327 elem = msim_msg_get(msg, name);
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1328
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1329 if (!elem) {
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1330 return 0;
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1331 }
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1332
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1333 return msim_msg_get_integer_from_element(elem);
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1334 }
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1335
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1336 static gboolean
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1337 msim_msg_get_binary_from_element(MsimMessageElement *elem, gchar **binary_data, gsize *binary_length)
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1338 {
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1339 GString *gs;
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1340
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1341 g_return_val_if_fail(elem != NULL, FALSE);
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1342
18890
00499df91ffe Use cuddled if's etc. everywhere, to better match style of Pidgin/libpurple.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18889
diff changeset
1343 switch (elem->type) {
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1344 case MSIM_TYPE_RAW:
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1345 /* Incoming messages are tagged with MSIM_TYPE_RAW, and
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1346 * converted appropriately. They can still be "strings", just they won't
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1347 * be tagged as MSIM_TYPE_STRING (as MSIM_TYPE_STRING is intended to be used
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1348 * by msimprpl code for things like instant messages - stuff that should be
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1349 * escaped if needed). DWIM.
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1350 */
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1351
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1352 /* Previously, incoming messages were stored as MSIM_TYPE_STRING.
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1353 * This was fine for integers and strings, since they can easily be
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1354 * converted in msim_get_*, as desirable. However, it does not work
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1355 * well for binary strings. Consider:
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1356 *
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1357 * If incoming base64'd elements were tagged as MSIM_TYPE_STRING.
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1358 * msim_msg_get_binary() sees MSIM_TYPE_STRING, base64 decodes, returns.
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1359 * everything is fine.
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1360 * But then, msim_send() is called on the incoming message, which has
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1361 * a base64'd MSIM_TYPE_STRING that really is encoded binary. The values
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1362 * will be escaped since strings are escaped, and / becomes /2; no good.
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1363 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1364 */
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1365 *binary_data = (gchar *)purple_base64_decode((const gchar *)elem->data, binary_length);
30616
943fce8ef142 Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <daniel.atallah@gmail.com>
parents: 27343
diff changeset
1366 return ((*binary_data) != NULL);
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1367
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1368 case MSIM_TYPE_BINARY:
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1369 gs = (GString *)elem->data;
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1370
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1371 /* Duplicate data, so caller can g_free() it. */
20243
5440eed4ec7e applied changes from efedefa70ee1d6f7f4dd39afe5db10c7e5bfe64c
Richard Laager <rlaager@wiktel.com>
parents: 19681
diff changeset
1372 *binary_data = g_memdup(gs->str, gs->len);
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1373 *binary_length = gs->len;
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1374
18895
f732d072b118 Change all code to better match the style of libpurple - use 8-space tabs
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 18891
diff changeset
1375 return TRUE;
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1376
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1377
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1378 /* Rejected because if it isn't already a GString, have to g_new0 it and
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1379 * then caller has to ALSO free the GString!
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1380 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1381 * return (GString *)elem->data; */
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1382
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1383 default:
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1384 purple_debug_info("msim", "msim_msg_get_binary: unhandled type %d for key %s\n",
19253
b66c5991c011 For each msim_msg_get_*() function that takes an element name, add
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 19252
diff changeset
1385 elem->type, elem->name ? elem->name : "(NULL)");
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1386 return FALSE;
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1387 }
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1388 }
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1389
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1390 /**
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1391 * Return the data of an element of a given name, as a binary GString.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1392 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1393 * @param binary_data A pointer to a new pointer, which will be filled in with the binary data. CALLER MUST g_free().
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1394 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1395 * @param binary_length A pointer to an integer, which will be set to the binary data length.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1396 *
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1397 * @return TRUE if successful, FALSE if not.
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1398 */
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1399 gboolean
24799
c044eb54b7ac Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24784
diff changeset
1400 msim_msg_get_binary(const MsimMessage *msg, const gchar *name,
24757
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1401 gchar **binary_data, gsize *binary_length)
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1402 {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1403 MsimMessageElement *elem;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1404
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1405 elem = msim_msg_get(msg, name);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1406 if (!elem) {
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1407 return FALSE;
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1408 }
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1409
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1410 return msim_msg_get_binary_from_element(elem, binary_data, binary_length);
68cc1a8a0d21 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <mark@kingant.net>
parents: 24745
diff changeset
1411 }