@@ -4738,19 +4738,11 @@ get_range_offset_and_length(Range range, size_t content_length) {
47384738 static_cast <size_t >(range.second - range.first ) + 1 );
47394739}
47404740
4741- inline std::pair<size_t , size_t >
4742- get_range_offset_and_length (const Request &req, size_t content_length,
4743- size_t index) {
4744- return get_range_offset_and_length (req.ranges [index], content_length);
4745- }
4746-
4747- inline std::string
4748- make_content_range_header_field (const std::pair<ssize_t , ssize_t > &range,
4749- size_t content_length) {
4741+ inline std::string make_content_range_header_field (
4742+ const std::pair<size_t , size_t > &offset_and_length, size_t content_length) {
47504743
4751- auto ret = get_range_offset_and_length (range, content_length);
4752- auto st = ret.first ;
4753- auto ed = (std::min)(st + ret.second - 1 , content_length - 1 );
4744+ auto st = offset_and_length.first ;
4745+ auto ed = (std::min)(st + offset_and_length.second - 1 , content_length - 1 );
47544746
47554747 std::string field = " bytes " ;
47564748 field += std::to_string (st);
@@ -4777,16 +4769,18 @@ bool process_multipart_ranges_data(const Request &req, Response &res,
47774769 ctoken (" \r\n " );
47784770 }
47794771
4772+ auto offset_and_length =
4773+ get_range_offset_and_length (req.ranges [i], res.content_length_ );
4774+
47804775 ctoken (" Content-Range: " );
4781- const auto &range = req. ranges [i];
4782- stoken ( make_content_range_header_field (range, res.content_length_ ));
4776+ stoken ( make_content_range_header_field (offset_and_length,
4777+ res.content_length_ ));
47834778 ctoken (" \r\n " );
47844779 ctoken (" \r\n " );
47854780
4786- auto ret = get_range_offset_and_length (req, res.content_length_ , i);
4787- auto offset = ret.first ;
4788- auto length = ret.second ;
4789- if (!content (offset, length)) { return false ; }
4781+ if (!content (offset_and_length.first , offset_and_length.second )) {
4782+ return false ;
4783+ }
47904784 ctoken (" \r\n " );
47914785 }
47924786
@@ -6043,12 +6037,12 @@ Server::write_content_with_provider(Stream &strm, const Request &req,
60436037 return detail::write_content (strm, res.content_provider_ , 0 ,
60446038 res.content_length_ , is_shutting_down);
60456039 } else if (req.ranges .size () == 1 ) {
6046- auto ret =
6047- detail::get_range_offset_and_length ( req, res.content_length_ , 0 );
6048- auto offset = ret. first ;
6049- auto length = ret. second ;
6050- return detail::write_content (strm, res. content_provider_ , offset, length ,
6051- is_shutting_down);
6040+ auto offset_and_length = detail::get_range_offset_and_length (
6041+ req. ranges [ 0 ] , res.content_length_ );
6042+
6043+ return detail::write_content (strm, res. content_provider_ ,
6044+ offset_and_length. first ,
6045+ offset_and_length. second , is_shutting_down);
60526046 } else {
60536047 return detail::write_multipart_ranges_data (
60546048 strm, req, res, boundary, content_type, is_shutting_down);
@@ -6463,12 +6457,13 @@ inline void Server::apply_ranges(const Request &req, Response &res,
64636457 if (req.ranges .empty ()) {
64646458 length = res.content_length_ ;
64656459 } else if (req.ranges .size () == 1 ) {
6466- auto ret =
6467- detail::get_range_offset_and_length (req, res.content_length_ , 0 );
6468- length = ret.second ;
6460+ auto offset_and_length = detail::get_range_offset_and_length (
6461+ req.ranges [0 ], res.content_length_ );
6462+
6463+ length = offset_and_length.second ;
64696464
64706465 auto content_range = detail::make_content_range_header_field (
6471- req. ranges [ 0 ] , res.content_length_ );
6466+ offset_and_length , res.content_length_ );
64726467 res.set_header (" Content-Range" , content_range);
64736468 } else {
64746469 length = detail::get_multipart_ranges_data_length (req, res, boundary,
@@ -6491,14 +6486,15 @@ inline void Server::apply_ranges(const Request &req, Response &res,
64916486 if (req.ranges .empty ()) {
64926487 ;
64936488 } else if (req.ranges .size () == 1 ) {
6489+ auto offset_and_length =
6490+ detail::get_range_offset_and_length (req.ranges [0 ], res.body .size ());
6491+ auto offset = offset_and_length.first ;
6492+ auto length = offset_and_length.second ;
6493+
64946494 auto content_range = detail::make_content_range_header_field (
6495- req. ranges [ 0 ] , res.body .size ());
6495+ offset_and_length , res.body .size ());
64966496 res.set_header (" Content-Range" , content_range);
64976497
6498- auto ret = detail::get_range_offset_and_length (req, res.body .size (), 0 );
6499- auto offset = ret.first ;
6500- auto length = ret.second ;
6501-
65026498 if (offset < res.body .size ()) {
65036499 res.body = res.body .substr (offset, length);
65046500 } else {
0 commit comments