Add new RTSP message method to set header
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 29 Jan 2009 10:55:10 +0000 (11:55 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 29 Jan 2009 10:55:10 +0000 (11:55 +0100)
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()

docs/libs/gst-plugins-base-libs-sections.txt
gst-libs/gst/rtsp/gstrtspconnection.c
gst-libs/gst/rtsp/gstrtspmessage.c
gst-libs/gst/rtsp/gstrtspmessage.h

index 7fcb89a..dfab0ea 100644 (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
index 58013d2..5d46e2c 100644 (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:
index 9ec3ec1..44586b8 100644 (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,7 +512,7 @@ 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);
 
@@ -518,6 +520,24 @@ gst_rtsp_message_add_header (GstRTSPMessage * msg, GstRTSPHeaderField field,
 }
 
 /**
+ * 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
  * @field: a #GstRTSPHeaderField
index 1dd2c34..3fb15fa 100644 (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);