[telepathy-gabble/master] Make jingle_session_terminate fail on meaningless reasons

Will Thompson will.thompson at collabora.co.uk
Thu Mar 26 10:13:39 PDT 2009


---
 src/jingle-session.c |   23 +++++++++++++++--------
 src/jingle-session.h |    4 ++--
 src/media-channel.c  |    4 ++--
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/jingle-session.c b/src/jingle-session.c
index 26fbcfb..ff798c2 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -789,7 +789,7 @@ on_session_initiate (GabbleJingleSession *sess, LmMessageNode *node,
       /* We ignore initiate from us, and terminate the session immediately
        * afterwards */
       gabble_jingle_session_terminate (sess,
-          TP_CHANNEL_GROUP_CHANGE_REASON_BUSY);
+          TP_CHANNEL_GROUP_CHANGE_REASON_BUSY, NULL);
       return;
     }
 
@@ -839,7 +839,7 @@ on_content_remove (GabbleJingleSession *sess, LmMessageNode *node,
   if (g_hash_table_size (priv->contents) == 0)
     {
       gabble_jingle_session_terminate (sess,
-          TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+          TP_CHANNEL_GROUP_CHANGE_REASON_NONE, NULL);
     }
 }
 
@@ -1471,7 +1471,7 @@ timeout_session (gpointer data)
   session->priv->timer_id = 0;
 
   gabble_jingle_session_terminate (session,
-      TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER);
+      TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER, NULL);
   return FALSE;
 }
 
@@ -1613,9 +1613,10 @@ _get_jingle_reason (GabbleJingleSession *sess,
     }
 }
 
-void
+gboolean
 gabble_jingle_session_terminate (GabbleJingleSession *sess,
-                                 TpChannelGroupChangeReason reason)
+                                 TpChannelGroupChangeReason reason,
+                                 GError **error)
 {
   GabbleJingleSessionPrivate *priv = sess->priv;
   const gchar *reason_elt;
@@ -1623,13 +1624,17 @@ gabble_jingle_session_terminate (GabbleJingleSession *sess,
   if (priv->state == JS_STATE_ENDED)
     {
       DEBUG ("session already terminated, ignoring terminate request");
-      return;
+      return TRUE;
     }
 
   reason_elt = _get_jingle_reason (sess, reason);
 
   if (reason_elt == NULL)
-    g_warning ("%u doesn't make sense as a reason to end a call", reason);
+    {
+      g_set_error (error, TP_ERRORS, TP_ERROR_INVALID_ARGUMENT,
+          "%u doesn't make sense as a reason to end a call", reason);
+      return FALSE;
+    }
 
   if (priv->state != JS_STATE_PENDING_CREATED)
     {
@@ -1652,6 +1657,8 @@ gabble_jingle_session_terminate (GabbleJingleSession *sess,
   DEBUG ("we are terminating this session");
   priv->locally_terminated = TRUE;
   set_state (sess, JS_STATE_ENDED, reason);
+
+  return TRUE;
 }
 
 static void
@@ -1693,7 +1700,7 @@ content_removed_cb (GabbleJingleContent *c, gpointer user_data)
       return;
 
   if (count_active_contents (sess) == 0)
-    gabble_jingle_session_terminate (sess, TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+    gabble_jingle_session_terminate (sess, TP_CHANNEL_GROUP_CHANGE_REASON_NONE, NULL);
 }
 
 
diff --git a/src/jingle-session.h b/src/jingle-session.h
index 96bc63e..c37e1f0 100644
--- a/src/jingle-session.h
+++ b/src/jingle-session.h
@@ -91,8 +91,8 @@ LmMessage *gabble_jingle_session_new_message (GabbleJingleSession *sess,
     JingleAction action, LmMessageNode **sess_node);
 
 void gabble_jingle_session_accept (GabbleJingleSession *sess);
-void gabble_jingle_session_terminate (GabbleJingleSession *sess,
-    TpChannelGroupChangeReason reason);
+gboolean gabble_jingle_session_terminate (GabbleJingleSession *sess,
+    TpChannelGroupChangeReason reason, GError **error);
 void gabble_jingle_session_remove_content (GabbleJingleSession *sess,
     GabbleJingleContent *c);
 
diff --git a/src/media-channel.c b/src/media-channel.c
index 5a5913b..2cc2732 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -844,7 +844,7 @@ gabble_media_channel_close (GabbleMediaChannel *self)
   if (priv->session)
     {
       gabble_jingle_session_terminate (priv->session,
-          TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+          TP_CHANNEL_GROUP_CHANGE_REASON_NONE, NULL);
     }
 
   tp_svc_channel_emit_closed (self);
@@ -2026,7 +2026,7 @@ gabble_media_channel_remove_member (GObject *obj,
       TP_CHANNEL_GROUP_FLAG_CAN_REMOVE | TP_CHANNEL_GROUP_FLAG_CAN_RESCIND);
 
   gabble_jingle_session_terminate (priv->session,
-      TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+      TP_CHANNEL_GROUP_CHANGE_REASON_NONE, NULL);
 
   return TRUE;
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list