Skip to main content

enet_rust/include/
h_protocol.rs

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}