[Telepathy-commits] [telepathy-salut/master] Tubes: the "state" property is not writeable anymore. Use an "offered" boolean instead to distinguish tubes which should be in the Not_Offered state

Alban Crequy alban.crequy at collabora.co.uk
Fri Feb 6 03:14:57 PST 2009


---
 src/salut-tubes-channel.c |   36 ++++++++++--------------------------
 src/tube-stream.c         |   43 +++++++++++++++++++++++++++++++------------
 src/tube-stream.h         |    8 ++++----
 3 files changed, 45 insertions(+), 42 deletions(-)

diff --git a/src/salut-tubes-channel.c b/src/salut-tubes-channel.c
index c1981d0..401e2e8 100644
--- a/src/salut-tubes-channel.c
+++ b/src/salut-tubes-channel.c
@@ -175,9 +175,8 @@ static gboolean extract_tube_information (SalutTubesChannel *self,
     GibberXmppNode *tube_node, TpTubeType *type, TpHandle *initiator_handle,
     const gchar **service, GHashTable **parameters, guint *tube_id);
 static SalutTubeIface * create_new_tube (SalutTubesChannel *self,
-    TpTubeType type, TpHandle initiator, SalutTubeChannelState initial_state,
-    const gchar *service,
-    GHashTable *parameters, guint tube_id, guint portnum,
+    TpTubeType type, TpHandle initiator, gboolean offered,
+    const gchar *service, GHashTable *parameters, guint tube_id, guint portnum,
     GibberXmppStanza *iq_req);
 
 static void
@@ -857,8 +856,7 @@ salut_tubes_channel_muc_message_received (SalutTubesChannel *self,
                     }
                 }
 
-              tube = create_new_tube (self, type, initiator_handle,
-                  SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING, service, parameters,
+              tube = create_new_tube (self, type, initiator_handle, FALSE, service, parameters,
                   tube_id, 0, NULL);
 
               /* the tube has reffed its initiator, no need to keep a ref */
@@ -949,9 +947,8 @@ salut_tubes_channel_message_received (SalutTubesChannel *self,
   tube = g_hash_table_lookup (priv->tubes, GUINT_TO_POINTER (tube_id));
   if (tube == NULL)
     {
-      tube = create_new_tube (self, tube_type, initiator_handle,
-        SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING, service,
-        parameters, tube_id, portnum, iq_req);
+      tube = create_new_tube (self, tube_type, initiator_handle, FALSE,
+          service, parameters, tube_id, portnum, iq_req);
     }
 }
 
@@ -1036,8 +1033,7 @@ salut_tubes_channel_tube_request (SalutTubesChannel *self,
   DEBUG ("Request a tube channel with type='%s' and service='%s'",
       channel_type, service);
 
-  tube = create_new_tube (self, type, priv->self_handle,
-      SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED, service,
+  tube = create_new_tube (self, type, priv->self_handle, FALSE, service,
       parameters, tube_id, 0, NULL);
 
   return tube;
@@ -1221,7 +1217,7 @@ static SalutTubeIface *
 create_new_tube (SalutTubesChannel *self,
                  TpTubeType type,
                  TpHandle initiator,
-                 SalutTubeChannelState initial_state,
+                 gboolean offered,
                  const gchar *service,
                  GHashTable *parameters,
                  guint tube_id,
@@ -1246,7 +1242,7 @@ create_new_tube (SalutTubesChannel *self,
     case TP_TUBE_TYPE_STREAM:
       tube = SALUT_TUBE_IFACE (salut_tube_stream_new (priv->conn, self,
           priv->xmpp_connection_manager, priv->handle, priv->handle_type,
-          priv->self_handle, initiator, initial_state, service, parameters,
+          priv->self_handle, initiator, offered, service, parameters,
           tube_id, portnum, iq_req));
       break;
     default:
@@ -1556,7 +1552,6 @@ salut_tubes_channel_offer_d_bus_tube (TpSvcChannelTypeTubes *iface,
   guint tube_id;
   SalutTubeIface *tube;
   GHashTable *parameters_copied;
-  SalutTubeChannelState initial_state;
 
   g_assert (SALUT_IS_TUBES_CHANNEL (self));
 
@@ -1576,13 +1571,8 @@ salut_tubes_channel_offer_d_bus_tube (TpSvcChannelTypeTubes *iface,
 
   tube_id = generate_tube_id ();
 
-  if (priv->handle_type == TP_HANDLE_TYPE_ROOM)
-    initial_state = SALUT_TUBE_CHANNEL_STATE_OPEN;
-  else
-    initial_state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
-
   tube = create_new_tube (self, TP_TUBE_TYPE_DBUS, priv->self_handle,
-      initial_state, service, parameters_copied,
+      TRUE, service, parameters_copied,
       tube_id, 0, NULL);
 
   tp_svc_channel_type_tubes_return_from_offer_d_bus_tube (context, tube_id);
@@ -2040,7 +2030,6 @@ salut_tubes_channel_offer_stream_tube (TpSvcChannelTypeTubes *iface,
   guint tube_id;
   SalutTubeIface *tube;
   GError *error = NULL;
-  SalutTubeChannelState initial_state;
 
   priv = SALUT_TUBES_CHANNEL_GET_PRIVATE (self);
   base = (TpBaseConnection *) priv->conn;
@@ -2066,13 +2055,8 @@ salut_tubes_channel_offer_stream_tube (TpSvcChannelTypeTubes *iface,
 
   tube_id = generate_tube_id ();
 
-  if (priv->handle_type == TP_HANDLE_TYPE_ROOM)
-    initial_state = SALUT_TUBE_CHANNEL_STATE_OPEN;
-  else
-    initial_state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
-
   tube = create_new_tube (self, TP_TUBE_TYPE_STREAM, priv->self_handle,
-      initial_state, service, parameters, tube_id, 0, NULL);
+      TRUE, service, parameters, tube_id, 0, NULL);
 
   g_object_set (tube,
       "address-type", address_type,
diff --git a/src/tube-stream.c b/src/tube-stream.c
index e9ed66e..1c3ea6e 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -129,6 +129,7 @@ enum
   PROP_SERVICE,
   PROP_PARAMETERS,
   PROP_STATE,
+  PROP_OFFERED,
   PROP_ADDRESS_TYPE,
   PROP_ADDRESS,
   PROP_ACCESS_CONTROL,
@@ -184,6 +185,9 @@ struct _SalutTubeStreamPrivate
   gchar *service;
   GHashTable *parameters;
   SalutTubeChannelState state;
+  /* whether the tube is already offered at construct-time (with the
+   * Channel.Type.Tubes interface) */
+  gboolean offered;
 
   TpSocketAddressType address_type;
   GValue *address;
@@ -1052,6 +1056,9 @@ salut_tube_stream_get_property (GObject *object,
       case PROP_STATE:
         g_value_set_uint (value, priv->state);
         break;
+      case PROP_OFFERED:
+        g_value_set_boolean (value, priv->offered);
+        break;
       case PROP_ADDRESS_TYPE:
         g_value_set_uint (value, priv->address_type);
         break;
@@ -1149,10 +1156,8 @@ salut_tube_stream_set_property (GObject *object,
           g_hash_table_destroy (priv->parameters);
         priv->parameters = g_value_dup_boxed (value);
         break;
-      case PROP_STATE:
-        priv->state = g_value_get_uint (value);
-        if (priv->state == SALUT_TUBE_CHANNEL_STATE_OPEN)
-          g_signal_emit (G_OBJECT (self), signals[OPENED], 0);
+      case PROP_OFFERED:
+        priv->offered = g_value_get_boolean (value);
         break;
       case PROP_ADDRESS_TYPE:
         g_assert (g_value_get_uint (value) == TP_SOCKET_ADDRESS_TYPE_UNIX ||
@@ -1303,20 +1308,26 @@ salut_tube_stream_constructor (GType type,
       if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
         {
           /* Private tube */
-          g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED ||
-              priv->state == SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING);
-          if (priv->state == SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING)
-            priv->offer_needed = TRUE;
+          if (priv->offered)
+            {
+              priv->state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
+              priv->offer_needed = TRUE;
+            }
+          else
+            {
+              priv->state = SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED;
+            }
         }
       else
         {
           /* Muc tube */
-          g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_OPEN);
+          priv->state = SALUT_TUBE_CHANNEL_STATE_OPEN;
+          g_signal_emit (obj, signals[OPENED], 0);
         }
     }
   else
     {
-      g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING);
+      priv->state = SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING;
     }
 
   if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
@@ -1552,6 +1563,14 @@ salut_tube_stream_class_init (SalutTubeStreamClass *salut_tube_stream_class)
       G_PARAM_STATIC_BLURB);
   g_object_class_install_property (object_class, PROP_IQ_REQ, param_spec);
 
+  param_spec = g_param_spec_boolean (
+      "offered",
+      "Whether the application asked to offer the tube",
+      "Whether the application asked to offer the tube",
+      FALSE,
+      G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, PROP_OFFERED, param_spec);
+
   signals[OPENED] =
     g_signal_new ("tube-opened",
                   G_OBJECT_CLASS_TYPE (salut_tube_stream_class),
@@ -1633,7 +1652,7 @@ salut_tube_stream_new (SalutConnection *conn,
                        TpHandleType handle_type,
                        TpHandle self_handle,
                        TpHandle initiator,
-                       SalutTubeChannelState initial_state,
+                       gboolean offered,
                        const gchar *service,
                        GHashTable *parameters,
                        guint id,
@@ -1655,7 +1674,7 @@ salut_tube_stream_new (SalutConnection *conn,
       "handle-type", handle_type,
       "self-handle", self_handle,
       "initiator", initiator,
-      "state", initial_state,
+      "offered", offered,
       "service", service,
       "parameters", parameters,
       "id", id,
diff --git a/src/tube-stream.h b/src/tube-stream.h
index 26cbfdb..23267dc 100644
--- a/src/tube-stream.h
+++ b/src/tube-stream.h
@@ -66,10 +66,10 @@ GType salut_tube_stream_get_type (void);
 SalutTubeStream *salut_tube_stream_new (SalutConnection *conn,
     SalutTubesChannel *tubes_channel,
     SalutXmppConnectionManager *xmpp_connection_manager, TpHandle handle,
-    TpHandleType handle_type, TpHandle self_handle,
-    TpHandle initiator, SalutTubeChannelState initial_state,
-    const gchar *service, GHashTable *parameters, guint id,
-    guint portnum, GibberXmppStanza *iq_req);
+    TpHandleType handle_type, TpHandle self_handle, TpHandle initiator,
+    gboolean offered, const gchar *service,
+    GHashTable *parameters, guint id, guint portnum,
+    GibberXmppStanza *iq_req);
 
 gboolean salut_tube_stream_check_params (TpSocketAddressType address_type,
     const GValue *address, TpSocketAccessControl access_control,
-- 
1.5.6.5




More information about the telepathy-commits mailing list