5 #ifndef __ENET_ENET_H__
6 #define __ENET_ENET_H__
26 #define ENET_VERSION_MAJOR 1
27 #define ENET_VERSION_MINOR 3
28 #define ENET_VERSION_PATCH 12
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)
41 typedef enum _ENetSocketType
43 ENET_SOCKET_TYPE_STREAM = 1,
44 ENET_SOCKET_TYPE_DATAGRAM = 2
47 typedef enum _ENetSocketWait
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)
55 typedef enum _ENetSocketOption
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
68 typedef enum _ENetSocketShutdown
70 ENET_SOCKET_SHUTDOWN_READ = 0,
71 ENET_SOCKET_SHUTDOWN_WRITE = 1,
72 ENET_SOCKET_SHUTDOWN_READ_WRITE = 2
75 #define ENET_HOST_ANY 0
76 #define ENET_HOST_BROADCAST 0xFFFFFFFFU
77 #define ENET_PORT_ANY 0
123 typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (
struct _ENetPacket *);
188 typedef enum _ENetPeerState
190 ENET_PEER_STATE_DISCONNECTED = 0,
191 ENET_PEER_STATE_CONNECTING = 1,
192 ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2,
193 ENET_PEER_STATE_CONNECTION_PENDING = 3,
194 ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4,
195 ENET_PEER_STATE_CONNECTED = 5,
196 ENET_PEER_STATE_DISCONNECT_LATER = 6,
197 ENET_PEER_STATE_DISCONNECTING = 7,
198 ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8,
199 ENET_PEER_STATE_ZOMBIE = 9
202 #ifndef ENET_BUFFER_MAXIMUM
203 #define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS)
208 ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024,
209 ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024,
210 ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000,
211 ENET_HOST_DEFAULT_MTU = 1400,
212 ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024,
213 ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024,
215 ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500,
216 ENET_PEER_DEFAULT_PACKET_THROTTLE = 32,
217 ENET_PEER_PACKET_THROTTLE_SCALE = 32,
218 ENET_PEER_PACKET_THROTTLE_COUNTER = 7,
219 ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2,
220 ENET_PEER_PACKET_THROTTLE_DECELERATION = 2,
221 ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000,
222 ENET_PEER_PACKET_LOSS_SCALE = (1 << 16),
223 ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
224 ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
225 ENET_PEER_TIMEOUT_LIMIT = 32,
226 ENET_PEER_TIMEOUT_MINIMUM = 5000,
227 ENET_PEER_TIMEOUT_MAXIMUM = 30000,
228 ENET_PEER_PING_INTERVAL = 500,
229 ENET_PEER_UNSEQUENCED_WINDOWS = 64,
230 ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
231 ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32,
232 ENET_PEER_RELIABLE_WINDOWS = 16,
233 ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000,
234 ENET_PEER_FREE_RELIABLE_WINDOWS = 8
242 enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS];
246 ENetList incomingUnreliableCommands;
308 ENetList outgoingUnreliableCommands;
313 enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32];
315 size_t totalWaitingData;
333 typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (
const ENetBuffer * buffers,
size_t bufferCount);
363 int recalculateBandwidthLimits;
372 ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS];
378 enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU];
381 size_t receivedDataLength;
387 size_t connectedPeers;
388 size_t bandwidthLimitedPeers;
488 ENET_API ENetSocket enet_socket_create (ENetSocketType);
489 ENET_API
int enet_socket_bind (ENetSocket,
const ENetAddress *);
490 ENET_API
int enet_socket_get_address (ENetSocket,
ENetAddress *);
491 ENET_API
int enet_socket_listen (ENetSocket,
int);
492 ENET_API ENetSocket enet_socket_accept (ENetSocket,
ENetAddress *);
493 ENET_API
int enet_socket_connect (ENetSocket,
const ENetAddress *);
497 ENET_API
int enet_socket_set_option (ENetSocket, ENetSocketOption,
int);
498 ENET_API
int enet_socket_get_option (ENetSocket, ENetSocketOption,
int *);
499 ENET_API
int enet_socket_shutdown (ENetSocket, ENetSocketShutdown);
500 ENET_API
void enet_socket_destroy (ENetSocket);
501 ENET_API
int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *,
enet_uint32);
556 extern void enet_host_bandwidth_throttle (
ENetHost *);
570 extern void enet_peer_reset_queues (
ENetPeer *);
577 extern void enet_peer_on_connect (
ENetPeer *);
578 extern void enet_peer_on_disconnect (
ENetPeer *);
580 ENET_API
void * enet_range_coder_create (
void);
581 ENET_API
void enet_range_coder_destroy (
void *);
582 ENET_API
size_t enet_range_coder_compress (
void *,
const ENetBuffer *,
size_t,
size_t,
enet_uint8 *,
size_t);
583 ENET_API
size_t enet_range_coder_decompress (
void *,
const enet_uint8 *,
size_t,
enet_uint8 *,
size_t);
585 extern size_t enet_protocol_command_size (
enet_uint8);