use crate::Error;
pub const HARD_MAX_BODY_LEN: usize = 64 * 1024 * 1024;
pub const HARD_MAX_HEADER_BYTES: usize = 64 * 1024;
pub const HARD_MAX_HEADER_COUNT: usize = 256;
pub const HARD_MAX_TARGET_LEN: usize = 8 * 1024;
pub const HARD_MAX_ID_LEN: usize = 255;
pub const HARD_MAX_REQUEST_BYTES: u64 = 4 * 1024 * 1024 * 1024;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct Limits {
pub max_body_len: usize,
pub max_header_bytes: usize,
pub max_header_count: usize,
pub max_target_len: usize,
pub max_request_bytes: u64,
}
impl Default for Limits {
fn default() -> Self {
Self {
max_body_len: 8 * 1024 * 1024,
max_header_bytes: 16 * 1024,
max_header_count: 64,
max_target_len: HARD_MAX_TARGET_LEN,
max_request_bytes: 1024 * 1024 * 1024,
}
}
}
impl Limits {
pub fn validate(self) -> Result<Self, Error> {
if self.max_body_len > HARD_MAX_BODY_LEN
|| self.max_header_bytes > HARD_MAX_HEADER_BYTES
|| self.max_header_count > HARD_MAX_HEADER_COUNT
|| self.max_target_len > HARD_MAX_TARGET_LEN
|| self.max_request_bytes == 0
|| self.max_request_bytes > HARD_MAX_REQUEST_BYTES
{
return Err(Error::InvalidConfiguration);
}
Ok(self)
}
}