From 81c38d6b2bae982981c6cefbd72fa21ef4e56d40 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sat, 23 May 2020 18:53:16 +0400 Subject: [PATCH] parse_byte_range() without side-effects --- src/server/request_context.cpp | 11 ++++++----- src/server/request_context.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/server/request_context.cpp b/src/server/request_context.cpp index 573a36aa..0e73345a 100644 --- a/src/server/request_context.cpp +++ b/src/server/request_context.cpp @@ -86,16 +86,16 @@ RequestContext::RequestContext(struct MHD_Connection* connection, } catch (const std::out_of_range&) {} try { - std::string range = get_header(MHD_HTTP_HEADER_RANGE); - parse_byte_range(range); + range_pair = parse_byte_range(get_header(MHD_HTTP_HEADER_RANGE)); } catch (const std::out_of_range&) {} } RequestContext::~RequestContext() {} -void RequestContext::parse_byte_range(std::string range) +RequestContext::ByteRange RequestContext::parse_byte_range(std::string range) { + ByteRange byteRange{0, -1}; const std::string byteUnitSpec("bytes="); if ( kiwix::startsWith(range, byteUnitSpec) ) { range.erase(0, byteUnitSpec.size()); @@ -112,10 +112,11 @@ void RequestContext::parse_byte_range(std::string range) end = -1; } if (iss.eof()) { - range_pair = std::pair(start, end); + byteRange = ByteRange(start, end); } } } + return byteRange; } @@ -199,7 +200,7 @@ bool RequestContext::has_range() const { return range_pair.first <= range_pair.second; } -std::pair RequestContext::get_range() const { +RequestContext::ByteRange RequestContext::get_range() const { return range_pair; } diff --git a/src/server/request_context.h b/src/server/request_context.h index ecd38d2b..ea30d1bb 100644 --- a/src/server/request_context.h +++ b/src/server/request_context.h @@ -87,7 +87,7 @@ class RequestContext { bool can_compress() const { return acceptEncodingDeflate; } private: // functions - void parse_byte_range(std::string range); + static ByteRange parse_byte_range(std::string range); private: // data std::string full_url;