fix signal

This commit is contained in:
John Smith 2023-07-12 20:12:45 -04:00
parent 714eca1411
commit 0a16938f9b
5 changed files with 11 additions and 15 deletions

View File

@ -148,7 +148,8 @@ impl DiscoveryContext {
entry.with(rti, move |_rti, e| { entry.with(rti, move |_rti, e| {
e.node_info(routing_domain) e.node_info(routing_domain)
.map(|ni| { .map(|ni| {
ni.has_capability(CAP_VALIDATE_DIAL_INFO) && ni.is_signal_capable() ni.has_capability(CAP_VALIDATE_DIAL_INFO)
&& ni.is_fully_direct_inbound()
}) })
.unwrap_or(false) .unwrap_or(false)
}) })

View File

@ -112,8 +112,8 @@ impl RoutingTable {
let can_serve_as_relay = e let can_serve_as_relay = e
.node_info(RoutingDomain::PublicInternet) .node_info(RoutingDomain::PublicInternet)
.map(|n| { .map(|n| {
if !(n.has_capability(CAP_RELAY) && n.is_signal_capable()) { if !(n.has_capability(CAP_RELAY) && n.is_fully_direct_inbound()) {
// Needs to be able to signal and relay // Needs to be able to accept packets to relay directly
return false; return false;
} }

View File

@ -211,15 +211,8 @@ impl NodeInfo {
true true
} }
/// Can this node assist with signalling? Yes but only if it doesn't require signalling, itself. /// Can direct connections be made
/// Also used to determine if nodes are capable of validation of dial info, as that operation pub fn is_fully_direct_inbound(&self) -> bool {
/// has the same requirements, inbound capability and a dial info that requires no assistance
pub fn is_signal_capable(&self) -> bool {
// Has capability?
if !self.has_capability(CAP_SIGNAL) {
return false;
}
// Must be inbound capable // Must be inbound capable
if !matches!(self.network_class, NetworkClass::InboundCapable) { if !matches!(self.network_class, NetworkClass::InboundCapable) {
return false; return false;

View File

@ -41,7 +41,8 @@ impl RPCProcessor {
let routing_table = self.routing_table(); let routing_table = self.routing_table();
{ {
if let Some(opi) = routing_table.get_own_peer_info(msg.header.routing_domain()) { if let Some(opi) = routing_table.get_own_peer_info(msg.header.routing_domain()) {
if !opi.signed_node_info().node_info().is_signal_capable() { let ni = opi.signed_node_info().node_info();
if !ni.has_capability(CAP_SIGNAL) {
return Ok(NetworkResult::service_unavailable( return Ok(NetworkResult::service_unavailable(
"signal is not available", "signal is not available",
)); ));

View File

@ -72,7 +72,7 @@ impl RPCProcessor {
{ {
if let Some(opi) = routing_table.get_own_peer_info(detail.routing_domain) { if let Some(opi) = routing_table.get_own_peer_info(detail.routing_domain) {
let ni = opi.signed_node_info().node_info(); let ni = opi.signed_node_info().node_info();
if !ni.has_capability(CAP_VALIDATE_DIAL_INFO) || !ni.is_signal_capable() { if !ni.has_capability(CAP_VALIDATE_DIAL_INFO) || !ni.is_fully_direct_inbound() {
return Ok(NetworkResult::service_unavailable( return Ok(NetworkResult::service_unavailable(
"validate dial info is not available", "validate dial info is not available",
)); ));
@ -118,7 +118,8 @@ impl RPCProcessor {
entry.with(rti, move |_rti, e| { entry.with(rti, move |_rti, e| {
e.node_info(routing_domain) e.node_info(routing_domain)
.map(|ni| { .map(|ni| {
ni.has_capability(CAP_VALIDATE_DIAL_INFO) && ni.is_signal_capable() ni.has_capability(CAP_VALIDATE_DIAL_INFO)
&& ni.is_fully_direct_inbound()
}) })
.unwrap_or(false) .unwrap_or(false)
}) })