libpurple/protocols/myspace/message.h

Mon, 13 Jul 2009 05:01:42 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 13 Jul 2009 05:01:42 +0000
changeset 27776
60d79d68cde1
parent 25233
8a3fe5c4e2f4
permissions
-rw-r--r--

On MSN, pop up an "invite message" request similar to oscar, and send that
in the add request. We really should try and move this into the add buddy
dialog instead of an extra prompt.

Fixes #8503.

17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
1 /** MySpaceIM protocol messages
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
2 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
3 * \author Jeff Connelly
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
4 *
18013
3238cfe8d879 Fix email address.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17970
diff changeset
5 * Copyright (C) 2007, Jeff Connelly <jeff2@soc.pidgin.im>
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
6 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
11 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
16 *
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19516
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17908
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 #ifndef _MYSPACE_MESSAGE_H
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
23 #define _MYSPACE_MESSAGE_H
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
24
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
25 #include <glib.h>
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
26
25190
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
27 #define MsimMessage GList /* #define instead of typedef to avoid casting */
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
28 typedef gchar MsimMessageType;
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
29 typedef struct _MsimMessageElement MsimMessageElement;
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
30
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
31 #include "session.h"
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
32
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
33 /* Types */
25190
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
34 struct _MsimMessageElement
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
35 {
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
36 const gchar *name; /**< Textual name of element. */
22441
b7251b10326a In msimprpl, support dynamically-allocated strings in message element names,
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19859
diff changeset
37 gboolean dynamic_name; /**< TRUE if 'name' is a dynamic string to be freed, not static. */
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
38 guint type; /**< MSIM_TYPE_* code. */
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
39 gpointer data; /**< Pointer to data, or GUINT_TO_POINTER for int/bool. */
25190
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
40 };
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
41
19513
e63bcd4b6d78 Add msim_msg_get_next_element_node() to loop over MsimMessage's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19151
diff changeset
42 #define msim_msg_get_next_element_node(msg) ((MsimMessage *)(msg->next))
e63bcd4b6d78 Add msim_msg_get_next_element_node() to loop over MsimMessage's.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19151
diff changeset
43
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
44 /* Protocol field types */
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
45 #define MSIM_TYPE_RAW '-'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
46 #define MSIM_TYPE_INTEGER 'i'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
47 #define MSIM_TYPE_STRING 's'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
48 #define MSIM_TYPE_BINARY 'b'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
49 #define MSIM_TYPE_BOOLEAN 'f'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
50 #define MSIM_TYPE_DICTIONARY 'd'
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
51 #define MSIM_TYPE_LIST 'l'
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
52
18058
c862e909a0a1 Move msim_escape() and msim_unescape() to message.c.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18054
diff changeset
53 gchar *msim_escape(const gchar *msg);
c862e909a0a1 Move msim_escape() and msim_unescape() to message.c.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18054
diff changeset
54 gchar *msim_unescape(const gchar *msg);
c862e909a0a1 Move msim_escape() and msim_unescape() to message.c.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18054
diff changeset
55
19151
6bf2cdffc98e Change msim_msg_new() and msim_msg_new_v() to accept the first key name as
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19149
diff changeset
56 MsimMessage *msim_msg_new(gchar *first_key, ...);
17946
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
57 /* No sentinel attribute, because can leave off varargs if not_empty is FALSE. */
69d0d7dfd3de Enhance msim_msg_new() to accept a variadic arguments, like msim_send(),
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17945
diff changeset
58
17935
a6a70c7213ab Previously, the return value of the processing function and msim_process() told
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17928
diff changeset
59 MsimMessage *msim_msg_clone(MsimMessage *old);
19134
3e50516bcc81 Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18063
diff changeset
60 void msim_msg_free_element_data(MsimMessageElement *elem);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
61 void msim_msg_free(MsimMessage *msg);
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
62 MsimMessage *msim_msg_append(MsimMessage *msg, const gchar *name, MsimMessageType type, gpointer data);
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
63 MsimMessage *msim_msg_insert_before(MsimMessage *msg, const gchar *name_before, const gchar *name, MsimMessageType type, gpointer data);
19134
3e50516bcc81 Add a new public function msim_msg_free_element_data(), that frees element data (but the MsimMessageElement * still must be g_free()'d). Internally, msim_msg_free_element() is still used, as a callback to g_list_foreach() to free every element in an MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18063
diff changeset
64 gchar *msim_msg_pack_element_data(MsimMessageElement *elem);
17970
3c92ce43ddae Change to use const gchar * where appropriate.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17946
diff changeset
65 void msim_msg_dump(const char *fmt_string, MsimMessage *msg);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
66 gchar *msim_msg_pack(MsimMessage *msg);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
67
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
68 void msim_msg_list_free(GList *l);
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
69
25190
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
70 /* Based on http://permalink.gmane.org/gmane.comp.parsers.sparse/695
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
71 * Define macros for useful gcc attributes. */
17939
dfc8f0e27d39 Add GCC sentinal attribute to msim_send().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
72 #ifdef __GNUC__
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
73 #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
74 #define FORMAT_ATTR(pos) __attribute__ ((__format__ (__printf__, pos, pos+1)))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
75 #define NORETURN_ATTR __attribute__ ((__noreturn__))
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
76 /* __sentinel__ attribute was introduced in gcc 3.5 */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
77 #if (GCC_VERSION >= 3005)
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
78 #define SENTINEL_ATTR __attribute__ ((__sentinel__(0)))
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
79 #else
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
80 #define SENTINEL_ATTR
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
81 #endif /* gcc >= 3.5 */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
82 #else
19149
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
83 #define FORMAT_ATTR(pos)
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
84 #define NORETURN_ATTR
b9e554509131 Change all code to better match the style of libpurple - use 8-space tabs
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19134
diff changeset
85 #define SENTINEL_ATTR
25190
87a8aba43d70 Shuffling things around, remove stray whitespace, remove some forward
Mark Doliner <markdoliner@pidgin.im>
parents: 22441
diff changeset
86 #endif
18054
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
87
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
88 /* Cause gcc to emit "a missing sentinel in function call" if forgot
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
89 * to write NULL as last, terminating parameter. */
bfe3c4454cc6 In MsimMessage, add support for MSIM_TYPE_LIST - pipe-separated lists.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 18013
diff changeset
90 gboolean msim_send(struct _MsimSession *session, ...) SENTINEL_ATTR;
17939
dfc8f0e27d39 Add GCC sentinal attribute to msim_send().
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17935
diff changeset
91
17911
8c54f28e3067 (Plugin loads, but cannot do anything useful)
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17910
diff changeset
92 gboolean msim_msg_send(struct _MsimSession *session, MsimMessage *msg);
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
93
25195
115044245074 Mark some parameters as const char * instead of char * and don't
Mark Doliner <markdoliner@pidgin.im>
parents: 25190
diff changeset
94 MsimMessage *msim_parse(const gchar *raw);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
95
25233
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
96 MsimMessageElement *msim_msg_get(const MsimMessage *msg, const gchar *name);
19516
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
97
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
98 /* Retrieve data by name */
25233
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
99 gchar *msim_msg_get_string(const MsimMessage *msg, const gchar *name);
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
100 GList *msim_msg_get_list(const MsimMessage *msg, const gchar *name);
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
101 MsimMessage *msim_msg_get_dictionary(const MsimMessage *msg, const gchar *name);
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
102 guint msim_msg_get_integer(const MsimMessage *msg, const gchar *name);
8a3fe5c4e2f4 Fix a leak in myspace prpl.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 25195
diff changeset
103 gboolean msim_msg_get_binary(const MsimMessage *msg, const gchar *name, gchar **binary_data, gsize *binary_length);
17910
9bbfa75ba90b (Incomplete - plugin does not load) Begin migrating protocol message receiving to MsimMessage.
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 17908
diff changeset
104
19516
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
105 /* Retrieve data by element (MsimMessageElement *), returned from msim_msg_get() */
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
106 gchar *msim_msg_get_string_from_element(MsimMessageElement *elem);
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
107 guint msim_msg_get_integer_from_element(MsimMessageElement *elem);
b18f753b8637 For each msim_msg_get_*() function that takes an element name, add
Jeff Connelly <jeff2@soc.pidgin.im>
parents: 19515
diff changeset
108
17908
81c562aafb21 Add MsimMessage implementation (sending only).
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
diff changeset
109 #endif /* _MYSPACE_MESSAGE_H */

mercurial