From 0a73d81f213fb2d6f2fdd59c4dda047bf453bb1c Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 21 Mar 2011 16:28:04 -0700 Subject: Enable http-live support for https:// urls, fix a parsing issue. Change-Id: I2284e1d62babde7f739fba6a3cb4e2619f0e62f9 related-to-bug: 4148291 --- media/libstagefright/httplive/M3UParser.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'media/libstagefright/httplive/M3UParser.cpp') diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp index 95f6741..2eb180a 100644 --- a/media/libstagefright/httplive/M3UParser.cpp +++ b/media/libstagefright/httplive/M3UParser.cpp @@ -20,8 +20,8 @@ #include "include/M3UParser.h" +#include #include -#include #include namespace android { @@ -306,6 +306,29 @@ status_t M3UParser::parseStreamInf( return OK; } +// Find the next occurence of the character "what" at or after "offset", +// but ignore occurences between quotation marks. +// Return the index of the occurrence or -1 if not found. +static ssize_t FindNextUnquoted( + const AString &line, char what, size_t offset) { + CHECK_NE((int)what, (int)'"'); + + bool quoted = false; + while (offset < line.size()) { + char c = line.c_str()[offset]; + + if (c == '"') { + quoted = !quoted; + } else if (c == what && !quoted) { + return offset; + } + + ++offset; + } + + return -1; +} + // static status_t M3UParser::parseCipherInfo( const AString &line, sp *meta, const AString &baseURI) { @@ -318,7 +341,7 @@ status_t M3UParser::parseCipherInfo( size_t offset = colonPos + 1; while (offset < line.size()) { - ssize_t end = line.find(",", offset); + ssize_t end = FindNextUnquoted(line, ',', offset); if (end < 0) { end = line.size(); } -- cgit v1.1