summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2010-01-29 16:34:44 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2010-02-12 11:43:59 +0100
commit30fd219e6367d413eb22961ad9a94ca74d286e8e (patch)
treea2099e7a7b37d762507522ff92f4c780b1fd0eb7
parentbe037e0dc8ffd67529e023d3ce8cd61a9ee2bcfb (diff)
rtsp: ignore \n and \r as the first line
Be more forgiving for bad servers and ignore \r and \n when we are looking for the response/request line. See #608417
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index 3548beb9..813eefdd 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -1834,22 +1834,31 @@ build_next (GstRTSPBuilder * builder, GstRTSPMessage * message,
while (TRUE) {
switch (builder->state) {
case STATE_START:
+ {
+ guint8 c;
+
builder->offset = 0;
res =
read_bytes (conn, (guint8 *) builder->buffer, &builder->offset, 1);
if (res != GST_RTSP_OK)
goto done;
+ c = builder->buffer[0];
+
/* we have 1 bytes now and we can see if this is a data message or
* not */
- if (builder->buffer[0] == '$') {
+ if (c == '$') {
/* data message, prepare for the header */
builder->state = STATE_DATA_HEADER;
+ } else if (c == '\n' || c == '\r') {
+ /* skip \n and \r */
+ builder->offset = 0;
} else {
builder->line = 0;
builder->state = STATE_READ_LINES;
}
break;
+ }
case STATE_DATA_HEADER:
{
res =