[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