dialinfoclass refactor, cleaning up network class detection
This commit is contained in:
23
veilid-core/src/rpc_processor/coders/dial_info_class.rs
Normal file
23
veilid-core/src/rpc_processor/coders/dial_info_class.rs
Normal 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,
|
||||
}
|
||||
}
|
33
veilid-core/src/rpc_processor/coders/dial_info_detail.rs
Normal file
33
veilid-core/src/rpc_processor/coders/dial_info_detail.rs
Normal 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 })
|
||||
}
|
@@ -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::*;
|
||||
|
@@ -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,
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user