[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