1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use Duration;
// header typs (bitflags)
pub const UDX_HEADER_DATA: u32 = 1;
pub const UDX_HEADER_END: u32 = 2;
pub const UDX_HEADER_SACK: u32 = 4;
pub const UDX_HEADER_MESSAGE: u32 = 8;
pub const UDX_HEADER_DESTROY: u32 = 16;
/// Max transmit attempts per packet
pub const UDX_MAX_TRANSMITS: u8 = 5;
pub const UDX_CLOCK_GRANULARITY_MS: Duration = from_millis;
pub const UDX_HEADER_SIZE: usize = 20;
pub const UDX_MAX_DATA_SIZE: usize = 1380;
pub const UDX_MAGIC_BYTE: u8 = 255;
pub const UDX_VERSION: u8 = 1;
pub const UDX_DEFAULT_TTL: u32 = 64;
pub const UDX_MSS: usize = 1460;
pub const UDX_MTU: usize = 1400; // TODO: 1200
pub const UDX_DATA_MTU: usize = UDX_MTU - UDX_HEADER_SIZE;
pub const UDX_SOCKET_RECEIVING: u32 = 1;
pub const UDX_SOCKET_BOUND: u32 = 2;
pub const UDX_SOCKET_CLOSING: u32 = 4;
pub const UDX_SOCKET_CLOSING_HANDLES: u32 = 8;
pub const UDX_PACKET_STREAM_STATE: u32 = 1;
pub const UDX_PACKET_STREAM_WRITE: u32 = 2;
pub const UDX_PACKET_STREAM_SEND: u32 = 4;
pub const UDX_PACKET_STREAM_DESTROY: u32 = 8;
pub const UDX_PACKET_SEND: u32 = 16;
pub const UDX_PACKET_CALLBACK: u32 =
UDX_PACKET_STREAM_SEND | UDX_PACKET_STREAM_DESTROY | UDX_PACKET_SEND;
pub const UDX_PACKET_FREE_ON_SEND: u32 = UDX_PACKET_STREAM_STATE | UDX_PACKET_STREAM_DESTROY;
pub const UDX_HEADER_DATA_OR_END: u32 = UDX_HEADER_DATA | UDX_HEADER_END;
pub const UDX_STREAM_CONNECTED: u32 = 1;
pub const UDX_STREAM_RECEIVING: u32 = 2;
pub const UDX_STREAM_READING: u32 = 4;
pub const UDX_STREAM_ENDING: u32 = 8;
pub const UDX_STREAM_ENDING_REMOTE: u32 = 16;
pub const UDX_STREAM_ENDED: u32 = 32;
pub const UDX_STREAM_ENDED_REMOTE: u32 = 64;
pub const UDX_STREAM_DESTROYING: u32 = 128;
pub const UDX_STREAM_DESTROYED: u32 = 256;
pub const UDX_STREAM_DESTROYED_REMOTE: u32 = 512;
pub const UDX_STREAM_CLOSED: u32 = 1024;
pub const UDX_STREAM_ALL_DESTROYED: u32 = UDX_STREAM_DESTROYED | UDX_STREAM_DESTROYED_REMOTE;
pub const UDX_STREAM_ALL_ENDED: u32 = UDX_STREAM_ENDED | UDX_STREAM_ENDED_REMOTE;
pub const UDX_STREAM_DEAD: u32 =
UDX_STREAM_ALL_DESTROYED | UDX_STREAM_DESTROYING | UDX_STREAM_CLOSED;
pub const UDX_STREAM_SHOULD_READ: u32 = UDX_STREAM_ENDED_REMOTE | UDX_STREAM_DEAD;
pub const UDX_STREAM_READ: u32 = 0;
pub const UDX_STREAM_SHOULD_END: u32 = UDX_STREAM_ENDING | UDX_STREAM_ENDED | UDX_STREAM_DEAD;
pub const UDX_STREAM_END: u32 = UDX_STREAM_ENDING;
pub const UDX_STREAM_SHOULD_END_REMOTE: u32 =
UDX_STREAM_ENDED_REMOTE | UDX_STREAM_DEAD | UDX_STREAM_ENDING_REMOTE;
pub const UDX_STREAM_END_REMOTE: u32 = UDX_STREAM_ENDING_REMOTE;