From 56f75cbbe9a7734b15998853c65b9a94d9cb5cce Mon Sep 17 00:00:00 2001 From: J Date: Fri, 17 Apr 2015 10:12:52 +0800 Subject: [PATCH 1/4] fix #384 --- trunk/src/app/srs_app_http.cpp | 11 +++++------ trunk/src/app/srs_app_http.hpp | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/trunk/src/app/srs_app_http.cpp b/trunk/src/app/srs_app_http.cpp index fa4fe6168..ed6a2cb4e 100644 --- a/trunk/src/app/srs_app_http.cpp +++ b/trunk/src/app/srs_app_http.cpp @@ -1401,7 +1401,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsHttpMessage** ppmsg) header = http_parser(); url = ""; headers.clear(); - body_parsed = 0; + header_parsed = 0; // do parse if ((ret = parse_message_imp(skt)) != ERROR_SUCCESS) { @@ -1437,12 +1437,12 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) // when buffer not empty, parse it. if (buffer->size() > 0) { nparsed = http_parser_execute(&parser, &settings, buffer->bytes(), buffer->size()); - srs_info("buffer=%d, nparsed=%d, body=%d", buffer->size(), (int)nparsed, body_parsed); + srs_info("buffer=%d, nparsed=%d, header=%d", buffer->size(), (int)nparsed, header_parsed); } // consume the parsed bytes. - if (nparsed && nparsed - body_parsed > 0) { - buffer->read_slice((int)nparsed - (int)body_parsed); + if (nparsed && nparsed - header_parsed > 0) { + buffer->read_slice(header_parsed); } // ok atleast header completed, @@ -1491,6 +1491,7 @@ int SrsHttpParser::on_headers_complete(http_parser* parser) obj->header = *parser; // save the parser when header parse completed. obj->state = SrsHttpParseStateHeaderComplete; + obj->header_parsed = (int)parser->nread; srs_info("***HEADERS COMPLETE***"); @@ -1567,8 +1568,6 @@ int SrsHttpParser::on_body(http_parser* parser, const char* at, size_t length) SrsHttpParser* obj = (SrsHttpParser*)parser->data; srs_assert(obj); - obj->body_parsed += length; - srs_info("Body: %.*s", (int)length, at); return 0; diff --git a/trunk/src/app/srs_app_http.hpp b/trunk/src/app/srs_app_http.hpp index 76cf602da..0ec775bef 100644 --- a/trunk/src/app/srs_app_http.hpp +++ b/trunk/src/app/srs_app_http.hpp @@ -599,7 +599,7 @@ private: http_parser header; std::string url; std::vector headers; - int body_parsed; + int header_parsed; public: SrsHttpParser(); virtual ~SrsHttpParser(); From a71db536614534ea96cac9fd11076183e4d254fd Mon Sep 17 00:00:00 2001 From: J Date: Sat, 18 Apr 2015 14:33:57 +0800 Subject: [PATCH 2/4] for #384,refine code for empty body request. --- trunk/src/app/srs_app_http.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/trunk/src/app/srs_app_http.cpp b/trunk/src/app/srs_app_http.cpp index ed6a2cb4e..a5831086b 100644 --- a/trunk/src/app/srs_app_http.cpp +++ b/trunk/src/app/srs_app_http.cpp @@ -1441,8 +1441,9 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) } // consume the parsed bytes. - if (nparsed && nparsed - header_parsed > 0) { + if (nparsed && header_parsed && nparsed - header_parsed >= 0) { buffer->read_slice(header_parsed); + header_parsed = 0; } // ok atleast header completed, From 8adbdc39e35cd4772a3961299eb7fc77068c048a Mon Sep 17 00:00:00 2001 From: J Date: Sat, 18 Apr 2015 14:42:16 +0800 Subject: [PATCH 3/4] for #384,refine code for empty body request. --- trunk/src/app/srs_app_http.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trunk/src/app/srs_app_http.cpp b/trunk/src/app/srs_app_http.cpp index a5831086b..56ecd1aea 100644 --- a/trunk/src/app/srs_app_http.cpp +++ b/trunk/src/app/srs_app_http.cpp @@ -1441,7 +1441,7 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) } // consume the parsed bytes. - if (nparsed && header_parsed && nparsed - header_parsed >= 0) { + if (nparsed && header_parsed && (nparsed - header_parsed >= 0)) { buffer->read_slice(header_parsed); header_parsed = 0; } From aca02b6d6bd334281b19c95300d5248a336a7c7b Mon Sep 17 00:00:00 2001 From: J Date: Sat, 18 Apr 2015 14:51:33 +0800 Subject: [PATCH 4/4] for #384,refine code for empty body request. --- trunk/src/app/srs_app_http.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/trunk/src/app/srs_app_http.cpp b/trunk/src/app/srs_app_http.cpp index 56ecd1aea..3c0567cd1 100644 --- a/trunk/src/app/srs_app_http.cpp +++ b/trunk/src/app/srs_app_http.cpp @@ -1441,9 +1441,8 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) } // consume the parsed bytes. - if (nparsed && header_parsed && (nparsed - header_parsed >= 0)) { + if (nparsed && header_parsed) { buffer->read_slice(header_parsed); - header_parsed = 0; } // ok atleast header completed,