hopr_transport_session/
lib.rs1pub(crate) mod balancer;
10pub mod errors;
11mod initiation;
12mod manager;
13pub mod traits;
14mod types;
15
16use std::collections::HashSet;
17
18pub use balancer::SurbBalancerConfig;
19use hopr_internal_types::prelude::HoprPseudonym;
20use hopr_network_types::prelude::state::{SessionFeature, SessionSocket};
21pub use hopr_network_types::types::*;
22use hopr_transport_packet::prelude::ApplicationData;
23pub use manager::{DispatchResult, MIN_BALANCER_SAMPLING_INTERVAL, SessionManager, SessionManagerConfig};
24#[cfg(feature = "runtime-tokio")]
25pub use types::transfer_session;
26pub use types::{IncomingSession, ServiceId, Session, SessionId, SessionTarget};
27
28#[cfg(not(feature = "serde"))]
30compile_error!("The `serde` feature currently must be enabled, see #7145");
31
32pub const SESSION_PAYLOAD_SIZE: usize = SessionSocket::<{ ApplicationData::PAYLOAD_SIZE }>::PAYLOAD_CAPACITY;
34
35flagset::flags! {
36 #[repr(u8)]
38 #[derive(strum::EnumString, strum::Display)]
39 #[cfg_attr(feature = "serde", derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr))]
40 pub enum Capability : u8 {
41 None = 0,
43 Segmentation = 0b1000,
45 RetransmissionAck = 0b1100,
49 RetransmissionNack = 0b1010,
53 NoDelay = 0b1001,
57 }
58}
59
60pub type Capabilities = flagset::FlagSet<Capability>;
62
63pub(crate) fn capabilities_to_features(value: &Capabilities) -> HashSet<SessionFeature> {
66 let mut ret = HashSet::new();
67 if value.contains(Capability::NoDelay) {
68 ret.insert(SessionFeature::NoDelay);
69 }
70
71 if value.contains(Capability::RetransmissionAck) {
72 ret.extend(&[SessionFeature::AcknowledgeFrames, SessionFeature::RetransmitFrames]);
73 }
74
75 if value.contains(Capability::RetransmissionNack) {
76 ret.extend(&[
77 SessionFeature::AcknowledgeFrames,
78 SessionFeature::RequestIncompleteFrames,
79 ]);
80 }
81
82 ret
83}
84
85#[derive(Debug, PartialEq, Clone, smart_default::SmartDefault)]
90pub struct SessionClientConfig {
91 #[default(RoutingOptions::Hops(hopr_primitive_types::bounded::BoundedSize::MIN))]
93 pub forward_path_options: RoutingOptions,
94 #[default(RoutingOptions::Hops(hopr_primitive_types::bounded::BoundedSize::MIN))]
96 pub return_path_options: RoutingOptions,
97 #[default(_code = "Capability::Segmentation.into()")]
99 pub capabilities: Capabilities,
100 #[default(None)]
102 pub pseudonym: Option<HoprPseudonym>,
103 #[default(Some(SurbBalancerConfig::default()))]
105 pub surb_management: Option<SurbBalancerConfig>,
106}