diff options
Diffstat (limited to 'components/net/protocols/mod.rs')
-rw-r--r-- | components/net/protocols/mod.rs | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/components/net/protocols/mod.rs b/components/net/protocols/mod.rs index 02b8f65614b..51d43ab9d2a 100644 --- a/components/net/protocols/mod.rs +++ b/components/net/protocols/mod.rs @@ -106,19 +106,15 @@ pub fn range_not_satisfiable_error(response: &mut Response) { } /// Get the range bounds if the `Range` header is present. -pub fn get_range_request_bounds(range: Option<Range>) -> RangeRequestBounds { +pub fn get_range_request_bounds(range: Option<Range>, len: u64) -> RangeRequestBounds { if let Some(ref range) = range { - let (start, end) = match range - .iter() - .collect::<Vec<(Bound<u64>, Bound<u64>)>>() - .first() - { - Some(&(Bound::Included(start), Bound::Unbounded)) => (start, None), - Some(&(Bound::Included(start), Bound::Included(end))) => { + let (start, end) = match range.satisfiable_ranges(len).next() { + Some((Bound::Included(start), Bound::Unbounded)) => (start, None), + Some((Bound::Included(start), Bound::Included(end))) => { // `end` should be less or equal to `start`. (start, Some(i64::max(start as i64, end as i64))) }, - Some(&(Bound::Unbounded, Bound::Included(offset))) => { + Some((Bound::Unbounded, Bound::Included(offset))) => { return RangeRequestBounds::Pending(offset); }, _ => (0, None), |