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:
feature:
- charset
- tls
- cookies
env:
RUST_BACKTRACE: "1"
@@ -25,4 +24,4 @@ jobs:
uses: actions-rs/cargo@v1
with:
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");
}
#[cfg(feature = "cookie")]
#[test]
fn agent_cookies() {
let agent = agent();
@@ -53,6 +54,7 @@ fn agent_cookies() {
}
#[test]
#[cfg(feature = "tls")]
fn connection_reuse() {
use std::io::Read;
use std::time::Duration;

View File

@@ -44,19 +44,10 @@ impl Unit {
// otherwise, no chunking.
.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 cookie_headers: Vec<_> = {
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 cookie_headers: Vec<_> = extract_cookies(&req.agent, &url);
let extra_headers = {
let mut extra = vec![];
@@ -162,9 +153,7 @@ pub(crate) fn connect(
}
// squirrel away cookies
if cfg!(feature = "cookies") {
save_cookies(&unit, &resp);
}
// handle redirects
if resp.redirect() && req.redirects > 0 {
@@ -210,6 +199,23 @@ pub(crate) fn connect(
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
#[cfg(feature = "cookie")]
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(())
}
#[cfg(not(feature = "cookie"))]
fn save_cookies(_unit: &Unit, _resp: &Response) {}
/// Investigate a response for "Set-Cookie" headers.
#[cfg(feature = "cookie")]
fn save_cookies(unit: &Unit, resp: &Response) {