libpurple/protocols/myspace/message.c

Sun, 01 Jul 2007 23:33:27 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Sun, 01 Jul 2007 23:33:27 +0000
branch
soc.2007.msimprpl
changeset 18006
a63c60e26d12
parent 17994
b3b072dd8478
child 18013
3238cfe8d879
permissions
-rw-r--r--

In msim_tooltip_text, do not try to display items with no value. In Linux,
"%s" on a null pointer is formatted as "(null)", but on Windows this leads to
a crash.

Closes #1999.

17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1 /** MySpaceIM protocol messages
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
3 * \author Jeff Connelly
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
4 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
5 * Copyright (C) 2007, Jeff Connelly <jeff2@homing.pidgin.im>
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
6 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
11 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
16 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
20 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
21
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
22 #include "myspace.h"
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
23 #include "message.h"
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
24
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
25 static void msim_msg_free_element(gpointer data, gpointer user_data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
26 static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17962
diff changeset
27 static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep, const gchar *begin, const gchar *end);
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
28 static gchar *msim_msg_pack_element_data(MsimMessageElement *elem);
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17962
diff changeset
29 static GList *msim_msg_get_node(MsimMessage *msg, const gchar *name);
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
30 static MsimMessage *msim_msg_new_v(va_list argp);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
31
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
32 /** Create a new MsimMessage.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
33 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
34 * @param not_empty FALSE if message is empty, TRUE if variadic arguments follow.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
35 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
36 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
37 * See msim_msg_append() documentation for details on types.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
38 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
39 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
40 msim_msg_new(gboolean not_empty, ...)
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
41 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
42 va_list argp;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
43
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
44 va_start(argp, not_empty);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
45
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
46 if (not_empty)
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
47 return msim_msg_new_v(argp);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
48 else
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
49 return NULL;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
50 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
51
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
52 /** Create a new message from va_list and its first argument.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
53 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
54 * @param argp A va_list of variadic arguments, already started with va_start(). Will be va_end()'d.
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
55 * @return New MsimMessage *, must be freed with msim_msg_free().
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
56 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
57 * For internal use - users probably want msim_msg_new() or msim_send().
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
58 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
59 static MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
60 msim_msg_new_v(va_list argp)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
61 {
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
62 gchar *key, *value;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
63 MsimMessageType type;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
64 GString *gs;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
65 MsimMessage *msg;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
66
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
67 /* Begin with an empty message. */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
68 msg = NULL;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
69
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
70 /* Read key, type, value triplets until NULL. */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
71 do
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
72 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
73 key = va_arg(argp, gchar *);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
74 if (!key)
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
75 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
76 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
77 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
78
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
79 type = va_arg(argp, int);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
80
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
81 /* Interpret variadic arguments. */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
82 switch (type)
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
83 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
84 case MSIM_TYPE_INTEGER:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
85 case MSIM_TYPE_BOOLEAN:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
86 msg = msim_msg_append(msg, key, type, GUINT_TO_POINTER(va_arg(argp, int)));
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
87 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
88
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
89 case MSIM_TYPE_STRING:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
90 value = va_arg(argp, char *);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
91
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
92 g_return_val_if_fail(value != NULL, FALSE);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
93
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
94 msg = msim_msg_append(msg, key, type, value);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
95 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
96
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
97 case MSIM_TYPE_BINARY:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
98 gs = va_arg(argp, GString *);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
99
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
100 g_return_val_if_fail(gs != NULL, FALSE);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
101
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
102 /* msim_msg_free() will free this GString the caller created. */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
103 msg = msim_msg_append(msg, key, type, gs);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
104 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
105
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
106 default:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
107 purple_debug_info("msim", "msim_send: unknown type %d (%c)\n", type, type);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
108 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
109 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
110 } while(key);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
111 va_end(argp);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
112
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
113 return msg;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
114 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
115
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
116
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
117 /** Clone an individual element.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
118 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
119 * @param data MsimMessageElement * to clone.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
120 * @param user_data Pointer to MsimMessage * to add cloned element to.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
121 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
122 static void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
123 msim_msg_clone_element(gpointer data, gpointer user_data)
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
124 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
125 MsimMessageElement *elem;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
126 MsimMessage **new;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
127 gpointer new_data;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
128
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
129 elem = (MsimMessageElement *)data;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
130 new = (MsimMessage **)user_data;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
131
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
132 switch (elem->type)
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
133 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
134 case MSIM_TYPE_BOOLEAN:
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
135 case MSIM_TYPE_INTEGER:
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
136 new_data = elem->data;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
137 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
138
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
139 case MSIM_TYPE_RAW:
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
140 case MSIM_TYPE_STRING:
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
141 new_data = g_strdup((gchar *)elem->data);
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
142 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
143
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
144 case MSIM_TYPE_BINARY:
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
145 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
146 GString *gs;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
147
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
148 gs = (GString *)elem->data;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
149
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
150 new_data = g_string_new_len(gs->str, gs->len);
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
151 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
152 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
153 /* TODO: other types */
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
154 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
155 purple_debug_info("msim", "msim_msg_clone_element: unknown type %d (%c)\n", elem->type, elem->type);
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
156 g_return_if_fail(NULL);
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
157 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
158
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
159 /* Append cloned data. Note that the 'name' field is a static string, so it
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
160 * never needs to be copied nor freed. */
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
161 *new = msim_msg_append(*new, elem->name, elem->type, new_data);
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
162 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
163
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
164 /** Clone an existing MsimMessage.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
165 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
166 * @return Cloned message; caller should free with msim_msg_free().
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
167 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
168 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
169 msim_msg_clone(MsimMessage *old)
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
170 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
171 MsimMessage *new;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
172
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
173 if (old == NULL)
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
174 return NULL;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
175
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
176 new = msim_msg_new(FALSE);
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
177
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
178 g_list_foreach(old, msim_msg_clone_element, &new);
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
179
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
180 return new;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
181 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
182
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
183 /** Free an individual message element.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
184 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
185 * @param data MsimMessageElement * to free.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
186 * @param user_data Not used; required to match g_list_foreach() callback prototype.
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
187 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
188 static void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
189 msim_msg_free_element(gpointer data, gpointer user_data)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
190 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
191 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
192
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
193 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
194
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
195 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
196 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
197 case MSIM_TYPE_BOOLEAN:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
198 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
199 /* Integer value stored in gpointer - no need to free(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
200 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
201
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
202 case MSIM_TYPE_RAW:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
203 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
204 /* Always free strings - caller should have g_strdup()'d if
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
205 * string was static or temporary and not to be freed. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
206 g_free(elem->data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
207 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
208
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
209 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
210 /* Free the GString itself and the binary data. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
211 g_string_free((GString *)elem->data, TRUE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
212 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
213
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
214 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
215 /* TODO: free dictionary */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
216 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
217
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
218 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
219 /* TODO: free list */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
220 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
221
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
222 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
223 purple_debug_info("msim", "msim_msg_free_element: not freeing unknown type %d (%c)\n",
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
224 elem->type, elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
225 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
226 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
227
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
228 g_free(elem);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
229 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
230
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
231 /** Free a complete message. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
232 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
233 msim_msg_free(MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
234 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
235 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
236 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
237 /* already free as can be */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
238 return;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
239 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
240
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
241 g_list_foreach(msg, msim_msg_free_element, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
242 g_list_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
243 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
244
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
245 /** Send an existing MsimMessage. */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
246 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
247 msim_msg_send(MsimSession *session, MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
248 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
249 gchar *raw;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
250 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
251
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
252 raw = msim_msg_pack(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
253 success = msim_send_raw(session, raw);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
254 g_free(raw);
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
255
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
256 msim_msg_dump("msim_msg_send()ing %s\n", msg);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
257
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
258 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
259 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
260
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
261 /**
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
262 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
263 * Send a message to the server, whose contents is specified using
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
264 * variable arguments.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
265 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
266 * @param session
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
267 * @param ... A sequence of gchar* key/type/value triplets, terminated with NULL.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
268 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
269 * This function exists for coding convenience: it allows a message to be created
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
270 * and sent in one line of code. Internally it calls msim_msg_send().
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
271 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
272 * IMPORTANT: See msim_msg_append() documentation for details on element types.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
273 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
274 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
275 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
276 msim_send(MsimSession *session, ...)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
277 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
278 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
279 MsimMessage *msg;
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
280 va_list argp;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
281
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
282 va_start(argp, session);
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
283 msg = msim_msg_new_v(argp);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
284
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285 /* Actually send the message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
286 success = msim_msg_send(session, msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
287
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
288 /* Cleanup. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
289 msim_msg_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
290
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
291 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
292 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
293
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
294 /** Create a new MsimMessageElement * - must be g_free()'d.
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
295 *
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
296 * For internal use; users probably want msim_msg_append() or msim_msg_insert_before().
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
297 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
298 static MsimMessageElement *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
299 msim_msg_element_new(const gchar *name, MsimMessageType type, gpointer data)
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
300 {
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
301 MsimMessageElement *elem;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
302
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
303 elem = g_new0(MsimMessageElement, 1);
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
304
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
305 elem->name = name;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
306 elem->type = type;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
307 elem->data = data;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
308
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
309 return elem;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
310 }
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
311
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
312
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
313 /** Append a new element to a message.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
314 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
315 * @param name Textual name of element (static string, neither copied nor freed).
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
316 * @param type An MSIM_TYPE_* code.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
317 * @param data Pointer to data, see below.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
318 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
319 * @return The new message - must be assigned to as with GList*. For example:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
320 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
321 * msg = msim_msg_append(msg, ...)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
322 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
323 * The data parameter depends on the type given:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
324 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
325 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
326 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
327 * * MSIM_TYPE_BINARY: Same as integer, non-zero is TRUE and zero is FALSE.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
328 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
329 * * MSIM_TYPE_STRING: gchar *. The data WILL BE FREED - use g_strdup() if needed.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
330 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
331 * * MSIM_TYPE_RAW: gchar *. The data WILL BE FREED - use g_strdup() if needed.
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
332 *
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
333 * * MSIM_TYPE_BINARY: g_string_new_len(data, length). The data AND GString will be freed.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
334 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
335 * * MSIM_TYPE_DICTIONARY: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
336 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
337 * * MSIM_TYPE_LIST: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
338 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
339 * */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
340 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
341 msim_msg_append(MsimMessage *msg, const gchar *name,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
342 MsimMessageType type, gpointer data)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
343 {
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
344 return g_list_append(msg, msim_msg_element_new(name, type, data));
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
345 }
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
346
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
347 /** Insert a new element into a message, before the given element name.
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
348 *
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
349 * @param name_before Name of the element to insert the new element before. If
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
350 * could not be found or NULL, new element will be inserted at end.
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
351 *
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
352 * See msim_msg_append() for usage of other parameters, and an important note about return value.
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
353 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
354 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
355 msim_msg_insert_before(MsimMessage *msg, const gchar *name_before,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
356 const gchar *name, MsimMessageType type, gpointer data)
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
357 {
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
358 MsimMessageElement *new_elem;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
359 GList *node_before;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
360
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
361 new_elem = msim_msg_element_new(name, type, data);
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
362
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
363 node_before = msim_msg_get_node(msg, name_before);
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
364
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
365 return g_list_insert_before(msg, node_before, new_elem);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
366 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
367
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
368 /** Pack a string using the given GFunc and seperator.
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
369 * Used by msim_msg_dump() and msim_msg_pack().
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
370 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
371 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
372 msim_msg_pack_using(MsimMessage *msg, GFunc gf, const gchar *sep,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
373 const gchar *begin, const gchar *end)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
374 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
375 gchar **strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
376 gchar **strings_tmp;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
377 gchar *joined;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
378 gchar *final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
379 int i;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
380
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
381 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
382
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
383 /* Add one for NULL terminator for g_strjoinv(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
384 strings = (gchar **)g_new0(gchar *, g_list_length(msg) + 1);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
385
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
386 strings_tmp = strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
387 g_list_foreach(msg, gf, &strings_tmp);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
388
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
389 joined = g_strjoinv(sep, strings);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
390 final = g_strconcat(begin, joined, end, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
391 g_free(joined);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
392
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
393 /* Clean up. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
394 for (i = 0; i < g_list_length(msg); ++i)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
395 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
396 g_free(strings[i]);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
397 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
398
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
399 g_free(strings);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
400
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
401 return final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
402 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
403 /** Store a human-readable string describing the element.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
404 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
405 * @param data Pointer to an MsimMessageElement.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
406 * @param user_data
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
407 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
408 static void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
409 msim_msg_debug_string_element(gpointer data, gpointer user_data)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
410 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
411 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
412 gchar *string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
413 GString *gs;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
414 gchar *binary;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
415 gchar ***items; /* wow, a pointer to a pointer to a pointer */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
416
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
417 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
418 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
419
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
420 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
421 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
422 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
423 string = g_strdup_printf("%s(integer): %d", elem->name, GPOINTER_TO_UINT(elem->data));
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
424 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
425
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
426 case MSIM_TYPE_RAW:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
427 string = g_strdup_printf("%s(raw): %s", elem->name, (gchar *)elem->data);
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
428 break;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
429
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
430 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
431 string = g_strdup_printf("%s(string): %s", elem->name, (gchar *)elem->data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
432 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
433
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
434 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
435 gs = (GString *)elem->data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
436 binary = purple_base64_encode((guchar*)gs->str, gs->len);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
437 string = g_strdup_printf("%s(binary, %d bytes): %s", elem->name, (int)gs->len, binary);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
438 g_free(binary);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
439 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
440
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
441 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
442 string = g_strdup_printf("%s(boolean): %s", elem->name,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
443 GPOINTER_TO_UINT(elem->data) ? "TRUE" : "FALSE");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
444 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
445
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
446 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
447 /* TODO: provide human-readable output of dictionary. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
448 string = g_strdup_printf("%s(dict): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
449 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
450
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
451 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
452 /* TODO: provide human-readable output of list. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
453 string = g_strdup_printf("%s(list): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
454 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
455
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
456 default:
17938
bbac497a545e Add missing argument to debug string.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
457 string = g_strdup_printf("%s(unknown type %d (%c)", elem->name, elem->type, elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
458 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
459 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
460
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
461 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
462 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
463 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
464
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
465 /** Print a human-readable string of the message to Purple's debug log.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
466 *
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
467 * @param fmt_string A static string, in which '%s' will be replaced.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
468 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
469 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
470 msim_msg_dump(const gchar *fmt_string, MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
471 {
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
472 gchar *debug_str;
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
473
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
474 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
475 {
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
476 debug_str = g_strdup("<MsimMessage: empty>");
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
477 } else {
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
478 debug_str = msim_msg_pack_using(msg, msim_msg_debug_string_element,
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
479 "\n", "<MsimMessage: \n", "\n/MsimMessage>");
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
480 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
481
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
482 purple_debug_info("msim", fmt_string, debug_str);
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
483
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
484 g_free(debug_str);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
485 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
486
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
487 /** Return a message element data as a new string for a raw protocol message, converting from other types (integer, etc.) if necessary.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
488 *
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17962
diff changeset
489 * @return const gchar * The data as a string, or NULL. Caller must g_free().
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
490 *
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
491 * Returns a string suitable for inclusion in a raw protocol message, not necessarily
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
492 * optimal for human consumption. For example, strings are escaped. Use
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
493 * msim_msg_get_string() if you want a string, which in some cases is same as this.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
494 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
495 static gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
496 msim_msg_pack_element_data(MsimMessageElement *elem)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
497 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
498 switch (elem->type)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
499 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
500 case MSIM_TYPE_INTEGER:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
501 return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
502
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
503 case MSIM_TYPE_RAW:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
504 /* Not un-escaped - this is a raw element, already escaped if necessary. */
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17962
diff changeset
505 return (gchar *)g_strdup((gchar *)elem->data);
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
506
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
507 case MSIM_TYPE_STRING:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
508 /* Strings get escaped. msim_escape() creates a new string. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
509 return msim_escape((gchar *)elem->data);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
510
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
511 case MSIM_TYPE_BINARY:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
512 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
513 GString *gs;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
514
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
515 gs = (GString *)elem->data;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
516 /* Do not escape! */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
517 return purple_base64_encode((guchar *)gs->str, gs->len);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
518 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
519
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
520 case MSIM_TYPE_BOOLEAN:
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
521 /* Not used by the wire protocol * -- see msim_msg_pack_element. */
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
522 return NULL;
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
523
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
524 case MSIM_TYPE_DICTIONARY:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
525 /* TODO: pack using k=v\034k2=v2\034... */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
526 return NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
527
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
528 case MSIM_TYPE_LIST:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
529 /* TODO: pack using a|b|c|d|... */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
530 return NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
531
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
532 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
533 purple_debug_info("msim", "field %s, unknown type %d (%c)\n", elem->name, elem->type, elem->type);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
534 return NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
535 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
536 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
537
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
538 /** Pack an element into its protocol representation.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
539 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
540 * @param data Pointer to an MsimMessageElement.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
541 * @param user_data Pointer to a gchar ** array of string items.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
542 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
543 * Called by msim_msg_pack(). Will pack the MsimMessageElement into
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
544 * a part of the protocol string and append it to the array. Caller
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
545 * is responsible for creating array to correct dimensions, and
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
546 * freeing each string element of the array added by this function.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
547 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
548 static void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
549 msim_msg_pack_element(gpointer data, gpointer user_data)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
550 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
551 MsimMessageElement *elem;
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
552 gchar *string, *data_string;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
553 gchar ***items;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
554
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
555 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
556 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
557
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
558 /* Exclude elements beginning with '_' from packed protocol messages. */
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
559 if (elem->name[0] == '_')
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
560 {
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
561 return;
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
562 }
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
563
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
564 data_string = msim_msg_pack_element_data(elem);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
565
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
566 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
567 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
568 /* These types are represented by key name/value pairs (converted above). */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
569 case MSIM_TYPE_INTEGER:
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
570 case MSIM_TYPE_RAW:
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
571 case MSIM_TYPE_STRING:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
572 case MSIM_TYPE_BINARY:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
573 case MSIM_TYPE_DICTIONARY:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
574 case MSIM_TYPE_LIST:
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
575 string = g_strconcat(elem->name, "\\", data_string, NULL);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
576 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
577
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
578 /* Boolean is represented by absence or presence of name. */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
579 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
580 if (GPOINTER_TO_UINT(elem->data))
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
581 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
582 /* True - leave in, with blank value. */
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
583 string = g_strdup_printf("%s\\", elem->name);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
584 } else {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
585 /* False - leave out. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
586 string = g_strdup("");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
587 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
588 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
589
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
590 default:
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
591 g_free(data_string);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
592 g_return_if_fail(FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
593 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
594 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
595
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
596 g_free(data_string);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
597
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
598 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
599 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
600 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
601
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
602
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
603 /** Return a packed string suitable for sending over the wire.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
604 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
605 * @return A string. Caller must g_free().
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
606 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
607 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
608 msim_msg_pack(MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
609 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
610 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
611
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
612 return msim_msg_pack_using(msg, msim_msg_pack_element, "\\", "\\", "\\final\\");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
613 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
614
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
615 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
616 * Parse a raw protocol message string into a MsimMessage *.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
617 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
618 * @param raw The raw message string to parse, will be g_free()'d.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
619 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
620 * @return MsimMessage *. Caller should msim_msg_free() when done.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
621 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
622 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
623 msim_parse(gchar *raw)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
624 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
625 MsimMessage *msg;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
626 gchar *token;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
627 gchar **tokens;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
628 gchar *key;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
629 gchar *value;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
630 int i;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
631
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
632 g_return_val_if_fail(raw != NULL, NULL);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
633
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
634 purple_debug_info("msim", "msim_parse: got <%s>\n", raw);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
635
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
636 key = NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
637
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
638 /* All messages begin with a \. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
639 if (raw[0] != '\\' || raw[1] == 0)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
640 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
641 purple_debug_info("msim", "msim_parse: incomplete/bad string, "
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
642 "missing initial backslash: <%s>\n", raw);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
643 /* XXX: Should we try to recover, and read to first backslash? */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
644
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
645 g_free(raw);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
646 return NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
647 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
648
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
649 msg = msim_msg_new(FALSE);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
650
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
651 for (tokens = g_strsplit(raw + 1, "\\", 0), i = 0;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
652 (token = tokens[i]);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
653 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
654 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
655 #ifdef MSIM_DEBUG_PARSE
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
656 purple_debug_info("msim", "tok=<%s>, i%2=%d\n", token, i % 2);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
657 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
658 if (i % 2)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
659 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
660 /* Odd-numbered ordinal is a value. */
17929
124c360364a8 Cosmetic improvement to MsimMessage debug output.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17928
diff changeset
661
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
662 value = token;
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
663
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
664 /* Incoming protocol messages get tagged as MSIM_TYPE_RAW, which
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
665 * represents an untyped piece of data. msim_msg_get_* will
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
666 * convert to appropriate types for caller, and handle unescaping if needed. */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
667 msg = msim_msg_append(msg, g_strdup(key), MSIM_TYPE_RAW, g_strdup(value));
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
668 #ifdef MSIM_DEBUG_PARSE
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
669 purple_debug_info("msim", "insert string: |%s|=|%s|\n", key, value);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
670 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
671 } else {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
672 /* Even numbered indexes are key names. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
673 key = token;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
674 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
675 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
676 g_strfreev(tokens);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
677
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
678 /* Can free now since all data was copied to hash key/values */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
679 g_free(raw);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
680
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
681 return msg;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
682 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
683
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
684 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
685 * Parse a \x1c-separated "dictionary" of key=value pairs into a hash table.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
686 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
687 * @param body_str The text of the dictionary to parse. Often the
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
688 * value for the 'body' field.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
689 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
690 * @return Hash table of the keys and values. Must g_hash_table_destroy() when done.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
691 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
692 GHashTable *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
693 msim_parse_body(const gchar *body_str)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
694 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
695 GHashTable *table;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
696 gchar *item;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
697 gchar **items;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
698 gchar **elements;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
699 guint i;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
700
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
701 g_return_val_if_fail(body_str != NULL, NULL);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
702
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
703 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
704
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
705 for (items = g_strsplit(body_str, "\x1c", 0), i = 0;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
706 (item = items[i]);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
707 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
708 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
709 gchar *key, *value;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
710
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
711 elements = g_strsplit(item, "=", 2);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
712
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
713 key = elements[0];
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
714 if (!key)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
715 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
716 purple_debug_info("msim", "msim_parse_body(%s): null key\n",
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
717 body_str);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
718 g_strfreev(elements);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
719 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
720 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
721
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
722 value = elements[1];
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
723 if (!value)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
724 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
725 purple_debug_info("msim", "msim_parse_body(%s): null value\n",
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
726 body_str);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
727 g_strfreev(elements);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
728 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
729 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
730
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
731 #ifdef MSIM_DEBUG_PARSE
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
732 purple_debug_info("msim", "-- %s: %s\n", key, value);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
733 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
734
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
735 /* XXX: This overwrites duplicates. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
736 /* TODO: make the GHashTable values be GList's, and append to the list if
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
737 * there is already a value of the same key name. This is important for
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
738 * the WebChallenge message. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
739 g_hash_table_insert(table, g_strdup(key), g_strdup(value));
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
740
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
741 g_strfreev(elements);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
742 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
743
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
744 g_strfreev(items);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
745
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
746 return table;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
747 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
748
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
749 /** Search for and return the node in msg, matching name, or NULL.
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
750 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
751 * @param msg Message to search within.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
752 * @param name Field name to search for.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
753 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
754 * @return The GList * node for the MsimMessageElement with the given name, or NULL if not found or name is NULL.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
755 *
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
756 * For internal use - users probably want to use msim_msg_get() to
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
757 * access the MsimMessageElement *, instead of the GList * container.
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
758 *
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
759 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
760 static GList *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
761 msim_msg_get_node(MsimMessage *msg, const gchar *name)
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
762 {
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
763 GList *i;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
764
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
765 if (!name)
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
766 {
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
767 return NULL;
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
768 }
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
769
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
770 /* Linear search for the given name. O(n) but n is small. */
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
771 for (i = g_list_first(msg); i != NULL; i = g_list_next(i))
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
772 {
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
773 MsimMessageElement *elem;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
774
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
775 elem = i->data;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
776 g_return_val_if_fail(elem != NULL, NULL);
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
777
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
778 if (strcmp(elem->name, name) == 0)
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
779 return i;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
780 }
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
781 return NULL;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
782 }
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
783
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
784 /** Return the first MsimMessageElement * with given name in the MsimMessage *.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
785 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
786 * @param name Name to search for.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
787 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
788 * @return MsimMessageElement * matching name, or NULL.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
789 *
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
790 * Note: useful fields of MsimMessageElement are 'data' and 'type', which
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
791 * you can access directly. But it is often more convenient to use
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
792 * another msim_msg_get_* that converts the data to what type you want.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
793 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
794 MsimMessageElement *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
795 msim_msg_get(MsimMessage *msg, const gchar *name)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
796 {
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
797 GList *node;
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
798
17945
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
799 node = msim_msg_get_node(msg, name);
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
800 if (node)
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
801 return (MsimMessageElement *)node->data;
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
802 else
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
803 return NULL;
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
804 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
805
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
806 /** Return the data of an element of a given name, as a string.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
807 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
808 * @param name Name of element.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
809 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
810 * @return gchar * The data as a string. Caller must g_free().
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
811 *
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
812 * Note that msim_msg_pack_element_data() is similar, but returns a string
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
813 * for inclusion into a raw protocol string (escaped and everything).
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
814 * This function unescapes the string for you, if needed.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
815 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
816 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
817 msim_msg_get_string(MsimMessage *msg, const gchar *name)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
818 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
819 MsimMessageElement *elem;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
820
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
821 elem = msim_msg_get(msg, name);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
822 if (!elem)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
823 return NULL;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
824
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
825 switch (elem->type)
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
826 {
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
827 case MSIM_TYPE_INTEGER:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
828 return g_strdup_printf("%d", GPOINTER_TO_UINT(elem->data));
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
829
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
830 case MSIM_TYPE_RAW:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
831 /* Raw element from incoming message - if its a string, it'll
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
832 * be escaped. */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
833 return msim_unescape((gchar *)elem->data);
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
834
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
835 case MSIM_TYPE_STRING:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
836 /* Already unescaped. */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
837 return (gchar *)elem->data;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
838
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
839 default:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
840 purple_debug_info("msim", "msim_msg_get_string: type %d unknown, name %s\n",
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
841 elem->type, name);
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
842 return NULL;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
843 }
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
844 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
845
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
846 /** Return the data of an element of a given name, as an integer.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
847 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
848 * @param name Name of element.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
849 *
17971
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
850 * @return guint Numeric representation of data, or 0 if could not be converted / not found.
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
851 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
852 * Useful to obtain an element's data if you know it should be an integer,
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
853 * even if it is not stored as an MSIM_TYPE_INTEGER. MSIM_TYPE_STRING will
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
854 * be converted handled correctly, for example.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
855 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
856 guint
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
857 msim_msg_get_integer(MsimMessage *msg, const gchar *name)
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
858 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
859 MsimMessageElement *elem;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
860
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
861 elem = msim_msg_get(msg, name);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
862
17971
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
863 if (!elem)
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
864 return 0;
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
865
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
866 switch (elem->type)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
867 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
868 case MSIM_TYPE_INTEGER:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
869 return GPOINTER_TO_UINT(elem->data);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
870
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
871 case MSIM_TYPE_RAW:
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
872 case MSIM_TYPE_STRING:
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
873 /* TODO: find out if we need larger integers */
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
874 return (guint)atoi((gchar *)elem->data);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
875
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
876 default:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
877 return 0;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
878 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
879 }
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
880
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
881 /** Return the data of an element of a given name, as a binary GString.
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
882 *
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
883 * @param binary_data A pointer to a new pointer, which will be filled in with the binary data. CALLER MUST g_free().
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
884 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
885 * @param binary_length A pointer to an integer, which will be set to the binary data length.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
886 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
887 * @return TRUE if successful, FALSE if not.
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
888 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
889 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
890 msim_msg_get_binary(MsimMessage *msg, const gchar *name,
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
891 gchar **binary_data, gsize *binary_length)
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
892 {
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
893 MsimMessageElement *elem;
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
894
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
895 elem = msim_msg_get(msg, name);
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
896
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
897 switch (elem->type)
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
898 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
899 case MSIM_TYPE_RAW:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
900 /* Incoming messages are tagged with MSIM_TYPE_RAW, and
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
901 * converted appropriately. They can still be "strings", just they won't
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
902 * be tagged as MSIM_TYPE_STRING (as MSIM_TYPE_STRING is intended to be used
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
903 * by msimprpl code for things like instant messages - stuff that should be
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
904 * escaped if needed). DWIM.
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
905 */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
906
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
907 /* Previously, incoming messages were stored as MSIM_TYPE_STRING.
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
908 * This was fine for integers and strings, since they can easily be
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
909 * converted in msim_get_*, as desirable. However, it does not work
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
910 * well for binary strings. Consider:
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
911 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
912 * If incoming base64'd elements were tagged as MSIM_TYPE_STRING.
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
913 * msim_msg_get_binary() sees MSIM_TYPE_STRING, base64 decodes, returns.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
914 * everything is fine.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
915 * But then, msim_send() is called on the incoming message, which has
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
916 * a base64'd MSIM_TYPE_STRING that really is encoded binary. The values
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
917 * will be escaped since strings are escaped, and / becomes /2; no good.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
918 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
919 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
920 *binary_data = (gchar *)purple_base64_decode((const gchar *)elem->data, binary_length);
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
921 return TRUE;
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
922
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
923 case MSIM_TYPE_BINARY:
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
924 {
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
925 GString *gs;
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
926
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
927 gs = (GString *)elem->data;
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
928
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
929 /* Duplicate data, so caller can g_free() it. */
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
930 *binary_data = g_new0(char, gs->len);
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
931 memcpy(*binary_data, gs->str, gs->len);
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
932
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
933 *binary_length = gs->len;
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
934
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
935 return TRUE;
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
936 }
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
937
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
938
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
939 /* Rejected because if it isn't already a GString, have to g_new0 it and
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
940 * then caller has to ALSO free the GString!
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
941 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
942 * return (GString *)elem->data; */
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
943
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
944 default:
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
945 purple_debug_info("msim", "msim_msg_get_binary: unhandled type %d for key %s\n",
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
946 elem->type, name);
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
947 return FALSE;
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
948 }
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
949 }

mercurial