From 801ad18a891544a34bedf050f9be5c13ae550047 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Mon, 25 May 2020 17:27:35 +0400 Subject: [PATCH] ByteRange::resolve() --- src/server/byte_range.cpp | 14 ++++++++++++++ src/server/byte_range.h | 1 + src/server/response.cpp | 17 +---------------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/server/byte_range.cpp b/src/server/byte_range.cpp index 14c2c33ea..e00238af6 100644 --- a/src/server/byte_range.cpp +++ b/src/server/byte_range.cpp @@ -62,4 +62,18 @@ ByteRange ByteRange::parse(std::string rangeStr) return byteRange; } +ByteRange ByteRange::resolve(int64_t contentSize) const +{ + if ( kind() == NONE ) + return ByteRange(RESOLVED_FULL_CONTENT, 0, contentSize-1); + + const int64_t resolved_first = first() < 0 + ? std::max(int64_t(0), contentSize + first()) + : first(); + + const int64_t resolved_last = std::min(contentSize-1, last()); + + return ByteRange(RESOLVED_PARTIAL_CONTENT, resolved_first, resolved_last); +} + } // namespace kiwix diff --git a/src/server/byte_range.h b/src/server/byte_range.h index 7bdbbc090..c2c15af7e 100644 --- a/src/server/byte_range.h +++ b/src/server/byte_range.h @@ -53,6 +53,7 @@ class ByteRange int64_t length() const { return last_ + 1 - first_; } static ByteRange parse(std::string rangeStr); + ByteRange resolve(int64_t contentSize) const; private: // data Kind kind_; diff --git a/src/server/response.cpp b/src/server/response.cpp index 3e721b3ae..7b1e8f803 100644 --- a/src/server/response.cpp +++ b/src/server/response.cpp @@ -39,21 +39,6 @@ bool is_compressible_mime_type(const std::string& mimeType) || mimeType.find("application/json") != string::npos; } -ByteRange resolve_byte_range(const kiwix::Entry& entry, ByteRange range) -{ - const int64_t entrySize = entry.getSize(); - - if ( range.kind() == ByteRange::NONE ) - return ByteRange(ByteRange::RESOLVED_FULL_CONTENT, 0, entrySize-1); - - const int64_t resolved_first = range.first() < 0 - ? std::max(int64_t(0), entrySize + range.first()) - : range.first(); - - const int64_t resolved_last = std::min(entrySize-1, range.last()); - - return ByteRange(ByteRange::RESOLVED_PARTIAL_CONTENT, resolved_first, resolved_last); -} } // unnamed namespace @@ -338,7 +323,7 @@ void Response::set_entry(const Entry& entry, const RequestContext& request) { set_content(content); set_compress(true); } else { - m_byteRange = resolve_byte_range(entry, request.get_range()); + m_byteRange = request.get_range().resolve(entry.getSize()); } }