enet.h

Go to the documentation of this file.
00001 
00005 #ifndef __ENET_ENET_H__
00006 #define __ENET_ENET_H__
00007 
00008 #ifdef __cplusplus
00009 extern "C"
00010 {
00011 #endif
00012 
00013 #include <stdlib.h>
00014 
00015 #ifdef WIN32
00016 #include "enet/win32.h"
00017 #else
00018 #include "enet/unix.h"
00019 #endif
00020 
00021 #include "enet/types.h"
00022 #include "enet/protocol.h"
00023 #include "enet/list.h"
00024 #include "enet/callbacks.h"
00025 
00026 typedef enum
00027 {
00028    ENET_VERSION = 1
00029 } ENetVersion;
00030 
00031 typedef enum
00032 {
00033    ENET_SOCKET_TYPE_STREAM   = 1,
00034    ENET_SOCKET_TYPE_DATAGRAM = 2
00035 } ENetSocketType;
00036 
00037 typedef enum
00038 {
00039    ENET_SOCKET_WAIT_NONE    = 0,
00040    ENET_SOCKET_WAIT_SEND    = (1 << 0),
00041    ENET_SOCKET_WAIT_RECEIVE = (1 << 1)
00042 } ENetSocketWait;
00043 
00044 typedef enum
00045 {
00046    ENET_SOCKOPT_NONBLOCK  = 1,
00047    ENET_SOCKOPT_BROADCAST = 2,
00048    ENET_SOCKOPT_RCVBUF    = 3,
00049    ENET_SOCKOPT_SNDBUF    = 4
00050 } ENetSocketOption;
00051 
00052 enum
00053 {
00054    ENET_HOST_ANY       = 0,            
00055    ENET_HOST_BROADCAST = 0xFFFFFFFF,   
00057    ENET_PORT_ANY       = 0             
00058 };
00059 
00070 typedef struct _ENetAddress
00071 {
00072    enet_uint32 host;
00073    enet_uint16 port;
00074 } ENetAddress;
00075 
00085 typedef enum
00086 {
00089    ENET_PACKET_FLAG_RELIABLE    = (1 << 0),
00093    ENET_PACKET_FLAG_UNSEQUENCED = (1 << 1),
00095    ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2)
00096 } ENetPacketFlag;
00097 
00098 struct _ENetPacket;
00099 typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *);
00100 
00120 typedef struct _ENetPacket
00121 {
00122    size_t                   referenceCount;  
00123    enet_uint32              flags;           
00124    enet_uint8 *             data;            
00125    size_t                   dataLength;      
00126    ENetPacketFreeCallback   freeCallback;    
00127 } ENetPacket;
00128 
00129 typedef struct _ENetAcknowledgement
00130 {
00131    ENetListNode acknowledgementList;
00132    enet_uint32  sentTime;
00133    ENetProtocol command;
00134 } ENetAcknowledgement;
00135 
00136 typedef struct _ENetOutgoingCommand
00137 {
00138    ENetListNode outgoingCommandList;
00139    enet_uint16  reliableSequenceNumber;
00140    enet_uint16  unreliableSequenceNumber;
00141    enet_uint32  sentTime;
00142    enet_uint32  roundTripTimeout;
00143    enet_uint32  roundTripTimeoutLimit;
00144    enet_uint32  fragmentOffset;
00145    enet_uint16  fragmentLength;
00146    enet_uint16  sendAttempts;
00147    ENetProtocol command;
00148    ENetPacket * packet;
00149 } ENetOutgoingCommand;
00150 
00151 typedef struct _ENetIncomingCommand
00152 {  
00153    ENetListNode     incomingCommandList;
00154    enet_uint16      reliableSequenceNumber;
00155    enet_uint16      unreliableSequenceNumber;
00156    ENetProtocol     command;
00157    enet_uint32      fragmentCount;
00158    enet_uint32      fragmentsRemaining;
00159    enet_uint32 *    fragments;
00160    ENetPacket *     packet;
00161 } ENetIncomingCommand;
00162 
00163 typedef enum
00164 {
00165    ENET_PEER_STATE_DISCONNECTED                = 0,
00166    ENET_PEER_STATE_CONNECTING                  = 1,
00167    ENET_PEER_STATE_ACKNOWLEDGING_CONNECT       = 2,
00168    ENET_PEER_STATE_CONNECTION_PENDING          = 3,
00169    ENET_PEER_STATE_CONNECTION_SUCCEEDED        = 4,
00170    ENET_PEER_STATE_CONNECTED                   = 5,
00171    ENET_PEER_STATE_DISCONNECT_LATER            = 6,
00172    ENET_PEER_STATE_DISCONNECTING               = 7,
00173    ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT    = 8,
00174    ENET_PEER_STATE_ZOMBIE                      = 9 
00175 } ENetPeerState;
00176 
00177 #ifndef ENET_BUFFER_MAXIMUM
00178 #define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS)
00179 #endif
00180 
00181 enum
00182 {
00183    ENET_HOST_RECEIVE_BUFFER_SIZE          = 256 * 1024,
00184    ENET_HOST_SEND_BUFFER_SIZE             = 256 * 1024,
00185    ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL  = 1000,
00186    ENET_HOST_DEFAULT_MTU                  = 1400,
00187 
00188    ENET_PEER_DEFAULT_ROUND_TRIP_TIME      = 500,
00189    ENET_PEER_DEFAULT_PACKET_THROTTLE      = 32,
00190    ENET_PEER_PACKET_THROTTLE_SCALE        = 32,
00191    ENET_PEER_PACKET_THROTTLE_COUNTER      = 7, 
00192    ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2,
00193    ENET_PEER_PACKET_THROTTLE_DECELERATION = 2,
00194    ENET_PEER_PACKET_THROTTLE_INTERVAL     = 5000,
00195    ENET_PEER_PACKET_LOSS_SCALE            = (1 << 16),
00196    ENET_PEER_PACKET_LOSS_INTERVAL         = 10000,
00197    ENET_PEER_WINDOW_SIZE_SCALE            = 64 * 1024,
00198    ENET_PEER_TIMEOUT_LIMIT                = 32,
00199    ENET_PEER_TIMEOUT_MINIMUM              = 5000,
00200    ENET_PEER_TIMEOUT_MAXIMUM              = 30000,
00201    ENET_PEER_PING_INTERVAL                = 500,
00202    ENET_PEER_UNSEQUENCED_WINDOWS          = 64,
00203    ENET_PEER_UNSEQUENCED_WINDOW_SIZE      = 1024,
00204    ENET_PEER_FREE_UNSEQUENCED_WINDOWS     = 32,
00205    ENET_PEER_RELIABLE_WINDOWS             = 16,
00206    ENET_PEER_RELIABLE_WINDOW_SIZE         = 0x1000,
00207    ENET_PEER_FREE_RELIABLE_WINDOWS        = 8
00208 };
00209 
00210 typedef struct _ENetChannel
00211 {
00212    enet_uint16  outgoingReliableSequenceNumber;
00213    enet_uint16  outgoingUnreliableSequenceNumber;
00214    enet_uint16  usedReliableWindows;
00215    enet_uint16  reliableWindows [ENET_PEER_RELIABLE_WINDOWS];
00216    enet_uint16  incomingReliableSequenceNumber;
00217    ENetList     incomingReliableCommands;
00218    ENetList     incomingUnreliableCommands;
00219 } ENetChannel;
00220 
00226 typedef struct _ENetPeer
00227 { 
00228    struct _ENetHost * host;
00229    enet_uint16   outgoingPeerID;
00230    enet_uint16   incomingPeerID;
00231    enet_uint32   sessionID;
00232    ENetAddress   address;            
00233    void *        data;               
00234    ENetPeerState state;
00235    ENetChannel * channels;
00236    size_t        channelCount;       
00237    enet_uint32   incomingBandwidth;  
00238    enet_uint32   outgoingBandwidth;  
00239    enet_uint32   incomingBandwidthThrottleEpoch;
00240    enet_uint32   outgoingBandwidthThrottleEpoch;
00241    enet_uint32   incomingDataTotal;
00242    enet_uint32   outgoingDataTotal;
00243    enet_uint32   lastSendTime;
00244    enet_uint32   lastReceiveTime;
00245    enet_uint32   nextTimeout;
00246    enet_uint32   earliestTimeout;
00247    enet_uint32   packetLossEpoch;
00248    enet_uint32   packetsSent;
00249    enet_uint32   packetsLost;
00250    enet_uint32   packetLoss;          
00251    enet_uint32   packetLossVariance;
00252    enet_uint32   packetThrottle;
00253    enet_uint32   packetThrottleLimit;
00254    enet_uint32   packetThrottleCounter;
00255    enet_uint32   packetThrottleEpoch;
00256    enet_uint32   packetThrottleAcceleration;
00257    enet_uint32   packetThrottleDeceleration;
00258    enet_uint32   packetThrottleInterval;
00259    enet_uint32   lastRoundTripTime;
00260    enet_uint32   lowestRoundTripTime;
00261    enet_uint32   lastRoundTripTimeVariance;
00262    enet_uint32   highestRoundTripTimeVariance;
00263    enet_uint32   roundTripTime;            
00264    enet_uint32   roundTripTimeVariance;
00265    enet_uint16   mtu;
00266    enet_uint32   windowSize;
00267    enet_uint32   reliableDataInTransit;
00268    enet_uint16   outgoingReliableSequenceNumber;
00269    ENetList      acknowledgements;
00270    ENetList      sentReliableCommands;
00271    ENetList      sentUnreliableCommands;
00272    ENetList      outgoingReliableCommands;
00273    ENetList      outgoingUnreliableCommands;
00274    enet_uint16   incomingUnsequencedGroup;
00275    enet_uint16   outgoingUnsequencedGroup;
00276    enet_uint32   unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32]; 
00277    enet_uint32   disconnectData;
00278 } ENetPeer;
00279 
00293 typedef struct _ENetHost
00294 {
00295    ENetSocket         socket;
00296    ENetAddress        address;                     
00297    enet_uint32        incomingBandwidth;           
00298    enet_uint32        outgoingBandwidth;           
00299    enet_uint32        bandwidthThrottleEpoch;
00300    enet_uint32        mtu;
00301    int                recalculateBandwidthLimits;
00302    ENetPeer *         peers;                       
00303    size_t             peerCount;                   
00304    enet_uint32        serviceTime;
00305    ENetPeer *         lastServicedPeer;
00306    int                continueSending;
00307    size_t             packetSize;
00308    enet_uint16        headerFlags;
00309    ENetProtocol       commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS];
00310    size_t             commandCount;
00311    ENetBuffer         buffers [ENET_BUFFER_MAXIMUM];
00312    size_t             bufferCount;
00313    ENetAddress        receivedAddress;
00314    enet_uint8         receivedData [ENET_PROTOCOL_MAXIMUM_MTU];
00315    size_t             receivedDataLength;
00316 } ENetHost;
00317 
00321 typedef enum
00322 {
00324    ENET_EVENT_TYPE_NONE       = 0,  
00325 
00329    ENET_EVENT_TYPE_CONNECT    = 1,  
00330 
00338    ENET_EVENT_TYPE_DISCONNECT = 2,  
00339 
00346    ENET_EVENT_TYPE_RECEIVE    = 3
00347 } ENetEventType;
00348 
00354 typedef struct _ENetEvent 
00355 {
00356    ENetEventType        type;      
00357    ENetPeer *           peer;      
00358    enet_uint8           channelID; 
00359    enet_uint32          data;      
00360    ENetPacket *         packet;    
00361 } ENetEvent;
00362 
00372 ENET_API int enet_initialize (void);
00373 
00381 ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits);
00382 
00387 ENET_API void enet_deinitialize (void);
00388 
00397 ENET_API enet_uint32 enet_time_get (void);
00401 ENET_API void enet_time_set (enet_uint32);
00402 
00406 ENET_API ENetSocket enet_socket_create (ENetSocketType, const ENetAddress *);
00407 ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *);
00408 ENET_API int        enet_socket_connect (ENetSocket, const ENetAddress *);
00409 ENET_API int        enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t);
00410 ENET_API int        enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t);
00411 ENET_API int        enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32);
00412 ENET_API int        enet_socket_set_option (ENetSocket, ENetSocketOption, int);
00413 ENET_API void       enet_socket_destroy (ENetSocket);
00414 
00428 ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName);
00429 
00438 ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength);
00439 
00448 ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength);
00449 
00452 ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32);
00453 ENET_API void         enet_packet_destroy (ENetPacket *);
00454 ENET_API int          enet_packet_resize  (ENetPacket *, size_t);
00455 extern enet_uint32    enet_crc32 (const ENetBuffer *, size_t);
00456                 
00457 ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, enet_uint32, enet_uint32);
00458 ENET_API void       enet_host_destroy (ENetHost *);
00459 ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t);
00460 ENET_API int        enet_host_check_events (ENetHost *, ENetEvent *);
00461 ENET_API int        enet_host_service (ENetHost *, ENetEvent *, enet_uint32);
00462 ENET_API void       enet_host_flush (ENetHost *);
00463 ENET_API void       enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *);
00464 ENET_API void       enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32);
00465 extern   void       enet_host_bandwidth_throttle (ENetHost *);
00466 
00467 ENET_API int                 enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *);
00468 ENET_API ENetPacket *        enet_peer_receive (ENetPeer *, enet_uint8);
00469 ENET_API void                enet_peer_ping (ENetPeer *);
00470 ENET_API void                enet_peer_reset (ENetPeer *);
00471 ENET_API void                enet_peer_disconnect (ENetPeer *, enet_uint32);
00472 ENET_API void                enet_peer_disconnect_now (ENetPeer *, enet_uint32);
00473 ENET_API void                enet_peer_disconnect_later (ENetPeer *, enet_uint32);
00474 ENET_API void                enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32);
00475 extern int                   enet_peer_throttle (ENetPeer *, enet_uint32);
00476 extern void                  enet_peer_reset_queues (ENetPeer *);
00477 extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16);
00478 extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32);
00479 extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16);
00480 
00481 extern size_t enet_protocol_command_size (enet_uint8);
00482 
00483 #ifdef __cplusplus
00484 }
00485 #endif
00486 
00487 #endif /* __ENET_ENET_H__ */
00488 

Generated on Tue Feb 12 17:39:56 2008 for enet by  doxygen 1.5.1