use std::{ops, time::Duration};
pub struct Config {
quiche_config: quiche::Config,
pub ping_packet_send_interval: Option<Duration>,
pub max_recv_udp_payload_size: usize,
pub max_send_udp_payload_size: usize,
}
impl ops::Deref for Config {
type Target = quiche::Config;
fn deref(&self) -> &Self::Target {
&self.quiche_config
}
}
impl ops::DerefMut for Config {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.quiche_config
}
}
impl Config {
pub fn new() -> Self {
let mut config = Config {
quiche_config: quiche::Config::new(quiche::PROTOCOL_VERSION).unwrap(),
ping_packet_send_interval: None,
max_recv_udp_payload_size: 65527,
max_send_udp_payload_size: 1200,
};
config.set_initial_max_stream_data_bidi_local(1024 * 1024);
config.set_initial_max_stream_data_bidi_remote(1024 * 1024);
config.set_initial_max_streams_bidi(100);
config.set_initial_max_streams_uni(100);
config
}
pub fn set_max_idle_timeout(&mut self, v: u64) {
self.ping_packet_send_interval = Some(Duration::from_millis(v / 2));
self.quiche_config.set_max_idle_timeout(v)
}
pub fn set_max_recv_udp_payload_size(&mut self, v: usize) {
self.max_recv_udp_payload_size = v;
self.quiche_config.set_max_recv_udp_payload_size(v)
}
pub fn set_max_send_udp_payload_size(&mut self, v: usize) {
self.max_send_udp_payload_size = v;
self.quiche_config.set_max_send_udp_payload_size(v)
}
}