Return the remote socket address when accepting a connection (#227)
feat!: Return the socket address when accepting a connection BREAKING CHANGE: The signature for Bearer.accept_tcp now returns the bearer, and the address that connected. This can, for example, be used to implement allow and deny lists for accepting or rejecting incoming connections. * Return the remote address from accept_unix * cargo fmt * Fix comment formatting
This commit is contained in:
parent
1bf9e079b3
commit
9adfe442a0
3 changed files with 10 additions and 9 deletions
|
|
@ -460,13 +460,14 @@ mod tests {
|
||||||
message: Vec<u8>,
|
message: Vec<u8>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
// NOTE: this test may fail but it is impossible to see this happening in normal
|
// NOTE: this test may fail but it is impossible to see this happening in normal
|
||||||
// condition. we are generating 32 random bytes of public key and
|
// condition. We are generating 32 random bytes of public key and
|
||||||
// 64 random bytes of signature with an randomly generated message
|
// 64 random bytes of signature with an randomly generated message
|
||||||
// of a random number of bytes in. If the message were empty, the
|
// of a random number of bytes in. If the message were empty, the
|
||||||
// probability to have a signature that matches the verify key
|
// probability to have a signature that matches the verify key
|
||||||
|
|
||||||
// would still be 1 out of 2^96.
|
// would still be 1 out of 2^96.
|
||||||
//
|
//
|
||||||
// if this test fails and it is not a bug, go buy a lottery ticket.
|
// if this test fails and it is not a bug, go buy a lottery ticket.
|
||||||
!public_key.verify(message, &signature)
|
!public_key.verify(message, &signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -123,11 +123,11 @@ impl Bearer {
|
||||||
Ok(Bearer::Tcp(bearer))
|
Ok(Bearer::Tcp(bearer))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn accept_tcp(server: TcpListener) -> Result<Self, std::io::Error> {
|
pub fn accept_tcp(server: TcpListener) -> Result<(Self, SocketAddr), std::io::Error> {
|
||||||
let (bearer, _) = server.accept().unwrap();
|
let (bearer, remote_addr) = server.accept().unwrap();
|
||||||
bearer.set_nodelay(true)?;
|
bearer.set_nodelay(true)?;
|
||||||
|
|
||||||
Ok(Bearer::Tcp(bearer))
|
Ok((Bearer::Tcp(bearer), remote_addr))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_family = "unix")]
|
#[cfg(target_family = "unix")]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ fn setup_passive_muxer<const P: u16>() -> JoinHandle<StdPlexer> {
|
||||||
let server = TcpListener::bind(SocketAddrV4::new(Ipv4Addr::LOCALHOST, P)).unwrap();
|
let server = TcpListener::bind(SocketAddrV4::new(Ipv4Addr::LOCALHOST, P)).unwrap();
|
||||||
info!("listening for connections on port {}", P);
|
info!("listening for connections on port {}", P);
|
||||||
|
|
||||||
let bearer = Bearer::accept_tcp(server).unwrap();
|
let (bearer, _) = Bearer::accept_tcp(server).unwrap();
|
||||||
|
|
||||||
StdPlexer::new(bearer)
|
StdPlexer::new(bearer)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue