[Telepathy-commits] [telepathy-gabble/master] making calls/tests working again after content addition/removal refactorization

Senko Rasic senko at phyrexia.lan
Tue Dec 2 04:33:56 PST 2008


---
 src/jingle-content.c          |    5 +++--
 src/jingle-session.c          |   23 ++++++++++++++++-------
 src/jingle-transport-google.c |    6 ++++++
 src/media-channel.c           |    2 +-
 4 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/jingle-content.c b/src/jingle-content.c
index 0129e4b..6bb36c1 100644
--- a/src/jingle-content.c
+++ b/src/jingle-content.c
@@ -230,6 +230,7 @@ gabble_jingle_content_set_property (GObject *object,
       break;
     case PROP_STATE:
       priv->state = g_value_get_uint (value);
+      DEBUG ("setting content state to %u", priv->state);
       break;
     case PROP_READY:
       DEBUG ("setting content ready from %u to %u",
@@ -315,7 +316,7 @@ gabble_jingle_content_class_init (GabbleJingleContentClass *cls)
 
   param_spec = g_param_spec_uint ("senders", "Stream senders",
                                   "Valid senders for the stream.",
-                                  0, G_MAXUINT32, JINGLE_CONTENT_STATE_NEW,
+                                  0, G_MAXUINT32, JINGLE_CONTENT_SENDERS_NONE,
                                   G_PARAM_READWRITE |
                                   G_PARAM_STATIC_NAME |
                                   G_PARAM_STATIC_BLURB);
@@ -327,7 +328,7 @@ gabble_jingle_content_class_init (GabbleJingleContentClass *cls)
                                   G_PARAM_READWRITE |
                                   G_PARAM_STATIC_NAME |
                                   G_PARAM_STATIC_BLURB);
-  g_object_class_install_property (object_class, PROP_STATE, param_spec);
+  g_object_class_install_property (object_class, PROP_SENDERS, param_spec);
 
   param_spec = g_param_spec_boolean ("ready", "Ready?",
                                      "A boolean signifying whether media for "
diff --git a/src/jingle-session.c b/src/jingle-session.c
index 606f376..c3395a3 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -1036,6 +1036,8 @@ gabble_jingle_session_new_message (GabbleJingleSession *sess,
 
   DEBUG ("creating new message to peer: %s", priv->peer_jid);
 
+  g_assert ((action == JINGLE_ACTION_SESSION_INITIATE) || (priv->state > JS_STATE_PENDING_CREATED));
+
   /* possibly this is the first message in an outgoing session,
    * meaning that we have to set up initiator */
   if (priv->initiator == NULL) {
@@ -1115,8 +1117,10 @@ _try_session_accept_fill (gpointer key, gpointer data, gpointer user_data)
 
   g_object_get (c, "state", &state, NULL);
 
+  DEBUG ("considering whether to add content node, state = %u", state);
+
   /* we only want to acknowledge newly added contents */
-  if (state == JINGLE_CONTENT_STATE_NEW)
+  if (state == JINGLE_CONTENT_STATE_EMPTY)
     gabble_jingle_content_produce_node (c, sess_node, TRUE);
 }
 
@@ -1139,7 +1143,7 @@ try_session_accept (GabbleJingleSession *sess)
   if (!priv->locally_accepted)
       return;
 
-  g_hash_table_foreach (priv->contents, _check_content_for_acceptance, &content_ready);
+  g_hash_table_foreach (priv->initial_contents, _check_content_for_acceptance, &content_ready);
 
   if (!content_ready)
       return;
@@ -1147,7 +1151,7 @@ try_session_accept (GabbleJingleSession *sess)
   msg = gabble_jingle_session_new_message (sess, JINGLE_ACTION_SESSION_ACCEPT,
       &sess_node);
 
-  g_hash_table_foreach (priv->contents, _try_session_accept_fill, sess_node);
+  g_hash_table_foreach (priv->initial_contents, _try_session_accept_fill, sess_node);
 
   _gabble_connection_send (priv->conn, msg, NULL);
 
@@ -1298,15 +1302,20 @@ gabble_jingle_session_add_content (GabbleJingleSession *sess, JingleMediaType mt
 
   /* FIXME BUG: for session acceptance, we should only consider
    * contents with disposition != "session". we'll burn that bridge
-   * when we come to it. */
+   * when we come to it. Here we assume all the contents added before
+   * an initiation message has been sent are initial contents. */
+  if (priv->state == JS_STATE_PENDING_CREATED)
+      g_hash_table_insert (priv->initial_contents, name, GUINT_TO_POINTER (TRUE));
 
-  if (priv->dialect >= JINGLE_DIALECT_V026)
+  /* Try to signal content-add if needed. */
+  if ((priv->state == JS_STATE_ACTIVE) ||
+      ((priv->state >= JS_STATE_PENDING_INITIATE_SENT) &&
+          (priv->dialect >= JINGLE_DIALECT_V026)))
     {
-      /* In 0.30 onwards, content-add is ok in PENDING state, so */
       LmMessage *msg;
       LmMessageNode *sess_node;
 
-      msg = gabble_jingle_session_new_message (sess, JINGLE_ACTION_SESSION_ACCEPT,
+      msg = gabble_jingle_session_new_message (sess, JINGLE_ACTION_CONTENT_ADD,
           &sess_node);
       gabble_jingle_content_produce_node (c, sess_node, TRUE);
       _gabble_connection_send (priv->conn, msg, NULL);
diff --git a/src/jingle-transport-google.c b/src/jingle-transport-google.c
index 5d21a45..a0df411 100644
--- a/src/jingle-transport-google.c
+++ b/src/jingle-transport-google.c
@@ -567,11 +567,17 @@ retransmit_candidates (GabbleJingleTransportIface *obj)
   GabbleJingleTransportGooglePrivate *priv =
     GABBLE_JINGLE_TRANSPORT_GOOGLE_GET_PRIVATE (transport);
   gboolean ready;
+  JingleSessionState state;
 
   g_object_get (priv->content, "ready", &ready, NULL);
+  g_object_get (priv->content->session, "state", &state, NULL);
 
   g_assert (ready);
 
+  if (state < JS_STATE_PENDING_INITIATE_SENT)
+    {
+    }
+
   /* now transmit all pending candidates */
   if (priv->pending_candidates != NULL) {
       transmit_candidates (transport, priv->pending_candidates);
diff --git a/src/media-channel.c b/src/media-channel.c
index 432252c..544c990 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -1101,7 +1101,7 @@ _pick_best_content_type (GabbleMediaChannel *chan, TpHandle peer,
       gabble_presence_resource_has_caps (presence, resource,
           PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO))
     {
-      return NS_JINGLE_DESCRIPTION_VIDEO;
+      return NS_JINGLE_DESCRIPTION_AUDIO;
     }
   if ((type == JINGLE_MEDIA_TYPE_AUDIO) &&
       gabble_presence_resource_has_caps (presence, resource,
-- 
1.5.6.5




More information about the Telepathy-commits mailing list