ScummVM API documentation
enet.h
Go to the documentation of this file.
1
5#ifndef __ENET_ENET_H__
6#define __ENET_ENET_H__
7
8#ifdef __cplusplus
9extern "C"
10{
11#endif
12
13#include <stdlib.h>
14
15#ifdef WIN32
16#include "win32.h"
17#else
18#include "unix.h"
19#endif
20
21#include "types.h"
22#include "protocol.h"
23#include "list.h"
24#include "callbacks.h"
25
26#define ENET_VERSION_MAJOR 1
27#define ENET_VERSION_MINOR 3
28#define ENET_VERSION_PATCH 17
29#define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
30#define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF)
31#define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF)
32#define ENET_VERSION_GET_PATCH(version) ((version)&0xFF)
33#define ENET_VERSION ENET_VERSION_CREATE(ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH)
34
35typedef enet_uint32 ENetVersion;
36
37struct _ENetHost;
38struct _ENetEvent;
39struct _ENetPacket;
40
41typedef enum _ENetSocketType
42{
43 ENET_SOCKET_TYPE_STREAM = 1,
44 ENET_SOCKET_TYPE_DATAGRAM = 2
45} ENetSocketType;
46
47typedef enum _ENetSocketWait
48{
49 ENET_SOCKET_WAIT_NONE = 0,
50 ENET_SOCKET_WAIT_SEND = (1 << 0),
51 ENET_SOCKET_WAIT_RECEIVE = (1 << 1),
52 ENET_SOCKET_WAIT_INTERRUPT = (1 << 2)
53} ENetSocketWait;
54
55typedef enum _ENetSocketOption
56{
57 ENET_SOCKOPT_NONBLOCK = 1,
58 ENET_SOCKOPT_BROADCAST = 2,
59 ENET_SOCKOPT_RCVBUF = 3,
60 ENET_SOCKOPT_SNDBUF = 4,
61 ENET_SOCKOPT_REUSEADDR = 5,
62 ENET_SOCKOPT_RCVTIMEO = 6,
63 ENET_SOCKOPT_SNDTIMEO = 7,
64 ENET_SOCKOPT_ERROR = 8,
65 ENET_SOCKOPT_NODELAY = 9
66} ENetSocketOption;
67
68typedef enum _ENetSocketShutdown
69{
70 ENET_SOCKET_SHUTDOWN_READ = 0,
71 ENET_SOCKET_SHUTDOWN_WRITE = 1,
72 ENET_SOCKET_SHUTDOWN_READ_WRITE = 2
73} ENetSocketShutdown;
74
75#define ENET_HOST_ANY 0
76#define ENET_HOST_BROADCAST 0xFFFFFFFFU
77#define ENET_PORT_ANY 0
78
89typedef struct _ENetAddress
90{
91 enet_uint32 host;
92 enet_uint16 port;
94
104typedef enum _ENetPacketFlag
105{
118
120 ENET_PACKET_FLAG_SENT = (1<<8)
122
123typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *);
124
148typedef struct _ENetPacket
149{
153 size_t dataLength;
154 ENetPacketFreeCallback freeCallback;
155 void * userData;
157
159{
160 ENetListNode acknowledgementList;
161 enet_uint32 sentTime;
162 ENetProtocol command;
164
166{
167 ENetListNode outgoingCommandList;
168 enet_uint16 reliableSequenceNumber;
169 enet_uint16 unreliableSequenceNumber;
170 enet_uint32 sentTime;
171 enet_uint32 roundTripTimeout;
172 enet_uint32 roundTripTimeoutLimit;
173 enet_uint32 fragmentOffset;
174 enet_uint16 fragmentLength;
175 enet_uint16 sendAttempts;
176 ENetProtocol command;
177 ENetPacket * packet;
179
181{
182 ENetListNode incomingCommandList;
183 enet_uint16 reliableSequenceNumber;
184 enet_uint16 unreliableSequenceNumber;
185 ENetProtocol command;
186 enet_uint32 fragmentCount;
187 enet_uint32 fragmentsRemaining;
188 enet_uint32 * fragments;
189 ENetPacket * packet;
191
192typedef enum _ENetPeerState
193{
194 ENET_PEER_STATE_DISCONNECTED = 0,
195 ENET_PEER_STATE_CONNECTING = 1,
196 ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2,
197 ENET_PEER_STATE_CONNECTION_PENDING = 3,
198 ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4,
199 ENET_PEER_STATE_CONNECTED = 5,
200 ENET_PEER_STATE_DISCONNECT_LATER = 6,
201 ENET_PEER_STATE_DISCONNECTING = 7,
202 ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8,
203 ENET_PEER_STATE_ZOMBIE = 9
204} ENetPeerState;
205
206#ifndef ENET_BUFFER_MAXIMUM
207#define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS)
208#endif
209
210enum
211{
212 ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024,
213 ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024,
214 ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000,
215 ENET_HOST_DEFAULT_MTU = 1400,
216 ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024,
217 ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024,
218
219 ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500,
220 ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
221 ENET_PEER_PACKET_THROTTLE_SCALE = 32,
222 ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
223 ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2,
224 ENET_PEER_PACKET_THROTTLE_DECELERATION = 2,
225 ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000,
226 ENET_PEER_PACKET_LOSS_SCALE = (1 << 16),
227 ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
228 ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
229 ENET_PEER_TIMEOUT_LIMIT = 32,
230 ENET_PEER_TIMEOUT_MINIMUM = 5000,
231 ENET_PEER_TIMEOUT_MAXIMUM = 30000,
232 ENET_PEER_PING_INTERVAL = 500,
233 ENET_PEER_UNSEQUENCED_WINDOWS = 64,
234 ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
235 ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32,
236 ENET_PEER_RELIABLE_WINDOWS = 16,
237 ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000,
238 ENET_PEER_FREE_RELIABLE_WINDOWS = 8
239};
240
241typedef struct _ENetChannel
242{
243 enet_uint16 outgoingReliableSequenceNumber;
244 enet_uint16 outgoingUnreliableSequenceNumber;
245 enet_uint16 usedReliableWindows;
246 enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS];
247 enet_uint16 incomingReliableSequenceNumber;
248 enet_uint16 incomingUnreliableSequenceNumber;
249 ENetList incomingReliableCommands;
250 ENetList incomingUnreliableCommands;
252
253typedef enum _ENetPeerFlag
254{
255 ENET_PEER_FLAG_NEEDS_DISPATCH = (1 << 0)
256} ENetPeerFlag;
257
263typedef struct _ENetPeer
264{
265 ENetListNode dispatchList;
266 struct _ENetHost * host;
267 enet_uint16 outgoingPeerID;
268 enet_uint16 incomingPeerID;
269 enet_uint32 connectID;
270 enet_uint8 outgoingSessionID;
271 enet_uint8 incomingSessionID;
273 void * data;
274 ENetPeerState state;
275 ENetChannel * channels;
279 enet_uint32 incomingBandwidthThrottleEpoch;
280 enet_uint32 outgoingBandwidthThrottleEpoch;
281 enet_uint32 incomingDataTotal;
282 enet_uint32 outgoingDataTotal;
283 enet_uint32 lastSendTime;
284 enet_uint32 lastReceiveTime;
285 enet_uint32 nextTimeout;
286 enet_uint32 earliestTimeout;
287 enet_uint32 packetLossEpoch;
288 enet_uint32 packetsSent;
289 enet_uint32 packetsLost;
291 enet_uint32 packetLossVariance;
292 enet_uint32 packetThrottle;
293 enet_uint32 packetThrottleLimit;
294 enet_uint32 packetThrottleCounter;
295 enet_uint32 packetThrottleEpoch;
296 enet_uint32 packetThrottleAcceleration;
297 enet_uint32 packetThrottleDeceleration;
298 enet_uint32 packetThrottleInterval;
299 enet_uint32 pingInterval;
300 enet_uint32 timeoutLimit;
301 enet_uint32 timeoutMinimum;
302 enet_uint32 timeoutMaximum;
303 enet_uint32 lastRoundTripTime;
304 enet_uint32 lowestRoundTripTime;
305 enet_uint32 lastRoundTripTimeVariance;
306 enet_uint32 highestRoundTripTimeVariance;
308 enet_uint32 roundTripTimeVariance;
309 enet_uint32 mtu;
310 enet_uint32 windowSize;
311 enet_uint32 reliableDataInTransit;
312 enet_uint16 outgoingReliableSequenceNumber;
313 ENetList acknowledgements;
314 ENetList sentReliableCommands;
315 ENetList sentUnreliableCommands;
316 ENetList outgoingCommands;
317 ENetList dispatchedCommands;
318 enet_uint16 flags;
319 enet_uint16 reserved;
320 enet_uint16 incomingUnsequencedGroup;
321 enet_uint16 outgoingUnsequencedGroup;
322 enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
323 enet_uint32 eventData;
324 size_t totalWaitingData;
326
329typedef struct _ENetCompressor
330{
332 void * context;
334 size_t (ENET_CALLBACK * compress) (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit);
336 size_t (ENET_CALLBACK * decompress) (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit);
338 void (ENET_CALLBACK * destroy) (void * context);
340
342typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (const ENetBuffer * buffers, size_t bufferCount);
343
345typedef int (ENET_CALLBACK * ENetInterceptCallback) (struct _ENetHost * host, struct _ENetEvent * event);
346
363typedef struct _ENetHost
364{
365 ENetSocket socket;
369 enet_uint32 bandwidthThrottleEpoch;
370 enet_uint32 mtu;
371 enet_uint32 randomSeed;
372 int recalculateBandwidthLimits;
374 size_t peerCount;
376 enet_uint32 serviceTime;
377 ENetList dispatchQueue;
378 int continueSending;
379 size_t packetSize;
380 enet_uint16 headerFlags;
381 ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS];
382 size_t commandCount;
383 ENetBuffer buffers [ENET_BUFFER_MAXIMUM];
384 size_t bufferCount;
386 ENetCompressor compressor;
387 enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU];
388 ENetAddress receivedAddress;
389 enet_uint8 * receivedData;
390 size_t receivedDataLength;
396 size_t connectedPeers;
397 size_t bandwidthLimitedPeers;
402
406typedef enum _ENetEventType
407{
410
415
424
433
439typedef struct _ENetEvent
440{
447
457ENET_API int enet_initialize (void);
458
466ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits);
467
472ENET_API void enet_deinitialize (void);
473
478ENET_API ENetVersion enet_linked_version (void);
479
493
497ENET_API ENetSocket enet_socket_create (ENetSocketType);
498ENET_API int enet_socket_bind (ENetSocket, const ENetAddress *);
499ENET_API int enet_socket_get_address (ENetSocket, ENetAddress *);
500ENET_API int enet_socket_listen (ENetSocket, int);
501ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *);
502ENET_API int enet_socket_connect (ENetSocket, const ENetAddress *);
503ENET_API int enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t);
504ENET_API int enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t);
505ENET_API int enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32);
506ENET_API int enet_socket_set_option (ENetSocket, ENetSocketOption, int);
507ENET_API int enet_socket_get_option (ENetSocket, ENetSocketOption, int *);
508ENET_API int enet_socket_shutdown (ENetSocket, ENetSocketShutdown);
509ENET_API void enet_socket_destroy (ENetSocket);
510ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *, enet_uint32);
511
526ENET_API int enet_address_set_host_ip (ENetAddress * address, const char * hostName);
527
536ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName);
537
546ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength);
547
556ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength);
557
560ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32);
561ENET_API void enet_packet_destroy (ENetPacket *);
562ENET_API int enet_packet_resize (ENetPacket *, size_t);
563ENET_API enet_uint32 enet_crc32 (const ENetBuffer *, size_t);
564
565ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32);
566ENET_API void enet_host_destroy (ENetHost *);
567ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t, enet_uint32);
568ENET_API int enet_host_check_events (ENetHost *, ENetEvent *);
569ENET_API int enet_host_service (ENetHost *, ENetEvent *, enet_uint32);
570ENET_API void enet_host_flush (ENetHost *);
571ENET_API void enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *);
572ENET_API void enet_host_compress (ENetHost *, const ENetCompressor *);
573ENET_API int enet_host_compress_with_range_coder (ENetHost * host);
574ENET_API void enet_host_channel_limit (ENetHost *, size_t);
575ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32);
576extern void enet_host_bandwidth_throttle (ENetHost *);
577extern enet_uint32 enet_host_random_seed (void);
578
579ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *);
580ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID);
581ENET_API void enet_peer_ping (ENetPeer *);
582ENET_API void enet_peer_ping_interval (ENetPeer *, enet_uint32);
583ENET_API void enet_peer_timeout (ENetPeer *, enet_uint32, enet_uint32, enet_uint32);
584ENET_API void enet_peer_reset (ENetPeer *);
585ENET_API void enet_peer_disconnect (ENetPeer *, enet_uint32);
586ENET_API void enet_peer_disconnect_now (ENetPeer *, enet_uint32);
587ENET_API void enet_peer_disconnect_later (ENetPeer *, enet_uint32);
588ENET_API void enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32);
589extern int enet_peer_throttle (ENetPeer *, enet_uint32);
590extern void enet_peer_reset_queues (ENetPeer *);
591extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *);
592extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16);
593extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, const void *, size_t, enet_uint32, enet_uint32);
594extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16);
595extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *, ENetIncomingCommand *);
596extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *, ENetIncomingCommand *);
597extern void enet_peer_on_connect (ENetPeer *);
598extern void enet_peer_on_disconnect (ENetPeer *);
599
600ENET_API void * enet_range_coder_create (void);
601ENET_API void enet_range_coder_destroy (void *);
602ENET_API size_t enet_range_coder_compress (void *, const ENetBuffer *, size_t, size_t, enet_uint8 *, size_t);
603ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, enet_uint8 *, size_t);
604
605extern size_t enet_protocol_command_size (enet_uint8);
606
607#ifdef __cplusplus
608}
609#endif
610
611#endif /* __ENET_ENET_H__ */
612
unsigned short enet_uint16
Definition: types.h:9
unsigned char enet_uint8
Definition: types.h:8
unsigned int enet_uint32
Definition: types.h:10
ENet callbacks.
int enet_address_get_host_ip(const ENetAddress *address, char *hostName, size_t nameLength)
int enet_address_get_host(const ENetAddress *address, char *hostName, size_t nameLength)
int enet_address_set_host_ip(ENetAddress *address, const char *hostName)
int enet_address_set_host(ENetAddress *address, const char *hostName)
int enet_initialize(void)
int enet_initialize_with_callbacks(ENetVersion version, const ENetCallbacks *inits)
ENetVersion enet_linked_version(void)
void enet_deinitialize(void)
struct _ENetEvent ENetEvent
enet_uint32(* ENetChecksumCallback)(const ENetBuffer *buffers, size_t bufferCount)
Definition: enet.h:342
enet_uint32 enet_time_get(void)
struct _ENetHost ENetHost
enum _ENetEventType ENetEventType
_ENetEventType
Definition: enet.h:407
@ ENET_EVENT_TYPE_DISCONNECT
Definition: enet.h:423
@ ENET_EVENT_TYPE_RECEIVE
Definition: enet.h:431
@ ENET_EVENT_TYPE_NONE
Definition: enet.h:409
@ ENET_EVENT_TYPE_CONNECT
Definition: enet.h:414
struct _ENetAddress ENetAddress
void enet_time_set(enet_uint32)
int(* ENetInterceptCallback)(struct _ENetHost *host, struct _ENetEvent *event)
Definition: enet.h:345
struct _ENetPeer ENetPeer
enum _ENetPacketFlag ENetPacketFlag
_ENetPacketFlag
Definition: enet.h:105
@ ENET_PACKET_FLAG_SENT
Definition: enet.h:120
@ ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT
Definition: enet.h:117
@ ENET_PACKET_FLAG_NO_ALLOCATE
Definition: enet.h:114
@ ENET_PACKET_FLAG_RELIABLE
Definition: enet.h:108
@ ENET_PACKET_FLAG_UNSEQUENCED
Definition: enet.h:112
struct _ENetPacket ENetPacket
struct _ENetCompressor ENetCompressor
Definition: enet.h:159
Definition: enet.h:90
Definition: callbacks.h:11
Definition: enet.h:242
Definition: enet.h:330
size_t(* decompress)(void *context, const enet_uint8 *inData, size_t inLimit, enet_uint8 *outData, size_t outLimit)
Definition: enet.h:336
size_t(* compress)(void *context, const ENetBuffer *inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 *outData, size_t outLimit)
Definition: enet.h:334
void * context
Definition: enet.h:332
void(* destroy)(void *context)
Definition: enet.h:338
Definition: enet.h:440
ENetEventType type
Definition: enet.h:441
enet_uint32 data
Definition: enet.h:444
enet_uint8 channelID
Definition: enet.h:443
ENetPeer * peer
Definition: enet.h:442
ENetPacket * packet
Definition: enet.h:445
Definition: enet.h:364
enet_uint32 totalSentPackets
Definition: enet.h:392
enet_uint32 totalReceivedData
Definition: enet.h:393
size_t duplicatePeers
Definition: enet.h:398
size_t channelLimit
Definition: enet.h:375
enet_uint32 totalSentData
Definition: enet.h:391
ENetChecksumCallback checksum
Definition: enet.h:385
size_t peerCount
Definition: enet.h:374
enet_uint32 incomingBandwidth
Definition: enet.h:367
size_t maximumWaitingData
Definition: enet.h:400
size_t maximumPacketSize
Definition: enet.h:399
ENetAddress address
Definition: enet.h:366
enet_uint32 totalReceivedPackets
Definition: enet.h:394
enet_uint32 outgoingBandwidth
Definition: enet.h:368
ENetInterceptCallback intercept
Definition: enet.h:395
ENetPeer * peers
Definition: enet.h:373
Definition: enet.h:181
Definition: list.h:19
Definition: list.h:11
Definition: enet.h:166
Definition: enet.h:149
size_t dataLength
Definition: enet.h:153
ENetPacketFreeCallback freeCallback
Definition: enet.h:154
enet_uint8 * data
Definition: enet.h:152
enet_uint32 flags
Definition: enet.h:151
size_t referenceCount
Definition: enet.h:150
void * userData
Definition: enet.h:155
Definition: enet.h:264
enet_uint32 incomingBandwidth
Definition: enet.h:277
enet_uint32 outgoingBandwidth
Definition: enet.h:278
ENetAddress address
Definition: enet.h:272
enet_uint32 roundTripTime
Definition: enet.h:307
size_t channelCount
Definition: enet.h:276
enet_uint32 packetLoss
Definition: enet.h:290
void * data
Definition: enet.h:273
Definition: unix.h:35
Definition: protocol.h:178
ENet Unix header.