diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2021-07-29 10:18:46 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2021-08-05 15:57:56 +0300 |
commit | 3ccb28ba233abd2af9f28d70e74a7369e9274e8c (patch) | |
tree | 99282713dd952f5aabaec804bd2fe58d0789f9f0 | |
parent | b60805efcc7f6ddbdb7589c49cf78f8dc8d01ba9 (diff) |
reqwest: Switch from hyperx to headers
The maintainer of hyperx has kind of special opinions and doesn't want
to play well with the rest of the ecosystem, see
https://github.com/dekellum/hyperx/pull/33 .
This currently causes cargo outdated to fail because of suboptimal
dependencies.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/159
-rw-r--r-- | net/reqwest/Cargo.toml | 2 | ||||
-rw-r--r-- | net/reqwest/src/reqwesthttpsrc/imp.rs | 69 |
2 files changed, 34 insertions, 37 deletions
diff --git a/net/reqwest/Cargo.toml b/net/reqwest/Cargo.toml index 37f69a0ab..7e49c4f0f 100644 --- a/net/reqwest/Cargo.toml +++ b/net/reqwest/Cargo.toml @@ -11,7 +11,7 @@ edition = "2018" url = "2.1" reqwest = { version = "0.11", features = ["cookies", "gzip"] } futures = "0.3" -hyperx = "1.0" +headers = "0.3" mime = "0.3" gst = { package = "gstreamer", version = "0.17" } gst-base = { package = "gstreamer-base", version = "0.17" } diff --git a/net/reqwest/src/reqwesthttpsrc/imp.rs b/net/reqwest/src/reqwesthttpsrc/imp.rs index 7c58e26f0..76990feb6 100644 --- a/net/reqwest/src/reqwesthttpsrc/imp.rs +++ b/net/reqwest/src/reqwesthttpsrc/imp.rs @@ -338,12 +338,9 @@ impl ReqwestHttpSrc { start: u64, stop: Option<u64>, ) -> Result<State, Option<gst::ErrorMessage>> { - use hyperx::header::{ - qitem, AcceptEncoding, AcceptRanges, ByteRangeSpec, Connection, ContentLength, - ContentRange, ContentRangeSpec, ContentType, Cookie, Encoding, Range, RangeUnit, - TypedHeaders, UserAgent, - }; - use reqwest::header::HeaderMap; + use headers::{Connection, ContentLength, ContentRange, HeaderMapExt, Range, UserAgent}; + use reqwest::header::{self, HeaderMap, HeaderName, HeaderValue}; + use std::str::FromStr; gst_debug!(CAT, obj: src, "Creating new request for {}", uri); @@ -358,30 +355,32 @@ impl ReqwestHttpSrc { let mut headers = HeaderMap::new(); if settings.keep_alive { - headers.encode(&Connection::keep_alive()); + headers.typed_insert(Connection::keep_alive()); } else { - headers.encode(&Connection::close()); + headers.typed_insert(Connection::close()); } match (start != 0, stop) { (false, None) => (), (true, None) => { - headers.encode(&Range::Bytes(vec![ByteRangeSpec::AllFrom(start)])); + headers.typed_insert(Range::bytes(start..).unwrap()); } (_, Some(stop)) => { - headers.encode(&Range::Bytes(vec![ByteRangeSpec::FromTo(start, stop - 1)])); + headers.typed_insert(Range::bytes(start..stop).unwrap()); } } - headers.encode(&UserAgent::new(settings.user_agent)); + headers.typed_insert(UserAgent::from_str(&settings.user_agent).unwrap()); if !settings.compress { // Compression is the default - headers.encode(&AcceptEncoding(vec![qitem(Encoding::Identity)])); + headers.insert( + header::ACCEPT_ENCODING, + HeaderValue::from_str("identity").unwrap(), + ); }; if let Some(ref extra_headers) = settings.extra_headers { - use reqwest::header::{HeaderName, HeaderValue}; use std::convert::TryFrom; for (field, value) in extra_headers.iter() { @@ -447,20 +446,14 @@ impl ReqwestHttpSrc { } if !settings.cookies.is_empty() { - let mut cookies = Cookie::new(); - for cookie in settings.cookies { - let mut split = cookie.splitn(2, '='); - let key = split.next(); - let value = split.next(); - if let (Some(key), Some(value)) = (key, value) { - cookies.append(String::from(key), String::from(value)); - } - } - headers.encode(&cookies); + headers.insert( + header::COOKIE, + HeaderValue::from_str(&settings.cookies.join("; ")).unwrap(), + ); } if settings.iradio_mode { - headers.append("icy-metadata", "1".parse().unwrap()); + headers.insert("icy-metadata", "1".parse().unwrap()); } // Add all headers for the request here @@ -529,19 +522,19 @@ impl ReqwestHttpSrc { } let headers = res.headers(); - let size = headers.decode().map(|ContentLength(cl)| cl + start).ok(); - - let accept_byte_ranges = if let Ok(AcceptRanges(ref ranges)) = headers.decode() { - ranges.iter().any(|u| *u == RangeUnit::Bytes) - } else { - false - }; + let size = headers + .typed_get::<ContentLength>() + .map(|ContentLength(cl)| cl + start); + + let accept_byte_ranges = headers + .get(header::ACCEPT_RANGES) + .map(|ranges| ranges == "bytes") + .unwrap_or(false); let seekable = size.is_some() && accept_byte_ranges; - let position = if let Ok(ContentRange(ContentRangeSpec::Bytes { - range: Some((range_start, _)), - .. - })) = headers.decode() + let position = if let Some((range_start, _)) = headers + .typed_get::<ContentRange>() + .and_then(|range| range.bytes_range()) { range_start } else { @@ -565,7 +558,11 @@ impl ReqwestHttpSrc { .build() }); - if let Ok(ContentType(ref content_type)) = headers.decode() { + if let Some(content_type) = headers + .get(header::CONTENT_TYPE) + .and_then(|content_type| content_type.to_str().ok()) + .and_then(|content_type| mime::Mime::from_str(content_type).ok()) + { gst_debug!(CAT, obj: src, "Got content type {}", content_type); if let Some(ref mut caps) = caps { let caps = caps.get_mut().unwrap(); |