]> git.lizzy.rs Git - mt_rudp.git/blob - src/common.rs
bdae6d2d28489bf112a7c1be9e087402db0fb28c
[mt_rudp.git] / src / common.rs
1 use async_trait::async_trait;
2 use num_enum::TryFromPrimitive;
3 use std::{borrow::Cow, fmt::Debug, io};
4
5 pub const PROTO_ID: u32 = 0x4f457403;
6 pub const UDP_PKT_SIZE: usize = 512;
7 pub const NUM_CHANS: usize = 3;
8 pub const REL_BUFFER: usize = 0x8000;
9 pub const INIT_SEQNUM: u16 = 65500;
10 pub const TIMEOUT: u64 = 30;
11 pub const PING_TIMEOUT: u64 = 5;
12
13 #[async_trait]
14 pub trait UdpSender: Send + Sync {
15     async fn send(&self, data: &[u8]) -> io::Result<()>;
16 }
17
18 #[async_trait]
19 pub trait UdpReceiver: Send {
20     async fn recv(&mut self) -> io::Result<Vec<u8>>;
21 }
22
23 #[derive(Debug, Copy, Clone, PartialEq)]
24 #[repr(u16)]
25 pub enum PeerID {
26     Nil = 0,
27     Srv,
28     CltMin,
29 }
30
31 #[derive(Debug, Copy, Clone, PartialEq, TryFromPrimitive)]
32 #[repr(u8)]
33 pub enum PktType {
34     Ctl = 0,
35     Orig,
36     Split,
37     Rel,
38 }
39
40 #[derive(Debug, Copy, Clone, PartialEq, TryFromPrimitive)]
41 #[repr(u8)]
42 pub enum CtlType {
43     Ack = 0,
44     SetPeerID,
45     Ping,
46     Disco,
47 }
48
49 #[derive(Debug)]
50 pub struct Pkt<'a> {
51     pub unrel: bool,
52     pub chan: u8,
53     pub data: Cow<'a, [u8]>,
54 }