Struct State

Source
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

Source

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.
Source

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.
Source

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).
Source

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.

Source

pub async fn get_info(&self) -> Result<ServerInfo>

Get server information

§Errors

An error would occur if the Postgres server could not be reached.

Source

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.

Trait Implementations§

Source§

impl Debug for State

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl TryFrom<State> for VtUpdater

Get a VtUpdater object if we have a VT API key

Source§

type Error = VtKeyMissingError

The type returned in the event of a conversion error.
Source§

fn try_from(state: State) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

§

impl !Freeze for State

§

impl !RefUnwindSafe for State

§

impl Send for State

§

impl Sync for State

§

impl Unpin for State

§

impl !UnwindSafe for State

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,