From 7e9df0e112c0074bda4305294a623efdcd54979c Mon Sep 17 00:00:00 2001 From: Ognyan Tonchev Date: Mon, 17 Jun 2013 16:18:37 +0200 Subject: [PATCH] rtsp-client: Make configure_client_transport virtual This patch makes configure_client_transport virtual. The functionality is needed to handle some weird clients sending multicast transport settings as url options. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702173 --- gst/rtsp-server/rtsp-client.c | 11 ++++++++--- gst/rtsp-server/rtsp-client.h | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 47fb1dceb6..6029321573 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -104,6 +104,8 @@ static void client_session_finalized (GstRTSPClient * client, GstRTSPSession * session); static void unlink_session_transports (GstRTSPClient * client, GstRTSPSession * session, GstRTSPSessionMedia * media); +static gboolean default_configure_client_transport (GstRTSPClient * client, + GstRTSPClientState * state, GstRTSPTransport * ct); static GstRTSPResult default_params_set (GstRTSPClient * client, GstRTSPClientState * state); static GstRTSPResult default_params_get (GstRTSPClient * client, @@ -125,6 +127,7 @@ gst_rtsp_client_class_init (GstRTSPClientClass * klass) gobject_class->finalize = gst_rtsp_client_finalize; klass->create_sdp = create_sdp; + klass->configure_client_transport = default_configure_client_transport; klass->params_set = default_params_set; klass->params_get = default_params_get; @@ -1097,8 +1100,8 @@ handle_blocksize (GstRTSPMedia * media, GstRTSPStream * stream, } static gboolean -configure_client_transport (GstRTSPClient * client, GstRTSPClientState * state, - GstRTSPTransport * ct) +default_configure_client_transport (GstRTSPClient * client, + GstRTSPClientState * state, GstRTSPTransport * ct) { GstRTSPClientPrivate *priv = client->priv; @@ -1219,6 +1222,7 @@ handle_setup_request (GstRTSPClient * client, GstRTSPClientState * state) GstRTSPMedia *media; GstRTSPStream *stream; GstRTSPState rtspstate; + GstRTSPClientClass *klass; uri = state->uri; @@ -1307,7 +1311,8 @@ handle_setup_request (GstRTSPClient * client, GstRTSPClientState * state) goto invalid_blocksize; /* update the client transport */ - if (!configure_client_transport (client, state, ct)) + klass = GST_RTSP_CLIENT_GET_CLASS (client); + if (!klass->configure_client_transport (client, state, ct)) goto unsupported_client_transport; /* set in the session media transport */ diff --git a/gst/rtsp-server/rtsp-client.h b/gst/rtsp-server/rtsp-client.h index 75297b6ad7..18bb522109 100644 --- a/gst/rtsp-server/rtsp-client.h +++ b/gst/rtsp-server/rtsp-client.h @@ -113,6 +113,9 @@ struct _GstRTSPClientClass { GObjectClass parent_class; GstSDPMessage * (*create_sdp) (GstRTSPClient *client, GstRTSPMedia *media); + gboolean (*configure_client_transport) (GstRTSPClient * client, + GstRTSPClientState * state, + GstRTSPTransport * ct); GstRTSPResult (*params_set) (GstRTSPClient *client, GstRTSPClientState *state); GstRTSPResult (*params_get) (GstRTSPClient *client, GstRTSPClientState *state);