rtsp-client: Make param_set and param_get virtual
authorOgnyan Tonchev <ognyan@axis.com>
Wed, 12 Jun 2013 10:23:56 +0000 (12:23 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 17 Jun 2013 14:11:40 +0000 (16:11 +0200)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=702072

gst/rtsp-server/rtsp-client.c
gst/rtsp-server/rtsp-client.h

index dafc2de..47fb1dc 100644 (file)
@@ -104,6 +104,10 @@ static void client_session_finalized (GstRTSPClient * client,
     GstRTSPSession * session);
 static void unlink_session_transports (GstRTSPClient * client,
     GstRTSPSession * session, GstRTSPSessionMedia * media);
+static GstRTSPResult default_params_set (GstRTSPClient * client,
+    GstRTSPClientState * state);
+static GstRTSPResult default_params_get (GstRTSPClient * client,
+    GstRTSPClientState * state);
 
 G_DEFINE_TYPE (GstRTSPClient, gst_rtsp_client, G_TYPE_OBJECT);
 
@@ -121,6 +125,8 @@ gst_rtsp_client_class_init (GstRTSPClientClass * klass)
   gobject_class->finalize = gst_rtsp_client_finalize;
 
   klass->create_sdp = create_sdp;
+  klass->params_set = default_params_set;
+  klass->params_get = default_params_get;
 
   g_object_class_install_property (gobject_class, PROP_SESSION_POOL,
       g_param_spec_object ("session-pool", "Session Pool",
@@ -706,6 +712,26 @@ not_found:
   }
 }
 
+static GstRTSPResult
+default_params_set (GstRTSPClient * client, GstRTSPClientState * state)
+{
+  GstRTSPResult res;
+
+  res = gst_rtsp_params_set (client, state);
+
+  return res;
+}
+
+static GstRTSPResult
+default_params_get (GstRTSPClient * client, GstRTSPClientState * state)
+{
+  GstRTSPResult res;
+
+  res = gst_rtsp_params_get (client, state);
+
+  return res;
+}
+
 static gboolean
 handle_get_param_request (GstRTSPClient * client, GstRTSPClientState * state)
 {
@@ -722,7 +748,7 @@ handle_get_param_request (GstRTSPClient * client, GstRTSPClientState * state)
     send_generic_response (client, GST_RTSP_STS_OK, state);
   } else {
     /* there is a body, handle the params */
-    res = gst_rtsp_params_get (client, state);
+    res = GST_RTSP_CLIENT_GET_CLASS (client)->params_get (client, state);
     if (res != GST_RTSP_OK)
       goto bad_request;
 
@@ -759,7 +785,7 @@ handle_set_param_request (GstRTSPClient * client, GstRTSPClientState * state)
     send_generic_response (client, GST_RTSP_STS_OK, state);
   } else {
     /* there is a body, handle the params */
-    res = gst_rtsp_params_set (client, state);
+    res = GST_RTSP_CLIENT_GET_CLASS (client)->params_set (client, state);
     if (res != GST_RTSP_OK)
       goto bad_request;
 
index 4fad1f6..75297b6 100644 (file)
@@ -100,10 +100,21 @@ struct _GstRTSPClient {
   GstRTSPClientPrivate *priv;
 };
 
+/**
+ * GstRTSPClientClass:
+ * @params_set: set parameters. This function should also initialize the
+ * RTSP response(state->response) via a call to gst_rtsp_message_init_response()
+ * @params_get: get parameters. This function should also initialize the
+ * RTSP response(state->response) via a call to gst_rtsp_message_init_response()
+ *
+ * The client class structure.
+ */
 struct _GstRTSPClientClass {
   GObjectClass  parent_class;
 
   GstSDPMessage * (*create_sdp) (GstRTSPClient *client, GstRTSPMedia *media);
+  GstRTSPResult   (*params_set) (GstRTSPClient *client, GstRTSPClientState *state);
+  GstRTSPResult   (*params_get) (GstRTSPClient *client, GstRTSPClientState *state);
 
   /* signals */
   void     (*closed)                  (GstRTSPClient *client);