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 40 41 42 43 44 45 46 47 48 49 50 51 52
use crate::smb2::Smb2Msg; use crate::smb1::Smb1Msg; use thiserror::Error; use nom; use std::io; pub type Result<T> = std::result::Result<T, Error>; #[derive(Debug, Error)] pub enum Error { #[error("No enough data was received")] NotEnoughData, #[error("{0}")] GenericParserError(String), #[error("{0}")] IO(io::Error), #[error("Unknown packet version")] UnknownVersion, #[error("Unknown SMB1 command {0}")] Smb1UnknownCommand(u8), #[error("Unexpected SMB1 response")] Smb1UnexpectedResponse(Smb1Msg), #[error("Unknown SMB2 command {0}")] Smb2UnknownCommand(u16), #[error("Unexpected SMB2 response")] Smb2UnexpectedResponse(Smb2Msg), } impl From<nom::Err<nom::error::Error<& [u8]>>> for Error { fn from(e: nom::Err<nom::error::Error<& [u8]>>) -> Self { if let nom::Err::Error(ref e) = e { if e.code == nom::error::ErrorKind::Eof { return Self::NotEnoughData; } } return Self::GenericParserError(e.to_string()); } } impl From<io::Error> for Error { fn from(e: io::Error) -> Self { return Self::IO(e); } }