# HG changeset patch
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
# Date 1407788907 14400
# Node ID 5f5abd63c305badb2749d73cfd461d1468d6ed83
# Parent a0906e7a6bae86f1251d8369b30ba82a9daf1836
media: Add a send-rtcp-mux API to allow muxing of RTP and RTCP
diff --git a/libpurple/media.c b/libpurple/media.c
--- a/libpurple/media.c
+++ b/libpurple/media.c
@@ -1317,6 +1317,20 @@
}
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_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 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 @@
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 @@
#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 @@
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 @@
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 @@
*/
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_ */