mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
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:
parent
9135370b42
commit
484a025f6d
4 changed files with 33 additions and 11 deletions
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue