onionwire/src/dispatch.rs
Sirius DevOps c9d85d9ae5
Some checks failed
ci / test (push) Has been cancelled
release / aarch64 (push) Failing after 2m8s
feat: drop unknown typed frames instead of storing as chat
Classify decrypted plaintext before append_message so loc/prf/inv/rcp/png
and unknown xxx[space] prefixes never land in the message log.
2026-09-10 14:18:06 -04:00

39 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
}