1#![allow(non_snake_case)]
2#![allow(non_upper_case_globals)]
3#![allow(non_camel_case_types)]
4
5pub const ENET_PROTOCOL_MINIMUM_MTU: u32 = 576;
6pub const ENET_PROTOCOL_MAXIMUM_MTU: u32 = 4096;
7pub const ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS: u32 = 32;
8pub const ENET_PROTOCOL_MINIMUM_WINDOW_SIZE: u32 = 4096;
9pub const ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE: u32 = 65536;
10pub const ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT: u32 = 1;
11pub const ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT: u32 = 255;
12pub const ENET_PROTOCOL_MAXIMUM_PEER_ID: u32 = 0xFFF;
13pub const ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT: u32 = 1024 * 1024;
14
15#[repr(u32)]
16pub enum ENetProtocolCommand {
17 ENET_PROTOCOL_COMMAND_NONE = 0,
18 ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1,
19 ENET_PROTOCOL_COMMAND_CONNECT = 2,
20 ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3,
21 ENET_PROTOCOL_COMMAND_DISCONNECT = 4,
22 ENET_PROTOCOL_COMMAND_PING = 5,
23 ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6,
24 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7,
25 ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8,
26 ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9,
27 ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10,
28 ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11,
29 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT = 12,
30 ENET_PROTOCOL_COMMAND_COUNT = 13,
31
32 ENET_PROTOCOL_COMMAND_MASK = 0x0F,
33}
34
35#[repr(u32)]
36pub enum ENetProtocolFlag {
37 ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = 1 << 7,
38 ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = 1 << 6,
39 ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = 1 << 14,
40 ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = 1 << 15,
41
42 ENET_PROTOCOL_HEADER_FLAG_MASK = ENetProtocolFlag::ENET_PROTOCOL_HEADER_FLAG_COMPRESSED as u32
43 | ENetProtocolFlag::ENET_PROTOCOL_HEADER_FLAG_SENT_TIME as u32,
44
45 ENET_PROTOCOL_HEADER_SESSION_MASK = 3 << 12,
46 ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12,
47}
48
49#[derive(Copy, Clone)]
50pub struct ENetProtocolHeader {
51 pub peerID: u16,
52 pub sentTime: u16,
53}
54
55#[derive(Copy, Clone, Default)]
56pub struct ENetProtocolCommandHeader {
57 pub command: u8,
58 pub channelID: u8,
59 pub reliableSequenceNumber: u16,
60}
61
62#[derive(Copy, Clone, Default)]
63pub struct ENetProtocolAcknowledge {
64 pub header: ENetProtocolCommandHeader,
65 pub receivedReliableSequenceNumber: u16,
66 pub receivedSentTime: u16,
67}
68
69#[derive(Copy, Clone, Default)]
70pub struct ENetProtocolConnect {
71 pub header: ENetProtocolCommandHeader,
72 pub outgoingPeerID: u16,
73 pub incomingSessionID: u8,
74 pub outgoingSessionID: u8,
75 pub mtu: u32,
76 pub windowSize: u32,
77 pub channelCount: u32,
78 pub incomingBandwidth: u32,
79 pub outgoingBandwidth: u32,
80 pub packetThrottleInterval: u32,
81 pub packetThrottleAcceleration: u32,
82 pub packetThrottleDeceleration: u32,
83 pub connectID: u32,
84 pub data: u32,
85}
86
87#[derive(Copy, Clone, Default)]
88pub struct ENetProtocolVerifyConnect {
89 pub header: ENetProtocolCommandHeader,
90 pub outgoingPeerID: u16,
91 pub incomingSessionID: u8,
92 pub outgoingSessionID: u8,
93 pub mtu: u32,
94 pub windowSize: u32,
95 pub channelCount: u32,
96 pub incomingBandwidth: u32,
97 pub outgoingBandwidth: u32,
98 pub packetThrottleInterval: u32,
99 pub packetThrottleAcceleration: u32,
100 pub packetThrottleDeceleration: u32,
101 pub connectID: u32,
102}
103
104#[derive(Copy, Clone, Default)]
105pub struct ENetProtocolBandwidthLimit {
106 pub header: ENetProtocolCommandHeader,
107 pub incomingBandwidth: u32,
108 pub outgoingBandwidth: u32,
109}
110
111#[derive(Copy, Clone, Default)]
112pub struct ENetProtocolThrottleConfigure {
113 pub header: ENetProtocolCommandHeader,
114 pub packetThrottleInterval: u32,
115 pub packetThrottleAcceleration: u32,
116 pub packetThrottleDeceleration: u32,
117}
118
119#[derive(Copy, Clone, Default)]
120pub struct ENetProtocolDisconnect {
121 pub header: ENetProtocolCommandHeader,
122 pub data: u32,
123}
124
125#[derive(Copy, Clone, Default)]
126pub struct ENetProtocolPing {
127 pub header: ENetProtocolCommandHeader,
128}
129
130#[derive(Copy, Clone, Default)]
131pub struct ENetProtocolSendReliable {
132 pub header: ENetProtocolCommandHeader,
133 pub dataLength: u16,
134}
135
136#[derive(Copy, Clone, Default)]
137pub struct ENetProtocolSendUnreliable {
138 pub header: ENetProtocolCommandHeader,
139 pub unreliableSequenceNumber: u16,
140 pub dataLength: u16,
141}
142
143#[derive(Copy, Clone, Default)]
144pub struct ENetProtocolSendUnsequenced {
145 pub header: ENetProtocolCommandHeader,
146 pub unsequencedGroup: u16,
147 pub dataLength: u16,
148}
149
150#[derive(Copy, Clone, Default)]
151pub struct ENetProtocolSendFragment {
152 pub header: ENetProtocolCommandHeader,
153 pub startSequenceNumber: u16,
154 pub dataLength: u16,
155 pub fragmentCount: u32,
156 pub fragmentNumber: u32,
157 pub totalLength: u32,
158 pub fragmentOffset: u32,
159}
160
161#[derive(Copy, Clone)]
162pub union ENetProtocol {
163 pub header: ENetProtocolCommandHeader,
164 pub acknowledge: ENetProtocolAcknowledge,
165 pub connect: ENetProtocolConnect,
166 pub verifyConnect: ENetProtocolVerifyConnect,
167 pub disconnect: ENetProtocolDisconnect,
168 pub ping: ENetProtocolPing,
169 pub sendReliable: ENetProtocolSendReliable,
170 pub sendUnreliable: ENetProtocolSendUnreliable,
171 pub sendUnsequenced: ENetProtocolSendUnsequenced,
172 pub sendFragment: ENetProtocolSendFragment,
173 pub bandwidthLimit: ENetProtocolBandwidthLimit,
174 pub throttleConfigure: ENetProtocolThrottleConfigure,
175}
176
177impl Default for ENetProtocol {
178 fn default() -> Self {
179 Self {
180 header: ENetProtocolCommandHeader::default()
181 }
182 }
183}