refactor checkpoint
This commit is contained in:
@@ -23,9 +23,9 @@ pub fn encode_node_info(
|
||||
encode_dial_info(&node_info.dial_info_list[idx], &mut di_builder)?;
|
||||
}
|
||||
|
||||
if let Some(rpi) = node_info.relay_peer_info {
|
||||
if let Some(rpi) = &node_info.relay_peer_info {
|
||||
let mut rpi_builder = builder.reborrow().init_relay_peer_info();
|
||||
encode_peer_info(&rpi, &mut rpi_builder)?;
|
||||
encode_peer_info(rpi, &mut rpi_builder)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
@@ -46,7 +46,7 @@ pub fn decode_node_info(
|
||||
&reader
|
||||
.reborrow()
|
||||
.get_outbound_protocols()
|
||||
.map_err(map_error_capnp_notinschema!())?,
|
||||
.map_err(map_error_capnp_error!())?,
|
||||
)?;
|
||||
|
||||
let dil_reader = reader
|
||||
@@ -69,7 +69,7 @@ pub fn decode_node_info(
|
||||
&reader
|
||||
.reborrow()
|
||||
.get_relay_peer_info()
|
||||
.map_err(map_error_capnp_notinschema!())?,
|
||||
.map_err(map_error_capnp_error!())?,
|
||||
false,
|
||||
)?))
|
||||
} else {
|
||||
|
@@ -6,8 +6,8 @@ pub fn encode_signal_info(
|
||||
builder: &mut veilid_capnp::operation_signal::Builder,
|
||||
) -> Result<(), RPCError> {
|
||||
match signal_info {
|
||||
SignalInfo::HolePunch { receipt, node_info } => {
|
||||
let mut hp_builder = builder.init_hole_punch();
|
||||
SignalInfo::HolePunch { receipt, peer_info } => {
|
||||
let mut hp_builder = builder.reborrow().init_hole_punch();
|
||||
let rcpt_builder =
|
||||
hp_builder
|
||||
.reborrow()
|
||||
@@ -15,11 +15,11 @@ pub fn encode_signal_info(
|
||||
"invalid receipt length in hole punch signal info"
|
||||
))?);
|
||||
rcpt_builder.copy_from_slice(receipt.as_slice());
|
||||
let mut ni_builder = hp_builder.init_node_info();
|
||||
encode_node_info(&node_info, &mut ni_builder)?;
|
||||
let mut pi_builder = hp_builder.init_peer_info();
|
||||
encode_peer_info(peer_info, &mut pi_builder)?;
|
||||
}
|
||||
SignalInfo::ReverseConnect { receipt, node_info } => {
|
||||
let mut hp_builder = builder.init_reverse_connect();
|
||||
SignalInfo::ReverseConnect { receipt, peer_info } => {
|
||||
let mut hp_builder = builder.reborrow().init_reverse_connect();
|
||||
let rcpt_builder =
|
||||
hp_builder
|
||||
.reborrow()
|
||||
@@ -27,8 +27,8 @@ pub fn encode_signal_info(
|
||||
"invalid receipt length in reverse connect signal info"
|
||||
))?);
|
||||
rcpt_builder.copy_from_slice(receipt.as_slice());
|
||||
let mut ni_builder = hp_builder.init_node_info();
|
||||
encode_node_info(&node_info, &mut ni_builder)?;
|
||||
let mut pi_builder = hp_builder.init_peer_info();
|
||||
encode_peer_info(peer_info, &mut pi_builder)?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,12 +55,12 @@ pub fn decode_signal_info(
|
||||
"invalid receipt in hole punch signal info"
|
||||
))?
|
||||
.to_vec();
|
||||
let ni_reader = r.get_node_info().map_err(map_error_protocol!(
|
||||
"invalid node info in hole punch signal info"
|
||||
let pi_reader = r.get_peer_info().map_err(map_error_protocol!(
|
||||
"invalid peer info in hole punch signal info"
|
||||
))?;
|
||||
let node_info = decode_node_info(&ni_reader, true)?;
|
||||
let peer_info = decode_peer_info(&pi_reader, true)?;
|
||||
|
||||
SignalInfo::HolePunch { receipt, node_info }
|
||||
SignalInfo::HolePunch { receipt, peer_info }
|
||||
}
|
||||
veilid_capnp::operation_signal::ReverseConnect(r) => {
|
||||
// Extract reverse connect reader
|
||||
@@ -74,12 +74,12 @@ pub fn decode_signal_info(
|
||||
"invalid receipt in reverse connect signal info"
|
||||
))?
|
||||
.to_vec();
|
||||
let ni_reader = r.get_node_info().map_err(map_error_protocol!(
|
||||
"invalid node info in reverse connect signal info"
|
||||
let pi_reader = r.get_peer_info().map_err(map_error_protocol!(
|
||||
"invalid peer info in reverse connect signal info"
|
||||
))?;
|
||||
let node_info = decode_node_info(&ni_reader, true)?;
|
||||
let peer_info = decode_peer_info(&pi_reader, true)?;
|
||||
|
||||
SignalInfo::ReverseConnect { receipt, node_info }
|
||||
SignalInfo::ReverseConnect { receipt, peer_info }
|
||||
}
|
||||
},
|
||||
)
|
||||
|
@@ -23,10 +23,9 @@ type OperationId = u64;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Destination {
|
||||
Direct(NodeRef), // Can only be sent directly
|
||||
Normal(NodeRef), // Can be sent via relays as well as directly
|
||||
Relay(NodeRef, DHTKey), // Can only be sent via a relay
|
||||
PrivateRoute(PrivateRoute), // Must be encapsulated in a private route
|
||||
Direct(NodeRef), // Send to node
|
||||
Relay(NodeRef, DHTKey), // Send to node for relay purposes
|
||||
PrivateRoute(PrivateRoute), // Send to private route
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -215,22 +214,25 @@ impl RPCProcessor {
|
||||
}
|
||||
|
||||
fn filter_peer_scope(&self, peer_info: &PeerInfo) -> bool {
|
||||
// if local peer scope is enabled, then don't reject any peer info
|
||||
if self.enable_local_peer_scope {
|
||||
return true;
|
||||
}
|
||||
|
||||
// reject attempts to include non-public addresses in results
|
||||
if self.default_peer_scope == PeerScope::Global {
|
||||
for di in &peer_info.node_info.dial_info_list {
|
||||
for di in &peer_info.node_info.dial_info_list {
|
||||
if !di.is_global() {
|
||||
// non-public address causes rejection
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if let Some(rpi) = &peer_info.node_info.relay_peer_info {
|
||||
for di in &rpi.node_info.dial_info_list {
|
||||
if !di.is_global() {
|
||||
// non-public address causes rejection
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if let Some(rpi) = peer_info.node_info.relay_peer_info {
|
||||
for di in &rpi.node_info.dial_info_list {
|
||||
if !di.is_global() {
|
||||
// non-public address causes rejection
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -278,7 +280,7 @@ impl RPCProcessor {
|
||||
if let Some(nr) = routing_table.lookup_node_ref(node_id) {
|
||||
// ensure we have some dial info for the entry already,
|
||||
// if not, we should do the find_node anyway
|
||||
if !nr.has_any_dial_info() {
|
||||
if nr.has_any_dial_info() {
|
||||
return Ok(nr);
|
||||
}
|
||||
}
|
||||
@@ -434,13 +436,13 @@ impl RPCProcessor {
|
||||
|
||||
// To where are we sending the request
|
||||
match &dest {
|
||||
Destination::Direct(node_ref) | Destination::Normal(node_ref) => {
|
||||
Destination::Direct(node_ref) | Destination::Relay(node_ref, _) => {
|
||||
// Send to a node without a private route
|
||||
// --------------------------------------
|
||||
|
||||
// Get the actual destination node id, accounting for outbound relaying
|
||||
let (node_ref, node_id) = if matches!(dest, Destination::Normal(_)) {
|
||||
self.get_direct_destination(node_ref.clone())?
|
||||
// Get the actual destination node id accounting for relays
|
||||
let (node_ref, node_id) = if let Destination::Relay(_, dht_key) = dest {
|
||||
(node_ref.clone(), dht_key)
|
||||
} else {
|
||||
let node_id = node_ref.node_id();
|
||||
(node_ref.clone(), node_id)
|
||||
@@ -487,7 +489,7 @@ impl RPCProcessor {
|
||||
let mut pr_msg_builder = ::capnp::message::Builder::new_default();
|
||||
let mut pr_builder =
|
||||
pr_msg_builder.init_root::<veilid_capnp::private_route::Builder>();
|
||||
encode_private_route(&private_route, &mut pr_builder)?;
|
||||
encode_private_route(private_route, &mut pr_builder)?;
|
||||
let pr_reader = pr_builder.into_reader();
|
||||
|
||||
// Reply with 'route' operation
|
||||
@@ -899,7 +901,7 @@ impl RPCProcessor {
|
||||
if redirect {
|
||||
let routing_table = self.routing_table();
|
||||
let filter = dial_info.make_filter(true);
|
||||
let peers = routing_table.find_fast_nodes_filtered(&filter);
|
||||
let peers = routing_table.find_fast_public_nodes_filtered(&filter);
|
||||
if peers.is_empty() {
|
||||
return Err(rpc_error_internal(format!(
|
||||
"no peers matching filter '{:?}'",
|
||||
@@ -1110,7 +1112,7 @@ impl RPCProcessor {
|
||||
// Handle it
|
||||
let network_manager = self.network_manager();
|
||||
network_manager
|
||||
.process_receipt(rcpt_data)
|
||||
.process_in_band_receipt(rcpt_data, rpcreader.header.peer_noderef)
|
||||
.await
|
||||
.map_err(map_error_string!())
|
||||
}
|
||||
@@ -1497,7 +1499,7 @@ impl RPCProcessor {
|
||||
|
||||
// Wait for receipt
|
||||
match eventual_value.await {
|
||||
ReceiptEvent::Returned => Ok(true),
|
||||
ReceiptEvent::Returned(_) => Ok(true),
|
||||
ReceiptEvent::Expired => Ok(false),
|
||||
ReceiptEvent::Cancelled => {
|
||||
Err(rpc_error_internal("receipt was dropped before expiration"))
|
||||
@@ -1588,12 +1590,9 @@ impl RPCProcessor {
|
||||
pub async fn rpc_call_signal(
|
||||
&self,
|
||||
dest: Destination,
|
||||
relay_dial_info: DialInfo,
|
||||
safety_route: Option<&SafetyRouteSpec>,
|
||||
signal_info: SignalInfo,
|
||||
) -> Result<(), RPCError> {
|
||||
let network_manager = self.network_manager();
|
||||
//
|
||||
let sig_msg = {
|
||||
let mut sig_msg = ::capnp::message::Builder::new_default();
|
||||
let mut question = sig_msg.init_root::<veilid_capnp::operation::Builder>();
|
||||
|
Reference in New Issue
Block a user