pub struct IncomingMessage {
    pub from: String,
    pub to: String,
    pub message_id: String,
    pub date: usize,
    pub nonce: Vec<u8>,
    pub box_data: Vec<u8>,
    pub nickname: Option<String>,
}
Expand description

An incoming message received from Threema Gateway.

To receive the message, you’ll need to provide your own HTTP callback server implementation. The request body bytes that are received this way can then be parsed using IncomingMessage::from_urlencoded_bytes.

Note: The IncomingMessage::from_urlencoded_bytes function validates the MAC, that’s why it’s not included in here again.

Further docs:

Fields§

§from: String

Sender identity (8 characters)

§to: String

Your API identity (8 characters, usually starts with ‘*’)

§message_id: String

Message ID assigned by the sender (8 bytes, hex encoded)

§date: usize

Message date set by the sender (UNIX timestamp)

§nonce: Vec<u8>

Nonce used for encryption (24 bytes, hex encoded)

§box_data: Vec<u8>

Encrypted message data (max. 4000 bytes, hex encoded)

§nickname: Option<String>

Public nickname of the sender, if set

Implementations§

source§

impl IncomingMessage

source

pub fn from_urlencoded_bytes( bytes: impl AsRef<[u8]>, api_secret: &str ) -> Result<Self, ApiError>

Deserialize an incoming Threema Gateway message in application/x-www-form-urlencoded format.

This will validate the MAC. If the MAC is invalid, ApiError::InvalidMac will be returned.

Note: You should probably not use this directly, but instead use E2eApi::decode_incoming_message!

source

pub fn decrypt_box( &self, public_key: &PublicKey, private_key: &SecretKey ) -> Result<Vec<u8>, CryptoError>

Decrypt the box using the specified keys and remove padding.

The public key belongs to the sender in the from field. The private key belongs to the gateway ID in the to field.

The PKCS#7 padding will be removed. If the padding is missing or invalid, an CryptoError::BadPadding will be returned.

Note: For more convenience, you might want to prefer the shortcut E2eApi::decrypt_incoming_message!

Trait Implementations§

source§

impl Debug for IncomingMessage

source§

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

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

impl<'de> Deserialize<'de> for IncomingMessage

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

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> Same for T

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,