[Telepathy-commits] [telepathy-gabble/master] tubes-channel: delay the NewTube signal until the tube has been offered as the old API doesn't have a not-offered state

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Mon Jan 12 04:30:51 PST 2009


---
 src/tubes-channel.c |   54 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 47 insertions(+), 7 deletions(-)

diff --git a/src/tubes-channel.c b/src/tubes-channel.c
index 52d9469..458501a 100644
--- a/src/tubes-channel.c
+++ b/src/tubes-channel.c
@@ -463,6 +463,40 @@ tube_opened_cb (GabbleTubeIface *tube,
       TP_TUBE_STATE_OPEN);
 }
 
+static void
+tube_offered_cb (GabbleTubeIface *tube,
+                 gpointer user_data)
+{
+  GabbleTubesChannel *self = GABBLE_TUBES_CHANNEL (user_data);
+  guint tube_id;
+  TpHandle initiator;
+  TpTubeType type;
+  gchar *service;
+  GHashTable *parameters;
+  TpTubeState state;
+
+  g_object_get (tube,
+      "id", &tube_id,
+      "initiator-handle", &initiator,
+      "type", &type,
+      "service", &service,
+      "parameters", &parameters,
+      "state", &state,
+      NULL);
+
+  /* tube has been offered and so can be announced using the old API */
+  tp_svc_channel_type_tubes_emit_new_tube (self,
+      tube_id,
+      initiator,
+      type,
+      service,
+      parameters,
+      state);
+
+  g_free (service);
+  g_hash_table_destroy (parameters);
+}
+
 static GabbleTubeIface *
 create_new_tube (GabbleTubesChannel *self,
                  TpTubeType type,
@@ -499,13 +533,18 @@ create_new_tube (GabbleTubesChannel *self,
 
   g_object_get (tube, "state", &state, NULL);
 
-  tp_svc_channel_type_tubes_emit_new_tube (self,
-      tube_id,
-      initiator,
-      type,
-      service,
-      parameters,
-      state);
+  /* The old API doesn't know the "not offered" state, so we have to wait that
+   * the tube is offered before announcing it. */
+  if (state != GABBLE_TUBE_CHANNEL_STATE_NOT_OFFERED)
+    {
+      tp_svc_channel_type_tubes_emit_new_tube (self,
+          tube_id,
+          initiator,
+          type,
+          service,
+          parameters,
+          state);
+    }
 
   if (type == TP_TUBE_TYPE_DBUS &&
       state != TP_TUBE_STATE_LOCAL_PENDING)
@@ -515,6 +554,7 @@ create_new_tube (GabbleTubesChannel *self,
 
   g_signal_connect (tube, "tube-opened", G_CALLBACK (tube_opened_cb), self);
   g_signal_connect (tube, "tube-closed", G_CALLBACK (tube_closed_cb), self);
+  g_signal_connect (tube, "tube-offered", G_CALLBACK (tube_offered_cb), self);
 
   return tube;
 }
-- 
1.5.6.5




More information about the Telepathy-commits mailing list