Skip to content

Commit a19100e

Browse files
committed
use strings instead of SocketAddr
in order to accommodate future filesystem sockets
1 parent 479ab6e commit a19100e

File tree

2 files changed

+24
-37
lines changed

2 files changed

+24
-37
lines changed

src/request.rs

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use async_std::sync;
33

44
use std::convert::TryInto;
55
use std::mem;
6-
use std::net::SocketAddr;
76
use std::pin::Pin;
87
use std::task::{Context, Poll};
98

@@ -37,8 +36,8 @@ pin_project_lite::pin_project! {
3736
#[pin]
3837
body: Body,
3938
local: TypeMap,
40-
local_addr: Option<SocketAddr>,
41-
peer_addr: Option<SocketAddr>,
39+
local_addr: Option<String>,
40+
peer_addr: Option<String>,
4241
}
4342
}
4443

@@ -61,39 +60,34 @@ impl Request {
6160
}
6261

6362
/// Get the peer socket address for the underlying transport, if appropriate
64-
pub fn peer_addr(&self) -> Option<SocketAddr> {
65-
self.peer_addr
63+
pub fn peer_addr(&self) -> Option<&str> {
64+
self.peer_addr.as_deref()
6665
}
6766

6867
/// Get the local socket address for the underlying transport, if appropriate
69-
pub fn local_addr(&self) -> Option<SocketAddr> {
70-
self.local_addr
68+
pub fn local_addr(&self) -> Option<&str> {
69+
self.local_addr.as_deref()
7170
}
7271

7372
/// Get the remote address for this request.
74-
pub fn remote(&self) -> Option<String> {
75-
self.forwarded_for()
76-
.or_else(|| self.peer_addr.map(|peer| peer.to_string()))
73+
pub fn remote(&self) -> Option<&str> {
74+
self.forwarded_for().or(self.peer_addr())
7775
}
7876

7977
/// Parses the Forwarded or X-Forwarded-For headers.
8078
/// The returned String will either be an IP address or a domain and an optional port.
81-
pub fn forwarded_for(&self) -> Option<String> {
79+
pub fn forwarded_for(&self) -> Option<&str> {
8280
if let Some(header) = self.header(&"Forwarded".parse().unwrap()) {
8381
header.as_str().split(";").find_map(|key_equals_value| {
8482
let parts = key_equals_value.split("=").collect::<Vec<_>>();
8583
if parts.len() == 2 && parts[0].eq_ignore_ascii_case("for") {
86-
Some(String::from(parts[1]))
84+
Some(parts[1])
8785
} else {
8886
None
8987
}
9088
})
9189
} else if let Some(header) = self.header(&"X-Forwarded-For".parse().unwrap()) {
92-
header
93-
.as_str()
94-
.split(",")
95-
.next()
96-
.map(|client| String::from(client))
90+
header.as_str().split(",").next()
9791
} else {
9892
None
9993
}
@@ -618,11 +612,8 @@ mod tests {
618612
request.peer_addr = Some("127.0.0.1:8000".parse().unwrap());
619613
set_forwarded(&mut request, "127.0.0.1:8001");
620614

621-
assert_eq!(
622-
request.forwarded_for(),
623-
Some(String::from("127.0.0.1:8001"))
624-
);
625-
assert_eq!(request.remote(), Some(String::from("127.0.0.1:8001")));
615+
assert_eq!(request.forwarded_for(), Some("127.0.0.1:8001"));
616+
assert_eq!(request.remote(), Some("127.0.0.1:8001"));
626617
}
627618

628619
#[test]
@@ -635,7 +626,7 @@ mod tests {
635626
.unwrap();
636627

637628
assert_eq!(request.forwarded_for(), None);
638-
assert_eq!(request.remote(), Some(String::from("127.0.0.1:8000")));
629+
assert_eq!(request.remote(), Some("127.0.0.1:8000"));
639630
}
640631

641632
#[test]
@@ -644,12 +635,8 @@ mod tests {
644635
request.peer_addr = Some("127.0.0.1:8000".parse().unwrap());
645636
set_x_forwarded_for(&mut request, "forwarded-host.com");
646637

647-
assert_eq!(
648-
request.forwarded_for(),
649-
Some(String::from("forwarded-host.com"))
650-
);
651-
652-
assert_eq!(request.remote(), Some(String::from("forwarded-host.com")));
638+
assert_eq!(request.forwarded_for(), Some("forwarded-host.com"));
639+
assert_eq!(request.remote(), Some("forwarded-host.com"));
653640
}
654641

655642
#[test]
@@ -664,7 +651,7 @@ mod tests {
664651
}
665652

666653
#[test]
667-
fn test_remote_and_forwarded_for_falling_back_to_peer_addr() {
654+
fn test_remote_falling_back_to_peer_addr() {
668655
let mut request = build_test_request();
669656
request.peer_addr = Some("127.0.0.1:8000".parse().unwrap());
670657

src/response.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use async_std::sync;
33

44
use std::convert::TryInto;
55
use std::mem;
6-
use std::net::SocketAddr;
76
use std::pin::Pin;
87
use std::task::{Context, Poll};
98

@@ -40,8 +39,8 @@ pin_project_lite::pin_project! {
4039
#[pin]
4140
body: Body,
4241
local: TypeMap,
43-
local_addr: Option<SocketAddr>,
44-
peer_addr: Option<SocketAddr>,
42+
local_addr: Option<String>,
43+
peer_addr: Option<String>,
4544
}
4645
}
4746

@@ -337,13 +336,13 @@ impl Response {
337336
}
338337

339338
/// Get the peer socket address for the underlying transport, if appropriate
340-
pub fn peer_addr(&self) -> Option<SocketAddr> {
341-
self.peer_addr
339+
pub fn peer_addr(&self) -> Option<&str> {
340+
self.peer_addr.as_deref()
342341
}
343342

344343
/// Get the local socket address for the underlying transport, if appropriate
345-
pub fn local_addr(&self) -> Option<SocketAddr> {
346-
self.local_addr
344+
pub fn local_addr(&self) -> Option<&str> {
345+
self.local_addr.as_deref()
347346
}
348347

349348
/// Set the HTTP version.
@@ -540,3 +539,4 @@ impl<'a> IntoIterator for &'a mut Response {
540539
self.headers.iter_mut()
541540
}
542541
}
542+

0 commit comments

Comments
 (0)