1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
use crate::smb2::Smb2Msg; use crate::smb1::Smb1Msg; use crate::utils::{check_smb_version, SmbVersion}; use crate::{Error, Result}; use crate::smb2::Smb2NegResp; #[derive(Clone, Debug, PartialEq)] pub enum SmbMsg { V1(Smb1Msg), V2(Smb2Msg) } impl SmbMsg { pub fn build(&self) -> Vec<u8> { match self { Self::V1(p) => p.build(), Self::V2(p) => p.build(), } } pub fn parse(raw: &[u8]) -> Result<Self> { let smb_version = check_smb_version(&raw)?; return Ok(match smb_version { SmbVersion::V1 => SmbMsg::V1(Smb1Msg::parse(raw)?), SmbVersion::V2 => SmbMsg::V2(Smb2Msg::parse(raw)?), _ => return Err(Error::UnknownVersion), }); } } #[derive(Clone, Debug, PartialEq)] pub enum SmbNegResp { V2(Smb2NegResp) }