Add helper functions to handle GET/SET_PARAMETER. Reply with an error when there
is a body now.
Fix return codes of handlers.
rtsp-media.h \
rtsp-media-factory.h \
rtsp-media-mapping.h \
+ rtsp-params.h \
rtsp-sdp.h \
rtsp-session-pool.h \
rtsp-session.h
rtsp-media.c \
rtsp-media-factory.c \
rtsp-media-mapping.c \
+ rtsp-params.c \
rtsp-sdp.c \
rtsp-session-pool.c \
rtsp-session.c
#include "rtsp-client.h"
#include "rtsp-sdp.h"
+#include "rtsp-params.h"
#define DEBUG
send_response (client, session, &response);
- return FALSE;
+ return TRUE;
/* ERRORS */
no_session:
}
static gboolean
+handle_get_param_request (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request)
+{
+ GstRTSPResult res;
+ guint8 *data;
+ guint size;
+
+ res = gst_rtsp_message_get_body (request, &data, &size);
+ if (res != GST_RTSP_OK)
+ goto bad_request;
+
+ if (size == 0) {
+ /* no body, keep-alive request */
+ send_generic_response (client, GST_RTSP_STS_OK, request);
+ } else {
+ /* there is a body */
+ GstRTSPMessage response = { 0 };
+
+ /* there is a body, handle the params */
+ res = gst_rtsp_params_get (client, uri, session, request, &response);
+ if (res != GST_RTSP_OK)
+ goto bad_request;
+
+ send_response (client, session, &response);
+ }
+ return TRUE;
+
+ /* ERRORS */
+bad_request:
+ {
+ send_generic_response (client, GST_RTSP_STS_BAD_REQUEST, request);
+ return FALSE;
+ }
+}
+
+static gboolean
+handle_set_param_request (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request)
+{
+ GstRTSPResult res;
+ guint8 *data;
+ guint size;
+
+ res = gst_rtsp_message_get_body (request, &data, &size);
+ if (res != GST_RTSP_OK)
+ goto bad_request;
+
+ if (size == 0) {
+ /* no body, keep-alive request */
+ send_generic_response (client, GST_RTSP_STS_OK, request);
+ } else {
+ GstRTSPMessage response = { 0 };
+
+ /* there is a body, handle the params */
+ res = gst_rtsp_params_set (client, uri, session, request, &response);
+ if (res != GST_RTSP_OK)
+ goto bad_request;
+
+ send_response (client, session, &response);
+ }
+ return TRUE;
+
+ /* ERRORS */
+bad_request:
+ {
+ send_generic_response (client, GST_RTSP_STS_BAD_REQUEST, request);
+ return FALSE;
+ }
+}
+
+static gboolean
handle_pause_request (GstRTSPClient * client, GstRTSPUrl * uri,
GstRTSPSession * session, GstRTSPMessage * request)
{
/* the state is now READY */
media->state = GST_RTSP_STATE_READY;
- return FALSE;
+ return TRUE;
/* ERRORS */
no_session:
media->state = GST_RTSP_STATE_PLAYING;
- return FALSE;
+ return TRUE;
/* ERRORS */
no_session:
}
}
-static void
+static gboolean
handle_options_request (GstRTSPClient * client, GstRTSPUrl * uri,
GstRTSPSession * session, GstRTSPMessage * request)
{
g_free (str);
send_response (client, session, &response);
+
+ return TRUE;
}
/* remove duplicate and trailing '/' */
handle_teardown_request (client, uri, session, request);
break;
case GST_RTSP_SET_PARAMETER:
+ handle_set_param_request (client, uri, session, request);
+ break;
case GST_RTSP_GET_PARAMETER:
- send_generic_response (client, GST_RTSP_STS_OK, request);
+ handle_get_param_request (client, uri, session, request);
break;
case GST_RTSP_ANNOUNCE:
case GST_RTSP_RECORD:
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2008 Wim Taymans <wim.taymans at gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <string.h>
+
+#include "rtsp-params.h"
+
+GstRTSPResult
+gst_rtsp_params_set (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request,
+ GstRTSPMessage * response)
+{
+ GstRTSPStatusCode code;
+
+ /* FIXME, actually parse the request based on the mime type and try to repond
+ * with a list of the parameters */
+ code = GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD;
+
+ gst_rtsp_message_init_response (response, code,
+ gst_rtsp_status_as_text (code), request);
+
+ return GST_RTSP_OK;
+}
+
+GstRTSPResult
+gst_rtsp_params_get (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request,
+ GstRTSPMessage * response)
+{
+ GstRTSPStatusCode code;
+
+ /* FIXME, actually parse the request based on the mime type and try to repond
+ * with a list of the parameters */
+ code = GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD;
+
+ gst_rtsp_message_init_response (response, code,
+ gst_rtsp_status_as_text (code), request);
+
+ return GST_RTSP_OK;
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2008 Wim Taymans <wim.taymans at gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gst/gst.h>
+
+#include <gst/rtsp/gstrtspurl.h>
+#include <gst/rtsp/gstrtspmessage.h>
+
+#ifndef __GST_RTSP_PARAMS_H__
+#define __GST_RTSP_PARAMS_H__
+
+#include "rtsp-client.h"
+#include "rtsp-session.h"
+
+G_BEGIN_DECLS
+
+GstRTSPResult gst_rtsp_params_set (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request,
+ GstRTSPMessage * response);
+
+GstRTSPResult gst_rtsp_params_get (GstRTSPClient * client, GstRTSPUrl * uri,
+ GstRTSPSession * session, GstRTSPMessage * request,
+ GstRTSPMessage * response);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_PARAMS_H__ */