VNOX-Server/gateway/src/proto/packet/id.rs
loki5512344 742cf03a5f
Phase 2: PostgreSQL, E2EE, channel CRUD, voice signaling, Slint migration
Server:
- PostgreSQL backend (Pool enum over Sqlite/PgPool, all storage methods dual-dialect)
- E2EE for DM (4 new protobuf packets, handlers, storage of ciphertext only)
- ChannelEdit packet + server-authoritative channel create/delete
- Gateway → voice-node membership signaling via broadcast channel

Client:
- E2EE crypto (X25519 from Ed25519, HKDF, ChaCha20-Poly1305) + UI lock icons
- E2EE net layer (PID 0x0071-0x0074, JSON payloads, dispatch, session handlers)
- Slint migration: all .slint files, bridge.rs, update.rs, main.rs rewritten
- Removed egui UI (~50 files) and all dead code (clean clippy -D warnings)
2026-07-14 13:25:14 +02:00

182 lines
6.2 KiB
Rust

#[repr(u16)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PacketId {
Hello = 0x0001,
Auth = 0x0002,
Session = 0x0003,
Ping = 0x0004,
Pong = 0x0005,
VoicePacket = 0x0010,
VoiceState = 0x0011,
ChatMessage = 0x0020,
ChatHistory = 0x0021,
JoinChannel = 0x0030,
LeaveChannel = 0x0031,
ChannelState = 0x0032,
ChannelCreate = 0x0033,
ChannelDelete = 0x0034,
ChannelList = 0x0035,
ChannelEdit = 0x0036,
UserJoin = 0x0040,
UserLeave = 0x0041,
PermissionCheck = 0x0050,
PermissionDeny = 0x0051,
DmStart = 0x0060,
DmMessage = 0x0061,
DmHistory = 0x0062,
DmReadAck = 0x0063,
E2eeDmKeyExchange = 0x0071,
E2eeDmKeyExchangeAck = 0x0072,
E2eeDmMessage = 0x0073,
E2eeDmHistory = 0x0074,
ReadReceipt = 0x0064,
ReadReceiptBroadcast = 0x0065,
MessageReactionAdd = 0x0066,
MessageReactionRemove = 0x0067,
MessageEdit = 0x0068,
MessageDelete = 0x0069,
TypingStart = 0x0070,
GuildCreate = 0x0100,
GuildDelete = 0x0101,
GuildList = 0x0102,
GuildMemberJoin = 0x0103,
GuildMemberLeave = 0x0104,
GuildMemberKick = 0x0105,
RoleCreate = 0x0106,
RoleDelete = 0x0107,
InviteCreate = 0x0108,
InviteAccept = 0x0109,
InviteDelete = 0x010A,
UserRoleUpdate = 0x010B,
GuildAuditLogFetch = 0x010C,
GuildAuditLog = 0x010D,
GuildMemberListFetch = 0x010E,
GuildMemberList = 0x010F,
GuildRoleAssign = 0x0110,
GuildRoleUnassign = 0x0111,
GuildRoleListFetch = 0x0112,
GuildRoleList = 0x0113,
PresenceUpdate = 0x0140,
PresenceSync = 0x0141,
PresenceEvent = 0x0142,
FriendRequest = 0x0150,
FriendAccept = 0x0151,
FriendDecline = 0x0152,
FriendRemove = 0x0153,
FriendList = 0x0154,
BlockUser = 0x0155,
UnblockUser = 0x0156,
BlockList = 0x0157,
Error = 0x00F0,
Disconnect = 0x00FF,
}
impl PacketId {
pub fn from_u16(v: u16) -> Option<Self> {
match v {
0x0001 => Some(Self::Hello),
0x0002 => Some(Self::Auth),
0x0003 => Some(Self::Session),
0x0004 => Some(Self::Ping),
0x0005 => Some(Self::Pong),
0x0010 => Some(Self::VoicePacket),
0x0011 => Some(Self::VoiceState),
0x0020 => Some(Self::ChatMessage),
0x0021 => Some(Self::ChatHistory),
0x0030 => Some(Self::JoinChannel),
0x0031 => Some(Self::LeaveChannel),
0x0032 => Some(Self::ChannelState),
0x0033 => Some(Self::ChannelCreate),
0x0034 => Some(Self::ChannelDelete),
0x0035 => Some(Self::ChannelList),
0x0036 => Some(Self::ChannelEdit),
0x0040 => Some(Self::UserJoin),
0x0041 => Some(Self::UserLeave),
0x0050 => Some(Self::PermissionCheck),
0x0051 => Some(Self::PermissionDeny),
0x0060 => Some(Self::DmStart),
0x0061 => Some(Self::DmMessage),
0x0062 => Some(Self::DmHistory),
0x0063 => Some(Self::DmReadAck),
0x0064 => Some(Self::ReadReceipt),
0x0065 => Some(Self::ReadReceiptBroadcast),
0x0066 => Some(Self::MessageReactionAdd),
0x0067 => Some(Self::MessageReactionRemove),
0x0068 => Some(Self::MessageEdit),
0x0069 => Some(Self::MessageDelete),
0x0070 => Some(Self::TypingStart),
0x0071 => Some(Self::E2eeDmKeyExchange),
0x0072 => Some(Self::E2eeDmKeyExchangeAck),
0x0073 => Some(Self::E2eeDmMessage),
0x0074 => Some(Self::E2eeDmHistory),
0x0100 => Some(Self::GuildCreate),
0x0101 => Some(Self::GuildDelete),
0x0102 => Some(Self::GuildList),
0x0103 => Some(Self::GuildMemberJoin),
0x0104 => Some(Self::GuildMemberLeave),
0x0105 => Some(Self::GuildMemberKick),
0x0106 => Some(Self::RoleCreate),
0x0107 => Some(Self::RoleDelete),
0x0108 => Some(Self::InviteCreate),
0x0109 => Some(Self::InviteAccept),
0x010A => Some(Self::InviteDelete),
0x010B => Some(Self::UserRoleUpdate),
0x010C => Some(Self::GuildAuditLogFetch),
0x010D => Some(Self::GuildAuditLog),
0x010E => Some(Self::GuildMemberListFetch),
0x010F => Some(Self::GuildMemberList),
0x0110 => Some(Self::GuildRoleAssign),
0x0111 => Some(Self::GuildRoleUnassign),
0x0112 => Some(Self::GuildRoleListFetch),
0x0113 => Some(Self::GuildRoleList),
0x0140 => Some(Self::PresenceUpdate),
0x0141 => Some(Self::PresenceSync),
0x0142 => Some(Self::PresenceEvent),
0x0150 => Some(Self::FriendRequest),
0x0151 => Some(Self::FriendAccept),
0x0152 => Some(Self::FriendDecline),
0x0153 => Some(Self::FriendRemove),
0x0154 => Some(Self::FriendList),
0x0155 => Some(Self::BlockUser),
0x0156 => Some(Self::UnblockUser),
0x0157 => Some(Self::BlockList),
0x00F0 => Some(Self::Error),
0x00FF => Some(Self::Disconnect),
_ => None,
}
}
}
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ErrorCode {
VersionMismatch = 0x01,
AuthFailed = 0x02,
SessionExpired = 0x03,
PermissionDenied = 0x04,
ChannelNotFound = 0x05,
RateLimited = 0x06,
InvalidPacket = 0x07,
NodeUnavailable = 0x08,
GuildNotFound = 0x09,
Blocked = 0x0A,
Internal = 0xFF,
}
impl ErrorCode {
pub fn from_u32(v: u32) -> Option<Self> {
match v {
0x01 => Some(Self::VersionMismatch),
0x02 => Some(Self::AuthFailed),
0x03 => Some(Self::SessionExpired),
0x04 => Some(Self::PermissionDenied),
0x05 => Some(Self::ChannelNotFound),
0x06 => Some(Self::RateLimited),
0x07 => Some(Self::InvalidPacket),
0x08 => Some(Self::NodeUnavailable),
0x09 => Some(Self::GuildNotFound),
0x0A => Some(Self::Blocked),
0xFF => Some(Self::Internal),
_ => None,
}
}
}