#![forbid(unsafe_code)]
mod chunks;
mod error;
mod frame;
mod pause;
#[cfg(test)]
mod tests;
pub(crate) mod connection;
pub use crate::connection::{Connection, Mode, Control, Packet, Stream, into_stream};
pub use crate::error::ConnectionError;
pub use crate::frame::{FrameDecodeError, header::{HeaderDecodeError, StreamId}};
const DEFAULT_CREDIT: u32 = 256 * 1024;
const DEFAULT_SPLIT_SEND_SIZE: usize = 16 * 1024;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum WindowUpdateMode {
OnReceive,
OnRead
}
#[derive(Debug, Clone)]
pub struct Config {
receive_window: u32,
max_buffer_size: usize,
max_num_streams: usize,
window_update_mode: WindowUpdateMode,
read_after_close: bool,
split_send_size: usize
}
impl Default for Config {
fn default() -> Self {
Config {
receive_window: DEFAULT_CREDIT,
max_buffer_size: 1024 * 1024,
max_num_streams: 8192,
window_update_mode: WindowUpdateMode::OnReceive,
read_after_close: true,
split_send_size: DEFAULT_SPLIT_SEND_SIZE
}
}
}
impl Config {
pub fn set_receive_window(&mut self, n: u32) -> &mut Self {
assert!(n >= DEFAULT_CREDIT);
self.receive_window = n;
self
}
pub fn set_max_buffer_size(&mut self, n: usize) -> &mut Self {
self.max_buffer_size = n;
self
}
pub fn set_max_num_streams(&mut self, n: usize) -> &mut Self {
self.max_num_streams = n;
self
}
pub fn set_window_update_mode(&mut self, m: WindowUpdateMode) -> &mut Self {
self.window_update_mode = m;
self
}
pub fn set_read_after_close(&mut self, b: bool) -> &mut Self {
self.read_after_close = b;
self
}
pub fn set_split_send_size(&mut self, n: usize) -> &mut Self {
self.split_send_size = n;
self
}
}
static_assertions::const_assert! {
std::mem::size_of::<usize>() <= std::mem::size_of::<u64>()
}
static_assertions::const_assert! {
std::mem::size_of::<u32>() <= std::mem::size_of::<usize>()
}