DEADSOFTWARE

fixed player menu titles
[d2df-sdl.git] / src / lib / enet / enetprotocol.pp
1 {$mode objfpc}
2 unit enetprotocol;
4 {
5 ENet - Reliable UDP networking library
7 FreePascal DLL header: enetprotocol.pp
8 Copyright (c) 2015 Dmitry D. Chernov aka Black Doomer
10 Original file: protocol.h
11 Copyright (c) 2002-2014 Lee Salzman
13 Version 1 for 1.3.12: 25.02.2015
15 Permission is hereby granted, free of charge, to any person obtaining a copy
16 of this software and associated documentation files (the "Software"), to deal
17 in the Software without restriction, including without limitation the rights
18 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19 copies of the Software, and to permit persons to whom the Software is
20 furnished to do so, subject to the following conditions:
22 The above copyright notice and this permission notice shall be included in all
23 copies or substantial portions of the Software.
25 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31 SOFTWARE.
32 }
34 interface
36 uses enettypes;
38 const
39 ENET_PROTOCOL_MINIMUM_MTU = 576;
40 ENET_PROTOCOL_MAXIMUM_MTU = 4096;
41 ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32;
42 ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096;
43 ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 65536;
44 ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1;
45 ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255;
46 ENET_PROTOCOL_MAXIMUM_PEER_ID = $FFF;
47 ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT = 1024 * 1024;
49 // ENetProtocolFlag
50 ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = 1 shl 7;
51 ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = 1 shl 6;
52 ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = 1 shl 14;
53 ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = 1 shl 15;
54 ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED or
55 ENET_PROTOCOL_HEADER_FLAG_SENT_TIME;
56 ENET_PROTOCOL_HEADER_SESSION_MASK = 3 shl 12;
57 ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12;
59 type
60 ENetProtocolCommand = ( ENET_PROTOCOL_COMMAND_NONE,
61 ENET_PROTOCOL_COMMAND_ACKNOWLEDGE,
62 ENET_PROTOCOL_COMMAND_CONNECT,
63 ENET_PROTOCOL_COMMAND_VERIFY_CONNECT,
64 ENET_PROTOCOL_COMMAND_DISCONNECT,
65 ENET_PROTOCOL_COMMAND_PING,
66 ENET_PROTOCOL_COMMAND_SEND_RELIABLE,
67 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE,
68 ENET_PROTOCOL_COMMAND_SEND_FRAGMENT,
69 ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED,
70 ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT,
71 ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE,
72 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT,
73 ENET_PROTOCOL_COMMAND_COUNT,
74 ENET_PROTOCOL_COMMAND_MASK = $0F );
76 ENetProtocolFlag = Integer; //alias for FPC-uncompatible enum, placed in const
78 {$PACKRECORDS 1}
80 pENetProtocolHeader = ^ENetProtocolHeader;
81 ENetProtocolHeader = record
82 peerID : enet_uint16;
83 sentTime : enet_uint16;
84 end;
86 pENetProtocolCommandHeader = ^ENetProtocolCommandHeader;
87 ENetProtocolCommandHeader = record
88 command : enet_uint8;
89 channelID : enet_uint8;
90 reliableSequenceNumber : enet_uint16;
91 end;
93 pENetProtocolAcknowledge = ^ENetProtocolAcknowledge;
94 ENetProtocolAcknowledge = record
95 header : ENetProtocolCommandHeader;
96 receivedReliableSequenceNumber : enet_uint16;
97 receivedSentTime : enet_uint16;
98 end;
100 pENetProtocolConnect = ^ENetProtocolConnect;
101 ENetProtocolConnect = record
102 header : ENetProtocolCommandHeader;
103 outgoingPeerID : enet_uint16;
104 incomingSessionID : enet_uint8;
105 outgoingSessionID : enet_uint8;
106 mtu : enet_uint32;
107 windowSize : enet_uint32;
108 channelCount : enet_uint32;
109 incomingBandwidth : enet_uint32;
110 outgoingBandwidth : enet_uint32;
111 packetThrottleInterval : enet_uint32;
112 packetThrottleAcceleration : enet_uint32;
113 packetThrottleDeceleration : enet_uint32;
114 connectID : enet_uint32;
115 data : enet_uint32;
116 end;
118 pENetProtocolVerifyConnect = ^ENetProtocolVerifyConnect;
119 ENetProtocolVerifyConnect = record
120 header : ENetProtocolCommandHeader;
121 outgoingPeerID : enet_uint16;
122 incomingSessionID : enet_uint8;
123 outgoingSessionID : enet_uint8;
124 mtu : enet_uint32;
125 windowSize : enet_uint32;
126 channelCount : enet_uint32;
127 incomingBandwidth : enet_uint32;
128 outgoingBandwidth : enet_uint32;
129 packetThrottleInterval : enet_uint32;
130 packetThrottleAcceleration : enet_uint32;
131 packetThrottleDeceleration : enet_uint32;
132 connectID : enet_uint32;
133 end;
135 pENetProtocolBandwidthLimit = ^ENetProtocolBandwidthLimit;
136 ENetProtocolBandwidthLimit = record
137 header : ENetProtocolCommandHeader;
138 incomingBandwidth : enet_uint32;
139 outgoingBandwidth : enet_uint32;
140 end;
142 pENetProtocolThrottleConfigure = ^ENetProtocolThrottleConfigure;
143 ENetProtocolThrottleConfigure = record
144 header : ENetProtocolCommandHeader;
145 packetThrottleInterval : enet_uint32;
146 packetThrottleAcceleration : enet_uint32;
147 packetThrottleDeceleration : enet_uint32;
148 end;
150 pENetProtocolDisconnect = ^ENetProtocolDisconnect;
151 ENetProtocolDisconnect = record
152 header : ENetProtocolCommandHeader;
153 data : enet_uint32;
154 end;
156 pENetProtocolPing = ^ENetProtocolPing;
157 ENetProtocolPing = record
158 header : ENetProtocolCommandHeader;
159 end;
161 pENetProtocolSendReliable = ^ENetProtocolSendReliable;
162 ENetProtocolSendReliable = record
163 header : ENetProtocolCommandHeader;
164 dataLength : enet_uint16;
165 end;
167 pENetProtocolSendUnreliable = ^ENetProtocolSendUnreliable;
168 ENetProtocolSendUnreliable = record
169 header : ENetProtocolCommandHeader;
170 unreliableSequenceNumber : enet_uint16;
171 dataLength : enet_uint16;
172 end;
174 pENetProtocolSendUnsequenced = ^ENetProtocolSendUnsequenced;
175 ENetProtocolSendUnsequenced = record
176 header : ENetProtocolCommandHeader;
177 unsequencedGroup : enet_uint16;
178 dataLength : enet_uint16;
179 end;
181 pENetProtocolSendFragment = ^ENetProtocolSendFragment;
182 ENetProtocolSendFragment = record
183 header : ENetProtocolCommandHeader;
184 startSequenceNumber : enet_uint16;
185 dataLength : enet_uint16;
186 fragmentCount : enet_uint32;
187 fragmentNumber : enet_uint32;
188 totalLength : enet_uint32;
189 fragmentOffset : enet_uint32;
190 end;
192 pENetProtocol = ^TENetProtocol;
193 TENetProtocol = record //union
194 case Byte of
195 0 : (header : ENetProtocolCommandHeader);
196 1 : (acknowledge : ENetProtocolAcknowledge);
197 2 : (connect : ENetProtocolConnect);
198 3 : (verifyConnect : ENetProtocolVerifyConnect);
199 4 : (disconnect : ENetProtocolDisconnect);
200 5 : (ping : ENetProtocolPing);
201 6 : (sendReliable : ENetProtocolSendReliable);
202 7 : (sendUnreliable : ENetProtocolSendUnreliable);
203 8 : (sendUnsequenced : ENetProtocolSendUnsequenced);
204 9 : (sendFragment : ENetProtocolSendFragment);
205 10: (bandwidthLimit : ENetProtocolBandwidthLimit);
206 11: (throttleConfigure : ENetProtocolThrottleConfigure);
207 end;
209 {$PACKRECORDS DEFAULT}
211 implementation
213 end.