diff options
author | Shaun Taheri <shaun@advancedtelematic.com> | 2016-09-30 17:45:47 +0200 |
---|---|---|
committer | Shaun Taheri <shaun@advancedtelematic.com> | 2016-09-30 18:09:32 +0200 |
commit | f565bb104ed746f81cb5d6d2d2a51a89b3529faa (patch) | |
tree | b2b1e31857d21d2ba72b076ea464a956a52088b1 | |
parent | d2c2e2105078bd3e2487138019dd18a7dca5d78f (diff) | |
download | rvi_sota_client-f565bb104ed746f81cb5d6d2d2a51a89b3529faa.tar.gz |
Send HTTP Response when there is no ContentLength
-rw-r--r-- | src/http/auth_client.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/http/auth_client.rs b/src/http/auth_client.rs index 2e26464..7d10e5b 100644 --- a/src/http/auth_client.rs +++ b/src/http/auth_client.rs @@ -155,13 +155,14 @@ impl Handler<Stream> for AuthHandler { let latency = time::precise_time_ns() as f64 - started as f64; debug!("on_response latency: {}ms", (latency / 1e6) as u32); - self.resp_code = *resp.status(); if resp.status().is_redirection() { self.redirect_request(resp); Next::end() } else if let None = resp.headers().get::<ContentLength>() { + self.send_response(ResponseData { code: *resp.status(), body: Vec::new() }); Next::end() } else { + self.resp_code = *resp.status(); Next::read() } } @@ -170,19 +171,9 @@ impl Handler<Stream> for AuthHandler { match io::copy(decoder, &mut self.resp_body) { Ok(0) => { debug!("on_response_readable body size: {}", self.resp_body.len()); - let resp = ResponseData { - code: self.resp_code, - body: mem::replace(&mut self.resp_body, Vec::new()) - }; - - if resp.code == StatusCode::Unauthorized || resp.code == StatusCode::Forbidden { - self.resp_tx.send(Response::Error(Error::HttpAuth(resp))); - } else if resp.code.is_success() { - self.resp_tx.send(Response::Success(resp)); - } else { - self.resp_tx.send(Response::Failed(resp)); - } - + let code = self.resp_code.clone(); + let body = mem::replace(&mut self.resp_body, Vec::new()); + self.send_response(ResponseData { code: code, body: body }); Next::end() } @@ -212,6 +203,16 @@ impl Handler<Stream> for AuthHandler { } impl AuthHandler { + fn send_response(&mut self, resp: ResponseData) { + if resp.code == StatusCode::Unauthorized || resp.code == StatusCode::Forbidden { + self.resp_tx.send(Response::Error(Error::HttpAuth(resp))); + } else if resp.code.is_success() { + self.resp_tx.send(Response::Success(resp)); + } else { + self.resp_tx.send(Response::Failed(resp)); + } + } + fn redirect_request(&mut self, resp: HyperResponse) { match resp.headers().get::<Location>() { Some(&Location(ref loc)) => self.req.url.join(loc).map(|url| { |