From 17699dca800bece6b70357077285e2c4d278c8de Mon Sep 17 00:00:00 2001 From: Dave King Date: Fri, 25 Apr 2014 01:08:07 +0100 Subject: [PATCH 1/3] Accept generic Stream not specific TcpStream Also remove remote_addr which doesn't exist on UdpSockets --- src/http/server/request.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/http/server/request.rs b/src/http/server/request.rs index 65e790d..b5764a0 100644 --- a/src/http/server/request.rs +++ b/src/http/server/request.rs @@ -201,7 +201,6 @@ fn test_read_request_line() { /// An HTTP request sent to the server. pub struct Request { /// The originating IP address of the request. - pub remote_addr: Option, /// The host name and IP address that the request was sent to; this must always be specified for /// HTTP/1.1 requests (or the request will be rejected), but for HTTP/1.0 requests the Host @@ -295,12 +294,11 @@ impl fmt::Show for RequestUri { impl Request { /// Get a response from an open socket. - pub fn load(stream: &mut BufferedStream) -> (Box, Result<(), status::Status>) { + pub fn load(stream: &mut BufferedStream) -> (Box, Result<(), status::Status>) { let mut buffer = RequestBuffer::new(stream); // Start out with dummy values let mut request = box Request { - remote_addr: buffer.stream.wrapped.peer_name().ok(), headers: box headers::request::HeaderCollection::new(), body: String::new(), method: Options, From 57b52d4fd6b82974711ee171bdee68c205b73dc5 Mon Sep 17 00:00:00 2001 From: Dave King Date: Fri, 25 Apr 2014 01:10:02 +0100 Subject: [PATCH 2/3] Export memstream always not just in test very useful! --- src/http/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/http/lib.rs b/src/http/lib.rs index 95032e2..e04d80c 100644 --- a/src/http/lib.rs +++ b/src/http/lib.rs @@ -32,6 +32,5 @@ pub mod rfc2616; #[path = "generated/status.rs"] pub mod status; // Getting an error? It's generated; use ``make`` or see the ``Makefile`` -/// TODO: submit upstream -#[cfg(test)] + pub mod memstream; From 3241d0d185886ec18ac92bc05d760e2260199e03 Mon Sep 17 00:00:00 2001 From: Dave King Date: Fri, 2 May 2014 00:40:32 +0100 Subject: [PATCH 3/3] Separate BufferedStream and remote_addr Also keep memstream for tests --- src/http/lib.rs | 3 ++- src/http/server/mod.rs | 3 ++- src/http/server/request.rs | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/http/lib.rs b/src/http/lib.rs index e04d80c..95032e2 100644 --- a/src/http/lib.rs +++ b/src/http/lib.rs @@ -32,5 +32,6 @@ pub mod rfc2616; #[path = "generated/status.rs"] pub mod status; // Getting an error? It's generated; use ``make`` or see the ``Makefile`` - +/// TODO: submit upstream +#[cfg(test)] pub mod memstream; diff --git a/src/http/server/mod.rs b/src/http/server/mod.rs index 72436a7..464d3a1 100644 --- a/src/http/server/mod.rs +++ b/src/http/server/mod.rs @@ -60,7 +60,8 @@ pub trait Server: Send + Clone { debug!("accepted connection"); loop { // A keep-alive loop, condition at end let time_spawned = precise_time_ns(); - let (request, err_status) = Request::load(&mut stream); + let remote_addr = stream.wrapped.peer_name().ok(); + let (request, err_status) = Request::load(&mut stream, remote_addr); let time_request_made = precise_time_ns(); let mut response = box ResponseWriter::new(&mut stream, request); let time_response_made = precise_time_ns(); diff --git a/src/http/server/request.rs b/src/http/server/request.rs index b5764a0..422df2d 100644 --- a/src/http/server/request.rs +++ b/src/http/server/request.rs @@ -201,6 +201,7 @@ fn test_read_request_line() { /// An HTTP request sent to the server. pub struct Request { /// The originating IP address of the request. + pub remote_addr: Option, /// The host name and IP address that the request was sent to; this must always be specified for /// HTTP/1.1 requests (or the request will be rejected), but for HTTP/1.0 requests the Host @@ -294,12 +295,13 @@ impl fmt::Show for RequestUri { impl Request { /// Get a response from an open socket. - pub fn load(stream: &mut BufferedStream) -> (Box, Result<(), status::Status>) { + pub fn load(stream: &mut BufferedStream, remote_addr: Option) -> (Box, Result<(), status::Status>) { let mut buffer = RequestBuffer::new(stream); // Start out with dummy values let mut request = box Request { headers: box headers::request::HeaderCollection::new(), + remote_addr: remote_addr, body: String::new(), method: Options, request_uri: Star,