#[repr(C)]
#[derive(Clone, Copy)]
pub struct Limits {
pub max_message_size: u64,
pub max_message_body_size: u64,
pub max_startline_size: u32,
pub max_headers_size: u64,
pub max_header_count: u16,
pub max_chunk_header_size: u32,
pub max_pending_handshakes: u32,
pub read_timeout: f64,
pub write_timeout: f64,
pub receive_timeout: f64,
pub send_timeout: f64,
pub max_concurrent_streams: u32,
pub max_connection_buffer_size: u64,
pub max_premature_resets: u32,
pub max_idle_frames: u32,
pub qpack_block_timeout: f64,
pub max_peer_uni_streams: u32,
pub max_outstanding_sections: u32,
pub ws_linger_timeout: f64,
pub ws_max_fragments: u16,
pub max_cookies: u32,
pub max_cookies_per_domain: u16,
pub max_hsts_entries: u32,
}
impl Limits {
pub fn parse(&self) -> crate::api::common::Limits {
crate::api::common::Limits {
max_message_size: self.max_message_size,
max_message_body_size: self.max_message_body_size,
max_startline_size: self.max_startline_size,
max_headers_size: self.max_headers_size,
max_header_count: self.max_header_count,
max_chunk_header_size: self.max_chunk_header_size,
max_pending_handshakes: self.max_pending_handshakes,
read_timeout: self.read_timeout,
write_timeout: self.write_timeout,
receive_timeout: self.receive_timeout,
send_timeout: self.send_timeout,
max_concurrent_streams: self.max_concurrent_streams,
max_connection_buffer_size: self.max_connection_buffer_size,
max_premature_resets: self.max_premature_resets,
max_idle_frames: self.max_idle_frames,
qpack_block_timeout: self.qpack_block_timeout,
max_peer_uni_streams: self.max_peer_uni_streams,
max_outstanding_sections: self.max_outstanding_sections,
ws_linger_timeout: self.ws_linger_timeout,
ws_max_fragments: self.ws_max_fragments,
max_cookies: self.max_cookies,
max_cookies_per_domain: self.max_cookies_per_domain,
max_hsts_entries: self.max_hsts_entries,
}
}
pub fn build(limits: &crate::api::common::Limits) -> Self {
Self {
max_message_size: limits.max_message_size,
max_message_body_size: limits.max_message_body_size,
max_startline_size: limits.max_startline_size,
max_headers_size: limits.max_headers_size,
max_header_count: limits.max_header_count,
max_chunk_header_size: limits.max_chunk_header_size,
max_pending_handshakes: limits.max_pending_handshakes,
read_timeout: limits.read_timeout,
write_timeout: limits.write_timeout,
receive_timeout: limits.receive_timeout,
send_timeout: limits.send_timeout,
max_concurrent_streams: limits.max_concurrent_streams,
max_connection_buffer_size: limits.max_connection_buffer_size,
max_premature_resets: limits.max_premature_resets,
max_idle_frames: limits.max_idle_frames,
qpack_block_timeout: limits.qpack_block_timeout,
max_peer_uni_streams: limits.max_peer_uni_streams,
max_outstanding_sections: limits.max_outstanding_sections,
ws_linger_timeout: limits.ws_linger_timeout,
ws_max_fragments: limits.ws_max_fragments,
max_cookies: limits.max_cookies,
max_cookies_per_domain: limits.max_cookies_per_domain,
max_hsts_entries: limits.max_hsts_entries,
}
}
pub unsafe fn or_default(limits: *const Limits) -> crate::api::common::Limits {
match unsafe { limits.as_ref() } {
Some(limits) => limits.parse(),
None => crate::api::common::Limits::default(),
}
}
}
#[unsafe(no_mangle)]
pub extern "C" fn soyokaze_limits_default() -> Limits {
Limits::build(&crate::api::common::Limits::default())
}