use crate::proto::packet::HdpHeader;
use crate::proto::peer::peer_layer::UdpMode;
use embedded_semver::prelude::*;
use lazy_static::lazy_static;
pub const MAJOR_VERSION: u8 = 0;
pub const MINOR_VERSION: u8 = 1;
pub const PATCH_VERSION: u8 = 1;
lazy_static! {
pub static ref PROTOCOL_VERSION: u32 =
Semver::new(MAJOR_VERSION as _, MINOR_VERSION as _, PATCH_VERSION as _)
.to_u32()
.unwrap();
}
pub const UDP_MODE: UdpMode = UdpMode::Disabled;
pub const DEFAULT_SO_LINGER_TIME: std::time::Duration = std::time::Duration::from_millis(1000);
pub const NANOSECONDS_PER_SECOND: i64 = 1_000_000_000;
pub const LAYER2_ETHERNET_HEADER_BYTE_LEN: usize = 18;
pub const LAYER3_IPV4_HEADER_BYTE_LEN: usize = 20;
pub const LAYER3_IPV6_HEADER_BYTE_LEN: usize = 40;
pub const UDP_HEADER_BYTE_LEN: usize = 8;
pub const HDP_HEADER_BYTE_LEN: usize = std::mem::size_of::<HdpHeader>();
pub const MTU: usize = 1280;
pub const BASE_HEADER_LEN_IPV4: usize = LAYER2_ETHERNET_HEADER_BYTE_LEN
+ LAYER3_IPV4_HEADER_BYTE_LEN
+ UDP_HEADER_BYTE_LEN
+ HDP_HEADER_BYTE_LEN;
pub const BASE_HEADER_LEN_IPV6: usize = LAYER2_ETHERNET_HEADER_BYTE_LEN
+ LAYER3_IPV6_HEADER_BYTE_LEN
+ UDP_HEADER_BYTE_LEN
+ HDP_HEADER_BYTE_LEN;
pub const MAX_PAYLOAD_SIZE_IPV4: usize = MTU - BASE_HEADER_LEN_IPV4;
pub const MAX_PAYLOAD_SIZE_IPV6: usize = MTU - BASE_HEADER_LEN_IPV6;
pub const INITIAL_RECONNECT_LOCKOUT_TIME_NS: i64 = NANOSECONDS_PER_SECOND;
pub const KEEP_ALIVE_INTERVAL_MS: u64 = 60000 * 15; pub const KEEP_ALIVE_TIMEOUT_NS: i64 = (KEEP_ALIVE_INTERVAL_MS * 3 * 1_000_000) as i64;
pub const DRILL_UPDATE_TIMEOUT_NS: i64 = KEEP_ALIVE_TIMEOUT_NS;
pub const GROUP_TIMEOUT_MS: usize = KEEP_ALIVE_INTERVAL_MS as usize;
pub const INDIVIDUAL_WAVE_TIMEOUT_MS: usize = GROUP_TIMEOUT_MS / 2;
pub const DO_DEREGISTER_EXPIRE_TIME_NS: i64 = KEEP_ALIVE_TIMEOUT_NS;
pub const FIREWALL_KEEP_ALIVE_UDP: std::time::Duration = std::time::Duration::from_secs(60);
pub const MAX_GROUP_SIZE_BYTES: usize = 1_000_000 * 8;
pub const CODEC_BUFFER_CAPACITY: usize = u16::MAX as usize;
pub const CODEC_MIN_BUFFER: usize = 8192;
pub const GROUP_EXPIRE_TIME_MS: std::time::Duration = std::time::Duration::from_millis(60000);
pub const DO_REGISTER_EXPIRE_TIME_MS: std::time::Duration = std::time::Duration::from_millis(10000);
pub const DO_CONNECT_EXPIRE_TIME_MS: std::time::Duration = std::time::Duration::from_millis(8000);
pub const UPNP_FIREWALL_LOAD_TIMEOUT: std::time::Duration = std::time::Duration::from_millis(1500);
pub const MULTIPORT_START: u16 = 25000;
pub const MULTIPORT_END: u16 = 1 + MULTIPORT_START;
pub const PRIMARY_PORT: u16 = 25021;
pub const DRILL_UPDATE_FREQUENCY_LOW_BASE: u64 = 480 * 1_000_000_000;
pub const DRILL_UPDATE_FREQUENCY_MEDIUM_BASE: u64 = 480 * 1_000_000_000;
pub const DRILL_UPDATE_FREQUENCY_HIGH_BASE: u64 = 480 * 1_000_000_000;
pub const DRILL_UPDATE_FREQUENCY_ULTRA_BASE: u64 = 480 * 1_000_000_000;
pub const DRILL_UPDATE_FREQUENCY_DIVINE_BASE: u64 = 480 * 1_000_000_000;
pub const HOLE_PUNCH_SYNC_TIME_MULTIPLIER: f64 = 2.0f64;
pub const TIMED_TICKET_LIFETIME: std::time::Duration = std::time::Duration::from_secs(30);
pub const LOGIN_EXPIRATION_TIME: std::time::Duration = std::time::Duration::from_secs(20);
pub const NTP_RESYNC_FREQUENCY: std::time::Duration = std::time::Duration::from_secs(60 * 30);
pub const TCP_CONN_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(4);
pub const MAX_OUTGOING_UNPROCESSED_REQUESTS: usize = 512;
pub const MAX_INCOMING_UNPROCESSED_REQUESTS: usize = 512;