@@ -43,7 +43,7 @@ namespace snapshots
4343 struct ContentRangeHeader
4444 {
4545 size_t range_start;
46- size_t range_end ;
46+ size_t inclusive_range_end ;
4747 size_t total_size;
4848 };
4949
@@ -93,7 +93,7 @@ namespace snapshots
9393
9494 {
9595 const auto [p, ec] = std::from_chars (
96- range_end.begin (), range_end.end (), parsed_values.range_end );
96+ range_end.begin (), range_end.end (), parsed_values.inclusive_range_end );
9797 if (ec != std::errc ())
9898 {
9999 throw std::runtime_error (fmt::format (
@@ -142,6 +142,7 @@ namespace snapshots
142142 constexpr size_t range_size = 4L * 1024 * 1024 ;
143143 size_t range_start = 0 ;
144144 size_t range_end = range_size;
145+ size_t inclusive_range_end = range_end - 1 ;
145146 bool fetched_all = false ;
146147
147148 auto process_partial_response =
@@ -160,26 +161,29 @@ namespace snapshots
160161
161162 // The server may give us _less_ than we requested (since they know
162163 // where the file ends), but should never give us more
163- if (content_range.range_end > range_end )
164+ if (content_range.inclusive_range_end > inclusive_range_end )
164165 {
165166 throw std::runtime_error (fmt::format (
166167 " Unexpected range response. Requested bytes {}-{}, received "
167168 " range ending at {}" ,
168169 range_start,
169- range_end ,
170- content_range.range_end ));
170+ inclusive_range_end ,
171+ content_range.inclusive_range_end ));
171172 }
172173
174+ const auto content_range_exclusive_range_end =
175+ content_range.inclusive_range_end + 1 ;
176+
173177 const auto range_size =
174- content_range. range_end - content_range.range_start ;
178+ content_range_exclusive_range_end - content_range.range_start ;
175179 LOG_TRACE_FMT (
176180 " Received {}-byte chunk from {}. Now have {}/{}" ,
177181 range_size,
178182 request.get_url (),
179- content_range. range_end ,
183+ content_range_exclusive_range_end ,
180184 content_range.total_size );
181185
182- if (content_range. range_end == content_range.total_size )
186+ if (content_range_exclusive_range_end == content_range.total_size )
183187 {
184188 fetched_all = true ;
185189 }
@@ -188,6 +192,7 @@ namespace snapshots
188192 // Advance range for next request
189193 range_start = range_end;
190194 range_end = range_start + range_size;
195+ inclusive_range_end = range_end - 1 ;
191196 }
192197 };
193198
@@ -203,7 +208,8 @@ namespace snapshots
203208
204209 ccf::curl::UniqueSlist headers;
205210 headers.append (
206- " Range" , fmt::format (" bytes={}-{}" , range_start, range_end));
211+ ccf::http::headers::RANGE,
212+ fmt::format (" bytes={}-{}" , range_start, inclusive_range_end));
207213
208214 CURLcode curl_response = CURLE_FAILED_INIT;
209215 long status_code = 0 ;
@@ -281,7 +287,8 @@ namespace snapshots
281287 {
282288 ccf::curl::UniqueSlist headers;
283289 headers.append (
284- " Range" , fmt::format (" bytes={}-{}" , range_start, range_end));
290+ ccf::http::headers::RANGE,
291+ fmt::format (" bytes={}-{}" , range_start, inclusive_range_end));
285292
286293 std::unique_ptr<ccf::curl::CurlRequest> snapshot_range_request;
287294 CURLcode curl_response = CURLE_OK;
0 commit comments