dialinfoclass refactor, cleaning up network class detection

This commit is contained in:
John Smith
2022-04-23 22:08:02 -04:00
parent 99dc4e16f9
commit 1156159748
12 changed files with 435 additions and 210 deletions

View File

@@ -0,0 +1,23 @@
use crate::*;
pub fn encode_dial_info_class(dial_info_class: DialInfoClass) -> veilid_capnp::DialInfoClass {
match dial_info_class {
DialInfoClass::Direct => veilid_capnp::DialInfoClass::Direct,
DialInfoClass::Mapped => veilid_capnp::DialInfoClass::Mapped,
DialInfoClass::FullConeNAT => veilid_capnp::DialInfoClass::FullConeNAT,
DialInfoClass::Blocked => veilid_capnp::DialInfoClass::Blocked,
DialInfoClass::AddressRestrictedNAT => veilid_capnp::DialInfoClass::AddressRestrictedNAT,
DialInfoClass::PortRestrictedNAT => veilid_capnp::DialInfoClass::PortRestrictedNAT,
}
}
pub fn decode_dial_info_class(dial_info_class: veilid_capnp::DialInfoClass) -> DialInfoClass {
match dial_info_class {
veilid_capnp::DialInfoClass::Direct => DialInfoClass::Direct,
veilid_capnp::DialInfoClass::Mapped => DialInfoClass::Mapped,
veilid_capnp::DialInfoClass::FullConeNAT => DialInfoClass::FullConeNAT,
veilid_capnp::DialInfoClass::Blocked => DialInfoClass::Blocked,
veilid_capnp::DialInfoClass::AddressRestrictedNAT => DialInfoClass::AddressRestrictedNAT,
veilid_capnp::DialInfoClass::PortRestrictedNAT => DialInfoClass::PortRestrictedNAT,
}
}

View File

@@ -0,0 +1,33 @@
use crate::*;
use rpc_processor::*;
pub fn encode_dial_info_detail(
dial_info_detail: &DialInfoDetail,
builder: &mut veilid_capnp::dial_info_detail::Builder,
) -> Result<(), RPCError> {
let mut di_builder = builder.reborrow().init_dial_info();
encode_dial_info(&node_info.dial_info, &mut di_builder)?;
builder.set_class(encode_dial_info_class(dial_info_detail.class));
Ok(())
}
pub fn decode_dial_info_detail(
reader: &veilid_capnp::dial_info_detail::Reader,
) -> Result<DialInfoDetail, RPCError> {
let dial_info = decode_dial_info(
&reader
.reborrow()
.get_dial_info()
.map_err(map_error_capnp_error!())?,
)?;
let dial_info_class = decode_dial_info_class(
reader
.reborrow()
.get_class()
.map_err(map_error_capnp_notinschema!())?,
);
Ok(DialInfoDetail { dial_info, class })
}

View File

@@ -1,5 +1,7 @@
mod address;
mod dial_info;
mod dial_info_class;
mod dial_info_detail;
mod network_class;
mod node_dial_info;
mod node_info;
@@ -15,6 +17,8 @@ mod socket_address;
pub use address::*;
pub use dial_info::*;
pub use dial_info_class::*;
pub use dial_info_detail::*;
pub use network_class::*;
pub use node_dial_info::*;
pub use node_info::*;

View File

@@ -10,17 +10,19 @@ pub fn encode_node_info(
let mut ps_builder = builder.reborrow().init_outbound_protocols();
encode_protocol_set(&node_info.outbound_protocols, &mut ps_builder)?;
let mut dil_builder = builder.reborrow().init_dial_info_list(
let mut didl_builder = builder.reborrow().init_dial_info_detail_list(
node_info
.dial_info_list
.dial_info_detail_list
.len()
.try_into()
.map_err(map_error_protocol!("too many dial infos in node info"))?,
.map_err(map_error_protocol!(
"too many dial info details in node info"
))?,
);
for idx in 0..node_info.dial_info_list.len() {
let mut di_builder = dil_builder.reborrow().get(idx as u32);
encode_dial_info(&node_info.dial_info_list[idx], &mut di_builder)?;
for idx in 0..node_info.dial_info_detail_list.len() {
let mut did_builder = didl_builder.reborrow().get(idx as u32);
encode_dial_info_detail(&node_info.dial_info_detail_list[idx], &mut did_builder)?;
}
if let Some(rpi) = &node_info.relay_peer_info {
@@ -49,18 +51,18 @@ pub fn decode_node_info(
.map_err(map_error_capnp_error!())?,
)?;
let dil_reader = reader
let didl_reader = reader
.reborrow()
.get_dial_info_list()
.get_dial_info_detail_list()
.map_err(map_error_capnp_error!())?;
let mut dial_info_list = Vec::<DialInfo>::with_capacity(
dil_reader
let mut dial_info_detail_list = Vec::<DialInfo>::with_capacity(
didl_reader
.len()
.try_into()
.map_err(map_error_protocol!("too many dial infos"))?,
.map_err(map_error_protocol!("too many dial info details"))?,
);
for di in dil_reader.iter() {
dial_info_list.push(decode_dial_info(&di)?)
dial_info_detail_list.push(decode_dial_info_detail(&di)?)
}
let relay_peer_info = if allow_relay_peer_info {
@@ -82,7 +84,7 @@ pub fn decode_node_info(
Ok(NodeInfo {
network_class,
outbound_protocols,
dial_info_list,
dial_info_detail_list,
relay_peer_info,
})
}