[telepathy-sofiasip/master] Create initial streams accordingly to the media channel properties

Mikhail Zabaluev mikhail.zabaluev at nokia.com
Fri Jan 8 10:38:34 PST 2010


---
 src/media-factory.c     |    2 ++
 src/sip-media-channel.c |   20 ++++++++++++++++++++
 src/sip-media-channel.h |    2 ++
 src/sip-media-session.c |   18 +++++++-----------
 src/sip-media-session.h |    5 +++++
 src/sip-media-stream.h  |    1 +
 6 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/src/media-factory.c b/src/media-factory.c
index 59dab89..cacd5d5 100644
--- a/src/media-factory.c
+++ b/src/media-factory.c
@@ -653,6 +653,8 @@ tpsip_media_factory_requestotron (TpChannelManager *manager,
       TP_EXPORTABLE_CHANNEL (channel), request_tokens);
   g_slist_free (request_tokens);
 
+  tpsip_media_channel_create_initial_streams (channel);
+
   return TRUE;
 
 error:
diff --git a/src/sip-media-channel.c b/src/sip-media-channel.c
index cedc518..ee06e27 100644
--- a/src/sip-media-channel.c
+++ b/src/sip-media-channel.c
@@ -934,6 +934,26 @@ tpsip_media_channel_request_streams (TpSvcChannelTypeStreamedMedia *iface,
  * Set: sip-media-channel API towards sip-connection
  ***********************************************************************/
 
+void
+tpsip_media_channel_create_initial_streams (TpsipMediaChannel *self)
+{
+  TpsipMediaChannelPrivate *priv = TPSIP_MEDIA_CHANNEL_GET_PRIVATE (self);
+
+  g_assert (priv->initiator != priv->handle);
+
+  priv_outbound_call (self, priv->handle);
+
+  g_assert (priv->session != NULL);
+
+  if (priv->initial_audio)
+    tpsip_media_session_add_stream (priv->session,
+        TP_MEDIA_STREAM_TYPE_AUDIO, TP_MEDIA_STREAM_PENDING_REMOTE_SEND);
+
+  if (priv->initial_video)
+    tpsip_media_session_add_stream (priv->session,
+        TP_MEDIA_STREAM_TYPE_VIDEO, TP_MEDIA_STREAM_PENDING_REMOTE_SEND);
+}
+
 /**
  * Handle an incoming INVITE, normally called just after the channel
  * has been created with initiator handle of the sender.
diff --git a/src/sip-media-channel.h b/src/sip-media-channel.h
index 90e822d..b1e5be8 100644
--- a/src/sip-media-channel.h
+++ b/src/sip-media-channel.h
@@ -76,6 +76,8 @@ gboolean _tpsip_media_channel_add_member (GObject *iface,
                                           const gchar *message,
                                           GError **error);
 
+void tpsip_media_channel_create_initial_streams (TpsipMediaChannel *self);
+
 void tpsip_media_channel_receive_invite (TpsipMediaChannel *self,
                                          nua_handle_t *nh);
 
diff --git a/src/sip-media-session.c b/src/sip-media-session.c
index 89050cd..94b8a42 100644
--- a/src/sip-media-session.c
+++ b/src/sip-media-session.c
@@ -160,9 +160,6 @@ tpsip_media_session_get_stream (TpsipMediaSession *self,
                               guint stream_id,
                               GError **error);
 
-static TpsipMediaStream* priv_create_media_stream (TpsipMediaSession *session,
-                                                 guint media_type,
-                                                 guint pending_send_flags);
 static void priv_request_response_step (TpsipMediaSession *session);
 static void priv_session_invite (TpsipMediaSession *session, gboolean reinvite);
 static void priv_local_media_changed (TpsipMediaSession *session);
@@ -836,9 +833,8 @@ gboolean tpsip_media_session_request_streams (TpsipMediaSession *session,
     guint media_type = g_array_index (media_types, guint, i);
     TpsipMediaStream *stream;
 
-    stream = priv_create_media_stream (session,
-                                       media_type,
-                                       TP_MEDIA_STREAM_PENDING_REMOTE_SEND);
+    stream = tpsip_media_session_add_stream (session,
+        media_type, TP_MEDIA_STREAM_PENDING_REMOTE_SEND);
 
     if (stream == NULL)
       {
@@ -1515,7 +1511,7 @@ priv_update_remote_media (TpsipMediaSession *session, gboolean authoritative)
       media_type = tpsip_tp_media_type (media->m_type);
 
       if (i >= priv->streams->len)
-        stream = priv_create_media_stream (
+        stream = tpsip_media_session_add_stream (
                         session,
                         media_type,
                         TP_MEDIA_STREAM_PENDING_LOCAL_SEND);
@@ -1985,10 +1981,10 @@ priv_stream_unhold_failure_cb (TpsipMediaStream *stream,
                       TP_LOCAL_HOLD_STATE_REASON_RESOURCE_NOT_AVAILABLE);
 }
 
-static TpsipMediaStream*
-priv_create_media_stream (TpsipMediaSession *self,
-                          guint media_type,
-                          guint pending_send_flags)
+TpsipMediaStream*
+tpsip_media_session_add_stream (TpsipMediaSession *self,
+                                guint media_type,
+                                guint pending_send_flags)
 {
   TpsipMediaSessionPrivate *priv = TPSIP_MEDIA_SESSION_GET_PRIVATE (self);
   gchar *object_path;
diff --git a/src/sip-media-session.h b/src/sip-media-session.h
index 873a4e2..9560c06 100644
--- a/src/sip-media-session.h
+++ b/src/sip-media-session.h
@@ -21,6 +21,8 @@
 #ifndef __TPSIP_MEDIA_SESSION_H__
 #define __TPSIP_MEDIA_SESSION_H__
 
+#include "sip-media-stream.h"
+
 #include <glib-object.h>
 #include <telepathy-glib/handle.h>
 #include <sofia-sip/sdp.h>
@@ -77,6 +79,9 @@ void tpsip_media_session_change_state (TpsipMediaSession *session,
                                      TpsipMediaSessionState new_state);
 gboolean tpsip_media_session_set_remote_media (TpsipMediaSession *chan,
                                             const sdp_session_t* r_sdp);
+TpsipMediaStream* tpsip_media_session_add_stream (TpsipMediaSession *self,
+                                                  guint media_type,
+                                                  guint pending_send_flags);
 gboolean tpsip_media_session_request_streams (TpsipMediaSession *session,
 					    const GArray *media_types,
 					    GPtrArray *ret,
diff --git a/src/sip-media-stream.h b/src/sip-media-stream.h
index 4aaaeb6..73ef6c5 100644
--- a/src/sip-media-stream.h
+++ b/src/sip-media-stream.h
@@ -22,6 +22,7 @@
 #define __TPSIP_MEDIA_STREAM_H__
 
 #include <glib-object.h>
+#include <telepathy-glib/enums.h>
 #include <sofia-sip/sdp.h>
 
 G_BEGIN_DECLS
-- 
1.5.6.5




More information about the telepathy-commits mailing list