@@ -65,7 +65,6 @@ pub fn host_port_pair(s: &str) -> Result<(&str, u16)> {
6565
6666/// Create a UDP socket and connect to `addr`
6767pub async fn udp_connect < A : ToSocketAddrs > ( addr : A , prefer_ipv6 : bool ) -> Result < UdpSocket > {
68-
6968 let ( socket_addr, bind_addr) ;
7069
7170 match prefer_ipv6 {
@@ -76,7 +75,7 @@ pub async fn udp_connect<A: ToSocketAddrs>(addr: A, prefer_ipv6: bool) -> Result
7675 SocketAddr :: V4 ( _) => "0.0.0.0:0" ,
7776 SocketAddr :: V6 ( _) => ":::0" ,
7877 } ;
79- } ,
78+ }
8079 true => {
8180 let all_host_addresses: Vec < SocketAddr > = lookup_host ( addr) . await ?. collect ( ) ;
8281
@@ -85,7 +84,7 @@ pub async fn udp_connect<A: ToSocketAddrs>(addr: A, prefer_ipv6: bool) -> Result
8584 Some ( socket_addr_ipv6) => {
8685 socket_addr = * socket_addr_ipv6;
8786 bind_addr = ":::0" ;
88- } ,
87+ }
8988 None => {
9089 let socket_addr_ipv4 = all_host_addresses. iter ( ) . find ( |x| x. is_ipv4 ( ) ) ;
9190 match socket_addr_ipv4 {
@@ -194,30 +193,42 @@ where
194193 Ok ( ( ) )
195194}
196195
197- pub fn generate_proxy_protocol_header ( s : & TcpStream , proxy_protocol : & str ) -> Result < Vec < u8 > , anyhow:: Error > {
196+ pub fn generate_proxy_protocol_header (
197+ s : & TcpStream ,
198+ proxy_protocol : & str ,
199+ ) -> Result < Vec < u8 > , anyhow:: Error > {
198200 let local_addr = s. local_addr ( ) ?;
199201 let remote_addr = s. peer_addr ( ) ?;
200202
201203 match proxy_protocol {
202204 "v1" => {
203205 let proto = if local_addr. is_ipv4 ( ) { "TCP4" } else { "TCP6" } ;
204206 let header = format ! (
205- "PROXY {} {} {} {} {}\r \n " ,
206- proto,
207- remote_addr. ip( ) ,
208- local_addr. ip( ) ,
209- remote_addr. port( ) ,
207+ "PROXY {} {} {} {} {}\r \n " ,
208+ proto,
209+ remote_addr. ip( ) ,
210+ local_addr. ip( ) ,
211+ remote_addr. port( ) ,
210212 local_addr. port( )
211213 ) ;
212214
213215 Ok ( header. into_bytes ( ) )
214216 }
215217 "v2" => {
216-
217- let v2sig: & [ u8 ] = & [ 0x0D , 0x0A , 0x0D , 0x0A , 0x00 , 0x0D , 0x0A , 0x51 , 0x55 , 0x49 , 0x54 , 0x0A ] ;
218+ let v2sig: & [ u8 ] = & [
219+ 0x0D , 0x0A , 0x0D , 0x0A , 0x00 , 0x0D , 0x0A , 0x51 , 0x55 , 0x49 , 0x54 , 0x0A ,
220+ ] ;
218221 let ver_cmd = & [ 0x21 ] ; // 0x21 version 2 and PROXY command
219- let proto = if local_addr. is_ipv4 ( ) { & [ 0x11 ] } else { & [ 0x21 ] } ; // 0x11 for TCP IPv4 and 0x21 for TCP IPv6, TODO: support UNIX
220- let addrs_length: & [ u8 ] = if local_addr. is_ipv4 ( ) { & [ 0 , 12 ] } else { & [ 0 , 36 ] } ; // 12 for IPv4 and 36 for IPv6, TOOD: support UNIX
222+ let proto = if local_addr. is_ipv4 ( ) {
223+ & [ 0x11 ]
224+ } else {
225+ & [ 0x21 ]
226+ } ; // 0x11 for TCP IPv4 and 0x21 for TCP IPv6, TODO: support UNIX
227+ let addrs_length: & [ u8 ] = if local_addr. is_ipv4 ( ) {
228+ & [ 0 , 12 ]
229+ } else {
230+ & [ 0 , 36 ]
231+ } ; // 12 for IPv4 and 36 for IPv6, TOOD: support UNIX
221232 let src_addr = match remote_addr {
222233 SocketAddr :: V4 ( v4) => v4. ip ( ) . octets ( ) . to_vec ( ) ,
223234 SocketAddr :: V6 ( v6) => v6. ip ( ) . octets ( ) . to_vec ( ) ,
@@ -226,28 +237,25 @@ pub fn generate_proxy_protocol_header(s: &TcpStream, proxy_protocol: &str) -> Re
226237 SocketAddr :: V4 ( v4) => v4. ip ( ) . octets ( ) . to_vec ( ) ,
227238 SocketAddr :: V6 ( v6) => v6. ip ( ) . octets ( ) . to_vec ( ) ,
228239 } ;
229-
230- let header: Vec < u8 > = [
231- v2sig,
232- ver_cmd,
233- proto,
240+
241+ let header: Vec < u8 > = [
242+ v2sig,
243+ ver_cmd,
244+ proto,
234245 addrs_length,
235246 & src_addr,
236247 & dst_addr,
237248 & remote_addr. port ( ) . to_be_bytes ( ) ,
238- & local_addr. port ( ) . to_be_bytes ( )
239- ] . concat ( ) ;
240-
249+ & local_addr. port ( ) . to_be_bytes ( ) ,
250+ ]
251+ . concat ( ) ;
252+
241253 trace ! ( "Proxy protocol v2 header: {:02x?}" , header) ;
242-
243- Ok ( header)
244254
245- } ,
246- _ => {
247- Err ( anyhow ! ( "Unknown proxy protocol {}" , proxy_protocol) )
255+ Ok ( header)
248256 }
257+ _ => Err ( anyhow ! ( "Unknown proxy protocol {}" , proxy_protocol) ) ,
249258 }
250-
251259}
252260
253261#[ cfg( test) ]
0 commit comments