diff --git a/gst-libs/gst/rtsp/gstrtspmessage.c b/gst-libs/gst/rtsp/gstrtspmessage.c index c00614558e..a326e5af15 100644 --- a/gst-libs/gst/rtsp/gstrtspmessage.c +++ b/gst-libs/gst/rtsp/gstrtspmessage.c @@ -637,10 +637,16 @@ GstRTSPResult gst_rtsp_message_add_header_by_name (GstRTSPMessage * msg, const gchar * header, const gchar * value) { + GstRTSPHeaderField field; + g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL); g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL); g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL); + field = gst_rtsp_find_header_field (header); + if (field != GST_RTSP_HDR_INVALID) + return gst_rtsp_message_take_header (msg, field, g_strdup (value)); + return gst_rtsp_message_take_header_by_name (msg, header, g_strdup (value)); } diff --git a/tests/check/libs/rtsp.c b/tests/check/libs/rtsp.c index 68046ad759..0730a318e3 100644 --- a/tests/check/libs/rtsp.c +++ b/tests/check/libs/rtsp.c @@ -617,10 +617,37 @@ GST_START_TEST (test_rtsp_message) fail_unless_equals_int (res, GST_RTSP_OK); fail_unless_equals_string (val, "bar.0"); + /* remove all headers for a name */ + res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", -1); + fail_unless_equals_int (res, GST_RTSP_OK); + res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0); + fail_unless_equals_int (res, GST_RTSP_ENOTIMPL); + /* gst_rtsp_message_dump (msg); */ res = gst_rtsp_message_free (msg); fail_unless_equals_int (res, GST_RTSP_OK); + + /* === */ + + res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY, + "rtsp://foo.bar:8554/test"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_add_header_by_name (msg, "CSeq", "3"); + fail_unless_equals_int (res, GST_RTSP_OK); + + res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + + val = NULL; + res = gst_rtsp_message_get_header_by_name (msg, "cseq", &val, 0); + fail_unless_equals_int (res, GST_RTSP_OK); + fail_unless_equals_string (val, "3"); + + res = gst_rtsp_message_free (msg); + fail_unless_equals_int (res, GST_RTSP_OK); } GST_END_TEST;