From 6f3fcc79328dcdeea46a2fe38f58208945a83b1f Mon Sep 17 00:00:00 2001 From: Kenneth Barbour Date: Wed, 21 Nov 2018 14:29:35 -0500 Subject: [PATCH] Fixed bug where method is wrong after a post request --- src/RequestParser.cpp | 1 + test/test_RequestParser.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/RequestParser.cpp b/src/RequestParser.cpp index de1d761..52714f2 100644 --- a/src/RequestParser.cpp +++ b/src/RequestParser.cpp @@ -93,6 +93,7 @@ bool RequestParser::parse() { if (available) client.flush(); *(_i++) = '\0'; request.setMessage(_buffer, content_length); + _i = _buffer; _state = S_COMPLETE; break; } diff --git a/test/test_RequestParser.cpp b/test/test_RequestParser.cpp index 2610121..28fa7ae 100644 --- a/test/test_RequestParser.cpp +++ b/test/test_RequestParser.cpp @@ -62,3 +62,27 @@ TEST_CASE("Test parse multiple requests","[RequestParser]") CHECK_THAT(request.getUrl(), Equals("/bar")); } + +TEST_CASE("Test parse POST then GET", "[RequestParser][POSTthenGET]") +{ + uint8_t buff[512] = {}; + Buffer client(buff, 512); + HttpRequest request; + RequestParser parser(request, client); + + client.write("POST /foo HTTP/1.1\r\nHost: localhost\r\nUser-Agent: curl/7.55.1\r\nAccept: */*\r\nContent-Length: 20\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nssid=foo&passphrase="); + CHECK(parser.parse()); + CHECK(!client.available()); + CHECK_THAT(request.getUrl(), Equals("/foo")); + CHECK_THAT(request.getMethod(), Equals("POST")); + parser.reset(); + + client = Buffer(buff, 256); + request = HttpRequest(); + client.write("GET /foo HTTP/1.1\r\nHost: localhost\r\nUser-Agent: curl/7.55.1\r\nAccept: */*\r\n\r\n"); + CHECK(client.available() == 76); + CHECK(client.peek() == 'G'); + CHECK(parser.parse()); + CHECK_THAT(request.getUrl(), Equals("/foo")); + CHECK_THAT(request.getMethod(), Equals("GET")); +}