Fix compilation errors with the cookies feature (#22)

* Fix compilation errors with the cookies feature
This commit is contained in:
Tom Forbes
2019-10-30 10:51:06 +00:00
committed by Martin Algesten
parent e9ca3b26d5
commit 594340a096
3 changed files with 26 additions and 16 deletions

View File

@@ -10,7 +10,6 @@ jobs:
matrix: matrix:
feature: feature:
- charset - charset
- tls
- cookies - cookies
env: env:
RUST_BACKTRACE: "1" RUST_BACKTRACE: "1"
@@ -25,4 +24,4 @@ jobs:
uses: actions-rs/cargo@v1 uses: actions-rs/cargo@v1
with: with:
command: test command: test
args: --features json ${{ matrix.feature }} args: --no-default-features --features json tls ${{ matrix.feature }}

View File

@@ -25,6 +25,7 @@ fn agent_reuse_headers() {
assert_eq!(resp.header("X-Call").unwrap(), "2"); assert_eq!(resp.header("X-Call").unwrap(), "2");
} }
#[cfg(feature = "cookie")]
#[test] #[test]
fn agent_cookies() { fn agent_cookies() {
let agent = agent(); let agent = agent();
@@ -53,6 +54,7 @@ fn agent_cookies() {
} }
#[test] #[test]
#[cfg(feature = "tls")]
fn connection_reuse() { fn connection_reuse() {
use std::io::Read; use std::io::Read;
use std::time::Duration; use std::time::Duration;

View File

@@ -44,19 +44,10 @@ impl Unit {
// otherwise, no chunking. // otherwise, no chunking.
.unwrap_or(false); .unwrap_or(false);
let is_secure = url.scheme().eq_ignore_ascii_case("https");
let hostname = url.host_str().unwrap_or(DEFAULT_HOST).to_string();
let query_string = combine_query(&url, &req.query, mix_queries); let query_string = combine_query(&url, &req.query, mix_queries);
let cookie_headers: Vec<_> = { let cookie_headers: Vec<_> = extract_cookies(&req.agent, &url);
let state = req.agent.lock().unwrap();
match state.as_ref().map(|state| &state.jar) {
None => vec![],
Some(jar) => match_cookies(jar, &hostname, url.path(), is_secure),
}
};
let extra_headers = { let extra_headers = {
let mut extra = vec![]; let mut extra = vec![];
@@ -162,9 +153,7 @@ pub(crate) fn connect(
} }
// squirrel away cookies // squirrel away cookies
if cfg!(feature = "cookies") { save_cookies(&unit, &resp);
save_cookies(&unit, &resp);
}
// handle redirects // handle redirects
if resp.redirect() && req.redirects > 0 { if resp.redirect() && req.redirects > 0 {
@@ -210,6 +199,23 @@ pub(crate) fn connect(
Ok(resp) Ok(resp)
} }
#[cfg(feature = "cookie")]
fn extract_cookies(state: &std::sync::Mutex<Option<AgentState>>, url: &Url) -> Vec<Header> {
let state = state.lock().unwrap();
let is_secure = url.scheme().eq_ignore_ascii_case("https");
let hostname = url.host_str().unwrap_or(DEFAULT_HOST).to_string();
match state.as_ref().map(|state| &state.jar) {
None => vec![],
Some(jar) => match_cookies(jar, &hostname, url.path(), is_secure),
}
}
#[cfg(not(feature = "cookie"))]
fn extract_cookies(_state: &std::sync::Mutex<Option<AgentState>>, url: &Url) -> Vec<Header> {
vec![]
}
// TODO check so cookies can't be set for tld:s // TODO check so cookies can't be set for tld:s
#[cfg(feature = "cookie")] #[cfg(feature = "cookie")]
fn match_cookies<'a>(jar: &'a CookieJar, domain: &str, path: &str, is_secure: bool) -> Vec<Header> { fn match_cookies<'a>(jar: &'a CookieJar, domain: &str, path: &str, is_secure: bool) -> Vec<Header> {
@@ -314,6 +320,9 @@ fn send_prelude(unit: &Unit, stream: &mut Stream, redir: bool) -> IoResult<()> {
Ok(()) Ok(())
} }
#[cfg(not(feature = "cookie"))]
fn save_cookies(_unit: &Unit, _resp: &Response) {}
/// Investigate a response for "Set-Cookie" headers. /// Investigate a response for "Set-Cookie" headers.
#[cfg(feature = "cookie")] #[cfg(feature = "cookie")]
fn save_cookies(unit: &Unit, resp: &Response) { fn save_cookies(unit: &Unit, resp: &Response) {