telepathy-rakia: CallStream: Implement media error reporting

Olivier Crête tester at kemper.freedesktop.org
Tue May 8 10:03:02 PDT 2012


Module: telepathy-rakia
Branch: master
Commit: d3a420e6793ecad9e97c924c8b679e9fd783f8e0
URL:    http://cgit.freedesktop.org/telepathy/telepathy-rakia/commit/?id=d3a420e6793ecad9e97c924c8b679e9fd783f8e0

Author: Olivier Crête <olivier.crete at collabora.com>
Date:   Fri Feb 24 21:19:14 2012 -0500

CallStream: Implement media error reporting

---

 rakia/call-stream.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/rakia/call-stream.c b/rakia/call-stream.c
index f6ade9c..c3c719f 100644
--- a/rakia/call-stream.c
+++ b/rakia/call-stream.c
@@ -262,21 +262,66 @@ rakia_call_stream_finalize (GObject *object)
 }
 
 static void
-rakia_call_stream_report_sending_failure (TpBaseMediaCallStream *self,
+rakia_call_stream_report_sending_failure (TpBaseMediaCallStream *bmcs,
     TpStreamFlowState old_state,
     TpCallStateChangeReason reason,
     const gchar *dbus_reason,
     const gchar *message)
 {
+  RakiaCallStream *self = RAKIA_CALL_STREAM (bmcs);
+  TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self);
+  RakiaCallStreamPrivate *priv = self->priv;
+  RakiaDirection current_direction =
+      rakia_sip_media_get_requested_direction (priv->media);
+  TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel);
+  TpHandle self_handle = tp_base_channel_get_self_handle (bchan);
+
+  tp_base_call_stream_update_local_sending_state (bcs,
+      TP_SENDING_STATE_NONE, self_handle, reason, dbus_reason, message);
+
+  if (!(current_direction & RAKIA_DIRECTION_SEND))
+    return;
+
+  rakia_sip_media_set_requested_direction (priv->media,
+      current_direction & ~RAKIA_DIRECTION_SEND);
 }
 
 static void
-rakia_call_stream_report_receiving_failure (TpBaseMediaCallStream *self,
+rakia_call_stream_report_receiving_failure (TpBaseMediaCallStream *bmcs,
     TpStreamFlowState old_state,
     TpCallStateChangeReason reason,
     const gchar *dbus_reason,
     const gchar *message)
 {
+  RakiaCallStream *self = RAKIA_CALL_STREAM (bmcs);
+  TpBaseCallStream *bcs = TP_BASE_CALL_STREAM (self);
+  RakiaCallStreamPrivate *priv = self->priv;
+  gboolean can_request_receiving;
+  RakiaDirection current_requested_direction =
+      rakia_sip_media_get_requested_direction (priv->media);
+  RakiaDirection current_direction =
+      rakia_sip_media_get_direction (priv->media);
+  TpBaseChannel *bchan = TP_BASE_CHANNEL (priv->channel);
+
+  g_object_get (self, "can-request-receiving", &can_request_receiving, NULL);
+  if (!can_request_receiving)
+    {
+      g_warning ("We should fail the whole call now");
+      return;
+    }
+
+  if (!(current_requested_direction & RAKIA_DIRECTION_RECEIVE))
+    return;
+
+  if (!(current_direction & RAKIA_DIRECTION_RECEIVE))
+    tp_base_call_stream_update_remote_sending_state (bcs,
+        tp_base_channel_get_target_handle (bchan),
+        TP_SENDING_STATE_NONE,
+        tp_base_channel_get_self_handle (bchan),
+        reason, dbus_reason, message);
+
+  rakia_sip_media_set_requested_direction (priv->media,
+      current_requested_direction & ~RAKIA_DIRECTION_RECEIVE);
 }
 
 static GPtrArray *



More information about the telepathy-commits mailing list