Fix compilation errors with the cookies feature (#22)
* Fix compilation errors with the cookies feature
This commit is contained in:
committed by
Martin Algesten
parent
e9ca3b26d5
commit
594340a096
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
@@ -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 }}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
35
src/unit.rs
35
src/unit.rs
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user