use crate::proto::outbound_sender::OutboundPrimaryStreamSender;
use crate::proto::packet::HdpHeader;
use crate::proto::session::CitadelSession;
use crate::proto::state_container::StateContainerInner;
use bytes::BytesMut;
use citadel_crypt::ratchets::Ratchet;
pub(crate) mod codec;
pub(crate) mod endpoint_crypto_accessor;
pub(crate) mod misc;
pub mod node;
pub mod node_request;
pub mod node_result;
pub(crate) mod outbound_sender;
pub(crate) mod packet;
pub(crate) mod packet_crafter;
pub(crate) mod packet_processor;
pub(crate) mod peer;
pub mod remote;
pub(crate) mod session;
pub(crate) mod session_manager;
pub(crate) mod session_queue_handler;
pub(crate) mod state_container;
pub(crate) mod state_subcontainers;
pub(crate) mod transfer_stats;
pub(crate) mod validation;
pub(crate) fn get_preferred_primary_stream<R: Ratchet>(
header: &HdpHeader,
session: &CitadelSession<R>,
state_container: &StateContainerInner<R>,
) -> Option<OutboundPrimaryStreamSender> {
if header.target_cid.get() != 0 {
Some(
state_container
.get_preferred_stream(header.session_cid.get())
.clone(),
)
} else {
session.to_primary_stream.clone()
}
}
pub(crate) fn send_with_error_logging(stream: &OutboundPrimaryStreamSender, packet: BytesMut) {
if let Err(err) = stream.unbounded_send(packet) {
log::error!(target: "citadel", "Error while sending packet outbound: {:?}", err)
}
}