[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