[Telepathy-commits] [telepathy-sofiasip/master] Handle an incoming BYE with a proper media channel group change
Mikhail Zabaluev
mikhail.zabaluev at nokia.com
Mon Feb 9 09:56:15 PST 2009
The peer has to be the actor in the MembersChanged signal when the call
is terminated by the remote party.
---
src/sip-media-channel.c | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/src/sip-media-channel.c b/src/sip-media-channel.c
index 1a20624..dad0dc2 100644
--- a/src/sip-media-channel.c
+++ b/src/sip-media-channel.c
@@ -1024,6 +1024,38 @@ tpsip_media_channel_change_call_state (TpsipMediaChannel *self,
}
static gboolean
+priv_nua_i_bye_cb (TpsipMediaChannel *self,
+ const TpsipNuaEvent *ev,
+ tagi_t tags[],
+ gpointer foo)
+{
+ TpsipMediaChannelPrivate *priv = TPSIP_MEDIA_CHANNEL_GET_PRIVATE (self);
+ TpGroupMixin *mixin = TP_GROUP_MIXIN (self);
+ TpIntSet *set;
+ TpHandle peer;
+
+ g_return_val_if_fail (priv->session != NULL, FALSE);
+
+ peer = tpsip_media_session_get_peer (priv->session);
+ set = tp_intset_new ();
+ tp_intset_add (set, peer);
+ tp_intset_add (set, mixin->self_handle);
+
+ tp_group_mixin_change_members ((GObject *) self,
+ "",
+ NULL, /* add */
+ set, /* remove */
+ NULL,
+ NULL,
+ peer,
+ TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
+
+ tp_intset_destroy (set);
+
+ return TRUE;
+}
+
+static gboolean
priv_nua_i_cancel_cb (TpsipMediaChannel *self,
const TpsipNuaEvent *ev,
tagi_t tags[],
@@ -1324,6 +1356,10 @@ priv_connect_nua_handlers (TpsipMediaChannel *self, nua_handle_t *nh)
G_CALLBACK (priv_nua_i_invite_cb),
NULL);
g_signal_connect (self,
+ "nua-event::nua_i_bye",
+ G_CALLBACK (priv_nua_i_bye_cb),
+ NULL);
+ g_signal_connect (self,
"nua-event::nua_i_cancel",
G_CALLBACK (priv_nua_i_cancel_cb),
NULL);
--
1.5.6.5
More information about the telepathy-commits
mailing list