libpurple/protocols/myspace/message.c

Fri, 01 Jun 2007 06:17:54 +0000

author
Jeff Connelly <jeff2@soc.pidgin.im>
date
Fri, 01 Jun 2007 06:17:54 +0000
branch
soc.2007.msimprpl
changeset 17926
c50662b079b5
parent 17925
85eb0d95ae63
child 17928
00bf757b5c48
permissions
-rw-r--r--

(Plugin partially functional) Fix msim_msg_get() search.

Now works:
- Logging in

Doesn't work:
- Sending messages (double-free/corruption crash)

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);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
28 static gchar *msim_msg_element_as_string(MsimMessageElement *elem);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
29
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
30 MsimMessage *msim_msg_new(void)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
31 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
32 /* Just an empty list. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
33 return NULL;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
34 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
35
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
36 /** Free an individual message element. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
37 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
38 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
39 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
40
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
41 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
42
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
43 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
44 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
45 case MSIM_TYPE_BOOLEAN: /* Fall through */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
46 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
47 /* Integer value stored in gpointer - no need to free(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
48 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
49
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
50 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
51 /* 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
52 * 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
53 g_free(elem->data);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
54 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
55
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
56 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
57 /* Free the GString itself and the binary data. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
58 g_string_free((GString *)elem->data, TRUE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
59 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
60
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
61 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
62 /* TODO: free dictionary */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
63 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
64
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
65 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
66 /* TODO: free list */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
67 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
68
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
69 default:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
70 purple_debug_info("msim", "msim_msg_free_element: not freeing unknown type %d\n",
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
71 elem->type);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
72 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
73 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
74
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
75 g_free(elem);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
76 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
77
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
78 /** Free a complete message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
79 void msim_msg_free(MsimMessage *msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
80 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
81 if (!msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
82 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
83 /* already free as can be */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
84 return;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
85 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
86
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
87 g_list_foreach(msg, msim_msg_free_element, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
88 g_list_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
89 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
90
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
91 /** Send an existing MsimMessage. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
92 gboolean msim_msg_send(MsimSession *session, MsimMessage *msg)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
93 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
94 gchar *raw;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
95 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
96
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
97 raw = msim_msg_pack(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
98 success = msim_send_raw(session, raw);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
99 g_free(raw);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
100
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
101 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
102 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
103
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
104 /**
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
105 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
106 * 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
107 * variable arguments.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
108 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
109 * @param session
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
110 * @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
111 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
112 * 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
113 * 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
114 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
115 * 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
116 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
117 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
118 gboolean msim_send(MsimSession *session, ...)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
119 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
120 va_list argp;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
121 gchar *key, *value;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
122 MsimMessageType type;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
123 gboolean success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
124 MsimMessage *msg;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
125 GString *gs;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
126
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
127 msg = msim_msg_new();
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
128
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
129 /* Read key, type, value triplets until NULL. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
130 va_start(argp, session);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
131 do
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
132 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
133 key = va_arg(argp, gchar *);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
134 if (!key)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
135 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
136 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
137 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
138
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
139 type = va_arg(argp, int);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
140
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
141 /* Interpret variadic arguments. */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
142 switch (type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
143 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
144 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
145 msg = msim_msg_append(msg, key, type, GUINT_TO_POINTER(va_arg(argp, int)));
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
146 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
147
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
148 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
149 value = va_arg(argp, char *);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
150
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
151 g_return_val_if_fail(value != NULL, FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
152
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
153 msg = msim_msg_append(msg, key, type, value);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
154 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
155
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
156 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
157 gs = va_arg(argp, GString *);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
158
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
159 g_return_val_if_fail(gs != NULL, FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
160
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
161 /* msim_msg_free() will free this GString the caller created. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
162 msg = msim_msg_append(msg, key, type, gs);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
163 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
164
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
165 default:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
166 purple_debug_info("msim", "msim_send: unknown type %d\n", type);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
167 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
168 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
169 } while(key);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
170
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
171 /* Actually send the message. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
172 success = msim_msg_send(session, msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
173
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
174 /* Cleanup. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
175 va_end(argp);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
176 msim_msg_free(msg);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
177
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
178 return success;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
179 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
180
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
181
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
182 /** Append a new element to a message.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
183 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
184 * @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
185 * @param type An MSIM_TYPE_* code.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
186 * @param data Pointer to data, see below.
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 * @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
189 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
190 * msg = msim_msg_append(msg, ...)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
191 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
192 * The data parameter depends on the type given:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
193 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
194 * * MSIM_TYPE_INTEGER: Use GUINT_TO_POINTER(x).
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
195 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
196 * * 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
197 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
198 * * 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
199 *
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
200 * * 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
201 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
202 * * MSIM_TYPE_DICTIONARY: TODO
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 * * MSIM_TYPE_LIST: TODO
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
205 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
206 * */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
207 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
208 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
209 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
210
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
211 elem = g_new0(MsimMessageElement, 1);
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 elem->name = name;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
214 elem->type = type;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
215 elem->data = data;
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 return g_list_append(msg, elem);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
218 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
219
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
220 /** Pack a string using the given GFunc and seperator.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
221 * Used by msim_msg_debug_string() and msim_msg_pack().
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 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
224 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
225 gchar **strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
226 gchar **strings_tmp;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
227 gchar *joined;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
228 gchar *final;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
229 int i;
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 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
232
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
233 /* Add one for NULL terminator for g_strjoinv(). */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
234 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
235
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
236 strings_tmp = strings;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
237 g_list_foreach(msg, gf, &strings_tmp);
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 joined = g_strjoinv(sep, strings);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
240 final = g_strconcat(begin, joined, end, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
241 g_free(joined);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
242
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
243 /* Clean up. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
244 for (i = 0; i < g_list_length(msg); ++i)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
245 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
246 g_free(strings[i]);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
247 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
248
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
249 g_free(strings);
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 final;
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 /** Store a human-readable string describing the element.
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 * @param data Pointer to an MsimMessageElement.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
256 * @param user_data
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
257 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
258 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
259 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
260 MsimMessageElement *elem;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
261 gchar *string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
262 GString *gs;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
263 gchar *binary;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
264 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
265
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
266 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
267 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
268
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
269 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
270 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
271 case MSIM_TYPE_INTEGER:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
272 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
273 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
274
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
275 case MSIM_TYPE_STRING:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
276 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
277 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
278
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
279 case MSIM_TYPE_BINARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
280 gs = (GString *)elem->data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
281 binary = purple_base64_encode((guchar*)gs->str, gs->len);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
282 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
283 g_free(binary);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
284 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
285
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
286 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
287 string = g_strdup_printf("%s(boolean): %s", elem->name,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
288 GPOINTER_TO_UINT(elem->data) ? "TRUE" : "FALSE");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
289 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
290
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
291 case MSIM_TYPE_DICTIONARY:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
292 /* TODO: provide human-readable output of dictionary. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
293 string = g_strdup_printf("%s(dict): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
294 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
295
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
296 case MSIM_TYPE_LIST:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
297 /* TODO: provide human-readable output of list. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
298 string = g_strdup_printf("%s(list): TODO", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
299 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
300
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
301 default:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
302 string = g_strdup_printf("%s(unknown type %d)", elem->name, elem->type);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
303 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
304 }
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 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
307 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
308 }
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 a human-readable string of the message.
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 * @return A string. Caller must g_free().
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 gchar *msim_msg_debug_string(MsimMessage *msg)
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 if (!msg)
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 return g_strdup("<MsimMessage: empty>");
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
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
321 return msim_msg_pack_using(msg, msim_msg_debug_string_element, "\n", "<MsimMessage: \n", ">");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
322 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
323
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 /** Return a message element data as a new string, converting from other types (integer, etc.) if necessary.
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
325 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
326 * @return gchar * The data as a string, or NULL. Caller must 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
327 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
328 static gchar *msim_msg_element_as_string(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
329 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
330 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
331 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
332 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
333 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
334
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
335 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
336 /* 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
337 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
338
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
339 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
340 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
341 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
342
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
343 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
344 /* 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
345 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
346 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
347
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
348 case MSIM_TYPE_BOOLEAN:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
349 /* These strings are not actually used by the wire protocol
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
350 * -- see msim_msg_pack_element. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
351 return g_strdup(GPOINTER_TO_UINT(elem->data) ? "True" : "False");
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
352
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
353 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
354 /* 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
355 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
356
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
357 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
358 /* 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
359 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
360
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
361 default:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
362 purple_debug_info("msim", "field %s, unknown type %d\n", elem->name, 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
363 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
364 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
365 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
366
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
367 /** Pack an element into its protocol representation.
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
368 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
369 * @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
370 * @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
371 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
372 * 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
373 * 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
374 * 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
375 * 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
376 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
377 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
378 {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
379 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
380 gchar *string, *data_string;
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
381 gchar ***items;
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 elem = (MsimMessageElement *)data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
384 items = user_data;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
385
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
386 data_string = msim_msg_element_as_string(elem);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
387
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
388 switch (elem->type)
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
389 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
390 /* These types are represented by key name/value pairs. */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
391 case MSIM_TYPE_INTEGER:
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
392 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
393 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
394 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
395 case MSIM_TYPE_LIST:
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
396 string = g_strconcat(elem->name, "\\", data_string, NULL);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
397 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
398
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
399 /* 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
400 case MSIM_TYPE_BOOLEAN:
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
401 if (GPOINTER_TO_UINT(elem->data))
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
402 {
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
403 /* True - leave in, with blank value. */
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
404 string = g_strdup_printf("%s\\\\", elem->name);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
405 } else {
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
406 /* False - leave out. */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
407 string = g_strdup("");
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
408 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
409 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
410
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
411 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
412 g_free(data_string);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
413 g_return_if_fail(FALSE);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
414 break;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
415 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
416
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
417 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
418
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
419 **items = string;
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
420 ++(*items);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
421 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
422
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
423
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
424 /** 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
425 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
426 * @return A string. Caller must g_free().
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
427 */
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
428 gchar *msim_msg_pack(MsimMessage *msg)
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 g_return_val_if_fail(msg != NULL, NULL);
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
431
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
432 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
433 }
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
434
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
435 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
436 * 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
437 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
438 * @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
439 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
440 * @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
441 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
442 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
443 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
444 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
445 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
446 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
447 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
448 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
449 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
450
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
451 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
452
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
453 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
454
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
455 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
456
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
457 /* 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
458 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
459 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
460 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
461 "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
462 /* 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
463
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
464 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
465 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
466 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
467
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
468 msg = msim_msg_new();
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
469
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
470 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
471 (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
472 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
473 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
474 #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
475 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
476 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
477 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
478 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
479 /* Odd-numbered ordinal is a value. */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
480
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
481 /* Note: returns 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
482 value = msim_unescape(token);
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
483
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
484 /* Always append strings, since protocol has no incoming
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
485 * type information for each field. */
17917
4e355555ac93 Fix msim_parse() to correctly parse into an MsimMessage *.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
486 msg = msim_msg_append(msg, g_strdup(key), MSIM_TYPE_STRING, 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
487 #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
488 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
489 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
490 } else {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
491 /* 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
492 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
493 }
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 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
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 /* 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
498 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
499
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
500 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
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
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
503 /**
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
504 * 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
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 * @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
507 * 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
508 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
509 * @return 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
510 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
511 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
512 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
513 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
514 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
515 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
516 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
517 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
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 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
520
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
521 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
522
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
523 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
524 (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
525 i++)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
526 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
527 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
528
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
529 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
530
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
531 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
532 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
533 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
534 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
535 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
536 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
537 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
538 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
539
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
540 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
541 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
542 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
543 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
544 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
545 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
546 break;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
547 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
548
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
549 #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
550 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
551 #endif
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
552
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
553 /* 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
554 /* 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
555 * 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
556 * 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
557 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
558
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
559 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
560 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
561
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
562 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
563
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
564 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
565 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
566
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
567 /** 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
568 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
569 * @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
570 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
571 * @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
572 *
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
573 * 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
574 * 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
575 * 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
576 */
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
577 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
578 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
579 GList *i;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
580
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
581 /* Linear search for the given name. O(n) but n is small. */
17926
c50662b079b5 (Plugin partially functional) Fix msim_msg_get() search.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17925
diff changeset
582 for (i = g_list_first(msg); i != NULL; i = g_list_next(i))
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
583 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
584 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
585
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
586 elem = i->data;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
587 g_return_val_if_fail(elem != 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
588
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
589 if (strcmp(elem->name, name) == 0)
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
590 return elem;
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
591 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
592 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
593 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
594
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
595 /** 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
596 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
597 * @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
598 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
599 * @return gchar * The message string. Caller must 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
600 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
601 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
602 {
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
603 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
604
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
605 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
606 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
607 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
608
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
609 return msim_msg_element_as_string(elem);
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
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
612 /** 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
613 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
614 * @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
615 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
616 * @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
617 *
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
618 * 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
619 * 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
620 * 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
621 */
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
622 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
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 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
625
17918
eadfbe4e1d64 Change msim_msg_get_element to msim_msg_get.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17917
diff changeset
626 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
627
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
628 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
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 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
631 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
632
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
633 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
634 /* 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
635 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
636
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
637 default:
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
638 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
639 }
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
640 }
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
641
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
642 /** 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
643 *
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
644 * @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
645 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
646 * @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
647 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
648 * @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
649 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
650 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
651 {
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
652 MsimMessageElement *elem;
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
653
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
654 elem = msim_msg_get(msg, name);
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
655
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
656 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
657 {
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
658 case MSIM_TYPE_STRING:
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
659 /* Currently, incoming messages get stored as MSIM_TYPE_STRING.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
660 * This is fine for integers and strings, since they can easily be
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
661 * converted in msim_get_*, as desirable. However, it may not work
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
662 * 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
663 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
664 * Incoming base64'd elements get tagged as MSIM_TYPE_STRING.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
665 * 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
666 * 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
667 * 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
668 * 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
669 * 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
670 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
671 * TODO: Make incoming messages be tagged with MSIM_TYPE_UNKNOWN, and
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
672 * converted appropriately. They can still be "strings", just they won't
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
673 * be tagged as MSIM_TYPE_STRING (as MSIM_TYPE_STRING is intended to be used
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
674 * by msimprpl code for things like instant messages - stuff that should be
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
675 * escaped if needed). DWIM.
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
676 */
17925
85eb0d95ae63 Trivial fixes to clean up MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17921
diff changeset
677 *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
678 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
679
17920
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
680 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
681 {
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
682 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
683
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
684 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
685
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
686 /* 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
687 *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
688 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
689
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
690 *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
691
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
692 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
693 }
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
694
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
695
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
696 /* 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
697 * 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
698 *
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
699 * 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
700
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
701 default:
17921
4f908b7c9c41 Add MSIM_TYPE_STRING to msim_msg_get_binary() (but with reservations).
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17920
diff changeset
702 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
703 }
a02176571ee6 Add msim_msg_get_binary() - retrieves binary data values from an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17918
diff changeset
704 }

mercurial