rtsp: Normalize lines (remove extra whitespace) before parsing.
authorPeter Kjellerstedt <pkj@axis.com>
Wed, 17 Jun 2009 18:52:48 +0000 (20:52 +0200)
committerPeter Kjellerstedt <pkj@axis.com>
Mon, 24 Aug 2009 11:19:44 +0000 (13:19 +0200)
gst-libs/gst/rtsp/gstrtspconnection.c

index d12b694..7c8c780 100644 (file)
@@ -1706,6 +1706,25 @@ parse_error:
   }
 }
 
+/* convert all consecutive whitespace to a single space */
+static void
+normalize_line (guint8 * buffer)
+{
+  while (*buffer) {
+    if (g_ascii_isspace (*buffer)) {
+      guint8 *tmp;
+
+      *buffer++ = ' ';
+      for (tmp = buffer; g_ascii_isspace (*tmp); tmp++) {
+      }
+      if (buffer != tmp)
+        memmove (buffer, tmp, strlen ((gchar *) tmp) + 1);
+    } else {
+      buffer++;
+    }
+  }
+}
+
 /* returns:
  *  GST_RTSP_OK when a complete message was read.
  *  GST_RTSP_EEOF: when the socket is closed
@@ -1803,6 +1822,7 @@ build_next (GstRTSPBuilder * builder, GstRTSPMessage * message,
         }
 
         /* we have a line */
+        normalize_line (builder->buffer);
         if (builder->line == 0) {
           /* first line, check for response status */
           if (memcmp (builder->buffer, "RTSP", 4) == 0 ||