use super::*;
type RemoteIdentity = ([u8; 16], [u8; 64]);
type ImmediateRequestHandler =
dyn Fn(LinkId, &str, &[u8], Option<&RemoteIdentity>) -> Option<RequestResponse> + Send;
type DeferredHandler = dyn Fn(LinkId, &str, [u8; 16], &[u8], Option<&RemoteIdentity>) + Send;
pub(super) struct ManagedLink {
pub(super) resource_generation: std::sync::Arc<()>,
pub(super) engine: LinkEngine,
pub(super) channel: Option<Channel>,
pub(super) pre_rtt_packets: Vec<PreRttPacket>,
pub(super) pending_channel_packets: HashMap<[u8; 32], Sequence>,
pub(super) channel_send_ok: u64,
pub(super) channel_send_not_ready: u64,
pub(super) channel_send_too_big: u64,
pub(super) channel_send_other_error: u64,
pub(super) channel_messages_received: u64,
pub(super) channel_proofs_sent: u64,
pub(super) channel_proofs_received: u64,
pub(super) dest_hash: [u8; 16],
pub(super) remote_identity: Option<([u8; 16], [u8; 64])>,
pub(super) dest_sig_pub_bytes: Option<[u8; 32]>,
pub(super) incoming_resources: Vec<ResourceReceiver>,
pub(super) concluded_incoming: std::collections::HashSet<Vec<u8>>,
pub(super) outgoing_resources: Vec<ResourceSender>,
pub(super) pending_requests: HashMap<[u8; 16], PendingRequest>,
pub(super) incoming_splits: HashMap<[u8; 32], IncomingSplitTransfer>,
pub(super) outgoing_splits: HashMap<[u8; 32], OutgoingSplitTransfer>,
pub(super) outgoing_streams: HashMap<[u8; 32], OutgoingStreamTransfer>,
pub(super) resource_strategy: ResourceStrategy,
pub(super) resource_receive_mode: ResourceReceiveMode,
pub(super) max_request_size: Option<usize>,
pub(super) route_interface: Option<rns_core::transport::types::InterfaceId>,
pub(super) route_transport_id: Option<[u8; 16]>,
}
pub(super) struct PendingRequest {
pub(super) deadline: Option<f64>,
pub(super) max_response_size: Option<usize>,
}
pub(super) struct LinkDestination {
pub(super) sig_prv: Ed25519PrivateKey,
pub(super) sig_pub_bytes: [u8; 32],
pub(super) resource_strategy: ResourceStrategy,
pub(super) max_request_size: Option<usize>,
}
pub(super) struct RequestHandlerEntry {
pub(super) path: String,
pub(super) path_hash: [u8; 16],
pub(super) allowed_list: Option<Vec<[u8; 16]>>,
pub(super) handler: Box<ImmediateRequestHandler>,
}
pub(super) struct DeferredRequestHandlerEntry {
pub(super) path: String,
pub(super) path_hash: [u8; 16],
pub(super) allowed_list: Option<Vec<[u8; 16]>>,
pub(super) handler: Box<DeferredHandler>,
}
pub(super) struct PreRttPacket {
pub(super) packet: RawPacket,
pub(super) packet_hash: [u8; 32],
pub(super) receiving_interface: rns_core::transport::types::InterfaceId,
}