[Telepathy-commits] [telepathy-salut/master] Remove GibberIqHelperRequestStanza: directly use GibberXmppStanza

Alban Crequy alban.crequy at collabora.co.uk
Mon Nov 10 08:09:51 PST 2008


The GibberXmppStanza can be g_object_ref()ed and _unref()ed
This revert changes 5cedaf35 and a1bc2756.
---
 lib/gibber/gibber-iq-helper.c     |   52 ++++++++++--------------------------
 lib/gibber/gibber-iq-helper.h     |   10 +-----
 src/salut-si-bytestream-manager.c |    6 +---
 src/salut-tubes-channel.c         |    6 ++--
 src/salut-tubes-channel.h         |    2 +-
 src/salut-tubes-manager.c         |    6 +---
 src/tube-stream.c                 |   12 +++++---
 src/tube-stream.h                 |    2 +-
 tests/check-gibber-iq-helper.c    |   14 +++------
 9 files changed, 39 insertions(+), 71 deletions(-)

diff --git a/lib/gibber/gibber-iq-helper.c b/lib/gibber/gibber-iq-helper.c
index 9f0a8f1..6c6436c 100644
--- a/lib/gibber/gibber-iq-helper.c
+++ b/lib/gibber/gibber-iq-helper.c
@@ -50,13 +50,6 @@ struct _GibberIqHelperPrivate
 #define GIBBER_IQ_HELPER_GET_PRIVATE(obj) \
   ((GibberIqHelperPrivate *) ((GibberIqHelper *)obj)->priv)
 
-struct _GibberIqHelperRequestStanza
-{
-  gchar *from;
-  gchar *to;
-  gchar *id;
-};
-
 static void
 reply_handler_object_destroy_notify_cb (gpointer _data, GObject *object);
 
@@ -351,35 +344,15 @@ gibber_iq_helper_send_with_reply (GibberIqHelper *self,
 }
 
 static GibberXmppStanza *
-new_reply (GibberIqHelperRequestStanza *iq,
+new_reply (GibberXmppStanza *iq,
            GibberStanzaSubType sub_type)
 {
   GibberXmppStanza *reply;
-
-  g_return_val_if_fail (sub_type == GIBBER_STANZA_SUB_TYPE_RESULT ||
-      sub_type == GIBBER_STANZA_SUB_TYPE_ERROR, NULL);
-
-  reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
-      sub_type,
-      iq->to, iq->from,
-      GIBBER_NODE_ATTRIBUTE, "id", iq->id,
-      GIBBER_STANZA_END);
-
-  g_free (iq->from);
-  g_free (iq->to);
-  g_free (iq->id);
-  g_slice_free (GibberIqHelperRequestStanza, iq);
-
-  return reply;
-}
-
-GibberIqHelperRequestStanza *
-gibber_iq_helper_get_request_stanza (GibberXmppStanza *iq)
-{
-  GibberIqHelperRequestStanza *req;
   const gchar *id;
   const gchar *iq_from, *iq_to;
 
+  g_return_val_if_fail (sub_type == GIBBER_STANZA_SUB_TYPE_RESULT ||
+      sub_type == GIBBER_STANZA_SUB_TYPE_ERROR, NULL);
   g_return_val_if_fail (strcmp (iq->node->name, "iq") == 0, NULL);
 
   id = gibber_xmpp_node_get_attribute (iq->node, "id");
@@ -388,21 +361,23 @@ gibber_iq_helper_get_request_stanza (GibberXmppStanza *iq)
   iq_from = gibber_xmpp_node_get_attribute (iq->node, "from");
   iq_to = gibber_xmpp_node_get_attribute (iq->node, "to");
 
-  req = g_slice_new0 (GibberIqHelperRequestStanza);
-  req->to = g_strdup (iq_to);
-  req->from = g_strdup (iq_from);
-  req->id = g_strdup (id);
-  return req;
+  reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
+      sub_type,
+      iq_to, iq_from,
+      GIBBER_NODE_ATTRIBUTE, "id", id,
+      GIBBER_STANZA_END);
+
+  return reply;
 }
 
 GibberXmppStanza *
-gibber_iq_helper_new_result_reply (GibberIqHelperRequestStanza *iq)
+gibber_iq_helper_new_result_reply (GibberXmppStanza *iq)
 {
   return new_reply (iq, GIBBER_STANZA_SUB_TYPE_RESULT);
 }
 
 GibberXmppStanza *
-gibber_iq_helper_new_error_reply (GibberIqHelperRequestStanza *iq,
+gibber_iq_helper_new_error_reply (GibberXmppStanza *iq,
                                   GibberXmppError error,
                                   const gchar *errmsg)
 {
@@ -410,5 +385,8 @@ gibber_iq_helper_new_error_reply (GibberIqHelperRequestStanza *iq,
 
   stanza = new_reply (iq, GIBBER_STANZA_SUB_TYPE_ERROR);
   gibber_xmpp_error_to_node (error, stanza->node, errmsg);
+
+  /* TODO: Would be cool to copy <iq> children as in Gabble */
+
   return stanza;
 }
diff --git a/lib/gibber/gibber-iq-helper.h b/lib/gibber/gibber-iq-helper.h
index 2c66cb6..dc3648c 100644
--- a/lib/gibber/gibber-iq-helper.h
+++ b/lib/gibber/gibber-iq-helper.h
@@ -31,8 +31,6 @@ G_BEGIN_DECLS
 typedef struct _GibberIqHelper GibberIqHelper;
 typedef struct _GibberIqHelperClass GibberIqHelperClass;
 
-typedef struct _GibberIqHelperRequestStanza GibberIqHelperRequestStanza;
-
 struct _GibberIqHelperClass
 {
     GObjectClass parent_class;
@@ -77,15 +75,11 @@ gibber_iq_helper_send_with_reply (GibberIqHelper *helper,
     GibberXmppStanza *iq, GibberIqHelperStanzaReplyFunc reply_func,
     GObject *object, gpointer user_data, GError **error);
 
-GibberIqHelperRequestStanza *
-gibber_iq_helper_get_request_stanza (GibberXmppStanza *iq);
-
 GibberXmppStanza *
-gibber_iq_helper_new_result_reply (GibberIqHelperRequestStanza *iq);
+gibber_iq_helper_new_result_reply (GibberXmppStanza *iq);
 
 GibberXmppStanza *
-gibber_iq_helper_new_error_reply (GibberIqHelperRequestStanza *iq,
-    GibberXmppError error,
+gibber_iq_helper_new_error_reply (GibberXmppStanza *iq, GibberXmppError error,
     const gchar *errmsg);
 
 G_END_DECLS
diff --git a/src/salut-si-bytestream-manager.c b/src/salut-si-bytestream-manager.c
index ed284a9..5ac4571 100644
--- a/src/salut-si-bytestream-manager.c
+++ b/src/salut-si-bytestream-manager.c
@@ -316,8 +316,7 @@ si_request_cb (SalutXmppConnectionManager *xcm,
     {
       GibberXmppStanza *reply;
 
-      reply = gibber_iq_helper_new_error_reply (
-          gibber_iq_helper_get_request_stanza (stanza), XMPP_ERROR_BAD_REQUEST,
+      reply = gibber_iq_helper_new_error_reply (stanza, XMPP_ERROR_BAD_REQUEST,
           "failed to parse SI request");
       gibber_xmpp_connection_send (connection, reply, NULL);
 
@@ -345,8 +344,7 @@ si_request_cb (SalutXmppConnectionManager *xcm,
       GibberXmppStanza *reply;
 
       DEBUG ("SI request doesn't contain any supported stream method.");
-      reply = gibber_iq_helper_new_error_reply (
-          gibber_iq_helper_get_request_stanza (stanza),
+      reply = gibber_iq_helper_new_error_reply (stanza,
           XMPP_ERROR_SI_NO_VALID_STREAMS, NULL);
 
       gibber_xmpp_connection_send (connection, reply, NULL);
diff --git a/src/salut-tubes-channel.c b/src/salut-tubes-channel.c
index 34025dc..c4741ff 100644
--- a/src/salut-tubes-channel.c
+++ b/src/salut-tubes-channel.c
@@ -177,7 +177,7 @@ static gboolean extract_tube_information (SalutTubesChannel *self,
 static SalutTubeIface * create_new_tube (SalutTubesChannel *self,
     TpTubeType type, TpHandle initiator, const gchar *service,
     GHashTable *parameters, guint tube_id, guint portnum,
-    GibberIqHelperRequestStanza *iq_req);
+    GibberXmppStanza *iq_req);
 
 static void
 salut_tubes_channel_init (SalutTubesChannel *self)
@@ -933,7 +933,7 @@ salut_tubes_channel_message_received (SalutTubesChannel *self,
                                       GHashTable *parameters,
                                       guint tube_id,
                                       guint portnum,
-                                      GibberIqHelperRequestStanza *iq_req)
+                                      GibberXmppStanza *iq_req)
 {
   SalutTubesChannelPrivate *priv = SALUT_TUBES_CHANNEL_GET_PRIVATE (self);
 
@@ -1153,7 +1153,7 @@ create_new_tube (SalutTubesChannel *self,
                  GHashTable *parameters,
                  guint tube_id,
                  guint portnum,
-                 GibberIqHelperRequestStanza *iq_req)
+                 GibberXmppStanza *iq_req)
 {
   SalutTubesChannelPrivate *priv = SALUT_TUBES_CHANNEL_GET_PRIVATE (self);
   SalutTubeIface *tube;
diff --git a/src/salut-tubes-channel.h b/src/salut-tubes-channel.h
index 87e22f1..c5db63b 100644
--- a/src/salut-tubes-channel.h
+++ b/src/salut-tubes-channel.h
@@ -76,7 +76,7 @@ void salut_tubes_channel_muc_message_received (SalutTubesChannel *channel,
 void salut_tubes_channel_message_received (SalutTubesChannel *self,
     const gchar *service, TpTubeType tube_type, TpHandle initiator_handle,
     GHashTable *parameters, guint tube_id, guint portnum,
-    GibberIqHelperRequestStanza *iq_req);
+    GibberXmppStanza *iq_req);
 
 void salut_tubes_channel_message_close_received (SalutTubesChannel *self,
     TpHandle initiator_handle, guint tube_id);
diff --git a/src/salut-tubes-manager.c b/src/salut-tubes-manager.c
index c0b2e40..77d1b08 100644
--- a/src/salut-tubes-manager.c
+++ b/src/salut-tubes-manager.c
@@ -323,8 +323,7 @@ iq_tube_request_cb (SalutXmppConnectionManager *xcm,
     {
       GibberXmppStanza *reply;
 
-      reply = gibber_iq_helper_new_error_reply (
-          gibber_iq_helper_get_request_stanza (stanza), XMPP_ERROR_BAD_REQUEST,
+      reply = gibber_iq_helper_new_error_reply (stanza, XMPP_ERROR_BAD_REQUEST,
           error->message);
       gibber_xmpp_connection_send (conn, reply, NULL);
 
@@ -355,8 +354,7 @@ iq_tube_request_cb (SalutXmppConnectionManager *xcm,
       }
 
     salut_tubes_channel_message_received (chan, service, tube_type,
-        initiator_handle, parameters, tube_id, portnum,
-        gibber_iq_helper_get_request_stanza (stanza));
+        initiator_handle, parameters, tube_id, portnum, stanza);
   }
 }
 
diff --git a/src/tube-stream.c b/src/tube-stream.c
index 846a330..62dd637 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -122,7 +122,7 @@ struct _SalutTubeStreamPrivate
   guint id;
   guint port;
   GibberXmppConnection *xmpp_connection;
-  GibberIqHelperRequestStanza *iq_req;
+  GibberXmppStanza *iq_req;
 
   /* Bytestreams for MUC tubes (using stream initiation) or 1-1 tubes (using
    * direct TCP connections). One tube can have several bytestreams. The
@@ -1081,6 +1081,8 @@ salut_tube_stream_set_property (GObject *object,
         break;
       case PROP_IQ_REQ:
         priv->iq_req = g_value_get_pointer (value);
+        if (priv->iq_req != NULL)
+          g_object_ref (priv->iq_req);
         break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1322,8 +1324,8 @@ salut_tube_stream_class_init (SalutTubeStreamClass *salut_tube_stream_class)
 
   param_spec = g_param_spec_pointer (
       "iq-req",
-      "A GibberIqHelper reference on the request stanza",
-      "A GibberIqHelper reference on the request stanza used to reply to "
+      "A reference on the request stanza",
+      "A reference on the request stanza used to reply to "
       "the iq request later",
       G_PARAM_CONSTRUCT_ONLY |
       G_PARAM_READWRITE |
@@ -1405,7 +1407,7 @@ salut_tube_stream_new (SalutConnection *conn,
                         GHashTable *parameters,
                         guint id,
                         guint portnum,
-                        GibberIqHelperRequestStanza *iq_req)
+                        GibberXmppStanza *iq_req)
 {
   return g_object_new (SALUT_TYPE_TUBE_STREAM,
       "connection", conn,
@@ -1485,6 +1487,8 @@ salut_tube_stream_accept (SalutTubeIface *tube,
           reply = gibber_iq_helper_new_result_reply (priv->iq_req);
           gibber_xmpp_connection_send (priv->xmpp_connection, reply, NULL);
 
+          g_object_unref (priv->iq_req);
+          priv->iq_req = NULL;
           g_object_unref (reply);
         }
     }
diff --git a/src/tube-stream.h b/src/tube-stream.h
index 343cf55..771e6f0 100644
--- a/src/tube-stream.h
+++ b/src/tube-stream.h
@@ -64,7 +64,7 @@ SalutTubeStream *salut_tube_stream_new (SalutConnection *conn,
     SalutXmppConnectionManager *xmpp_connection_manager, TpHandle handle,
     TpHandleType handle_type, TpHandle self_handle, TpHandle initiator,
     const gchar *service, GHashTable *parameters, guint id, guint portnum,
-    GibberIqHelperRequestStanza *iq_req);
+    GibberXmppStanza *iq_req);
 
 gboolean salut_tube_stream_check_params (TpSocketAddressType address_type,
     const GValue *address, TpSocketAccessControl access_control,
diff --git a/tests/check-gibber-iq-helper.c b/tests/check-gibber-iq-helper.c
index 188c76e..edd664c 100644
--- a/tests/check-gibber-iq-helper.c
+++ b/tests/check-gibber-iq-helper.c
@@ -254,8 +254,7 @@ START_TEST (test_new_result_reply)
       NULL, NULL, NULL);
   fail_unless (result);
 
-  reply = gibber_iq_helper_new_result_reply
-    (gibber_iq_helper_get_request_stanza (stanza));
+  reply = gibber_iq_helper_new_result_reply (stanza);
   fail_unless (reply != NULL);
   fail_unless (strcmp (reply->node->name, "iq") == 0);
   fail_unless (strcmp (gibber_xmpp_node_get_attribute (reply->node, "type"),
@@ -294,9 +293,8 @@ START_TEST (test_new_error_reply)
       NULL, NULL, NULL);
   fail_unless (result);
 
-  reply = gibber_iq_helper_new_error_reply
-      (gibber_iq_helper_get_request_stanza (stanza),
-       XMPP_ERROR_BAD_REQUEST, "test");
+  reply = gibber_iq_helper_new_error_reply (stanza,
+      XMPP_ERROR_BAD_REQUEST, "test");
   fail_unless (reply != NULL);
   fail_unless (strcmp (reply->node->name, "iq") == 0);
   fail_unless (strcmp (gibber_xmpp_node_get_attribute (reply->node, "type"),
@@ -354,8 +352,7 @@ START_TEST (test_send_with_object_living)
       object, NULL, NULL);
   fail_unless (result);
 
-  reply = gibber_iq_helper_new_result_reply
-      (gibber_iq_helper_get_request_stanza (stanza));
+  reply = gibber_iq_helper_new_result_reply (stanza);
   fail_unless (reply != NULL);
   result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
   fail_unless (result);
@@ -397,8 +394,7 @@ START_TEST (test_send_with_object_destroyed)
 
   g_object_unref (object);
 
-  reply = gibber_iq_helper_new_result_reply
-      (gibber_iq_helper_get_request_stanza (stanza));
+  reply = gibber_iq_helper_new_result_reply (stanza);
   fail_unless (reply != NULL);
   result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
   fail_unless (result);
-- 
1.5.6.5




More information about the Telepathy-commits mailing list