summaryrefslogtreecommitdiff
path: root/src/muc-channel.c
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2012-02-06 17:47:58 +0000
committerWill Thompson <will.thompson@collabora.co.uk>2012-02-06 17:47:58 +0000
commit359a1ae278a9c33dd0bc41394912166ac2b5ecda (patch)
tree775c8f0fbc2217decfcdcfae057ae8b80bbdd2eb /src/muc-channel.c
parente0739058a22dae127e5410fd8ab4fb5dc2d49ad1 (diff)
parentb33adc647bf4e6dc75efba1abd74380d4bbb18d1 (diff)
downloadtelepathy-gabble-359a1ae278a9c33dd0bc41394912166ac2b5ecda.tar.gz
Merge branch 'master' into call1
Conflicts: src/Makefile.am For reasons I don't fully understand (presumably headers moving around a bit?) I had to add includes of <telepathy-glib/gtypes.h> or <telepathy-glib/interfaces.h> to: • src/call-content.c • src/private-tubes-factory.c • src/protocol.c • src/util.c But otherwise this has been an uneventful merge!
Diffstat (limited to 'src/muc-channel.c')
-rw-r--r--src/muc-channel.c113
1 files changed, 52 insertions, 61 deletions
diff --git a/src/muc-channel.c b/src/muc-channel.c
index b7425c7d2..2d413fe31 100644
--- a/src/muc-channel.c
+++ b/src/muc-channel.c
@@ -25,9 +25,7 @@
#include <stdio.h>
#include <string.h>
-#include <wocky/wocky-muc.h>
-#include <wocky/wocky-utils.h>
-#include <wocky/wocky-xmpp-error.h>
+#include <wocky/wocky.h>
#include <dbus/dbus-glib.h>
#include <telepathy-glib/dbus.h>
@@ -319,11 +317,11 @@ static void handle_errmsg (GObject *source,
static void _gabble_muc_channel_handle_subject (GabbleMucChannel *chan,
TpHandleType handle_type,
TpHandle sender, GDateTime *datetime, const gchar *subject,
- LmMessage *msg);
+ WockyStanza *msg);
static void _gabble_muc_channel_receive (GabbleMucChannel *chan,
TpChannelTextMessageType msg_type, TpHandleType handle_type,
TpHandle sender, GDateTime *datetime, const gchar *id, const gchar *text,
- LmMessage *msg, TpChannelTextSendError send_error,
+ WockyStanza *msg, TpChannelTextSendError send_error,
TpDeliveryStatus delivery_status);
static void
@@ -630,14 +628,15 @@ properties_disco_cb (GabbleDisco *disco,
GabbleDiscoRequest *request,
const gchar *jid,
const gchar *node,
- LmMessageNode *query_result,
+ WockyNode *query_result,
GError *error,
gpointer user_data)
{
GabbleMucChannel *chan = user_data;
GabbleMucChannelPrivate *priv = chan->priv;
- LmMessageNode *lm_node;
- NodeIter i;
+ WockyNode *lm_node;
+ WockyNodeIter i;
+ WockyNode *child;
g_assert (GABBLE_IS_MUC_CHANNEL (chan));
@@ -652,14 +651,14 @@ properties_disco_cb (GabbleDisco *disco,
*/
/* ROOM_PROP_NAME */
- lm_node = lm_message_node_get_child (query_result, "identity");
+ lm_node = wocky_node_get_child (query_result, "identity");
if (lm_node)
{
const gchar *category, *type, *name;
- category = lm_message_node_get_attribute (lm_node, "category");
- type = lm_message_node_get_attribute (lm_node, "type");
- name = lm_message_node_get_attribute (lm_node, "name");
+ category = wocky_node_get_attribute (lm_node, "category");
+ type = wocky_node_get_attribute (lm_node, "type");
+ name = wocky_node_get_attribute (lm_node, "name");
if (!tp_strdiff (category, "conference") &&
!tp_strdiff (type, "text") &&
@@ -669,10 +668,10 @@ properties_disco_cb (GabbleDisco *disco,
}
}
- for (i = node_iter (query_result); i; i = node_iter_next (i))
+ wocky_node_iter_init (&i, query_result, NULL, NULL);
+ while (wocky_node_iter_next (&i, &child))
{
const gchar *config_property_name = NULL;
- LmMessageNode *child = node_iter_data (i);
GValue val = { 0, };
if (strcmp (child->name, "feature") == 0)
@@ -680,7 +679,7 @@ properties_disco_cb (GabbleDisco *disco,
config_property_name = map_feature (child, &val);
}
else if (strcmp (child->name, "x") == 0 &&
- lm_message_node_has_namespace (child, NS_X_DATA, NULL))
+ wocky_node_has_ns (child, NS_X_DATA))
{
config_property_name = handle_form (child, &val);
}
@@ -1745,11 +1744,6 @@ update_permissions (GabbleMucChannel *chan)
}
}
-
-
-/* ************************************************************************* */
-/* wocky MUC implementation */
-
/* connect to wocky-muc:SIG_PRESENCE_ERROR */
static void
handle_error (GObject *source,
@@ -2116,7 +2110,7 @@ handle_fill_presence (WockyMuc *muc,
conn->self_presence->status_message,
0);
- g_signal_emit (self, signals[PRE_PRESENCE], 0, (LmMessage *) stanza);
+ g_signal_emit (self, signals[PRE_PRESENCE], 0, (WockyStanza *) stanza);
}
/* connect to wocky-muc:SIG_NICK_CHANGE, which we will receive when the *
@@ -2179,7 +2173,7 @@ update_roster_presence (GabbleMucChannel *gmuc,
}
gabble_presence_parse_presence_message (conn->presence_cache,
- handle, member->from, (LmMessage *) member->presence_stanza);
+ handle, member->from, (WockyStanza *) member->presence_stanza);
tp_handle_set_add (members, handle);
g_hash_table_insert (omap,
@@ -2303,7 +2297,7 @@ handle_presence (GObject *source,
}
gabble_presence_parse_presence_message (conn->presence_cache,
- handle, who->from, (LmMessage *) who->presence_stanza);
+ handle, who->from, (WockyStanza *) who->presence_stanza);
/* add the member in quesion */
tp_handle_set_add (handles, handle);
@@ -2516,7 +2510,7 @@ _gabble_muc_channel_handle_subject (GabbleMucChannel *chan,
TpHandle sender,
GDateTime *datetime,
const gchar *subject,
- LmMessage *msg)
+ WockyStanza *msg)
{
GabbleMucChannelPrivate *priv;
const gchar *actor;
@@ -2591,7 +2585,7 @@ _gabble_muc_channel_receive (GabbleMucChannel *chan,
GDateTime *datetime,
const gchar *id,
const gchar *text,
- LmMessage *msg,
+ WockyStanza *msg,
TpChannelTextSendError send_error,
TpDeliveryStatus error_status)
{
@@ -2836,7 +2830,7 @@ gabble_muc_channel_send (GObject *obj,
gchar *id = NULL;
stanza = gabble_message_util_build_stanza (message, gabble_conn,
- LM_MESSAGE_SUB_TYPE_GROUPCHAT, TP_CHANNEL_CHAT_STATE_ACTIVE,
+ WOCKY_STANZA_SUB_TYPE_GROUPCHAT, TP_CHANNEL_CHAT_STATE_ACTIVE,
priv->jid, FALSE, &id, &error);
if (stanza != NULL)
@@ -2867,30 +2861,30 @@ gabble_muc_channel_send_invite (GabbleMucChannel *self,
{
TpBaseChannel *base = TP_BASE_CHANNEL (self);
GabbleMucChannelPrivate *priv = self->priv;
- LmMessage *msg;
- LmMessageNode *x_node, *invite_node;
+ WockyStanza *msg;
+ WockyNode *invite_node;
gboolean result;
g_signal_emit (self, signals[PRE_INVITE], 0, jid);
- msg = lm_message_new (priv->jid, LM_MESSAGE_TYPE_MESSAGE);
-
- x_node = lm_message_node_add_child (
- wocky_stanza_get_top_node (msg), "x", NULL);
- lm_message_node_set_attribute (x_node, "xmlns", NS_MUC_USER);
-
- invite_node = lm_message_node_add_child (x_node, "invite", NULL);
-
- lm_message_node_set_attribute (invite_node, "to", jid);
+ msg = wocky_stanza_build (
+ WOCKY_STANZA_TYPE_MESSAGE, WOCKY_STANZA_SUB_TYPE_NONE,
+ NULL, priv->jid,
+ '(', "x", ':', NS_MUC_USER,
+ '(', "invite",
+ '@', "to", jid,
+ '*', &invite_node,
+ ')',
+ ')', NULL);
if (message != NULL && *message != '\0')
{
- lm_message_node_add_child (invite_node, "reason", message);
+ wocky_node_add_child_with_content (invite_node, "reason", message);
}
if (continue_)
{
- lm_message_node_add_child (invite_node, "continue", NULL);
+ wocky_node_add_child_with_content (invite_node, "continue", NULL);
}
DEBUG ("sending MUC invitation for room %s to contact %s with reason "
@@ -2898,7 +2892,7 @@ gabble_muc_channel_send_invite (GabbleMucChannel *self,
result = _gabble_connection_send (
GABBLE_CONNECTION (tp_base_channel_get_connection (base)), msg, error);
- lm_message_unref (msg);
+ g_object_unref (msg);
return result;
}
@@ -2982,17 +2976,15 @@ gabble_muc_channel_add_member (GObject *obj,
return gabble_muc_channel_send_invite (self, jid, message, FALSE, error);
}
-static LmHandlerResult
-kick_request_reply_cb (GabbleConnection *conn, LmMessage *sent_msg,
- LmMessage *reply_msg, GObject *object,
+static void
+kick_request_reply_cb (GabbleConnection *conn, WockyStanza *sent_msg,
+ WockyStanza *reply_msg, GObject *object,
gpointer user_data)
{
- if (lm_message_get_sub_type (reply_msg) != LM_MESSAGE_SUB_TYPE_RESULT)
+ if (wocky_stanza_extract_errors (reply_msg, NULL, NULL, NULL, NULL))
{
DEBUG ("Failed to kick user %s from room", (const char *) user_data);
}
-
- return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
static gboolean
@@ -3005,8 +2997,8 @@ gabble_muc_channel_remove_member (GObject *obj,
TpBaseChannel *base = TP_BASE_CHANNEL (chan);
GabbleMucChannelPrivate *priv = chan->priv;
TpGroupMixin *group = TP_GROUP_MIXIN (chan);
- LmMessage *msg;
- LmMessageNode *query_node, *item_node;
+ WockyStanza *msg;
+ WockyNode *item_node;
const gchar *jid, *nick;
gboolean result;
@@ -3020,14 +3012,13 @@ gabble_muc_channel_remove_member (GObject *obj,
}
/* Otherwise, the user wants to kick someone. */
- msg = lm_message_new_with_sub_type (priv->jid, LM_MESSAGE_TYPE_IQ,
- LM_MESSAGE_SUB_TYPE_SET);
-
- query_node = lm_message_node_add_child (
- wocky_stanza_get_top_node (msg), "query", NULL);
- lm_message_node_set_attribute (query_node, "xmlns", NS_MUC_ADMIN);
-
- item_node = lm_message_node_add_child (query_node, "item", NULL);
+ msg = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_SET,
+ NULL, priv->jid,
+ '(', "query", ':', NS_MUC_ADMIN,
+ '(', "item",
+ '*', &item_node,
+ ')',
+ ')', NULL);
jid = tp_handle_inspect (TP_GROUP_MIXIN (obj)->handle_repo, handle);
@@ -3035,14 +3026,14 @@ gabble_muc_channel_remove_member (GObject *obj,
if (nick != NULL)
nick++;
- lm_message_node_set_attributes (item_node,
+ wocky_node_set_attributes (item_node,
"nick", nick,
"role", "none",
NULL);
if (*message != '\0')
{
- lm_message_node_add_child (item_node, "reason", message);
+ wocky_node_add_child_with_content (item_node, "reason", message);
}
DEBUG ("sending MUC kick request for contact %u (%s) to room %s with reason "
@@ -3052,7 +3043,7 @@ gabble_muc_channel_remove_member (GObject *obj,
GABBLE_CONNECTION (tp_base_channel_get_connection (base)),
msg, kick_request_reply_cb, obj, (gpointer) jid, error);
- lm_message_unref (msg);
+ g_object_unref (msg);
return result;
}
@@ -3255,7 +3246,7 @@ request_config_form_reply_cb (
while (wocky_node_iter_next (&j, &child))
{
const gchar *var, *type_str;
- LmMessageNode *field_node;
+ WockyNode *field_node;
ConfigFormMapping *f;
GValue *value = NULL;
@@ -3434,7 +3425,7 @@ gabble_muc_channel_set_chat_state (TpSvcChannelInterfaceChatState *iface,
if (error != NULL ||
!gabble_message_util_send_chat_state (G_OBJECT (self),
GABBLE_CONNECTION (tp_base_channel_get_connection (base)),
- LM_MESSAGE_SUB_TYPE_GROUPCHAT, state, priv->jid, &error))
+ WOCKY_STANZA_SUB_TYPE_GROUPCHAT, state, priv->jid, &error))
{
dbus_g_method_return_error (context, error);
g_error_free (error);