[telepathy-gabble/master] use Wocky's stanza register

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Sep 25 02:29:48 PDT 2009


---
 src/connection.c   |   15 ---------------
 src/wocky-pubsub.c |   46 ++++++++++++++++++++++++++++++++--------------
 src/wocky-pubsub.h |    5 -----
 3 files changed, 32 insertions(+), 34 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index da9278d..d8a1e97 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -161,7 +161,6 @@ struct _GabbleConnectionPrivate
 
   LmMessageHandler *iq_disco_cb;
   LmMessageHandler *iq_unknown_cb;
-  LmMessageHandler *pubsub_msg_cb;
   LmMessageHandler *olpc_msg_cb;
   LmMessageHandler *olpc_presence_cb;
 
@@ -958,7 +957,6 @@ gabble_connection_dispose (GObject *object)
 
   g_assert (priv->iq_disco_cb == NULL);
   g_assert (priv->iq_unknown_cb == NULL);
-  g_assert (priv->pubsub_msg_cb == NULL);
   g_assert (priv->olpc_msg_cb == NULL);
   g_assert (priv->olpc_presence_cb == NULL);
 
@@ -1629,7 +1627,6 @@ connect_callbacks (TpBaseConnection *base)
 
   g_assert (priv->iq_disco_cb == NULL);
   g_assert (priv->iq_unknown_cb == NULL);
-  g_assert (priv->pubsub_msg_cb == NULL);
   g_assert (priv->olpc_msg_cb == NULL);
   g_assert (priv->olpc_presence_cb == NULL);
 
@@ -1645,12 +1642,6 @@ connect_callbacks (TpBaseConnection *base)
                                           LM_MESSAGE_TYPE_IQ,
                                           LM_HANDLER_PRIORITY_LAST);
 
-  priv->pubsub_msg_cb = lm_message_handler_new (pubsub_msg_event_cb,
-                                            conn, NULL);
-  lm_connection_register_message_handler (conn->lmconn, priv->pubsub_msg_cb,
-                                          LM_MESSAGE_TYPE_MESSAGE,
-                                          LM_HANDLER_PRIORITY_FIRST);
-
   priv->olpc_msg_cb = lm_message_handler_new (conn_olpc_msg_cb,
                                             conn, NULL);
   lm_connection_register_message_handler (conn->lmconn, priv->olpc_msg_cb,
@@ -1672,7 +1663,6 @@ disconnect_callbacks (TpBaseConnection *base)
 
   g_assert (priv->iq_disco_cb != NULL);
   g_assert (priv->iq_unknown_cb != NULL);
-  g_assert (priv->pubsub_msg_cb != NULL);
   g_assert (priv->olpc_msg_cb != NULL);
   g_assert (priv->olpc_presence_cb != NULL);
 
@@ -1686,11 +1676,6 @@ disconnect_callbacks (TpBaseConnection *base)
   lm_message_handler_unref (priv->iq_unknown_cb);
   priv->iq_unknown_cb = NULL;
 
-  lm_connection_unregister_message_handler (conn->lmconn, priv->pubsub_msg_cb,
-                                            LM_MESSAGE_TYPE_MESSAGE);
-  lm_message_handler_unref (priv->pubsub_msg_cb);
-  priv->pubsub_msg_cb = NULL;
-
   lm_connection_unregister_message_handler (conn->lmconn, priv->olpc_msg_cb,
                                             LM_MESSAGE_TYPE_MESSAGE);
   lm_message_handler_unref (priv->olpc_msg_cb);
diff --git a/src/wocky-pubsub.c b/src/wocky-pubsub.c
index 428d662..705410f 100644
--- a/src/wocky-pubsub.c
+++ b/src/wocky-pubsub.c
@@ -22,7 +22,7 @@
 
 #include <string.h>
 
-#include <loudmouth/loudmouth.h>
+#include <wocky/wocky-porter.h>
 #include <telepathy-glib/enums.h>
 
 #include "conn-aliasing.h"
@@ -79,6 +79,9 @@ typedef struct _WockyPubsubPrivate WockyPubsubPrivate;
 struct _WockyPubsubPrivate
 {
   WockySession *session;
+  WockyPorter *porter;
+
+  guint handler_id;
 
   /* list of owned (PubsubEventHandler *) */
   GSList *handlers;
@@ -128,6 +131,7 @@ wocky_pubsub_get_property (GObject *object,
     }
 }
 
+
 static void
 wocky_pubsub_dispose (GObject *object)
 {
@@ -139,6 +143,15 @@ wocky_pubsub_dispose (GObject *object)
 
   priv->dispose_has_run = TRUE;
 
+  if (priv->handler_id != 0)
+    {
+      wocky_porter_unregister_handler (priv->porter, priv->handler_id);
+      priv->handler_id = 0;
+    }
+
+  if (priv->porter != NULL)
+    g_object_unref (priv->porter);
+
   if (G_OBJECT_CLASS (wocky_pubsub_parent_class)->dispose)
     G_OBJECT_CLASS (wocky_pubsub_parent_class)->dispose (object);
 }
@@ -269,17 +282,15 @@ pubsub_make_publish_msg (
 /**
  * pubsub_msg_event_cb
  *
- * Called by loudmouth when we get an incoming <message>. This handler handles
+ * Called by Wocky when we get an incoming <message>. This handler handles
  * pubsub events.
  */
-LmHandlerResult
-pubsub_msg_event_cb (LmMessageHandler *handler,
-    LmConnection *connection,
+static gboolean
+pubsub_msg_event_cb (WockyPorter *porter,
     WockyXmppStanza *message,
     gpointer user_data)
 {
-  GabbleConnection *conn = GABBLE_CONNECTION (user_data);
-  WockyPubsub *self = conn->pubsub;
+  WockyPubsub *self = WOCKY_PUBSUB (user_data);
   WockyXmppNode *node;
   const gchar *event_ns, *from;
 
@@ -291,35 +302,35 @@ pubsub_msg_event_cb (LmMessageHandler *handler,
     }
   else
     {
-      return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+      return FALSE;
     }
 
   if (event_ns == NULL || !g_str_has_prefix (event_ns, NS_PUBSUB))
     {
-      return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+      return FALSE;
     }
 
   from = wocky_xmpp_node_get_attribute (message->node, "from");
   if (from == NULL)
     {
-      return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+      return TRUE;
     }
 
   node = wocky_xmpp_node_get_child (node, "items");
   if (node == NULL)
     {
-      return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+      return TRUE;
     }
 
   node = wocky_xmpp_node_get_child (node, "item");
   if (node == NULL)
     {
-      return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+      return TRUE;
     }
 
   gabble_pubsub_event_handler (self, message, from, node);
 
-  return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+  return TRUE;
 }
 
 WockyPubsub *
@@ -338,7 +349,14 @@ wocky_pubsub_start (WockyPubsub *self,
   g_assert (priv->session == NULL);
   priv->session = session;
 
-  /* TODO: register handler */
+  priv->porter = wocky_session_get_porter (priv->session);
+  g_object_ref (priv->porter);
+
+  /* Register message handler */
+  priv->handler_id = wocky_porter_register_handler (priv->porter,
+      WOCKY_STANZA_TYPE_MESSAGE, WOCKY_STANZA_SUB_TYPE_NONE, NULL,
+      WOCKY_PORTER_HANDLER_PRIORITY_MAX,
+      pubsub_msg_event_cb, self, WOCKY_STANZA_END);
 }
 
 guint
diff --git a/src/wocky-pubsub.h b/src/wocky-pubsub.h
index 9e30453..9791910 100644
--- a/src/wocky-pubsub.h
+++ b/src/wocky-pubsub.h
@@ -83,11 +83,6 @@ WockyXmppStanza * pubsub_make_publish_msg (const gchar *to,
     const gchar *item_name,
     WockyXmppNode **node);
 
-LmHandlerResult pubsub_msg_event_cb (LmMessageHandler *handler,
-    LmConnection *connection,
-    WockyXmppStanza *message,
-    gpointer user_data);
-
 G_END_DECLS
 
 #endif /* __WOCKY_PUBSUB_H__ */
-- 
1.5.6.5




More information about the telepathy-commits mailing list