Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 1df6361

Browse files
ngotchac5chdn
authored andcommitted
Run all igd methods in its own thread (#10195)
1 parent a6c6c7c commit 1df6361

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

util/network-devp2p/src/ip_utils.rs

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -309,40 +309,40 @@ pub fn select_public_address(port: u16) -> SocketAddr {
309309
pub fn map_external_address(local: &NodeEndpoint) -> Option<NodeEndpoint> {
310310
if let SocketAddr::V4(ref local_addr) = local.address {
311311
let local_ip = *local_addr.ip();
312+
let local_port = local_addr.port();
313+
let local_udp_port = local.udp_port;
314+
312315
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
314344
});
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()?;
346346
}
347347
None
348348
}

0 commit comments

Comments
 (0)