pub struct State {
pub port: u16,
pub directory: Option<PathBuf>,
pub max_upload: usize,
pub ip: IpAddr,
pub db_type: DatabaseType,
pub started: SystemTime,
pub db_config: MDBConfig,
/* private fields */
}
Expand description
State & configuration of the running server instance
Fields§
§port: u16
The port which will be used to listen for connections.
directory: Option<PathBuf>
The directory to store malware samples if we’re keeping them.
max_upload: usize
Maximum upload size
ip: IpAddr
The IP to use for listening for connections
db_type: DatabaseType
Handle to the database connection
started: SystemTime
Start time of the server
db_config: MDBConfig
Configuration which is stored in the database
Implementations§
Source§impl State
impl State
Sourcepub async fn new(
port: u16,
directory: Option<PathBuf>,
max_upload: usize,
ip: IpAddr,
db_string: &str,
cert: Option<PathBuf>,
key: Option<PathBuf>,
pg_cert: Option<PathBuf>,
vt_client: Option<VirusTotalClient>,
) -> Result<Self>
pub async fn new( port: u16, directory: Option<PathBuf>, max_upload: usize, ip: IpAddr, db_string: &str, cert: Option<PathBuf>, key: Option<PathBuf>, pg_cert: Option<PathBuf>, vt_client: Option<VirusTotalClient>, ) -> Result<Self>
New server state object given a few configuration parameters
§Errors
- If there’s a certificate and not a key, or a key and not a certificate; if either don’t exist.
- If the sample storage directory doesn’t exist.
- if the database configuration isn’t valid or if the Postgres server can’t be reached.
Sourcepub async fn store_bytes(&self, data: &[u8]) -> Result<bool>
pub async fn store_bytes(&self, data: &[u8]) -> Result<bool>
Store the sample with a depth of three based on the sample’s SHA-256 hash, even if compressed
§Errors
- If the file can’t be written.
- If a necessary sub-directory can’t be created.
Sourcepub async fn retrieve_bytes(&self, sha256: &String) -> Result<Vec<u8>>
pub async fn retrieve_bytes(&self, sha256: &String) -> Result<Vec<u8>>
Retrieve a sample given the SHA-256 hash
Assumes that MalwareDB
permissions have already been checked to ensure this is permitted.
§Errors
- The file could not be read, maybe because it doesn’t exist.
- Failure to decrypt or decompress (corruption).
Sourcepub fn since(&self) -> Duration
pub fn since(&self) -> Duration
Get the duration for which the server has been running
§Panics
Despite the unwrap()
this function will not panic as the data used is guaranteed to be valid.
Sourcepub async fn get_info(&self) -> Result<ServerInfo>
pub async fn get_info(&self) -> Result<ServerInfo>
Sourcepub async fn serve(self) -> Result<()>
pub async fn serve(self) -> Result<()>
The server listens and responds to requests. Does not return unless there’s an error.
§Errors
- If the certificate and private key could not be parsed or are not valid.
- If the IP address and port are already in use.
- If the service doesn’t have permission to open the port.
§Panics
- The
.unwrap()
calls won’t panic because the data would have already been validated.