aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/protocols/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net/protocols/mod.rs')
-rw-r--r--components/net/protocols/mod.rs14
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),