40 lines
811 B
Rust
40 lines
811 B
Rust
|
|
//! Classify decrypted application plaintext before it hits the message log.
|
||
|
|
|
||
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||
|
|
pub enum Kind {
|
||
|
|
Chat,
|
||
|
|
Loc,
|
||
|
|
Profile,
|
||
|
|
Invoice,
|
||
|
|
Receipt,
|
||
|
|
Ping,
|
||
|
|
Drop,
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn classify(pt: &[u8]) -> Kind {
|
||
|
|
if pt.starts_with(b"loc ") {
|
||
|
|
return Kind::Loc;
|
||
|
|
}
|
||
|
|
if pt.starts_with(b"prf ") {
|
||
|
|
return Kind::Profile;
|
||
|
|
}
|
||
|
|
if pt.starts_with(b"inv ") {
|
||
|
|
return Kind::Invoice;
|
||
|
|
}
|
||
|
|
if pt.starts_with(b"rcp ") {
|
||
|
|
return Kind::Receipt;
|
||
|
|
}
|
||
|
|
if pt.starts_with(b"png ") {
|
||
|
|
return Kind::Ping;
|
||
|
|
}
|
||
|
|
if pt.len() >= 4
|
||
|
|
&& pt[0].is_ascii_lowercase()
|
||
|
|
&& pt[1].is_ascii_lowercase()
|
||
|
|
&& pt[2].is_ascii_lowercase()
|
||
|
|
&& pt[3] == b' '
|
||
|
|
{
|
||
|
|
return Kind::Drop;
|
||
|
|
}
|
||
|
|
Kind::Chat
|
||
|
|
}
|