summaryrefslogtreecommitdiffstats
path: root/gst/rtsp/rtspmessage.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/rtsp/rtspmessage.c')
-rw-r--r--gst/rtsp/rtspmessage.c465
1 files changed, 0 insertions, 465 deletions
diff --git a/gst/rtsp/rtspmessage.c b/gst/rtsp/rtspmessage.c
deleted file mode 100644
index 5dd2faab..00000000
--- a/gst/rtsp/rtspmessage.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- * <2006> Lutz Mueller <lutz at topfrose dot de>
- *
- * 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.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#include <string.h>
-
-#include "rtspmessage.h"
-
-typedef struct _RTSPKeyValue
-{
- RTSPHeaderField field;
- gchar *value;
-} RTSPKeyValue;
-
-static void
-key_value_foreach (GArray * array, GFunc func, gpointer user_data)
-{
- guint i;
-
- g_return_if_fail (array != NULL);
-
- for (i = 0; i < array->len; i++) {
- (*func) (&g_array_index (array, RTSPKeyValue, i), user_data);
- }
-}
-
-RTSPResult
-rtsp_message_new (RTSPMessage ** msg)
-{
- RTSPMessage *newmsg;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- newmsg = g_new0 (RTSPMessage, 1);
-
- *msg = newmsg;
-
- return rtsp_message_init (newmsg);
-}
-
-RTSPResult
-rtsp_message_init (RTSPMessage * msg)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- rtsp_message_unset (msg);
-
- msg->type = RTSP_MESSAGE_INVALID;
- msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_new_request (RTSPMessage ** msg, RTSPMethod method,
- const gchar * uri)
-{
- RTSPMessage *newmsg;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (uri != NULL, RTSP_EINVAL);
-
- newmsg = g_new0 (RTSPMessage, 1);
-
- *msg = newmsg;
-
- return rtsp_message_init_request (newmsg, method, uri);
-}
-
-RTSPResult
-rtsp_message_init_request (RTSPMessage * msg, RTSPMethod method,
- const gchar * uri)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (uri != NULL, RTSP_EINVAL);
-
- rtsp_message_unset (msg);
-
- msg->type = RTSP_MESSAGE_REQUEST;
- msg->type_data.request.method = method;
- msg->type_data.request.uri = g_strdup (uri);
- msg->type_data.request.version = RTSP_VERSION_1_0;
- msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_new_response (RTSPMessage ** msg, RTSPStatusCode code,
- const gchar * reason, const RTSPMessage * request)
-{
- RTSPMessage *newmsg;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- newmsg = g_new0 (RTSPMessage, 1);
-
- *msg = newmsg;
-
- return rtsp_message_init_response (newmsg, code, reason, request);
-}
-
-RTSPResult
-rtsp_message_init_response (RTSPMessage * msg, RTSPStatusCode code,
- const gchar * reason, const RTSPMessage * request)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- rtsp_message_unset (msg);
-
- if (reason == NULL)
- reason = rtsp_status_as_text (code);
-
- msg->type = RTSP_MESSAGE_RESPONSE;
- msg->type_data.response.code = code;
- msg->type_data.response.reason = g_strdup (reason);
- msg->type_data.response.version = RTSP_VERSION_1_0;
- msg->hdr_fields = g_array_new (FALSE, FALSE, sizeof (RTSPKeyValue));
-
- if (request) {
- gchar *header;
-
- /* copy CSEQ */
- if (rtsp_message_get_header (request, RTSP_HDR_CSEQ, &header, 0) == RTSP_OK) {
- rtsp_message_add_header (msg, RTSP_HDR_CSEQ, header);
- }
-
- /* copy session id */
- if (rtsp_message_get_header (request, RTSP_HDR_SESSION, &header,
- 0) == RTSP_OK) {
- char *pos;
-
- header = g_strdup (header);
- if ((pos = strchr (header, ';'))) {
- *pos = '\0';
- }
- g_strchomp (header);
- rtsp_message_add_header (msg, RTSP_HDR_SESSION, header);
- g_free (header);
- }
-
- /* FIXME copy more headers? */
- }
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_init_data (RTSPMessage * msg, guint8 channel)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- rtsp_message_unset (msg);
-
- msg->type = RTSP_MESSAGE_DATA;
- msg->type_data.data.channel = channel;
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_unset (RTSPMessage * msg)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- switch (msg->type) {
- case RTSP_MESSAGE_INVALID:
- break;
- case RTSP_MESSAGE_REQUEST:
- g_free (msg->type_data.request.uri);
- break;
- case RTSP_MESSAGE_RESPONSE:
- g_free (msg->type_data.response.reason);
- break;
- case RTSP_MESSAGE_DATA:
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- if (msg->hdr_fields != NULL)
- g_array_free (msg->hdr_fields, TRUE);
-
- g_free (msg->body);
-
- memset (msg, 0, sizeof *msg);
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_free (RTSPMessage * msg)
-{
- RTSPResult res;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- res = rtsp_message_unset (msg);
- if (res == RTSP_OK)
- g_free (msg);
-
- return res;
-}
-
-RTSPResult
-rtsp_message_add_header (RTSPMessage * msg, RTSPHeaderField field,
- const gchar * value)
-{
- RTSPKeyValue key_value;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (value != NULL, RTSP_EINVAL);
-
- key_value.field = field;
- key_value.value = g_strdup (value);
-
- g_array_append_val (msg->hdr_fields, key_value);
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_remove_header (RTSPMessage * msg, RTSPHeaderField field, gint indx)
-{
- RTSPResult res = RTSP_ENOTIMPL;
- guint i = 0;
- gint cnt = 0;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- while (i < msg->hdr_fields->len) {
- RTSPKeyValue key_value = g_array_index (msg->hdr_fields, RTSPKeyValue, i);
-
- if (key_value.field == field && (indx == -1 || cnt++ == indx)) {
- g_array_remove_index (msg->hdr_fields, i);
- res = RTSP_OK;
- if (indx != -1)
- break;
- } else {
- i++;
- }
- }
-
- return res;
-}
-
-RTSPResult
-rtsp_message_get_header (const RTSPMessage * msg, RTSPHeaderField field,
- gchar ** value, gint indx)
-{
- guint i;
- gint cnt = 0;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- for (i = 0; i < msg->hdr_fields->len; i++) {
- RTSPKeyValue key_value = g_array_index (msg->hdr_fields, RTSPKeyValue, i);
-
- if (key_value.field == field && cnt++ == indx) {
- if (value)
- *value = key_value.value;
- return RTSP_OK;
- }
- }
-
- return RTSP_ENOTIMPL;
-}
-
-void
-rtsp_message_append_headers (const RTSPMessage * msg, GString * str)
-{
- guint i;
-
- g_return_if_fail (msg != NULL);
- g_return_if_fail (str != NULL);
-
- for (i = 0; i < msg->hdr_fields->len; i++) {
- RTSPKeyValue key_value = g_array_index (msg->hdr_fields, RTSPKeyValue, i);
- const gchar *keystr = rtsp_header_as_text (key_value.field);
-
- g_string_append_printf (str, "%s: %s\r\n", keystr, key_value.value);
- }
-}
-
-RTSPResult
-rtsp_message_set_body (RTSPMessage * msg, const guint8 * data, guint size)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- return rtsp_message_take_body (msg, g_memdup (data, size), size);
-}
-
-RTSPResult
-rtsp_message_take_body (RTSPMessage * msg, guint8 * data, guint size)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (data != NULL || size == 0, RTSP_EINVAL);
-
- if (msg->body)
- g_free (msg->body);
-
- msg->body = data;
- msg->body_size = size;
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_get_body (const RTSPMessage * msg, guint8 ** data, guint * size)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (data != NULL, RTSP_EINVAL);
- g_return_val_if_fail (size != NULL, RTSP_EINVAL);
-
- *data = msg->body;
- *size = msg->body_size;
-
- return RTSP_OK;
-}
-
-RTSPResult
-rtsp_message_steal_body (RTSPMessage * msg, guint8 ** data, guint * size)
-{
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
- g_return_val_if_fail (data != NULL, RTSP_EINVAL);
- g_return_val_if_fail (size != NULL, RTSP_EINVAL);
-
- *data = msg->body;
- *size = msg->body_size;
-
- msg->body = NULL;
- msg->body_size = 0;
-
- return RTSP_OK;
-}
-
-static void
-dump_mem (guint8 * mem, guint size)
-{
- guint i, j;
- GString *string = g_string_sized_new (50);
- GString *chars = g_string_sized_new (18);
-
- i = j = 0;
- while (i < size) {
- if (g_ascii_isprint (mem[i]))
- g_string_append_printf (chars, "%c", mem[i]);
- else
- g_string_append_printf (chars, ".");
-
- g_string_append_printf (string, "%02x ", mem[i]);
-
- j++;
- i++;
-
- if (j == 16 || i == size) {
- g_print ("%08x (%p): %-48.48s %-16.16s\n", i - j, mem + i - j,
- string->str, chars->str);
- g_string_set_size (string, 0);
- g_string_set_size (chars, 0);
- j = 0;
- }
- }
- g_string_free (string, TRUE);
- g_string_free (chars, TRUE);
-}
-
-static void
-dump_key_value (gpointer data, gpointer user_data)
-{
- RTSPKeyValue *key_value = (RTSPKeyValue *) data;
-
- g_print (" key: '%s', value: '%s'\n",
- rtsp_header_as_text (key_value->field), key_value->value);
-}
-
-RTSPResult
-rtsp_message_dump (RTSPMessage * msg)
-{
- guint8 *data;
- guint size;
-
- g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
-
- switch (msg->type) {
- case RTSP_MESSAGE_REQUEST:
- g_print ("RTSP request message %p\n", msg);
- g_print (" request line:\n");
- g_print (" method: '%s'\n",
- rtsp_method_as_text (msg->type_data.request.method));
- g_print (" uri: '%s'\n", msg->type_data.request.uri);
- g_print (" version: '%s'\n",
- rtsp_version_as_text (msg->type_data.request.version));
- g_print (" headers:\n");
- key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
- g_print (" body:\n");
- rtsp_message_get_body (msg, &data, &size);
- dump_mem (data, size);
- break;
- case RTSP_MESSAGE_RESPONSE:
- g_print ("RTSP response message %p\n", msg);
- g_print (" status line:\n");
- g_print (" code: '%d'\n", msg->type_data.response.code);
- g_print (" reason: '%s'\n", msg->type_data.response.reason);
- g_print (" version: '%s'\n",
- rtsp_version_as_text (msg->type_data.response.version));
- g_print (" headers:\n");
- key_value_foreach (msg->hdr_fields, dump_key_value, NULL);
- rtsp_message_get_body (msg, &data, &size);
- g_print (" body: length %d\n", size);
- dump_mem (data, size);
- break;
- case RTSP_MESSAGE_DATA:
- g_print ("RTSP data message %p\n", msg);
- g_print (" channel: '%d'\n", msg->type_data.data.channel);
- g_print (" size: '%d'\n", msg->body_size);
- rtsp_message_get_body (msg, &data, &size);
- dump_mem (data, size);
- break;
- default:
- g_print ("unsupported message type %d\n", msg->type);
- return RTSP_EINVAL;
- }
- return RTSP_OK;
-}