File tree Expand file tree Collapse file tree 3 files changed +20
-2
lines changed Expand file tree Collapse file tree 3 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -309,6 +309,18 @@ impl<State> Request<State> {
309
309
pub fn is_empty ( & self ) -> Option < bool > {
310
310
Some ( self . request . len ( ) ? == 0 )
311
311
}
312
+
313
+ /// Peer address of the underlying transport
314
+ #[ must_use]
315
+ pub fn peer_addr ( & self ) -> Option < & str > {
316
+ self . request . peer_addr ( )
317
+ }
318
+
319
+ /// Local address of the underlying transport
320
+ #[ must_use]
321
+ pub fn local_addr ( & self ) -> Option < & str > {
322
+ self . request . local_addr ( )
323
+ }
312
324
}
313
325
314
326
impl < State > AsMut < http:: Request > for Request < State > {
Original file line number Diff line number Diff line change @@ -296,8 +296,12 @@ impl<State: Send + Sync + 'static> Server<State> {
296
296
while let Some ( stream) = incoming. next ( ) . await {
297
297
let stream = stream?;
298
298
let this = self . clone ( ) ;
299
+ let local_addr = stream. local_addr ( ) . ok ( ) ;
300
+ let peer_addr = stream. peer_addr ( ) . ok ( ) ;
299
301
task:: spawn ( async move {
300
- let res = async_h1:: accept ( stream, |req| async {
302
+ let res = async_h1:: accept ( stream, |mut req| async {
303
+ req. set_local_addr ( local_addr) ;
304
+ req. set_peer_addr ( peer_addr) ;
301
305
let res = this. respond ( req) . await ;
302
306
let res = res. map_err ( |_| io:: Error :: from ( io:: ErrorKind :: Other ) ) ?;
303
307
Ok ( res)
Original file line number Diff line number Diff line change @@ -12,8 +12,10 @@ fn hello_world() -> Result<(), http_types::Error> {
12
12
let port = test_utils:: find_port ( ) . await ;
13
13
let server = task:: spawn ( async move {
14
14
let mut app = tide:: new ( ) ;
15
- app. at ( "/" ) . get ( |mut req : Request < ( ) > | async move {
15
+ app. at ( "/" ) . get ( move |mut req : Request < ( ) > | async move {
16
16
assert_eq ! ( req. body_string( ) . await . unwrap( ) , "nori" . to_string( ) ) ;
17
+ assert ! ( req. local_addr( ) . unwrap( ) . contains( & port. to_string( ) ) ) ;
18
+ assert ! ( req. peer_addr( ) . is_some( ) ) ;
17
19
let res = Response :: new ( StatusCode :: Ok ) . body_string ( "says hello" . to_string ( ) ) ;
18
20
Ok ( res)
19
21
} ) ;
You can’t perform that action at this time.
0 commit comments