@@ -309,40 +309,40 @@ pub fn select_public_address(port: u16) -> SocketAddr {
309
309
pub fn map_external_address ( local : & NodeEndpoint ) -> Option < NodeEndpoint > {
310
310
if let SocketAddr :: V4 ( ref local_addr) = local. address {
311
311
let local_ip = * local_addr. ip ( ) ;
312
+ let local_port = local_addr. port ( ) ;
313
+ let local_udp_port = local. udp_port ;
314
+
312
315
let search_gateway_child = :: std:: thread:: spawn ( move || {
313
- search_gateway_from_timeout ( local_ip, Duration :: new ( 5 , 0 ) )
316
+ match search_gateway_from_timeout ( local_ip, Duration :: new ( 5 , 0 ) ) {
317
+ Err ( ref err) => debug ! ( "Gateway search error: {}" , err) ,
318
+ Ok ( gateway) => {
319
+ match gateway. get_external_ip ( ) {
320
+ Err ( ref err) => {
321
+ debug ! ( "IP request error: {}" , err) ;
322
+ } ,
323
+ Ok ( external_addr) => {
324
+ match gateway. add_any_port ( PortMappingProtocol :: TCP , SocketAddrV4 :: new ( local_ip, local_port) , 0 , "Parity Node/TCP" ) {
325
+ Err ( ref err) => {
326
+ debug ! ( "Port mapping error: {}" , err) ;
327
+ } ,
328
+ Ok ( tcp_port) => {
329
+ match gateway. add_any_port ( PortMappingProtocol :: UDP , SocketAddrV4 :: new ( local_ip, local_udp_port) , 0 , "Parity Node/UDP" ) {
330
+ Err ( ref err) => {
331
+ debug ! ( "Port mapping error: {}" , err) ;
332
+ } ,
333
+ Ok ( udp_port) => {
334
+ return Some ( NodeEndpoint { address : SocketAddr :: V4 ( SocketAddrV4 :: new ( external_addr, tcp_port) ) , udp_port } ) ;
335
+ } ,
336
+ }
337
+ } ,
338
+ }
339
+ } ,
340
+ }
341
+ } ,
342
+ }
343
+ None
314
344
} ) ;
315
- let gateway_result = match search_gateway_child. join ( ) {
316
- Err ( _) => return None ,
317
- Ok ( gateway_result) => gateway_result,
318
- } ;
319
- match gateway_result {
320
- Err ( ref err) => debug ! ( "Gateway search error: {}" , err) ,
321
- Ok ( gateway) => {
322
- match gateway. get_external_ip ( ) {
323
- Err ( ref err) => {
324
- debug ! ( "IP request error: {}" , err) ;
325
- } ,
326
- Ok ( external_addr) => {
327
- match gateway. add_any_port ( PortMappingProtocol :: TCP , SocketAddrV4 :: new ( * local_addr. ip ( ) , local_addr. port ( ) ) , 0 , "Parity Node/TCP" ) {
328
- Err ( ref err) => {
329
- debug ! ( "Port mapping error: {}" , err) ;
330
- } ,
331
- Ok ( tcp_port) => {
332
- match gateway. add_any_port ( PortMappingProtocol :: UDP , SocketAddrV4 :: new ( * local_addr. ip ( ) , local. udp_port ) , 0 , "Parity Node/UDP" ) {
333
- Err ( ref err) => {
334
- debug ! ( "Port mapping error: {}" , err) ;
335
- } ,
336
- Ok ( udp_port) => {
337
- return Some ( NodeEndpoint { address : SocketAddr :: V4 ( SocketAddrV4 :: new ( external_addr, tcp_port) ) , udp_port } ) ;
338
- } ,
339
- }
340
- } ,
341
- }
342
- } ,
343
- }
344
- } ,
345
- }
345
+ return search_gateway_child. join ( ) . ok ( ) ?;
346
346
}
347
347
None
348
348
}
0 commit comments