libpurple/protocols/myspace/message.c

Sun, 22 Jul 2007 04:12:12 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Sun, 22 Jul 2007 04:12:12 +0000
branch
soc.2007.msimprpl
changeset 18054
bfe3c4454cc6
parent 18034
e1b21d1e5c7a
child 18058
c862e909a0a1
permissions
-rw-r--r--

In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.

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 *
18013
3238cfe8d879 Fix email address.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17994
diff changeset
5 * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
17908
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;
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
65 GList *gl;
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
66 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
67
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
68 /* 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
69 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
70
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
71 /* 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
72 do
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
73 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
74 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
75 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
76 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
77 break;
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
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
80 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
81
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
82 /* 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
83 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
84 {
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_INTEGER:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
86 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
87 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
88 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
89
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
90 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
91 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
92
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
93 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
94
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
95 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
96 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
97
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
98 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
99 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
100
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
101 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
102
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
103 /* 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
104 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
105 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
106
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
107 case MSIM_TYPE_LIST:
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
108 gl = va_arg(argp, GList *);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
109
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
110 g_return_val_if_fail(gl != NULL, FALSE);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
111
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
112 msg = msim_msg_append(msg, key, type, gl);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
113
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
114 default:
18027
02642949d8e8 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18025
diff changeset
115 purple_debug_info("msim", "msim_send: unknown type %d\n", type);
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 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
117 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
118 } 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
119 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
120
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
121 return msg;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
122 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
123
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
124 /** Perform a deep copy on a GList * of gchar * strings. Free with msim_msg_list_free(). */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
125 GList *
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
126 msim_msg_list_copy(GList *old)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
127 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
128 GList *new_list;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
129
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
130 new_list = NULL;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
131
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
132 /* Deep copy (g_list_copy is shallow). Copy each string. */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
133 for (; old != NULL; old = g_list_next(old))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
134 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
135 new_list = g_list_append(new_list, g_strdup(old->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
136 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
137
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
138 return new_list;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
139 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
140
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
141 /** Free a GList * of gchar * strings. */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
142 void
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
143 msim_msg_list_free(GList *l)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
144 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
145
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
146 for (; l != NULL; l = g_list_next(l))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
147 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
148 g_free((gchar *)(l->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
149 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
150 g_list_free(l);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
151 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
152
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
153 /** Parse a |-separated string into a new GList. Free with msim_msg_list_free(). */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
154 GList *
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
155 msim_msg_list_parse(const gchar *raw)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
156 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
157 gchar **array;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
158 GList *list;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
159 guint i;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
160
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
161 array = g_strsplit(raw, "|", 0);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
162 list = NULL;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
163
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
164 for (i = 0; array[i] != NULL; ++i)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
165 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
166 list = g_list_append(list, g_strdup(array[i]));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
167 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
168
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
169 g_strfreev(array);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
170
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
171 return list;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
172 }
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
173
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 /** 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
175 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
176 * @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
177 * @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
178 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
179 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
180 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
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 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
183 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
184 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
185
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
186 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
187 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
188
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
189 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
190 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
191 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
192 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
193 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
194 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
195
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
196 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
197 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
198 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
199 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
200
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
201 case MSIM_TYPE_LIST:
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
202 new_data = (gpointer)msim_msg_list_copy((GList *)(elem->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
203 break;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
204
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
205 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
206 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
207 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
208
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
209 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
210
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
211 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
212 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
213 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
214 /* 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
215 default:
18027
02642949d8e8 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18025
diff changeset
216 purple_debug_info("msim", "msim_msg_clone_element: unknown type %d\n", 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
217 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
218 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
219
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
220 /* 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
221 * 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
222 *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
223 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
224
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
225 /** 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
226 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
227 * @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
228 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
229 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
230 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
231 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
232 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
233
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
234 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
235 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
236
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
237 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
238
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
239 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
240
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
241 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
242 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
243
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
244 /** 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
245 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
246 * @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
247 * @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
248 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
249 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
250 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
251 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
252 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
253
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
254 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
255
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
256 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
257 {
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
258 case MSIM_TYPE_BOOLEAN:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
259 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
260 /* Integer value stored in gpointer - no need to free(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
261 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
262
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
263 case MSIM_TYPE_RAW:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
264 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
265 /* 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
266 * 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
267 g_free(elem->data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
268 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
269
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
270 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
271 /* Free the GString itself and the binary data. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
272 g_string_free((GString *)elem->data, TRUE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
273 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
274
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
275 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
276 /* TODO: free dictionary */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
277 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
278
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
279 case MSIM_TYPE_LIST:
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
280 g_list_free((GList *)elem->data);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
281 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
282
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
283 default:
18027
02642949d8e8 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18025
diff changeset
284 purple_debug_info("msim", "msim_msg_free_element: not freeing unknown type %d\n", elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
286 }
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 g_free(elem);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
289 }
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 /** 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
292 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
293 msim_msg_free(MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
294 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
295 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
296 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
297 /* already free as can be */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
298 return;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
299 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
300
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
301 msim_msg_dump("msim_msg_free: freeing %s", msg);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
302
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
303 g_list_foreach(msg, msim_msg_free_element, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
304 g_list_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
305 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
306
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
307 /** 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
308 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
309 msim_msg_send(MsimSession *session, MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
310 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
311 gchar *raw;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
312 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
313
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
314 raw = msim_msg_pack(msg);
18034
e1b21d1e5c7a Allow setting status string messages. Known bug: custom status messages always
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18027
diff changeset
315 g_return_val_if_fail(raw != NULL, FALSE);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
316 success = msim_send_raw(session, raw);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
317 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
318
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
319 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
320
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
321 return success;
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
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 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
326 * 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
327 * variable arguments.
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 * @param session
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
330 * @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
331 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
332 * 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
333 * 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
334 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
335 * 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
336 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
337 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
338 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
339 msim_send(MsimSession *session, ...)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
340 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
341 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
342 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
343 va_list argp;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
344
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
345 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
346 msg = msim_msg_new_v(argp);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
347
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
348 /* Actually send the message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
349 success = msim_msg_send(session, msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
350
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
351 /* Cleanup. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
352 msim_msg_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
353
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
354 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
355 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
356
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 /** 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
358 *
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 * 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
360 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
361 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
362 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
363 {
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 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
365
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
366 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
367
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
368 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
369 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
370 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
371
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
372 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
373 }
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
374
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
375
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
376 /** Append a new element to a message.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
377 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
378 * @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
379 * @param type An MSIM_TYPE_* code.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
380 * @param data Pointer to data, see below.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
381 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
382 * @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
383 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
384 * msg = msim_msg_append(msg, ...)
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 * The data parameter depends on the type given:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
387 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
388 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
389 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
390 * * 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
391 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
392 * * 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
393 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
394 * * 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
395 *
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
396 * * 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
397 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
398 * * MSIM_TYPE_DICTIONARY: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
399 *
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
400 * * MSIM_TYPE_LIST: GList * of gchar *. Again, everything will be freed.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
401 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
402 * */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
403 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
404 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
405 MsimMessageType type, gpointer data)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
406 {
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
407 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
408 }
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
409
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
410 /** 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
411 *
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
412 * @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
413 * 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
414 *
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
415 * 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
416 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
417 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
418 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
419 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
420 {
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
421 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
422 GList *node_before;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
423
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
424 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
425
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
426 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
427
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
428 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
429 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
430
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
431 /** 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
432 * 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
433 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
434 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
435 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
436 const gchar *begin, const gchar *end)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
437 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
438 gchar **strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
439 gchar **strings_tmp;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
440 gchar *joined;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
441 gchar *final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
442 int i;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
443
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
444 g_return_val_if_fail(msg != NULL, NULL);
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 /* Add one for NULL terminator for g_strjoinv(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
447 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
448
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
449 strings_tmp = strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
450 g_list_foreach(msg, gf, &strings_tmp);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
451
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
452 joined = g_strjoinv(sep, strings);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
453 final = g_strconcat(begin, joined, end, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
454 g_free(joined);
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 /* Clean up. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
457 for (i = 0; i < g_list_length(msg); ++i)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
458 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
459 g_free(strings[i]);
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
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
462 g_free(strings);
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 return final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
465 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
466 /** Store a human-readable string describing the element.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
467 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
468 * @param data Pointer to an MsimMessageElement.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
469 * @param user_data
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
470 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
471 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
472 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
473 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
474 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
475 gchar *string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
476 GString *gs;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
477 gchar *binary;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
478 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
479
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
480 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
481 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
482
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
483 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
484 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
485 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
486 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
487 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
488
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
489 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
490 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
491 break;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
492
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
493 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
494 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
495 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
496
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
497 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
498 gs = (GString *)elem->data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
499 binary = purple_base64_encode((guchar*)gs->str, gs->len);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
500 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
501 g_free(binary);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
502 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
503
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
504 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
505 string = g_strdup_printf("%s(boolean): %s", elem->name,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
506 GPOINTER_TO_UINT(elem->data) ? "TRUE" : "FALSE");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
507 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
508
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
509 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
510 /* TODO: provide human-readable output of dictionary. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
511 string = g_strdup_printf("%s(dict): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
512 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
513
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
514 case MSIM_TYPE_LIST:
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
515 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
516 GString *gs;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
517 GList *gl;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
518 guint i;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
519
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
520 gs = g_string_new("");
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
521 g_string_append_printf(gs, "%s(list): \n", elem->name);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
522
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
523 i = 0;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
524 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
525 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
526 g_string_append_printf(gs, " %d. %s\n", i, (gchar *)(gl->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
527 ++i;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
528 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
529
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
530 string = gs->str;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
531 }
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
532 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
533
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
534 default:
18027
02642949d8e8 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18025
diff changeset
535 string = g_strdup_printf("%s(unknown type %d", elem->name, elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
536 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
537 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
538
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
539 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
540 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
541 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
542
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
543 /** 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
544 *
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
545 * @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
546 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
547 void
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
548 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
549 {
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
550 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
551
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
552 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
553 {
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
554 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
555 } 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
556 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
557 "\n", "<MsimMessage: \n", "\n/MsimMessage>");
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
558 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
559
18034
e1b21d1e5c7a Allow setting status string messages. Known bug: custom status messages always
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18027
diff changeset
560 g_return_if_fail(debug_str != NULL);
e1b21d1e5c7a Allow setting status string messages. Known bug: custom status messages always
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18027
diff changeset
561
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
562 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
563
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
564 g_free(debug_str);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
565 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
566
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
567 /** 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
568 *
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17962
diff changeset
569 * @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
570 *
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
571 * 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
572 * 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
573 * 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
574 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
575 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
576 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
577 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
578 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
579 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
580 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
581 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
582
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
583 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
584 /* 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
585 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
586
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
587 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
588 /* 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
589 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
590
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
591 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
592 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
593 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
594
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
595 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
596 /* 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
597 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
598 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
599
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
600 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
601 /* 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
602 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
603
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
604 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
605 /* 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
606 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
607
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
608 case MSIM_TYPE_LIST:
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
609 /* Pack using a|b|c|d|... */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
610 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
611 GString *gs;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
612 GList *gl;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
613
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
614 gs = g_string_new("");
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
615
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
616 for (gl = (GList *)elem->data; gl != NULL; gl = g_list_next(gl))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
617 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
618 g_string_append_printf(gs, "%s|", (gchar*)(gl->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
619 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
620
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
621 return gs->str;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
622 }
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
623
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
624 default:
18027
02642949d8e8 In debug messages, don't output unknown elem->type fields as %c too (only as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18025
diff changeset
625 purple_debug_info("msim", "field %s, unknown type %d\n", elem->name, 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
626 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
627 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
628 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
629
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
630 /** Pack an element into its protocol representation.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
631 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
632 * @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
633 * @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
634 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
635 * 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
636 * 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
637 * 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
638 * 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
639 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
640 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
641 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
642 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
643 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
644 gchar *string, *data_string;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
645 gchar ***items;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
646
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
647 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
648 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
649
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
650 /* 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
651 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
652 {
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
653 return;
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
654 }
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
655
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
656 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
657
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
658 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
659 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
660 /* 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
661 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
662 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
663 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
664 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
665 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
666 case MSIM_TYPE_LIST:
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
667 string = g_strconcat(elem->name, "\\", data_string, NULL);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
668 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
669
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
670 /* 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
671 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
672 if (GPOINTER_TO_UINT(elem->data))
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
673 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
674 /* True - leave in, with blank value. */
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
675 string = g_strdup_printf("%s\\", elem->name);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
676 } else {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
677 /* False - leave out. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
678 string = g_strdup("");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
679 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
680 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
681
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
682 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
683 g_free(data_string);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
684 g_return_if_fail(FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
685 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
686 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
687
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
688 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
689
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
690 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
691 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
692 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
693
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
694
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
695 /** 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
696 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
697 * @return A string. Caller must g_free().
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
698 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
699 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
700 msim_msg_pack(MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
701 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
702 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
703
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
704 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
705 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
706
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
707 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
708 * 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
709 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
710 * @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
711 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
712 * @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
713 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
714 MsimMessage *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
715 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
716 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
717 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
718 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
719 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
720 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
721 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
722 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
723
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
724 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
725
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
726 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
727
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
728 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
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 /* 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
731 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
732 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
733 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
734 "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
735 /* 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
736
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
737 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
738 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
739 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
740
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
741 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
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 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
744 (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
745 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
746 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
747 #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
748 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
749 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
750 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
751 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
752 /* Odd-numbered ordinal is a value. */
17929
124c360364a8 Cosmetic improvement to MsimMessage debug output.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17928
diff changeset
753
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
754 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
755
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
756 /* 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
757 * 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
758 * 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
759 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
760 #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
761 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
762 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
763 } else {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
764 /* 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
765 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
766 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
767 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
768 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
769
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
770 /* 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
771 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
772
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
773 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
774 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
775
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
776 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
777 * 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
778 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
779 * @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
780 * 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
781 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
782 * @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
783 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
784 GHashTable *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
785 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
786 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
787 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
788 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
789 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
790 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
791 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
792
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
793 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
794
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
795 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
796
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
797 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
798 (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
799 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
800 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
801 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
802
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
803 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
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 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
806 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
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 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
809 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
810 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
811 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
812 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
813
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
814 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
815 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
816 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
817 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
818 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
819 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
820 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
821 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
822
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
823 #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
824 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
825 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
826
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
827 /* 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
828 /* 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
829 * 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
830 * 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
831 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
832
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
833 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
834 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
835
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
836 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
837
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
838 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
839 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
840
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
841 /** 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
842 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
843 * @param msg Message to search within.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
844 * @param name Field name to search for.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
845 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
846 * @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
847 *
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
848 * 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
849 * access the MsimMessageElement *, instead of the GList * container.
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
850 *
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
851 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
852 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
853 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
854 {
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
855 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
856
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
857 if (!name)
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
858 {
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
859 return NULL;
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
860 }
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
861
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
862 /* 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
863 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
864 {
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
865 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
866
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
867 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
868 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
869
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
870 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
871 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
872 }
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
873 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
874 }
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
875
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
876 /** 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
877 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
878 * @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
879 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
880 * @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
881 *
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
882 * 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
883 * 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
884 * 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
885 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
886 MsimMessageElement *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
887 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
888 {
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
889 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
890
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
891 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
892 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
893 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
894 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
895 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
896 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
897
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
898 /** 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
899 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
900 * @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
901 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
902 * @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
903 *
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
904 * 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
905 * 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
906 * 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
907 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
908 gchar *
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
909 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
910 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
911 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
912
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
913 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
914 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
915 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
916
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
917 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
918 {
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
919 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
920 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
921
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
922 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
923 /* 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
924 * 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
925 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
926
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
927 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
928 /* Already unescaped. */
18025
a5e208acc0be Fix bug where string returned from msim_msg_get_string() is not a new
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
929 return 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
930
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
931 default:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
932 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
933 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
934 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
935 }
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
936 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
937
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
938 /** Return an element as a new list. Caller frees with msim_msg_list_free(). */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
939 GList *
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
940 msim_msg_get_list(MsimMessage *msg, const gchar *name)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
941 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
942 MsimMessageElement *elem;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
943
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
944 elem = msim_msg_get(msg, name);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
945 if (!elem)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
946 return NULL;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
947
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
948 switch (elem->type)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
949 {
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
950 case MSIM_TYPE_LIST:
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
951 return msim_msg_list_copy((GList *)(elem->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
952
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
953 case MSIM_TYPE_RAW:
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
954 return msim_msg_list_parse((gchar *)(elem->data));
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
955
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
956 default:
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
957 purple_debug_info("msim_msg_get_list", "type %d unknown, name %s\n",
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
958 elem->type, name);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
959 return NULL;
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
960 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
961 }
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18034
diff changeset
962
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
963 /** 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
964 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
965 * @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
966 *
17971
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
967 * @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
968 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
969 * 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
970 * 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
971 * 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
972 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
973 guint
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
974 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
975 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
976 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
977
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
978 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
979
17971
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
980 if (!elem)
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
981 return 0;
c43f0fb4c511 msim_msg_get_integer() - if could not find element, return 0.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
982
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
983 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
984 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
985 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
986 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
987
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
988 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
989 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
990 /* 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
991 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
992
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
993 default:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
994 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
995 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
996 }
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
997
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
998 /** 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
999 *
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1000 * @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
1001 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1002 * @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
1003 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1004 * @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
1005 */
17994
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
1006 gboolean
b3b072dd8478 Split return type and function name + arguments on to separate lines, to
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17971
diff changeset
1007 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
1008 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
1009 {
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
1010 MsimMessageElement *elem;
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
1011
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
1012 elem = msim_msg_get(msg, name);
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
1013
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
1014 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
1015 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
1016 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
1017 /* 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
1018 * 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
1019 * 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
1020 * 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
1021 * 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
1022 */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
1023
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
1024 /* 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
1025 * 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
1026 * 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
1027 * 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
1028 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
1029 * 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
1030 * 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
1031 * 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
1032 * 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
1033 * 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
1034 * 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
1035 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1036 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
1037 *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
1038 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
1039
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
1040 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
1041 {
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1042 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
1043
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1044 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
1045
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1046 /* 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
1047 *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
1048 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
1049
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1050 *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
1051
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1052 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
1053 }
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1054
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1055
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1056 /* 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
1057 * 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
1058 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
1059 * 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
1060
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
1061 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
1062 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
1063 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
1064 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
1065 }
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
1066 }

mercurial