annotate libpurple/protocols/myspace/message.c @ 17968:a2298513db8b

Move msim_escape() and msim_unescape() to message.c.
author Jeffrey Connelly <jaconnel@calpoly.edu>
date Sun, 22 Jul 2007 07:00:10 +0000
parents 6d1d86ab6a59
children acff371d7908
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
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
22 #include "myspace.h"
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
23 #include "message.h"
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
24
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
25 static gchar *msim_unescape_or_escape(gchar *msg, gboolean escape);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
26 static void msim_msg_free_element(gpointer data, gpointer user_data);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
27 static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
17326
f057837085b0 Change to use const gchar * where appropriate.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17318
diff changeset
28 static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep, const gchar *begin, const gchar *end);
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
29 static gchar *msim_msg_pack_element_data(MsimMessageElement *elem);
17326
f057837085b0 Change to use const gchar * where appropriate.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17318
diff changeset
30 static GList *msim_msg_get_node(MsimMessage *msg, const gchar *name);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
31 static MsimMessage *msim_msg_new_v(va_list argp);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
32
17968
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
33 /* Replacement codes to be replaced with associated replacement text,
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
34 * used for protocol message escaping / unescaping. */
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
35 static gchar* msim_replacement_code[] = { "/1", "/2", /* "/3", */ NULL };
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
36 static gchar* msim_replacement_text[] = { "/", "\\", /* "|", */ NULL };
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
37
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
38 /**
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
39 * Unescape or escape a protocol message.
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 * @param msg The message to be unescaped or escaped. WILL BE FREED.
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
42 * @param escape TRUE to escape, FALSE to unescape.
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 unescaped or 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 static gchar *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
47 msim_unescape_or_escape(gchar *msg, gboolean escape)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
48 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
49 gchar *tmp, *code, *text;
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
50 guint i;
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
51
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
52 /* Replace each code in msim_replacement_code with
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
53 * corresponding entry in msim_replacement_text. */
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
54 for (i = 0; (code = msim_replacement_code[i])
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
55 && (text = msim_replacement_text[i]); ++i)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
56 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
57 if (escape)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
58 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
59 tmp = str_replace(msg, text, code);
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
60 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
61 else
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
62 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
63 tmp = str_replace(msg, code, text);
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
64 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
65 g_free(msg);
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
66 msg = tmp;
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
67 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
68
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
69 return msg;
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
70 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
71
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
72 /**
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
73 * Escape a protocol message.
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
74 *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
75 * @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
76 */
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
77 gchar *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
78 msim_escape(const gchar *msg)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
79 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
80 return msim_unescape_or_escape(g_strdup(msg), TRUE);
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
81 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
82
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
83 gchar *
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
84 msim_unescape(const gchar *msg)
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
85 {
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
86 return msim_unescape_or_escape(g_strdup(msg), FALSE);
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
87 }
a2298513db8b Move msim_escape() and msim_unescape() to message.c.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17964
diff changeset
88
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
89 /** Create a new MsimMessage.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
90 *
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
91 * @param not_empty FALSE if message is empty, TRUE if variadic arguments follow.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
92 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
93 *
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
94 * See msim_msg_append() documentation for details on types.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
95 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
96 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
97 msim_msg_new(gboolean not_empty, ...)
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
98 {
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
99 va_list argp;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
100
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
101 va_start(argp, not_empty);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
102
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
103 if (not_empty)
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
104 return msim_msg_new_v(argp);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
105 else
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
106 return NULL;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
107 }
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
108
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
109 /** Create a new message from va_list and its first argument.
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
110 *
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
111 * @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
112 * @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
113 *
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
114 * 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
115 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
116 static MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
117 msim_msg_new_v(va_list argp)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
118 {
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
119 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
120 MsimMessageType type;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
121 GString *gs;
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
122 GList *gl;
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
123 MsimMessage *msg;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
124
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
125 /* 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
126 msg = NULL;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
127
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
128 /* Read key, type, value triplets until NULL. */
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
129 do
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
130 {
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
131 key = va_arg(argp, gchar *);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
132 if (!key)
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
133 {
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
134 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
135 }
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
136
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
137 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
138
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
139 /* Interpret variadic arguments. */
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
140 switch (type)
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
141 {
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
142 case MSIM_TYPE_INTEGER:
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
143 case MSIM_TYPE_BOOLEAN:
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
144 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
145 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
146
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
147 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
148 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
149
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
150 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
151
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
152 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
153 break;
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 case MSIM_TYPE_BINARY:
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
156 gs = va_arg(argp, GString *);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
157
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
158 g_return_val_if_fail(gs != NULL, FALSE);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
159
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
160 /* msim_msg_free() will free this GString the caller created. */
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
161 msg = msim_msg_append(msg, key, type, gs);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
162 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
163
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
164 case MSIM_TYPE_LIST:
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
165 gl = va_arg(argp, GList *);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
166
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
167 g_return_val_if_fail(gl != NULL, FALSE);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
168
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
169 msg = msim_msg_append(msg, key, type, gl);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
170
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
171 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
172 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
173 break;
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
174 }
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
175 } while(key);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
176 va_end(argp);
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
177
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
178 return msg;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
179 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
180
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
181 /** Perform a deep copy on a GList * of gchar * strings. Free with msim_msg_list_free(). */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
182 GList *
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
183 msim_msg_list_copy(GList *old)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
184 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
185 GList *new_list;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
186
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
187 new_list = NULL;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
188
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
189 /* Deep copy (g_list_copy is shallow). Copy each string. */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
190 for (; old != NULL; old = g_list_next(old))
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
191 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
192 new_list = g_list_append(new_list, g_strdup(old->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
193 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
194
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
195 return new_list;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
196 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
197
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
198 /** Free a GList * of gchar * strings. */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
199 void
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
200 msim_msg_list_free(GList *l)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
201 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
202
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
203 for (; l != NULL; l = g_list_next(l))
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
204 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
205 g_free((gchar *)(l->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
206 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
207 g_list_free(l);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
208 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
209
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
210 /** Parse a |-separated string into a new GList. Free with msim_msg_list_free(). */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
211 GList *
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
212 msim_msg_list_parse(const gchar *raw)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
213 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
214 gchar **array;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
215 GList *list;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
216 guint i;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
217
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
218 array = g_strsplit(raw, "|", 0);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
219 list = NULL;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
220
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
221 for (i = 0; array[i] != NULL; ++i)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
222 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
223 list = g_list_append(list, g_strdup(array[i]));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
224 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
225
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
226 g_strfreev(array);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
227
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
228 return list;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
229 }
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
230
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
231 /** Clone an individual element.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
232 *
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
233 * @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
234 * @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
235 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
236 static void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
237 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
238 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
239 MsimMessageElement *elem;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
240 MsimMessage **new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
241 gpointer new_data;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
242
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
243 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
244 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
245
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
246 switch (elem->type)
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
247 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
248 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
249 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
250 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
251 break;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
252
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
253 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
254 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
255 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
256 break;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
257
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
258 case MSIM_TYPE_LIST:
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
259 new_data = (gpointer)msim_msg_list_copy((GList *)(elem->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
260 break;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
261
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
262 case MSIM_TYPE_BINARY:
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
263 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
264 GString *gs;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
265
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
266 gs = (GString *)elem->data;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
267
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
268 new_data = g_string_new_len(gs->str, gs->len);
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
269 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
270 break;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
271 /* TODO: other types */
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
272 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
273 purple_debug_info("msim", "msim_msg_clone_element: unknown type %d\n", 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
274 g_return_if_fail(NULL);
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
275 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
276
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
277 /* 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
278 * never needs to be copied nor freed. */
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
279 *new = msim_msg_append(*new, elem->name, elem->type, new_data);
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
280 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
281
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
282 /** Clone an existing MsimMessage.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
283 *
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
284 * @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
285 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
286 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
287 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
288 {
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
289 MsimMessage *new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
290
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
291 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
292 return NULL;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
293
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
294 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
295
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
296 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
297
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
298 return new;
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
299 }
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
300
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
301 /** Free an individual message element.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
302 *
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
303 * @param data MsimMessageElement * to free.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
304 * @param user_data Not used; required to match g_list_foreach() callback prototype.
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
305 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
306 static void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
307 msim_msg_free_element(gpointer data, gpointer user_data)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
308 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
309 MsimMessageElement *elem;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
310
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
311 elem = (MsimMessageElement *)data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
312
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
313 switch (elem->type)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
314 {
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
315 case MSIM_TYPE_BOOLEAN:
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
316 case MSIM_TYPE_INTEGER:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
317 /* Integer value stored in gpointer - no need to free(). */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
318 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
319
17291
d8903e1320a9 Previously, the return value of the processing function and msim_process() told
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17285
diff changeset
320 case MSIM_TYPE_RAW:
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
321 case MSIM_TYPE_STRING:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
322 /* Always free strings - caller should have g_strdup()'d if
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
323 * string was static or temporary and not to be freed. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
324 g_free(elem->data);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
325 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
326
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
327 case MSIM_TYPE_BINARY:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
328 /* Free the GString itself and the binary data. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
329 g_string_free((GString *)elem->data, TRUE);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
330 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
331
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
332 case MSIM_TYPE_DICTIONARY:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
333 /* TODO: free dictionary */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
334 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
335
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
336 case MSIM_TYPE_LIST:
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
337 g_list_free((GList *)elem->data);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
338 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
339
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
340 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
341 purple_debug_info("msim", "msim_msg_free_element: not freeing unknown type %d\n", elem->type);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
342 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
343 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
344
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
345 g_free(elem);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
346 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
347
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
348 /** Free a complete message. */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
349 void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
350 msim_msg_free(MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
351 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
352 if (!msg)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
353 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
354 /* already free as can be */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
355 return;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
356 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
357
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
358 msim_msg_dump("msim_msg_free: freeing %s", msg);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
359
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
360 g_list_foreach(msg, msim_msg_free_element, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
361 g_list_free(msg);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
362 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
363
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
364 /** Send an existing MsimMessage. */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
365 gboolean
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
366 msim_msg_send(MsimSession *session, MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
367 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
368 gchar *raw;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
369 gboolean success;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
370
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
371 raw = msim_msg_pack(msg);
17944
c109b7f1c739 Allow setting status string messages. Known bug: custom status messages always
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17694
diff changeset
372 g_return_val_if_fail(raw != NULL, FALSE);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
373 success = msim_send_raw(session, raw);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
374 g_free(raw);
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
375
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
376 msim_msg_dump("msim_msg_send()ing %s\n", msg);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
377
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
378 return success;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
379 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
380
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
381 /**
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
382 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
383 * Send a message to the server, whose contents is specified using
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
384 * variable arguments.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
385 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
386 * @param session
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
387 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
388 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
389 * This function exists for coding convenience: it allows a message to be created
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
390 * and sent in one line of code. Internally it calls msim_msg_send().
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
391 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
392 * IMPORTANT: See msim_msg_append() documentation for details on element types.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
393 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
394 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
395 gboolean
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
396 msim_send(MsimSession *session, ...)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
397 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
398 gboolean success;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
399 MsimMessage *msg;
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
400 va_list argp;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
401
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
402 va_start(argp, session);
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
403 msg = msim_msg_new_v(argp);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
404
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
405 /* Actually send the message. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
406 success = msim_msg_send(session, msg);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
407
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
408 /* Cleanup. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
409 msim_msg_free(msg);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
410
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
411 return success;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
412 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
413
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
414 /** Create a new MsimMessageElement * - must be g_free()'d.
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
415 *
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
416 * For internal use; users probably want msim_msg_append() or msim_msg_insert_before().
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
417 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
418 static MsimMessageElement *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
419 msim_msg_element_new(const gchar *name, MsimMessageType type, gpointer data)
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
420 {
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
421 MsimMessageElement *elem;
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
422
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
423 elem = g_new0(MsimMessageElement, 1);
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
424
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
425 elem->name = name;
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
426 elem->type = type;
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
427 elem->data = data;
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
428
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
429 return elem;
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
430 }
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
431
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
432
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
433 /** Append a new element to a message.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
434 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
435 * @param name Textual name of element (static string, neither copied nor freed).
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
436 * @param type An MSIM_TYPE_* code.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
437 * @param data Pointer to data, see below.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
438 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
439 * @return The new message - must be assigned to as with GList*. For example:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
440 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
441 * msg = msim_msg_append(msg, ...)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
442 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
443 * The data parameter depends on the type given:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
444 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
445 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
446 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
447 * * MSIM_TYPE_BINARY: Same as integer, non-zero is TRUE and zero is FALSE.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
448 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
449 * * MSIM_TYPE_STRING: gchar *. The data WILL BE FREED - use g_strdup() if needed.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
450 *
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
451 * * MSIM_TYPE_RAW: gchar *. The data WILL BE FREED - use g_strdup() if needed.
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
452 *
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
453 * * MSIM_TYPE_BINARY: g_string_new_len(data, length). The data AND GString will be freed.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
454 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
455 * * MSIM_TYPE_DICTIONARY: TODO
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
456 *
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
457 * * MSIM_TYPE_LIST: GList * of gchar *. Again, everything will be freed.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
458 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
459 * */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
460 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
461 msim_msg_append(MsimMessage *msg, const gchar *name,
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
462 MsimMessageType type, gpointer data)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
463 {
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
464 return g_list_append(msg, msim_msg_element_new(name, type, data));
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
465 }
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
466
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
467 /** Insert a new element into a message, before the given element name.
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
468 *
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
469 * @param name_before Name of the element to insert the new element before. If
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
470 * could not be found or NULL, new element will be inserted at end.
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
471 *
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
472 * See msim_msg_append() for usage of other parameters, and an important note about return value.
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
473 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
474 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
475 msim_msg_insert_before(MsimMessage *msg, const gchar *name_before,
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
476 const gchar *name, MsimMessageType type, gpointer data)
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
477 {
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
478 MsimMessageElement *new_elem;
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
479 GList *node_before;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
480
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
481 new_elem = msim_msg_element_new(name, type, data);
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
482
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
483 node_before = msim_msg_get_node(msg, name_before);
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
484
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
485 return g_list_insert_before(msg, node_before, new_elem);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
486 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
487
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
488 /** Pack a string using the given GFunc and seperator.
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
489 * Used by msim_msg_dump() and msim_msg_pack().
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
490 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
491 gchar *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
492 msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep,
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
493 const gchar *begin, const gchar *end)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
494 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
495 gchar **strings;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
496 gchar **strings_tmp;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
497 gchar *joined;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
498 gchar *final;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
499 int i;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
500
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
501 g_return_val_if_fail(msg != NULL, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
502
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
503 /* Add one for NULL terminator for g_strjoinv(). */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
504 strings = (gchar **)g_new0(gchar *, g_list_length(msg) + 1);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
505
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
506 strings_tmp = strings;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
507 g_list_foreach(msg, gf, &strings_tmp);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
508
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
509 joined = g_strjoinv(sep, strings);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
510 final = g_strconcat(begin, joined, end, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
511 g_free(joined);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
512
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
513 /* Clean up. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
514 for (i = 0; i < g_list_length(msg); ++i)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
515 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
516 g_free(strings[i]);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
517 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
518
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
519 g_free(strings);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
520
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
521 return final;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
522 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
523 /** Store a human-readable string describing the element.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
524 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
525 * @param data Pointer to an MsimMessageElement.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
526 * @param user_data
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
527 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
528 static void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
529 msim_msg_debug_string_element(gpointer data, gpointer user_data)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
530 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
531 MsimMessageElement *elem;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
532 gchar *string;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
533 GString *gs;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
534 gchar *binary;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
535 gchar ***items; /* wow, a pointer to a pointer to a pointer */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
536
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
537 elem = (MsimMessageElement *)data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
538 items = user_data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
539
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
540 switch (elem->type)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
541 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
542 case MSIM_TYPE_INTEGER:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
543 string = g_strdup_printf("%s(integer): %d", elem->name, GPOINTER_TO_UINT(elem->data));
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
544 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
545
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
546 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
547 string = g_strdup_printf("%s(raw): %s", elem->name, (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
548 break;
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
549
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
550 case MSIM_TYPE_STRING:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
551 string = g_strdup_printf("%s(string): %s", elem->name, (gchar *)elem->data);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
552 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
553
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
554 case MSIM_TYPE_BINARY:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
555 gs = (GString *)elem->data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
556 binary = purple_base64_encode((guchar*)gs->str, gs->len);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
557 string = g_strdup_printf("%s(binary, %d bytes): %s", elem->name, (int)gs->len, binary);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
558 g_free(binary);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
559 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
560
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
561 case MSIM_TYPE_BOOLEAN:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
562 string = g_strdup_printf("%s(boolean): %s", elem->name,
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
563 GPOINTER_TO_UINT(elem->data) ? "TRUE" : "FALSE");
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
564 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
565
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
566 case MSIM_TYPE_DICTIONARY:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
567 /* TODO: provide human-readable output of dictionary. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
568 string = g_strdup_printf("%s(dict): TODO", elem->name);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
569 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
570
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
571 case MSIM_TYPE_LIST:
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
572 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
573 GString *gs;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
574 GList *gl;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
575 guint i;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
576
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
577 gs = g_string_new("");
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
578 g_string_append_printf(gs, "%s(list): \n", elem->name);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
579
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
580 i = 0;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
581 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl))
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
582 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
583 g_string_append_printf(gs, " %d. %s\n", i, (gchar *)(gl->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
584 ++i;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
585 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
586
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
587 string = gs->str;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
588 }
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
589 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
590
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
591 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
592 string = g_strdup_printf("%s(unknown type %d", elem->name, elem->type);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
593 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
594 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
595
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
596 **items = string;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
597 ++(*items);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
598 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
599
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
600 /** Print a human-readable string of the message to Purple's debug log.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
601 *
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
602 * @param fmt_string A static string, in which '%s' will be replaced.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
603 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
604 void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
605 msim_msg_dump(const gchar *fmt_string, MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
606 {
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
607 gchar *debug_str;
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
608
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
609 if (!msg)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
610 {
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
611 debug_str = g_strdup("<MsimMessage: empty>");
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
612 } else {
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
613 debug_str = msim_msg_pack_using(msg, msim_msg_debug_string_element,
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
614 "\n", "<MsimMessage: \n", "\n/MsimMessage>");
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
615 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
616
17944
c109b7f1c739 Allow setting status string messages. Known bug: custom status messages always
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17694
diff changeset
617 g_return_if_fail(debug_str != NULL);
c109b7f1c739 Allow setting status string messages. Known bug: custom status messages always
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17694
diff changeset
618
17298
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
619 purple_debug_info("msim", fmt_string, debug_str);
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
620
9c5b1dc7404f Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17294
diff changeset
621 g_free(debug_str);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
622 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
623
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
624 /** Return a message element data as a new string for a raw protocol message, converting from other types (integer, etc.) if necessary.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
625 *
17326
f057837085b0 Change to use const gchar * where appropriate.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17318
diff changeset
626 * @return const gchar * The data as a string, or NULL. Caller must g_free().
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
627 *
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
628 * Returns a string suitable for inclusion in a raw protocol message, not necessarily
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
629 * optimal for human consumption. For example, strings are escaped. Use
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
630 * msim_msg_get_string() if you want a string, which in some cases is same as this.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
631 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
632 static gchar *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
633 msim_msg_pack_element_data(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
634 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
635 switch (elem->type)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
636 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
637 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
638 return g_strdup_printf("%d", 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
639
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
640 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
641 /* Not un-escaped - this is a raw element, already escaped if necessary. */
17326
f057837085b0 Change to use const gchar * where appropriate.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17318
diff changeset
642 return (gchar *)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
643
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
644 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
645 /* Strings get escaped. msim_escape() creates a new string. */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
646 return msim_escape((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
647
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
648 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
649 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
650 GString *gs;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
651
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
652 gs = (GString *)elem->data;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
653 /* Do not escape! */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
654 return purple_base64_encode((guchar *)gs->str, gs->len);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
655 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
656
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
657 case MSIM_TYPE_BOOLEAN:
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
658 /* Not used by the wire protocol * -- see msim_msg_pack_element. */
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
659 return NULL;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
660
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
661 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
662 /* TODO: pack using k=v\034k2=v2\034... */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
663 return NULL;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
664
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
665 case MSIM_TYPE_LIST:
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
666 /* Pack using a|b|c|d|... */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
667 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
668 GString *gs;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
669 GList *gl;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
670
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
671 gs = g_string_new("");
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
672
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
673 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl))
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
674 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
675 g_string_append_printf(gs, "%s|", (gchar*)(gl->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
676 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
677
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
678 return gs->str;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
679 }
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
680
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
681 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
682 purple_debug_info("msim", "field %s, unknown type %d\n", elem->name, 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
683 return NULL;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
684 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
685 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
686
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
687 /** Pack an element into its protocol representation.
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
688 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
689 * @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
690 * @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
691 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
692 * 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
693 * 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
694 * 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
695 * 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
696 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
697 static void
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
698 msim_msg_pack_element(gpointer data, gpointer user_data)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
699 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
700 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
701 gchar *string, *data_string;
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
702 gchar ***items;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
703
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
704 elem = (MsimMessageElement *)data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
705 items = user_data;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
706
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
707 /* Exclude elements beginning with '_' from packed protocol messages. */
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
708 if (elem->name[0] == '_')
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
709 {
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
710 return;
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
711 }
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
712
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
713 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
714
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
715 switch (elem->type)
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
716 {
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
717 /* 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
718 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
719 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
720 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
721 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
722 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
723 case MSIM_TYPE_LIST:
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
724 string = g_strconcat(elem->name, "\\", data_string, NULL);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
725 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
726
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
727 /* Boolean is represented by absence or presence of name. */
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
728 case MSIM_TYPE_BOOLEAN:
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
729 if (GPOINTER_TO_UINT(elem->data))
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
730 {
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
731 /* True - leave in, with blank value. */
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
732 string = g_strdup_printf("%s\\", elem->name);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
733 } else {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
734 /* False - leave out. */
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
735 string = g_strdup("");
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
736 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
737 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
738
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
739 default:
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
740 g_free(data_string);
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
741 g_return_if_fail(FALSE);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
742 break;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
743 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
744
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
745 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
746
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
747 **items = string;
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
748 ++(*items);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
749 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
750
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
751
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
752 /** Return a packed string suitable for sending over the wire.
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
753 *
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
754 * @return A string. Caller must g_free().
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
755 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
756 gchar *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
757 msim_msg_pack(MsimMessage *msg)
17264
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
758 {
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
759 g_return_val_if_fail(msg != NULL, NULL);
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
760
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
761 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
762 }
ddcf9ef2ccec Add MsimMessage implementation (sending only).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents:
diff changeset
763
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
764 /**
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
765 * 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
766 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
767 * @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
768 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
769 * @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
770 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
771 MsimMessage *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
772 msim_parse(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
773 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
774 MsimMessage *msg;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
775 gchar *token;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
776 gchar **tokens;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
777 gchar *key;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
778 gchar *value;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
779 int i;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
780
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
781 g_return_val_if_fail(raw != NULL, NULL);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
782
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
783 purple_debug_info("msim", "msim_parse: got <%s>\n", raw);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
784
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
785 key = NULL;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
786
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
787 /* All messages begin with a \. */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
788 if (raw[0] != '\\' || raw[1] == 0)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
789 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
790 purple_debug_info("msim", "msim_parse: incomplete/bad string, "
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
791 "missing initial backslash: <%s>\n", raw);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
792 /* XXX: Should we try to recover, and read to first backslash? */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
793
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
794 g_free(raw);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
795 return NULL;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
796 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
797
17302
d69bcd74c240 Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17301
diff changeset
798 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
799
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
800 for (tokens = g_strsplit(raw + 1, "\\", 0), i = 0;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
801 (token = tokens[i]);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
802 i++)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
803 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
804 #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
805 purple_debug_info("msim", "tok=<%s>, i%2=%d\n", token, i % 2);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
806 #endif
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
807 if (i % 2)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
808 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
809 /* Odd-numbered ordinal is a value. */
17285
4f54e8c41086 Cosmetic improvement to MsimMessage debug output.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17284
diff changeset
810
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
811 value = token;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
812
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
813 /* 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
814 * 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
815 * convert to appropriate types for caller, and handle unescaping if needed. */
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
816 msg = msim_msg_append(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
817 #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
818 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
819 #endif
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
820 } else {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
821 /* Even numbered indexes are key names. */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
822 key = token;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
823 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
824 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
825 g_strfreev(tokens);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
826
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
827 /* Can free now since all data was copied to hash key/values */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
828 g_free(raw);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
829
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
830 return msg;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
831 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
832
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
833 /**
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
834 * Parse a \x1c-separated "dictionary" of key=value pairs into a hash table.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
835 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
836 * @param body_str The text of the dictionary to parse. Often the
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
837 * value for the 'body' field.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
838 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
839 * @return Hash table of the keys and values. Must g_hash_table_destroy() when done.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
840 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
841 GHashTable *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
842 msim_parse_body(const gchar *body_str)
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
843 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
844 GHashTable *table;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
845 gchar *item;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
846 gchar **items;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
847 gchar **elements;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
848 guint i;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
849
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
850 g_return_val_if_fail(body_str != NULL, NULL);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
851
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
852 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
853
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
854 for (items = g_strsplit(body_str, "\x1c", 0), i = 0;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
855 (item = items[i]);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
856 i++)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
857 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
858 gchar *key, *value;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
859
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
860 elements = g_strsplit(item, "=", 2);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
861
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
862 key = elements[0];
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
863 if (!key)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
864 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
865 purple_debug_info("msim", "msim_parse_body(%s): null key\n",
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
866 body_str);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
867 g_strfreev(elements);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
868 break;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
869 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
870
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
871 value = elements[1];
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
872 if (!value)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
873 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
874 purple_debug_info("msim", "msim_parse_body(%s): null value\n",
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
875 body_str);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
876 g_strfreev(elements);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
877 break;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
878 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
879
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
880 #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
881 purple_debug_info("msim", "-- %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
882 #endif
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
883
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
884 /* XXX: This overwrites duplicates. */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
885 /* TODO: make the GHashTable values be GList's, and append to the list if
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
886 * there is already a value of the same key name. This is important for
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
887 * the WebChallenge message. */
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
888 g_hash_table_insert(table, g_strdup(key), g_strdup(value));
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
889
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
890 g_strfreev(elements);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
891 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
892
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
893 g_strfreev(items);
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
894
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
895 return table;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
896 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
897
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
898 /** Search for and return the node in msg, matching name, or NULL.
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
899 *
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
900 * @param msg Message to search within.
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
901 * @param name Field name to search for.
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
902 *
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
903 * @return The GList * node for the MsimMessageElement with the given name, or NULL if not found or name is NULL.
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
904 *
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
905 * For internal use - users probably want to use msim_msg_get() to
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
906 * access the MsimMessageElement *, instead of the GList * container.
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
907 *
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
908 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
909 static GList *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
910 msim_msg_get_node(MsimMessage *msg, const gchar *name)
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
911 {
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
912 GList *i;
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
913
17318
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
914 if (!name)
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
915 {
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
916 return NULL;
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
917 }
7abd1eca3d18 Bug fixes in MsimMessage:
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17311
diff changeset
918
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
919 /* Linear search for the given name. O(n) but n is small. */
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
920 for (i = g_list_first(msg); i != NULL; i = g_list_next(i))
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
921 {
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
922 MsimMessageElement *elem;
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
923
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
924 elem = i->data;
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
925 g_return_val_if_fail(elem != NULL, NULL);
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
926
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
927 if (strcmp(elem->name, name) == 0)
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
928 return i;
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
929 }
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
930 return NULL;
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
931 }
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
932
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
933 /** Return the first MsimMessageElement * with given name in the MsimMessage *.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
934 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
935 * @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
936 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
937 * @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
938 *
17274
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
939 * 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
940 * 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
941 * 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
942 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
943 MsimMessageElement *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
944 msim_msg_get(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
945 {
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
946 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
947
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
948 node = msim_msg_get_node(msg, name);
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
949 if (node)
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
950 return (MsimMessageElement *)node->data;
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
951 else
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
952 return NULL;
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
953 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
954
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
955 /** Return the data of an element of a given name, as a string.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
956 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
957 * @param name Name of element.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
958 *
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
959 * @return gchar * The data as a string. Caller must g_free().
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
960 *
17311
3720176bdac6 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17302
diff changeset
961 * Note that msim_msg_pack_element_data() is similar, but returns a string
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
962 * for inclusion into a raw protocol string (escaped and everything).
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
963 * This function unescapes the string for you, if needed.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
964 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
965 gchar *
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
966 msim_msg_get_string(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
967 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
968 MsimMessageElement *elem;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
969
17274
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
970 elem = msim_msg_get(msg, name);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
971 if (!elem)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
972 return NULL;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
973
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
974 switch (elem->type)
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
975 {
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
976 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
977 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
978
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
979 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
980 /* 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
981 * be escaped. */
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
982 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
983
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
984 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
985 /* 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
986 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
987
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
988 default:
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
989 purple_debug_info("msim", "msim_msg_get_string: type %d unknown, name %s\n",
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
990 elem->type, name);
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
991 return NULL;
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
992 }
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
993 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
994
17964
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
995 /** Return an element as a new list. Caller frees with msim_msg_list_free(). */
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
996 GList *
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
997 msim_msg_get_list(MsimMessage *msg, const gchar *name)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
998 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
999 MsimMessageElement *elem;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1000
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1001 elem = msim_msg_get(msg, name);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1002 if (!elem)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1003 return NULL;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1004
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1005 switch (elem->type)
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1006 {
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1007 case MSIM_TYPE_LIST:
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1008 return msim_msg_list_copy((GList *)(elem->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1009
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1010 case MSIM_TYPE_RAW:
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1011 return msim_msg_list_parse((gchar *)(elem->data));
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1012
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1013 default:
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1014 purple_debug_info("msim_msg_get_list", "type %d unknown, name %s\n",
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1015 elem->type, name);
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1016 return NULL;
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1017 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1018 }
6d1d86ab6a59 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17944
diff changeset
1019
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1020 /** Return the data of an element of a given name, as an integer.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1021 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1022 * @param name Name of element.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1023 *
17327
320b0b450c7b msim_msg_get_integer() - if could not find element, return 0.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17326
diff changeset
1024 * @return guint Numeric representation of data, or 0 if could not be converted / not found.
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1025 *
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1026 * Useful to obtain an element's data if you know it should be an integer,
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1027 * even if it is not stored as an MSIM_TYPE_INTEGER. MSIM_TYPE_STRING will
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1028 * be converted handled correctly, for example.
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1029 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1030 guint
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1031 msim_msg_get_integer(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
1032 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1033 MsimMessageElement *elem;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1034
17274
9accf6d6cd61 Change msim_msg_get_element to msim_msg_get.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17273
diff changeset
1035 elem = msim_msg_get(msg, name);
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1036
17327
320b0b450c7b msim_msg_get_integer() - if could not find element, return 0.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17326
diff changeset
1037 if (!elem)
320b0b450c7b msim_msg_get_integer() - if could not find element, return 0.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17326
diff changeset
1038 return 0;
320b0b450c7b msim_msg_get_integer() - if could not find element, return 0.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17326
diff changeset
1039
17266
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1040 switch (elem->type)
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1041 {
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1042 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
1043 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
1044
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1045 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
1046 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
1047 /* 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
1048 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
1049
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1050 default:
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1051 return 0;
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1052 }
793301c04e3a (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17264
diff changeset
1053 }
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1054
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1055 /** Return the data of an element of a given name, as a binary GString.
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1056 *
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1057 * @param binary_data A pointer to a new pointer, which will be filled in with the binary data. CALLER MUST g_free().
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1058 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1059 * @param binary_length A pointer to an integer, which will be set to the binary data length.
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1060 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1061 * @return TRUE if successful, FALSE if not.
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1062 */
17661
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1063 gboolean
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1064 msim_msg_get_binary(MsimMessage *msg, const gchar *name,
38030f1a2e56 Split return type and function name + arguments on to separate lines, to
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17327
diff changeset
1065 gchar **binary_data, gsize *binary_length)
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1066 {
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1067 MsimMessageElement *elem;
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1068
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1069 elem = msim_msg_get(msg, name);
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1070
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1071 switch (elem->type)
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1072 {
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1073 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
1074 /* 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
1075 * 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
1076 * 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
1077 * 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
1078 * 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
1079 */
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1080
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1081 /* 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
1082 * 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
1083 * 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
1084 * 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
1085 *
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1086 * 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
1087 * 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
1088 * 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
1089 * 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
1090 * 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
1091 * 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
1092 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1093 */
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1094 *binary_data = (gchar *)purple_base64_decode((const gchar *)elem->data, binary_length);
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1095 return TRUE;
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1096
17276
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1097 case MSIM_TYPE_BINARY:
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1098 {
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1099 GString *gs;
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1100
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1101 gs = (GString *)elem->data;
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1102
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1103 /* Duplicate data, so caller can g_free() it. */
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1104 *binary_data = g_new0(char, gs->len);
17281
d8afaaf24f34 Trivial fixes to clean up MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17277
diff changeset
1105 memcpy(*binary_data, gs->str, 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
1106
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1107 *binary_length = gs->len;
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1108
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1109 return TRUE;
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1110 }
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1111
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1112
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1113 /* Rejected because if it isn't already a GString, have to g_new0 it and
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1114 * then caller has to ALSO free the GString!
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1115 *
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1116 * 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
1117
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1118 default:
17284
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1119 purple_debug_info("msim", "msim_msg_get_binary: unhandled type %d for key %s\n",
37499e926a42 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17282
diff changeset
1120 elem->type, name);
17277
af7083a8ada7 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17276
diff changeset
1121 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
1122 }
b9c0a8bb94b9 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeffrey Connelly <jaconnel@calpoly.edu>
parents: 17274
diff changeset
1123 }