/pidgin/main: 5f5abd63c305: media: Add a send-rtcp-mux API to al...

Youness Alaoui kakaroto at kakaroto.homelinux.net
Fri Mar 13 09:11:07 EDT 2015


Changeset: 5f5abd63c305badb2749d73cfd461d1468d6ed83
Author:	 Youness Alaoui <kakaroto at kakaroto.homelinux.net>
Date:	 2014-08-11 16:28 -0400
Branch:	 release-2.x.y
URL: https://hg.pidgin.im/pidgin/main/rev/5f5abd63c305

Description:

media: Add a send-rtcp-mux API to allow muxing of RTP and RTCP

diffstat:

 libpurple/media.c               |  14 ++++++++++++++
 libpurple/media.h               |  13 +++++++++++++
 libpurple/media/backend-fs2.c   |  26 ++++++++++++++++++++++++++
 libpurple/media/backend-iface.c |  13 +++++++++++++
 libpurple/media/backend-iface.h |  17 +++++++++++++++++
 5 files changed, 83 insertions(+), 0 deletions(-)

diffs (148 lines):

diff --git a/libpurple/media.c b/libpurple/media.c
--- a/libpurple/media.c
+++ b/libpurple/media.c
@@ -1317,6 +1317,20 @@ purple_media_codecs_ready(PurpleMedia *m
 }
 
 gboolean
+purple_media_set_send_rtcp_mux(PurpleMedia *media, const gchar *sess_id,
+                               const gchar *participant, gboolean send_rtcp_mux)
+{
+#ifdef USE_VV
+	g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
+
+	return purple_media_backend_set_send_rtcp_mux(media->priv->backend,
+			sess_id, participant, send_rtcp_mux);
+#else
+	return FALSE;
+#endif
+}
+
+gboolean
 purple_media_is_initiator(PurpleMedia *media,
 		const gchar *sess_id, const gchar *participant)
 {
diff --git a/libpurple/media.h b/libpurple/media.h
--- a/libpurple/media.h
+++ b/libpurple/media.h
@@ -398,6 +398,19 @@ gboolean purple_media_set_decryption_par
 gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id);
 
 /**
+ * Sets the rtcp-mux option for the stream.
+ *
+ * @param media The media object to find the session in.
+ * @param sess_id The session id of the session find the stream in.
+ * @param participant The name of the remote user to set the rtcp-mux for.
+ * @paran send_rtcp_mux Whether to enable the rtcp-mux option
+ *
+ * @return @c TRUE RTCP-Mux was set successfully, or @c FALSE otherwise.
+ */
+gboolean purple_media_set_send_rtcp_mux(PurpleMedia *media,
+		const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux);
+
+/**
  * Gets whether the local user is the conference/session/stream's initiator.
  *
  * @param media The media instance to find the session in.
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
--- a/libpurple/media/backend-fs2.c
+++ b/libpurple/media/backend-fs2.c
@@ -107,6 +107,10 @@ static const gchar **purple_media_backen
 static gboolean purple_media_backend_fs2_send_dtmf(
 		PurpleMediaBackend *self, const gchar *sess_id,
 		gchar dtmf, guint8 volume, guint16 duration);
+static gboolean purple_media_backend_fs2_set_send_rtcp_mux(
+		PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		gboolean send_rtcp_mux);
 
 static void free_stream(PurpleMediaBackendFs2Stream *stream);
 static void free_session(PurpleMediaBackendFs2Session *session);
@@ -563,6 +567,7 @@ purple_media_backend_iface_init(PurpleMe
 	iface->set_params = purple_media_backend_fs2_set_params;
 	iface->get_available_params = purple_media_backend_fs2_get_available_params;
 	iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
+	iface->set_send_rtcp_mux = purple_media_backend_fs2_set_send_rtcp_mux;
 }
 
 static FsMediaType
@@ -2838,3 +2843,24 @@ purple_media_backend_fs2_set_output_volu
 #endif /* USE_VV */
 }
 #endif /* USE_GSTREAMER */
+
+static gboolean
+purple_media_backend_fs2_set_send_rtcp_mux(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant,
+		gboolean send_rtcp_mux)
+{
+	PurpleMediaBackendFs2Stream *stream;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
+	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
+			sess_id, participant);
+
+	if (stream != NULL &&
+		g_object_class_find_property (G_OBJECT_GET_CLASS (stream->stream),
+			"send-rtcp-mux") != NULL) {
+		g_object_set (stream->stream, "send-rtcp-mux", send_rtcp_mux, NULL);
+		return TRUE;
+	}
+
+	return FALSE;
+}
diff --git a/libpurple/media/backend-iface.c b/libpurple/media/backend-iface.c
--- a/libpurple/media/backend-iface.c
+++ b/libpurple/media/backend-iface.c
@@ -238,3 +238,16 @@ purple_media_backend_get_available_param
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), NULL_ARRAY);
 	return PURPLE_MEDIA_BACKEND_GET_INTERFACE(self)->get_available_params();
 }
+
+gboolean
+purple_media_backend_set_send_rtcp_mux(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux)
+{
+	PurpleMediaBackendIface *backend_iface;
+
+	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND(self), FALSE);
+	backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(self);
+	g_return_val_if_fail(backend_iface->set_send_rtcp_mux, FALSE);
+	return backend_iface->set_send_rtcp_mux(self,
+			sess_id, participant, send_rtcp_mux);
+}
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
--- a/libpurple/media/backend-iface.h
+++ b/libpurple/media/backend-iface.h
@@ -81,6 +81,8 @@ struct _PurpleMediaBackendIface
 	gboolean (*send_dtmf) (PurpleMediaBackend *self,
 		const gchar *sess_id, gchar dtmf, guint8 volume,
 		guint16 duration);
+	gboolean (*set_send_rtcp_mux) (PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux);
 };
 
 /**
@@ -266,6 +268,21 @@ void purple_media_backend_set_params(Pur
  */
 const gchar **purple_media_backend_get_available_params(PurpleMediaBackend *self);
 
+/**
+ * purple_media_backend_set_send_rtcp_mux:
+ * @self: The media backend the session is in.
+ * @sess_id: The session id of the session to set the rtcp-mux option to
+ * @participant: The participant the stream is associated with.
+ * @send_rtcp_mux: Whether or not to enable rtcp-mux
+ *
+ * Controls whether or not the RTCP should be muxed with the RTP
+ *
+ * Returns: True if set successfully, otherwise False.
+ */
+gboolean purple_media_backend_set_send_rtcp_mux(PurpleMediaBackend *self,
+		const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux);
+
+
 G_END_DECLS
 
 #endif /* _MEDIA_BACKEND_IFACE_H_ */



More information about the Commits mailing list