fix nat probe bug

This commit is contained in:
asxalex 2024-12-30 10:15:44 +08:00
parent 51c323008a
commit c070d345ad

View File

@ -400,28 +400,36 @@ impl Node {
}; };
if reply1.ip == self.outer_ip_v4.load(Ordering::Relaxed) { if reply1.ip == self.outer_ip_v4.load(Ordering::Relaxed) {
let Ok(reply2) = self let Ok(_reply2) = self
.send_and_wait_for_probe_reply(StunProbeAttr::Peer, &self.config.nat_server1)
.await
else {
*self.nat_type.lock().unwrap() = NatType::Symmetric;
return NatType::Symmetric;
};
*self.nat_type.lock().unwrap() = NatType::NoNat;
return NatType::NoNat;
}
if let Ok(_reply2_2) = self
.send_and_wait_for_probe_reply(StunProbeAttr::Peer, &self.config.nat_server1)
.await
{
*self.nat_type.lock().unwrap() = NatType::FullCone;
return NatType::FullCone;
}
let Ok(reply3) = self
.send_and_wait_for_probe_reply(StunProbeAttr::None, &self.config.nat_server2) .send_and_wait_for_probe_reply(StunProbeAttr::None, &self.config.nat_server2)
.await .await
else { else {
*self.nat_type.lock().unwrap() = NatType::Blocked; *self.nat_type.lock().unwrap() = NatType::Blocked;
return NatType::Blocked; return NatType::Blocked;
}; };
if reply1.ip != reply2.ip || reply1.port != reply2.port { if reply3.ip != reply1.ip || reply3.port != reply1.port {
*self.nat_type.lock().unwrap() = NatType::Symmetric; *self.nat_type.lock().unwrap() = NatType::Symmetric;
return NatType::Symmetric; return NatType::Symmetric;
} }
*self.nat_type.lock().unwrap() = NatType::NoNat;
return NatType::NoNat;
}
if let Ok(_reply3) = self
.send_and_wait_for_probe_reply(StunProbeAttr::Peer, &self.config.nat_server1)
.await
{
*self.nat_type.lock().unwrap() = NatType::FullCone;
return NatType::FullCone;
}
if let Ok(_reply4) = self if let Ok(_reply4) = self
.send_and_wait_for_probe_reply(StunProbeAttr::Port, &self.config.nat_server1) .send_and_wait_for_probe_reply(StunProbeAttr::Port, &self.config.nat_server1)