use ::bytes::Bytes;
use ::std::time::Duration;
pub(crate) const LISTENER_TASK_LOOP: usize = 1024;
pub(crate) const LISTENER_CONV_TIMEOUT: Duration = Duration::from_secs(120);
#[derive(Debug, Clone, Copy)]
pub struct KcpNoDelayConfig {
pub nodelay: bool,
pub interval: u32,
pub resend: u32,
pub nc: bool,
}
impl Default for KcpNoDelayConfig {
fn default() -> KcpNoDelayConfig {
KcpNoDelayConfig {
nodelay: false,
interval: 100,
resend: 0,
nc: false,
}
}
}
impl KcpNoDelayConfig {
pub fn fastest() -> KcpNoDelayConfig {
KcpNoDelayConfig {
nodelay: true,
interval: 10,
resend: 2,
nc: true,
}
}
pub fn normal() -> KcpNoDelayConfig {
KcpNoDelayConfig {
nodelay: false,
interval: 40,
resend: 0,
nc: false,
}
}
}
#[derive(Debug, Clone)]
pub struct KcpConfig {
pub mtu: u32,
pub nodelay: KcpNoDelayConfig,
pub snd_wnd: u32,
pub rcv_wnd: u32,
pub stream: bool,
pub session_key: Bytes,
pub session_id_len: usize,
pub session_expire: Duration,
pub connect_timeout: Duration,
pub shutdown_timeout: Duration,
pub half_close_timeout: Duration,
}
impl Default for KcpConfig {
fn default() -> KcpConfig {
KcpConfig {
mtu: 1400,
nodelay: KcpNoDelayConfig::normal(),
snd_wnd: 32,
rcv_wnd: 256,
stream: true,
session_key: Bytes::new(),
session_id_len: 16,
session_expire: Duration::from_secs(90),
connect_timeout: Duration::from_secs(15),
shutdown_timeout: Duration::from_secs(10),
half_close_timeout: Duration::from_secs(5),
}
}
}
impl KcpConfig {
pub fn random_session_id(&self) -> Vec<u8> {
std::iter::repeat_with(rand::random::<u8>)
.take(self.session_id_len)
.collect()
}
}