[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