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.c132
1 files changed, 77 insertions, 55 deletions
diff --git a/gst/rtsp/rtspmessage.c b/gst/rtsp/rtspmessage.c
index fd45f599..bd1473bb 100644
--- a/gst/rtsp/rtspmessage.c
+++ b/gst/rtsp/rtspmessage.c
@@ -20,84 +20,69 @@
#include "rtspmessage.h"
RTSPResult
-rtsp_message_new_request (RTSPMethod method, gchar * uri, RTSPMessage ** msg)
+rtsp_message_new_request (RTSPMessage ** msg, RTSPMethod method, gchar * uri)
{
RTSPMessage *newmsg;
- if (msg == NULL || uri == NULL)
- return RTSP_EINVAL;
+ 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 (method, uri, newmsg);
+ return rtsp_message_init_request (newmsg, method, uri);
}
RTSPResult
-rtsp_message_init_request (RTSPMethod method, gchar * uri, RTSPMessage * msg)
+rtsp_message_init_request (RTSPMessage * msg, RTSPMethod method, gchar * uri)
{
- if (msg == NULL || uri == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (uri != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+
+ rtsp_message_unset (msg);
msg->type = RTSP_MESSAGE_REQUEST;
msg->type_data.request.method = method;
- g_free (msg->type_data.request.uri);
msg->type_data.request.uri = g_strdup (uri);
-
- if (msg->hdr_fields != NULL)
- g_hash_table_destroy (msg->hdr_fields);
msg->hdr_fields =
g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
- if (msg->body) {
- g_free (msg->body);
- msg->body = NULL;
- }
- msg->body_size = 0;
-
return RTSP_OK;
}
RTSPResult
-rtsp_message_new_response (RTSPStatusCode code, gchar * reason,
- RTSPMessage * request, RTSPMessage ** msg)
+rtsp_message_new_response (RTSPMessage ** msg, RTSPStatusCode code,
+ gchar * reason, RTSPMessage * request)
{
RTSPMessage *newmsg;
- if (msg == NULL || reason == NULL || request == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (reason != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (request != NULL, RTSP_EINVAL);
newmsg = g_new0 (RTSPMessage, 1);
*msg = newmsg;
- return rtsp_message_init_response (code, reason, request, newmsg);
+ return rtsp_message_init_response (newmsg, code, reason, request);
}
RTSPResult
-rtsp_message_init_response (RTSPStatusCode code, gchar * reason,
- RTSPMessage * request, RTSPMessage * msg)
+rtsp_message_init_response (RTSPMessage * msg, RTSPStatusCode code,
+ gchar * reason, RTSPMessage * request)
{
- if (reason == NULL || msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (reason != NULL, RTSP_EINVAL);
+
+ rtsp_message_unset (msg);
msg->type = RTSP_MESSAGE_RESPONSE;
msg->type_data.response.code = code;
- g_free (msg->type_data.response.reason);
msg->type_data.response.reason = g_strdup (reason);
-
- if (msg->hdr_fields != NULL)
- g_hash_table_destroy (msg->hdr_fields);
msg->hdr_fields =
g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
- if (msg->body) {
- g_free (msg->body);
- msg->body = NULL;
- }
- msg->body_size = 0;
-
if (request) {
/* FIXME copy headers */
}
@@ -106,10 +91,11 @@ rtsp_message_init_response (RTSPStatusCode code, gchar * reason,
}
RTSPResult
-rtsp_message_init_data (gint channel, RTSPMessage * msg)
+rtsp_message_init_data (RTSPMessage * msg, gint channel)
{
- if (msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+
+ rtsp_message_unset (msg);
msg->type = RTSP_MESSAGE_DATA;
msg->type_data.data.channel = channel;
@@ -117,13 +103,51 @@ rtsp_message_init_data (gint channel, RTSPMessage * msg)
return RTSP_OK;
}
+RTSPResult
+rtsp_message_unset (RTSPMessage * msg)
+{
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+
+ msg->type = RTSP_MESSAGE_INVALID;
+ msg->type_data.request.method = RTSP_INVALID;
+ g_free (msg->type_data.request.uri);
+ msg->type_data.request.uri = NULL;
+
+ msg->type_data.response.code = RTSP_STS_INVALID;
+ g_free (msg->type_data.response.reason);
+ msg->type_data.response.reason = NULL;
+
+ if (msg->hdr_fields != NULL)
+ g_hash_table_destroy (msg->hdr_fields);
+ msg->hdr_fields = NULL;
+
+ g_free (msg->body);
+ msg->body = NULL;
+ msg->body_size = 0;
+
+ 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,
gchar * value)
{
- if (msg == NULL || value == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (value != NULL, RTSP_EINVAL);
g_hash_table_insert (msg->hdr_fields, GINT_TO_POINTER (field),
g_strdup (value));
@@ -134,8 +158,7 @@ rtsp_message_add_header (RTSPMessage * msg, RTSPHeaderField field,
RTSPResult
rtsp_message_remove_header (RTSPMessage * msg, RTSPHeaderField field)
{
- if (msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
g_hash_table_remove (msg->hdr_fields, GINT_TO_POINTER (field));
@@ -148,8 +171,8 @@ rtsp_message_get_header (RTSPMessage * msg, RTSPHeaderField field,
{
gchar *val;
- if (msg == NULL || value == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
+ g_return_val_if_fail (value != NULL, RTSP_EINVAL);
val = g_hash_table_lookup (msg->hdr_fields, GINT_TO_POINTER (field));
if (val == NULL)
@@ -163,8 +186,7 @@ rtsp_message_get_header (RTSPMessage * msg, RTSPHeaderField field,
RTSPResult
rtsp_message_set_body (RTSPMessage * msg, guint8 * data, guint size)
{
- if (msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
return rtsp_message_take_body (msg, g_memdup (data, size), size);
}
@@ -172,8 +194,7 @@ rtsp_message_set_body (RTSPMessage * msg, guint8 * data, guint size)
RTSPResult
rtsp_message_take_body (RTSPMessage * msg, guint8 * data, guint size)
{
- if (msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
if (msg->body)
g_free (msg->body);
@@ -187,8 +208,9 @@ rtsp_message_take_body (RTSPMessage * msg, guint8 * data, guint size)
RTSPResult
rtsp_message_get_body (RTSPMessage * msg, guint8 ** data, guint * size)
{
- if (msg == NULL || data == NULL || size == NULL)
- return RTSP_EINVAL;
+ 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;
@@ -199,8 +221,9 @@ rtsp_message_get_body (RTSPMessage * msg, guint8 ** data, guint * size)
RTSPResult
rtsp_message_steal_body (RTSPMessage * msg, guint8 ** data, guint * size)
{
- if (msg == NULL || data == NULL || size == NULL)
- return RTSP_EINVAL;
+ 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;
@@ -257,8 +280,7 @@ rtsp_message_dump (RTSPMessage * msg)
guint8 *data;
guint size;
- if (msg == NULL)
- return RTSP_EINVAL;
+ g_return_val_if_fail (msg != NULL, RTSP_EINVAL);
if (msg->type == RTSP_MESSAGE_REQUEST) {
g_print ("request message %p\n", msg);