use std::time::Duration;
use crate::packets::{guid::Guid, smb2::Dialect};
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum EncryptionMode {
#[default]
Allowed,
Required,
Disabled,
}
impl EncryptionMode {
pub fn is_required(&self) -> bool {
matches!(self, Self::Required)
}
pub fn is_disabled(&self) -> bool {
matches!(self, Self::Disabled)
}
}
#[derive(Debug, Default, Clone)]
pub struct ConnectionConfig {
pub timeout: Option<Duration>,
pub min_dialect: Option<Dialect>,
pub max_dialect: Option<Dialect>,
pub encryption_mode: EncryptionMode,
pub compression_enabled: bool,
pub client_name: Option<String>,
pub client_guid: Option<Guid>,
}
impl ConnectionConfig {
pub fn validate(&self) -> crate::Result<()> {
if let (Some(min), Some(max)) = (self.min_dialect, self.max_dialect) {
if min > max {
return Err(crate::Error::InvalidConfiguration(
"Minimum dialect is greater than maximum dialect".to_string(),
));
}
}
Ok(())
}
}