renet 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,540 @@
1
+ /**
2
+ @file enet.h
3
+ @brief ENet public header file
4
+ */
5
+ #ifndef __ENET_ENET_H__
6
+ #define __ENET_ENET_H__
7
+
8
+ #ifdef __cplusplus
9
+ extern "C"
10
+ {
11
+ #endif
12
+
13
+ #include <stdlib.h>
14
+
15
+ #ifdef WIN32
16
+ #include "enet/win32.h"
17
+ #else
18
+ #include "enet/unix.h"
19
+ #endif
20
+
21
+ #include "enet/types.h"
22
+ #include "enet/protocol.h"
23
+ #include "enet/list.h"
24
+ #include "enet/callbacks.h"
25
+
26
+ #define ENET_VERSION_MAJOR 1
27
+ #define ENET_VERSION_MINOR 3
28
+ #define ENET_VERSION_PATCH 0
29
+ #define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
30
+ #define ENET_VERSION ENET_VERSION_CREATE(ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH)
31
+
32
+ typedef enet_uint32 ENetVersion;
33
+
34
+ typedef enum _ENetSocketType
35
+ {
36
+ ENET_SOCKET_TYPE_STREAM = 1,
37
+ ENET_SOCKET_TYPE_DATAGRAM = 2
38
+ } ENetSocketType;
39
+
40
+ typedef enum _ENetSocketWait
41
+ {
42
+ ENET_SOCKET_WAIT_NONE = 0,
43
+ ENET_SOCKET_WAIT_SEND = (1 << 0),
44
+ ENET_SOCKET_WAIT_RECEIVE = (1 << 1)
45
+ } ENetSocketWait;
46
+
47
+ typedef enum _ENetSocketOption
48
+ {
49
+ ENET_SOCKOPT_NONBLOCK = 1,
50
+ ENET_SOCKOPT_BROADCAST = 2,
51
+ ENET_SOCKOPT_RCVBUF = 3,
52
+ ENET_SOCKOPT_SNDBUF = 4,
53
+ ENET_SOCKOPT_REUSEADDR = 5
54
+ } ENetSocketOption;
55
+
56
+ enum
57
+ {
58
+ ENET_HOST_ANY = 0, /**< specifies the default server host */
59
+ ENET_HOST_BROADCAST = 0xFFFFFFFF, /**< specifies a subnet-wide broadcast */
60
+
61
+ ENET_PORT_ANY = 0 /**< specifies that a port should be automatically chosen */
62
+ };
63
+
64
+ /**
65
+ * Portable internet address structure.
66
+ *
67
+ * The host must be specified in network byte-order, and the port must be in host
68
+ * byte-order. The constant ENET_HOST_ANY may be used to specify the default
69
+ * server host. The constant ENET_HOST_BROADCAST may be used to specify the
70
+ * broadcast address (255.255.255.255). This makes sense for enet_host_connect,
71
+ * but not for enet_host_create. Once a server responds to a broadcast, the
72
+ * address is updated from ENET_HOST_BROADCAST to the server's actual IP address.
73
+ */
74
+ typedef struct _ENetAddress
75
+ {
76
+ enet_uint32 host;
77
+ enet_uint16 port;
78
+ } ENetAddress;
79
+
80
+ /**
81
+ * Packet flag bit constants.
82
+ *
83
+ * The host must be specified in network byte-order, and the port must be in
84
+ * host byte-order. The constant ENET_HOST_ANY may be used to specify the
85
+ * default server host.
86
+
87
+ @sa ENetPacket
88
+ */
89
+ typedef enum _ENetPacketFlag
90
+ {
91
+ /** packet must be received by the target peer and resend attempts should be
92
+ * made until the packet is delivered */
93
+ ENET_PACKET_FLAG_RELIABLE = (1 << 0),
94
+ /** packet will not be sequenced with other packets
95
+ * not supported for reliable packets
96
+ */
97
+ ENET_PACKET_FLAG_UNSEQUENCED = (1 << 1),
98
+ /** packet will not allocate data, and user must supply it instead */
99
+ ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2)
100
+ } ENetPacketFlag;
101
+
102
+ struct _ENetPacket;
103
+ typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *);
104
+
105
+ /**
106
+ * ENet packet structure.
107
+ *
108
+ * An ENet data packet that may be sent to or received from a peer. The shown
109
+ * fields should only be read and never modified. The data field contains the
110
+ * allocated data for the packet. The dataLength fields specifies the length
111
+ * of the allocated data. The flags field is either 0 (specifying no flags),
112
+ * or a bitwise-or of any combination of the following flags:
113
+ *
114
+ * ENET_PACKET_FLAG_RELIABLE - packet must be received by the target peer
115
+ * and resend attempts should be made until the packet is delivered
116
+ *
117
+ * ENET_PACKET_FLAG_UNSEQUENCED - packet will not be sequenced with other packets
118
+ * (not supported for reliable packets)
119
+ *
120
+ * ENET_PACKET_FLAG_NO_ALLOCATE - packet will not allocate data, and user must supply it instead
121
+
122
+ @sa ENetPacketFlag
123
+ */
124
+ typedef struct _ENetPacket
125
+ {
126
+ size_t referenceCount; /**< internal use only */
127
+ enet_uint32 flags; /**< bitwise-or of ENetPacketFlag constants */
128
+ enet_uint8 * data; /**< allocated data for packet */
129
+ size_t dataLength; /**< length of data */
130
+ ENetPacketFreeCallback freeCallback; /**< function to be called when the packet is no longer in use */
131
+ } ENetPacket;
132
+
133
+ typedef struct _ENetAcknowledgement
134
+ {
135
+ ENetListNode acknowledgementList;
136
+ enet_uint32 sentTime;
137
+ ENetProtocol command;
138
+ } ENetAcknowledgement;
139
+
140
+ typedef struct _ENetOutgoingCommand
141
+ {
142
+ ENetListNode outgoingCommandList;
143
+ enet_uint16 reliableSequenceNumber;
144
+ enet_uint16 unreliableSequenceNumber;
145
+ enet_uint32 sentTime;
146
+ enet_uint32 roundTripTimeout;
147
+ enet_uint32 roundTripTimeoutLimit;
148
+ enet_uint32 fragmentOffset;
149
+ enet_uint16 fragmentLength;
150
+ enet_uint16 sendAttempts;
151
+ ENetProtocol command;
152
+ ENetPacket * packet;
153
+ } ENetOutgoingCommand;
154
+
155
+ typedef struct _ENetIncomingCommand
156
+ {
157
+ ENetListNode incomingCommandList;
158
+ enet_uint16 reliableSequenceNumber;
159
+ enet_uint16 unreliableSequenceNumber;
160
+ ENetProtocol command;
161
+ enet_uint32 fragmentCount;
162
+ enet_uint32 fragmentsRemaining;
163
+ enet_uint32 * fragments;
164
+ ENetPacket * packet;
165
+ } ENetIncomingCommand;
166
+
167
+ typedef enum _ENetPeerState
168
+ {
169
+ ENET_PEER_STATE_DISCONNECTED = 0,
170
+ ENET_PEER_STATE_CONNECTING = 1,
171
+ ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2,
172
+ ENET_PEER_STATE_CONNECTION_PENDING = 3,
173
+ ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4,
174
+ ENET_PEER_STATE_CONNECTED = 5,
175
+ ENET_PEER_STATE_DISCONNECT_LATER = 6,
176
+ ENET_PEER_STATE_DISCONNECTING = 7,
177
+ ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8,
178
+ ENET_PEER_STATE_ZOMBIE = 9
179
+ } ENetPeerState;
180
+
181
+ #ifndef ENET_BUFFER_MAXIMUM
182
+ #define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS)
183
+ #endif
184
+
185
+ enum
186
+ {
187
+ ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024,
188
+ ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024,
189
+ ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000,
190
+ ENET_HOST_DEFAULT_MTU = 1400,
191
+
192
+ ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500,
193
+ ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
194
+ ENET_PEER_PACKET_THROTTLE_SCALE = 32,
195
+ ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
196
+ ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2,
197
+ ENET_PEER_PACKET_THROTTLE_DECELERATION = 2,
198
+ ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000,
199
+ ENET_PEER_PACKET_LOSS_SCALE = (1 << 16),
200
+ ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
201
+ ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
202
+ ENET_PEER_TIMEOUT_LIMIT = 32,
203
+ ENET_PEER_TIMEOUT_MINIMUM = 5000,
204
+ ENET_PEER_TIMEOUT_MAXIMUM = 30000,
205
+ ENET_PEER_PING_INTERVAL = 500,
206
+ ENET_PEER_UNSEQUENCED_WINDOWS = 64,
207
+ ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
208
+ ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32,
209
+ ENET_PEER_RELIABLE_WINDOWS = 16,
210
+ ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000,
211
+ ENET_PEER_FREE_RELIABLE_WINDOWS = 8
212
+ };
213
+
214
+ typedef struct _ENetChannel
215
+ {
216
+ enet_uint16 outgoingReliableSequenceNumber;
217
+ enet_uint16 outgoingUnreliableSequenceNumber;
218
+ enet_uint16 usedReliableWindows;
219
+ enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS];
220
+ enet_uint16 incomingReliableSequenceNumber;
221
+ ENetList incomingReliableCommands;
222
+ ENetList incomingUnreliableCommands;
223
+ } ENetChannel;
224
+
225
+ /**
226
+ * An ENet peer which data packets may be sent or received from.
227
+ *
228
+ * No fields should be modified unless otherwise specified.
229
+ */
230
+ typedef struct _ENetPeer
231
+ {
232
+ ENetListNode dispatchList;
233
+ struct _ENetHost * host;
234
+ enet_uint16 outgoingPeerID;
235
+ enet_uint16 incomingPeerID;
236
+ enet_uint32 connectID;
237
+ enet_uint8 outgoingSessionID;
238
+ enet_uint8 incomingSessionID;
239
+ ENetAddress address; /**< Internet address of the peer */
240
+ void * data; /**< Application private data, may be freely modified */
241
+ ENetPeerState state;
242
+ ENetChannel * channels;
243
+ size_t channelCount; /**< Number of channels allocated for communication with peer */
244
+ enet_uint32 incomingBandwidth; /**< Downstream bandwidth of the client in bytes/second */
245
+ enet_uint32 outgoingBandwidth; /**< Upstream bandwidth of the client in bytes/second */
246
+ enet_uint32 incomingBandwidthThrottleEpoch;
247
+ enet_uint32 outgoingBandwidthThrottleEpoch;
248
+ enet_uint32 incomingDataTotal;
249
+ enet_uint32 outgoingDataTotal;
250
+ enet_uint32 lastSendTime;
251
+ enet_uint32 lastReceiveTime;
252
+ enet_uint32 nextTimeout;
253
+ enet_uint32 earliestTimeout;
254
+ enet_uint32 packetLossEpoch;
255
+ enet_uint32 packetsSent;
256
+ enet_uint32 packetsLost;
257
+ enet_uint32 packetLoss; /**< mean packet loss of reliable packets as a ratio with respect to the constant ENET_PEER_PACKET_LOSS_SCALE */
258
+ enet_uint32 packetLossVariance;
259
+ enet_uint32 packetThrottle;
260
+ enet_uint32 packetThrottleLimit;
261
+ enet_uint32 packetThrottleCounter;
262
+ enet_uint32 packetThrottleEpoch;
263
+ enet_uint32 packetThrottleAcceleration;
264
+ enet_uint32 packetThrottleDeceleration;
265
+ enet_uint32 packetThrottleInterval;
266
+ enet_uint32 lastRoundTripTime;
267
+ enet_uint32 lowestRoundTripTime;
268
+ enet_uint32 lastRoundTripTimeVariance;
269
+ enet_uint32 highestRoundTripTimeVariance;
270
+ enet_uint32 roundTripTime; /**< mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement */
271
+ enet_uint32 roundTripTimeVariance;
272
+ enet_uint32 mtu;
273
+ enet_uint32 windowSize;
274
+ enet_uint32 reliableDataInTransit;
275
+ enet_uint16 outgoingReliableSequenceNumber;
276
+ ENetList acknowledgements;
277
+ ENetList sentReliableCommands;
278
+ ENetList sentUnreliableCommands;
279
+ ENetList outgoingReliableCommands;
280
+ ENetList outgoingUnreliableCommands;
281
+ ENetList dispatchedCommands;
282
+ int needsDispatch;
283
+ enet_uint16 incomingUnsequencedGroup;
284
+ enet_uint16 outgoingUnsequencedGroup;
285
+ enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
286
+ enet_uint32 eventData;
287
+ } ENetPeer;
288
+
289
+ /** An ENet packet compressor for compressing UDP packets before socket sends or receives.
290
+ */
291
+ typedef struct _ENetCompressor
292
+ {
293
+ /** Context data for the compressor. Must be non-NULL. */
294
+ void * context;
295
+ /** Compresses from inBuffers[0:inBufferCount-1], containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */
296
+ size_t (ENET_CALLBACK * compress) (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit);
297
+ /** Decompresses from inData, containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */
298
+ size_t (ENET_CALLBACK * decompress) (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit);
299
+ /** Destroys the context when compression is disabled or the host is destroyed. May be NULL. */
300
+ void (ENET_CALLBACK * destroy) (void * context);
301
+ } ENetCompressor;
302
+
303
+ /** Callback that computes the checksum of the data held in buffers[0:bufferCount-1] */
304
+ typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (const ENetBuffer * buffers, size_t bufferCount);
305
+
306
+ /** An ENet host for communicating with peers.
307
+ *
308
+ * No fields should be modified unless otherwise stated.
309
+
310
+ @sa enet_host_create()
311
+ @sa enet_host_destroy()
312
+ @sa enet_host_connect()
313
+ @sa enet_host_service()
314
+ @sa enet_host_flush()
315
+ @sa enet_host_broadcast()
316
+ @sa enet_host_compress()
317
+ @sa enet_host_compress_with_range_coder()
318
+ @sa enet_host_channel_limit()
319
+ @sa enet_host_bandwidth_limit()
320
+ @sa enet_host_bandwidth_throttle()
321
+ */
322
+ typedef struct _ENetHost
323
+ {
324
+ ENetSocket socket;
325
+ ENetAddress address; /**< Internet address of the host */
326
+ enet_uint32 incomingBandwidth; /**< downstream bandwidth of the host */
327
+ enet_uint32 outgoingBandwidth; /**< upstream bandwidth of the host */
328
+ enet_uint32 bandwidthThrottleEpoch;
329
+ enet_uint32 mtu;
330
+ enet_uint32 randomSeed;
331
+ int recalculateBandwidthLimits;
332
+ ENetPeer * peers; /**< array of peers allocated for this host */
333
+ size_t peerCount; /**< number of peers allocated for this host */
334
+ size_t channelLimit; /**< maximum number of channels allowed for connected peers */
335
+ enet_uint32 serviceTime;
336
+ ENetList dispatchQueue;
337
+ int continueSending;
338
+ size_t packetSize;
339
+ enet_uint16 headerFlags;
340
+ ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS];
341
+ size_t commandCount;
342
+ ENetBuffer buffers [ENET_BUFFER_MAXIMUM];
343
+ size_t bufferCount;
344
+ ENetChecksumCallback checksum; /**< callback the user can set to enable packet checksums for this host */
345
+ ENetCompressor compressor;
346
+ enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU];
347
+ ENetAddress receivedAddress;
348
+ enet_uint8 * receivedData;
349
+ size_t receivedDataLength;
350
+ enet_uint32 totalSentData; /**< total data sent, user should reset to 0 as needed to prevent overflow */
351
+ enet_uint32 totalSentPackets; /**< total UDP packets sent, user should reset to 0 as needed to prevent overflow */
352
+ enet_uint32 totalReceivedData; /**< total data received, user should reset to 0 as needed to prevent overflow */
353
+ enet_uint32 totalReceivedPackets; /**< total UDP packets received, user should reset to 0 as needed to prevent overflow */
354
+ } ENetHost;
355
+
356
+ /**
357
+ * An ENet event type, as specified in @ref ENetEvent.
358
+ */
359
+ typedef enum _ENetEventType
360
+ {
361
+ /** no event occurred within the specified time limit */
362
+ ENET_EVENT_TYPE_NONE = 0,
363
+
364
+ /** a connection request initiated by enet_host_connect has completed.
365
+ * The peer field contains the peer which successfully connected.
366
+ */
367
+ ENET_EVENT_TYPE_CONNECT = 1,
368
+
369
+ /** a peer has disconnected. This event is generated on a successful
370
+ * completion of a disconnect initiated by enet_pper_disconnect, if
371
+ * a peer has timed out, or if a connection request intialized by
372
+ * enet_host_connect has timed out. The peer field contains the peer
373
+ * which disconnected. The data field contains user supplied data
374
+ * describing the disconnection, or 0, if none is available.
375
+ */
376
+ ENET_EVENT_TYPE_DISCONNECT = 2,
377
+
378
+ /** a packet has been received from a peer. The peer field specifies the
379
+ * peer which sent the packet. The channelID field specifies the channel
380
+ * number upon which the packet was received. The packet field contains
381
+ * the packet that was received; this packet must be destroyed with
382
+ * enet_packet_destroy after use.
383
+ */
384
+ ENET_EVENT_TYPE_RECEIVE = 3
385
+ } ENetEventType;
386
+
387
+ /**
388
+ * An ENet event as returned by enet_host_service().
389
+
390
+ @sa enet_host_service
391
+ */
392
+ typedef struct _ENetEvent
393
+ {
394
+ ENetEventType type; /**< type of the event */
395
+ ENetPeer * peer; /**< peer that generated a connect, disconnect or receive event */
396
+ enet_uint8 channelID; /**< channel on the peer that generated the event, if appropriate */
397
+ enet_uint32 data; /**< data associated with the event, if appropriate */
398
+ ENetPacket * packet; /**< packet associated with the event, if appropriate */
399
+ } ENetEvent;
400
+
401
+ /** @defgroup global ENet global functions
402
+ @{
403
+ */
404
+
405
+ /**
406
+ Initializes ENet globally. Must be called prior to using any functions in
407
+ ENet.
408
+ @returns 0 on success, < 0 on failure
409
+ */
410
+ ENET_API int enet_initialize (void);
411
+
412
+ /**
413
+ Initializes ENet globally and supplies user-overridden callbacks. Must be called prior to using any functions in ENet. Do not use enet_initialize() if you use this variant. Make sure the ENetCallbacks structure is zeroed out so that any additional callbacks added in future versions will be properly ignored.
414
+
415
+ @param version the constant ENET_VERSION should be supplied so ENet knows which version of ENetCallbacks struct to use
416
+ @param inits user-overriden callbacks where any NULL callbacks will use ENet's defaults
417
+ @returns 0 on success, < 0 on failure
418
+ */
419
+ ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits);
420
+
421
+ /**
422
+ Shuts down ENet globally. Should be called when a program that has
423
+ initialized ENet exits.
424
+ */
425
+ ENET_API void enet_deinitialize (void);
426
+
427
+ /** @} */
428
+
429
+ /** @defgroup private ENet private implementation functions */
430
+
431
+ /**
432
+ Returns the wall-time in milliseconds. Its initial value is unspecified
433
+ unless otherwise set.
434
+ */
435
+ ENET_API enet_uint32 enet_time_get (void);
436
+ /**
437
+ Sets the current wall-time in milliseconds.
438
+ */
439
+ ENET_API void enet_time_set (enet_uint32);
440
+
441
+ /** @defgroup socket ENet socket functions
442
+ @{
443
+ */
444
+ ENET_API ENetSocket enet_socket_create (ENetSocketType);
445
+ ENET_API int enet_socket_bind (ENetSocket, const ENetAddress *);
446
+ ENET_API int enet_socket_listen (ENetSocket, int);
447
+ ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *);
448
+ ENET_API int enet_socket_connect (ENetSocket, const ENetAddress *);
449
+ ENET_API int enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t);
450
+ ENET_API int enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t);
451
+ ENET_API int enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32);
452
+ ENET_API int enet_socket_set_option (ENetSocket, ENetSocketOption, int);
453
+ ENET_API void enet_socket_destroy (ENetSocket);
454
+ ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *, enet_uint32);
455
+
456
+ /** @} */
457
+
458
+ /** @defgroup Address ENet address functions
459
+ @{
460
+ */
461
+ /** Attempts to resolve the host named by the parameter hostName and sets
462
+ the host field in the address parameter if successful.
463
+ @param address destination to store resolved address
464
+ @param hostName host name to lookup
465
+ @retval 0 on success
466
+ @retval < 0 on failure
467
+ @returns the address of the given hostName in address on success
468
+ */
469
+ ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName);
470
+
471
+ /** Gives the printable form of the ip address specified in the address parameter.
472
+ @param address address printed
473
+ @param hostName destination for name, must not be NULL
474
+ @param nameLength maximum length of hostName.
475
+ @returns the null-terminated name of the host in hostName on success
476
+ @retval 0 on success
477
+ @retval < 0 on failure
478
+ */
479
+ ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength);
480
+
481
+ /** Attempts to do a reverse lookup of the host field in the address parameter.
482
+ @param address address used for reverse lookup
483
+ @param hostName destination for name, must not be NULL
484
+ @param nameLength maximum length of hostName.
485
+ @returns the null-terminated name of the host in hostName on success
486
+ @retval 0 on success
487
+ @retval < 0 on failure
488
+ */
489
+ ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength);
490
+
491
+ /** @} */
492
+
493
+ ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32);
494
+ ENET_API void enet_packet_destroy (ENetPacket *);
495
+ ENET_API int enet_packet_resize (ENetPacket *, size_t);
496
+ extern enet_uint32 enet_crc32 (const ENetBuffer *, size_t);
497
+
498
+ ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32);
499
+ ENET_API void enet_host_destroy (ENetHost *);
500
+ ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t, enet_uint32);
501
+ ENET_API int enet_host_check_events (ENetHost *, ENetEvent *);
502
+ ENET_API int enet_host_service (ENetHost *, ENetEvent *, enet_uint32);
503
+ ENET_API void enet_host_flush (ENetHost *);
504
+ ENET_API void enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *);
505
+ ENET_API void enet_host_compress (ENetHost *, const ENetCompressor *);
506
+ ENET_API int enet_host_compress_with_range_coder (ENetHost * host);
507
+ ENET_API void enet_host_channel_limit (ENetHost *, size_t);
508
+ ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32);
509
+ extern void enet_host_bandwidth_throttle (ENetHost *);
510
+
511
+ ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *);
512
+ ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID);
513
+ ENET_API void enet_peer_ping (ENetPeer *);
514
+ ENET_API void enet_peer_reset (ENetPeer *);
515
+ ENET_API void enet_peer_disconnect (ENetPeer *, enet_uint32);
516
+ ENET_API void enet_peer_disconnect_now (ENetPeer *, enet_uint32);
517
+ ENET_API void enet_peer_disconnect_later (ENetPeer *, enet_uint32);
518
+ ENET_API void enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32);
519
+ extern int enet_peer_throttle (ENetPeer *, enet_uint32);
520
+ extern void enet_peer_reset_queues (ENetPeer *);
521
+ extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *);
522
+ extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16);
523
+ extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32);
524
+ extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16);
525
+ extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *);
526
+ extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *);
527
+
528
+ ENET_API void * enet_range_coder_create (void);
529
+ ENET_API void enet_range_coder_destroy (void *);
530
+ ENET_API size_t enet_range_coder_compress (void *, const ENetBuffer *, size_t, size_t, enet_uint8 *, size_t);
531
+ ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, enet_uint8 *, size_t);
532
+
533
+ extern size_t enet_protocol_command_size (enet_uint8);
534
+
535
+ #ifdef __cplusplus
536
+ }
537
+ #endif
538
+
539
+ #endif /* __ENET_ENET_H__ */
540
+