Add new RTSP message method to set header

Add gst_rtsp_message_take_header() that takes ownership of the passed header
value. This allows us to avoid an allocations and memory copy in some
situations.
API: GstRTSPMessage::gst_rtsp_message_take_header()
This commit is contained in:
Wim Taymans 2009-01-29 11:55:10 +01:00
parent 9135370b42
commit 484a025f6d
4 changed files with 33 additions and 11 deletions

View file

@ -1227,6 +1227,7 @@ gst_rtsp_message_new_data
gst_rtsp_message_init_data
gst_rtsp_message_parse_data
gst_rtsp_message_add_header
gst_rtsp_message_take_header
gst_rtsp_message_remove_header
gst_rtsp_message_get_header
gst_rtsp_message_append_headers

View file

@ -398,12 +398,11 @@ add_auth_header (GstRTSPConnection * conn, GstRTSPMessage * message)
gst_rtsp_base64_encode (user_pass, strlen (user_pass));
gchar *auth_string = g_strdup_printf ("Basic %s", user_pass64);
gst_rtsp_message_add_header (message, GST_RTSP_HDR_AUTHORIZATION,
gst_rtsp_message_take_header (message, GST_RTSP_HDR_AUTHORIZATION,
auth_string);
g_free (user_pass);
g_free (user_pass64);
g_free (auth_string);
break;
}
case GST_RTSP_AUTH_DIGEST:{
@ -445,9 +444,8 @@ add_auth_header (GstRTSPConnection * conn, GstRTSPMessage * message)
g_free (auth_string);
auth_string = auth_string2;
}
gst_rtsp_message_add_header (message, GST_RTSP_HDR_AUTHORIZATION,
gst_rtsp_message_take_header (message, GST_RTSP_HDR_AUTHORIZATION,
auth_string);
g_free (auth_string);
break;
}
default:

View file

@ -309,8 +309,7 @@ gst_rtsp_message_init_response (GstRTSPMessage * msg, GstRTSPStatusCode code,
*pos = '\0';
}
g_strchomp (header);
gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SESSION, header);
g_free (header);
gst_rtsp_message_take_header (msg, GST_RTSP_HDR_SESSION, header);
}
/* FIXME copy more headers? */
@ -491,18 +490,21 @@ gst_rtsp_message_free (GstRTSPMessage * msg)
}
/**
* gst_rtsp_message_add_header:
* gst_rtsp_message_take_header:
* @msg: a #GstRTSPMessage
* @field: a #GstRTSPHeaderField
* @value: the value of the header
*
* Add a header with key @field and @value to @msg.
* Add a header with key @field and @value to @msg. This function takes
* ownership of @value.
*
* Returns: a #GstRTSPResult.
*
* Since: 0.10.23
*/
GstRTSPResult
gst_rtsp_message_add_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
const gchar * value)
gst_rtsp_message_take_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
gchar * value)
{
RTSPKeyValue key_value;
@ -510,13 +512,31 @@ gst_rtsp_message_add_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL);
key_value.field = field;
key_value.value = g_strdup (value);
key_value.value = value;
g_array_append_val (msg->hdr_fields, key_value);
return GST_RTSP_OK;
}
/**
* gst_rtsp_message_add_header:
* @msg: a #GstRTSPMessage
* @field: a #GstRTSPHeaderField
* @value: the value of the header
*
* Add a header with key @field and @value to @msg. This function takes a copy
* of @value.
*
* Returns: a #GstRTSPResult.
*/
GstRTSPResult
gst_rtsp_message_add_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
const gchar * value)
{
return gst_rtsp_message_take_header (msg, field, g_strdup (value));
}
/**
* gst_rtsp_message_remove_header:
* @msg: a #GstRTSPMessage

View file

@ -147,6 +147,9 @@ GstRTSPResult gst_rtsp_message_parse_data (GstRTSPMessage *msg,
GstRTSPResult gst_rtsp_message_add_header (GstRTSPMessage *msg,
GstRTSPHeaderField field,
const gchar *value);
GstRTSPResult gst_rtsp_message_take_header (GstRTSPMessage *msg,
GstRTSPHeaderField field,
gchar *value);
GstRTSPResult gst_rtsp_message_remove_header (GstRTSPMessage *msg,
GstRTSPHeaderField field,
gint indx);