libpurple/protocols/myspace/message.c

Thu, 14 Jun 2007 01:53:58 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Thu, 14 Jun 2007 01:53:58 +0000
branch
soc.2007.msimprpl
changeset 17968
c29352b95fa6
parent 17962
d97b661b6086
child 17970
3c92ce43ddae
permissions
-rw-r--r--

Add msim_offline_message() for offline message status. Always return TRUE,
though offline messages are not yet supported. Mainly for sending to users
whose status has not been retrieved yet.

17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1 /** MySpaceIM protocol messages
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
3 * \author Jeff Connelly
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
4 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
5 * Copyright (C) 2007, Jeff Connelly <jeff2@homing.pidgin.im>
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
6 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
11 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
16 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
20 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
21
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
22 #include "myspace.h"
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
23 #include "message.h"
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
24
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
25 static void msim_msg_free_element(gpointer data, gpointer user_data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
26 static void msim_msg_debug_string_element(gpointer data, gpointer user_data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
27 static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, gchar *sep, gchar *begin, 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);
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
29 static GList *msim_msg_get_node(MsimMessage *msg, 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 */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
39 MsimMessage *msim_msg_new(gboolean 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
40 {
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
41 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
42
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
43 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
44
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
45 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
46 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
47 else
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
48 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
49 }
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 /** 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
52 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
53 * @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
54 * @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
55 *
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
56 * 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
57 */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
58 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
59 {
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
60 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
61 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
62 GString *gs;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
63 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
64
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
65 /* 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
66 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
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 /* 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
69 do
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 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
72 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
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 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
75 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
76
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
77 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
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 /* 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
80 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
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 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
83 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
84 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
85 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
86
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
87 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
88 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
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 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
91
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
92 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
93 break;
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 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
96 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
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 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
99
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
100 /* 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
101 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
102 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
103
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
104 default:
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
105 purple_debug_info("msim", "msim_send: unknown type %d (%c)\n", type, type);
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
106 break;
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
107 }
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
108 } 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
109 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
110
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
111 return msg;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
112 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
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
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
115 /** 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
116 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
117 * @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
118 * @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
119 */
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
120 static void msim_msg_clone_element(gpointer data, gpointer 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
121 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
122 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
123 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
124 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
125
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
126 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
127 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
128
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
129 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
130 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
131 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
132 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
133 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
134 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
135
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
136 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
137 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
138 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
139 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
140
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
141 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
142 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
143 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
144
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
145 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
146
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
147 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
148 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
149 break;
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
150 /* 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
151 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
152 purple_debug_info("msim", "msim_msg_clone_element: unknown type %d (%c)\n", elem->type, elem->type);
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
153 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
154 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
155
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
156 /* 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
157 * 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
158 *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
159 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
160
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
161 /** 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
162 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
163 * @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
164 */
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
165 MsimMessage *msim_msg_clone(MsimMessage *old)
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
166 {
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
167 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
168
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
169 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
170 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
171
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
172 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
173
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
174 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
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 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
177 }
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
178
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
179 /** 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
180 *
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
181 * @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
182 * @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
183 */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
184 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
185 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
186 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
187
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
188 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
189
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
190 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
191 {
17935
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_BOOLEAN:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
193 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
194 /* Integer value stored in gpointer - no need to free(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
195 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
196
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17929
diff changeset
197 case MSIM_TYPE_RAW:
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
198 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
199 /* 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
200 * 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
201 g_free(elem->data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
202 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
203
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
204 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
205 /* Free the GString itself and the binary data. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
206 g_string_free((GString *)elem->data, TRUE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
207 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
208
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
209 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
210 /* TODO: free dictionary */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
211 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
212
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
213 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
214 /* TODO: free list */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
215 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
216
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
217 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
218 purple_debug_info("msim", "msim_msg_free_element: not freeing unknown type %d (%c)\n",
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
219 elem->type, elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
220 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
221 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
222
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
223 g_free(elem);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
224 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
225
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
226 /** Free a complete message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
227 void msim_msg_free(MsimMessage *msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
228 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
229 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
230 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
231 /* already free as can be */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
232 return;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
233 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
234
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
235 g_list_foreach(msg, msim_msg_free_element, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
236 g_list_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
237 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
238
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
239 /** Send an existing MsimMessage. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
240 gboolean msim_msg_send(MsimSession *session, MsimMessage *msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
241 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
242 gchar *raw;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
243 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
244
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
245 raw = msim_msg_pack(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
246 success = msim_send_raw(session, raw);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
247 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
248
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
249 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
250
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
251 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
252 }
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 /**
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 * 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
257 * variable arguments.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
258 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
259 * @param session
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
260 * @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
261 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
262 * 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
263 * 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
264 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
265 * 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
266 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
267 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
268 gboolean msim_send(MsimSession *session, ...)
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 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
271 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
272 va_list argp;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
273
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
274 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
275 msg = msim_msg_new_v(argp);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
276
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
277 /* Actually send the message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
278 success = msim_msg_send(session, msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
279
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
280 /* Cleanup. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
281 msim_msg_free(msg);
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 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
284 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285
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
286 /** 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
287 *
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
288 * 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
289 */
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
290 static MsimMessageElement *msim_msg_element_new(gchar *name, MsimMessageType type, gpointer 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
291 {
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
292 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
293
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
294 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
295
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
296 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
297 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
298 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
299
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
300 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
301 }
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
302
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
303
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
304 /** Append a new element to a message.
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 * @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
307 * @param type An MSIM_TYPE_* code.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
308 * @param data Pointer to data, see below.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
309 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
310 * @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
311 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
312 * msg = msim_msg_append(msg, ...)
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 * The data parameter depends on the type given:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
315 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
316 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
317 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
318 * * 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
319 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
320 * * 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
321 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
322 * * 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
323 *
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
324 * * 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
325 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
326 * * MSIM_TYPE_DICTIONARY: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
327 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
328 * * MSIM_TYPE_LIST: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
329 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
330 * */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
331 MsimMessage *msim_msg_append(MsimMessage *msg, gchar *name, MsimMessageType type, gpointer data)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
332 {
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
333 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
334 }
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
335
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
336 /** 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
337 *
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
338 * @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
339 * 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
340 *
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
341 * 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
342 */
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
343 MsimMessage *msim_msg_insert_before(MsimMessage *msg, gchar *name_before, gchar *name, MsimMessageType type, gpointer 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
344 {
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
345 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
346 GList *node_before;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
347
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
348 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
349
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
350 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
351
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
352 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
353 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
354
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
355 /** 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
356 * 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
357 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
358 static gchar *msim_msg_pack_using(MsimMessage *msg, GFunc gf, gchar *sep, gchar *begin, gchar *end)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
359 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
360 gchar **strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
361 gchar **strings_tmp;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
362 gchar *joined;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
363 gchar *final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
364 int i;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
365
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
366 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
367
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
368 /* Add one for NULL terminator for g_strjoinv(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
369 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
370
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
371 strings_tmp = strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
372 g_list_foreach(msg, gf, &strings_tmp);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
373
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
374 joined = g_strjoinv(sep, strings);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
375 final = g_strconcat(begin, joined, end, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
376 g_free(joined);
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 /* Clean up. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
379 for (i = 0; i < g_list_length(msg); ++i)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
380 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
381 g_free(strings[i]);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
382 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
383
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
384 g_free(strings);
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 return final;
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 /** Store a human-readable string describing the element.
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 * @param data Pointer to an MsimMessageElement.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
391 * @param user_data
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
392 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
393 static void msim_msg_debug_string_element(gpointer data, gpointer user_data)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
394 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
395 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
396 gchar *string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
397 GString *gs;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
398 gchar *binary;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
399 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
400
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
401 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
402 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
403
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
404 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
405 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
406 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
407 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
408 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
409
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
410 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
411 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
412 break;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
413
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
414 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
415 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
416 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
417
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
418 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
419 gs = (GString *)elem->data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
420 binary = purple_base64_encode((guchar*)gs->str, gs->len);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
421 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
422 g_free(binary);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
423 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
424
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
425 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
426 string = g_strdup_printf("%s(boolean): %s", elem->name,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
427 GPOINTER_TO_UINT(elem->data) ? "TRUE" : "FALSE");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
428 break;
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 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
431 /* TODO: provide human-readable output of dictionary. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
432 string = g_strdup_printf("%s(dict): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
433 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
434
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
435 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
436 /* TODO: provide human-readable output of list. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
437 string = g_strdup_printf("%s(list): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
438 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
439
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
440 default:
17938
bbac497a545e Add missing argument to debug string.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17937
diff changeset
441 string = g_strdup_printf("%s(unknown type %d (%c)", elem->name, elem->type, elem->type);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
442 break;
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
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
445 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
446 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
447 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
448
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
449 /** 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
450 *
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
451 * @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
452 */
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
453 void msim_msg_dump(gchar *fmt_string, MsimMessage *msg)
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
454 {
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
455 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
456
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
457 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
458 {
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
459 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
460 } 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
461 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
462 "\n", "<MsimMessage: \n", "\n/MsimMessage>");
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
463 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
464
17942
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
465 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
466
4d750e00cdae Change msim_msg_debug_string() to msim_msg_dump(), which prints the string
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17938
diff changeset
467 g_free(debug_str);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
468 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
469
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
470 /** 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
471 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
472 * @return 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
473 *
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
474 * 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
475 * 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
476 * 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
477 */
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
478 static gchar *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
479 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
480 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
481 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
482 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
483 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
484
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
485 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
486 /* Not un-escaped - this is a raw element, already escaped if necessary. */
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
487 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
488
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
489 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
490 /* 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
491 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
492
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
493 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
494 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
495 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
496
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
497 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
498 /* 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
499 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
500 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
501
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
502 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
503 /* 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
504 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
505
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
506 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
507 /* 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
508 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
509
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
510 case MSIM_TYPE_LIST:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
511 /* TODO: pack using a|b|c|d|... */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
512 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
513
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
514 default:
17936
7d40857e9cb1 In debug messages about unknown message element types, display character in addition to numeric code.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
515 purple_debug_info("msim", "field %s, unknown type %d (%c)\n", elem->name, elem->type, elem->type);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
516 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
517 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
518 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
519
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
520 /** Pack an element into its protocol representation.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
521 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
522 * @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
523 * @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
524 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
525 * 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
526 * 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
527 * 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
528 * 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
529 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
530 static void msim_msg_pack_element(gpointer data, gpointer user_data)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
531 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
532 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
533 gchar *string, *data_string;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
534 gchar ***items;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
535
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
536 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
537 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
538
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
539 /* 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
540 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
541 {
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
542 return;
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
543 }
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
544
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
545 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
546
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
547 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
548 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
549 /* 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
550 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
551 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
552 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
553 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
554 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
555 case MSIM_TYPE_LIST:
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
556 string = g_strconcat(elem->name, "\\", data_string, NULL);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
557 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
558
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
559 /* 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
560 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
561 if (GPOINTER_TO_UINT(elem->data))
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
562 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
563 /* True - leave in, with blank value. */
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
564 string = g_strdup_printf("%s\\", elem->name);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
565 } else {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
566 /* False - leave out. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
567 string = g_strdup("");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
568 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
569 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
570
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
571 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
572 g_free(data_string);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
573 g_return_if_fail(FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
574 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
575 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
576
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 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
578
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
579 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
580 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
581 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
582
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
583
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
584 /** 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
585 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
586 * @return A string. Caller must g_free().
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
587 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
588 gchar *msim_msg_pack(MsimMessage *msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
589 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
590 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
591
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
592 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
593 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
594
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
595 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
596 * 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
597 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
598 * @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
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 * @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
601 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
602 MsimMessage *msim_parse(gchar *raw)
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 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
605 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
606 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
607 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
608 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
609 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
610
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
611 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
612
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
613 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
614
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
615 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
616
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
617 /* 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
618 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
619 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
620 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
621 "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
622 /* 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
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 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
625 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
626 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
627
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
628 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
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 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
631 (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
632 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
633 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
634 #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
635 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
636 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
637 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
638 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
639 /* Odd-numbered ordinal is a value. */
17929
124c360364a8 Cosmetic improvement to MsimMessage debug output.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17928
diff changeset
640
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
641 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
642
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
643 /* 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
644 * 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
645 * 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
646 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
647 #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
648 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
649 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
650 } else {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
651 /* 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
652 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
653 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
654 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
655 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
656
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
657 /* 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
658 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
659
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
660 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
661 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
662
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
663 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
664 * 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
665 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
666 * @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
667 * 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
668 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
669 * @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
670 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
671 GHashTable *msim_parse_body(const gchar *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
672 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
673 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
674 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
675 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
676 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
677 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
678
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
679 g_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
680
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
681 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
682
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
683 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
684 (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
685 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
686 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
687 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
688
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
689 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
690
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
691 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
692 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
693 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
694 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
695 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
696 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
697 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
698 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
699
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
700 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
701 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
702 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
703 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
704 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
705 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
706 break;
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
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
709 #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
710 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
711 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
712
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
713 /* 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
714 /* 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
715 * 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
716 * 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
717 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
718
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
719 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
720 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
721
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
722 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
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 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
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
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
727 /** 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
728 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
729 * @param msg Message to search within.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
730 * @param name Field name to search for.
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
731 *
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
732 * @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
733 *
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
734 * 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
735 * access the MsimMessageElement *, instead of the GList * container.
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
736 *
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
737 */
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
738 static GList *msim_msg_get_node(MsimMessage *msg, gchar *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
739 {
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
740 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
741
17962
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
742 if (!name)
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
743 {
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
744 return NULL;
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
745 }
d97b661b6086 Bug fixes in MsimMessage:
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17955
diff changeset
746
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
747 /* 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
748 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
749 {
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
750 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
751
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
752 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
753 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
754
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
755 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
756 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
757 }
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
758 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
759 }
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
760
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
761
41cb5e7f15a3 Add msim_msg_insert_before(), needed since some elements must be in a certain order.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17942
diff changeset
762
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
763 /** 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
764 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
765 * @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
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 * @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
768 *
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
769 * 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
770 * 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
771 * 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
772 */
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
773 MsimMessageElement *msim_msg_get(MsimMessage *msg, 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
774 {
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
775 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
776
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
777 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
778 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
779 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
780 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
781 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
782 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
783
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
784 /** Return the 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
785 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
786 * @param name Name 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
787 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
788 * @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
789 *
17955
70cfe01b0466 Pass postprocessing parameters inside MsimMessage * instead of in a new struct.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
790 * 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
791 * 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
792 * 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
793 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
794 gchar *msim_msg_get_string(MsimMessage *msg, gchar *name)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
795 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
796 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
797
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
798 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
799 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
800 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
801
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
802 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
803 {
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
804 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
805 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
806
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
807 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
808 /* 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
809 * 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
810 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
811
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
812 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
813 /* Already unescaped. */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
814 return (gchar *)elem->data;
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
815
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
816 default:
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
817 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
818 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
819 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
820 }
17910
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 /** 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
824 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
825 * @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
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 * @return guint Numeric representation of data, or 0 if could not be converted.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
828 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
829 * 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
830 * 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
831 * 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
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 guint msim_msg_get_integer(MsimMessage *msg, gchar *name)
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 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
836
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
837 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
838
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
839 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
840 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
841 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
842 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
843
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
844 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
845 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
846 /* 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
847 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
848
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
849 default:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
850 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
851 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
852 }
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
853
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
854 /** 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
855 *
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
856 * @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
857 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
858 * @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
859 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
860 * @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
861 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
862 gboolean msim_msg_get_binary(MsimMessage *msg, gchar *name, 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
863 {
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
864 MsimMessageElement *elem;
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
865
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
866 elem = msim_msg_get(msg, name);
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
867
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
868 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
869 {
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
870 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
871 /* 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
872 * 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
873 * 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
874 * 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
875 * 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
876 */
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
877
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
878 /* 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
879 * 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
880 * 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
881 * 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
882 *
17928
00bf757b5c48 Add new MsimMessage element type, MSIM_TYPE_RAW, for fields in incoming
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17926
diff changeset
883 * 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
884 * 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
885 * 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
886 * 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
887 * 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
888 * 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
889 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
890 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
891 *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
892 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
893
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
894 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
895 {
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
896 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
897
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
898 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
899
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
900 /* 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
901 *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
902 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
903
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
904 *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
905
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
906 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
907 }
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
908
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
909
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
910 /* 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
911 * 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
912 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
913 * 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
914
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
915 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
916 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
917 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
918 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
919 }
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
920 }

mercurial