enet
|
00001 00005 #ifndef __ENET_PROTOCOL_H__ 00006 #define __ENET_PROTOCOL_H__ 00007 00008 #include "enet/types.h" 00009 00010 enum 00011 { 00012 ENET_PROTOCOL_MINIMUM_MTU = 576, 00013 ENET_PROTOCOL_MAXIMUM_MTU = 4096, 00014 ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32, 00015 ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096, 00016 ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 32768, 00017 ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1, 00018 ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255, 00019 ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF 00020 }; 00021 00022 typedef enum _ENetProtocolCommand 00023 { 00024 ENET_PROTOCOL_COMMAND_NONE = 0, 00025 ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1, 00026 ENET_PROTOCOL_COMMAND_CONNECT = 2, 00027 ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3, 00028 ENET_PROTOCOL_COMMAND_DISCONNECT = 4, 00029 ENET_PROTOCOL_COMMAND_PING = 5, 00030 ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6, 00031 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7, 00032 ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8, 00033 ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9, 00034 ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10, 00035 ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11, 00036 ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT = 12, 00037 ENET_PROTOCOL_COMMAND_COUNT = 13, 00038 00039 ENET_PROTOCOL_COMMAND_MASK = 0x0F 00040 } ENetProtocolCommand; 00041 00042 typedef enum _ENetProtocolFlag 00043 { 00044 ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7), 00045 ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6), 00046 00047 ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = (1 << 14), 00048 ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15), 00049 ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME, 00050 00051 ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12), 00052 ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12 00053 } ENetProtocolFlag; 00054 00055 #ifdef _MSC_VER_ 00056 #pragma pack(push, 1) 00057 #define ENET_PACKED 00058 #elif defined(__GNUC__) 00059 #define ENET_PACKED __attribute__ ((packed)) 00060 #else 00061 #define ENET_PACKED 00062 #endif 00063 00064 typedef struct _ENetProtocolHeader 00065 { 00066 enet_uint16 peerID; 00067 enet_uint16 sentTime; 00068 } ENET_PACKED ENetProtocolHeader; 00069 00070 typedef struct _ENetProtocolCommandHeader 00071 { 00072 enet_uint8 command; 00073 enet_uint8 channelID; 00074 enet_uint16 reliableSequenceNumber; 00075 } ENET_PACKED ENetProtocolCommandHeader; 00076 00077 typedef struct _ENetProtocolAcknowledge 00078 { 00079 ENetProtocolCommandHeader header; 00080 enet_uint16 receivedReliableSequenceNumber; 00081 enet_uint16 receivedSentTime; 00082 } ENET_PACKED ENetProtocolAcknowledge; 00083 00084 typedef struct _ENetProtocolConnect 00085 { 00086 ENetProtocolCommandHeader header; 00087 enet_uint16 outgoingPeerID; 00088 enet_uint8 incomingSessionID; 00089 enet_uint8 outgoingSessionID; 00090 enet_uint32 mtu; 00091 enet_uint32 windowSize; 00092 enet_uint32 channelCount; 00093 enet_uint32 incomingBandwidth; 00094 enet_uint32 outgoingBandwidth; 00095 enet_uint32 packetThrottleInterval; 00096 enet_uint32 packetThrottleAcceleration; 00097 enet_uint32 packetThrottleDeceleration; 00098 enet_uint32 connectID; 00099 enet_uint32 data; 00100 } ENET_PACKED ENetProtocolConnect; 00101 00102 typedef struct _ENetProtocolVerifyConnect 00103 { 00104 ENetProtocolCommandHeader header; 00105 enet_uint16 outgoingPeerID; 00106 enet_uint8 incomingSessionID; 00107 enet_uint8 outgoingSessionID; 00108 enet_uint32 mtu; 00109 enet_uint32 windowSize; 00110 enet_uint32 channelCount; 00111 enet_uint32 incomingBandwidth; 00112 enet_uint32 outgoingBandwidth; 00113 enet_uint32 packetThrottleInterval; 00114 enet_uint32 packetThrottleAcceleration; 00115 enet_uint32 packetThrottleDeceleration; 00116 enet_uint32 connectID; 00117 } ENET_PACKED ENetProtocolVerifyConnect; 00118 00119 typedef struct _ENetProtocolBandwidthLimit 00120 { 00121 ENetProtocolCommandHeader header; 00122 enet_uint32 incomingBandwidth; 00123 enet_uint32 outgoingBandwidth; 00124 } ENET_PACKED ENetProtocolBandwidthLimit; 00125 00126 typedef struct _ENetProtocolThrottleConfigure 00127 { 00128 ENetProtocolCommandHeader header; 00129 enet_uint32 packetThrottleInterval; 00130 enet_uint32 packetThrottleAcceleration; 00131 enet_uint32 packetThrottleDeceleration; 00132 } ENET_PACKED ENetProtocolThrottleConfigure; 00133 00134 typedef struct _ENetProtocolDisconnect 00135 { 00136 ENetProtocolCommandHeader header; 00137 enet_uint32 data; 00138 } ENET_PACKED ENetProtocolDisconnect; 00139 00140 typedef struct _ENetProtocolPing 00141 { 00142 ENetProtocolCommandHeader header; 00143 } ENET_PACKED ENetProtocolPing; 00144 00145 typedef struct _ENetProtocolSendReliable 00146 { 00147 ENetProtocolCommandHeader header; 00148 enet_uint16 dataLength; 00149 } ENET_PACKED ENetProtocolSendReliable; 00150 00151 typedef struct _ENetProtocolSendUnreliable 00152 { 00153 ENetProtocolCommandHeader header; 00154 enet_uint16 unreliableSequenceNumber; 00155 enet_uint16 dataLength; 00156 } ENET_PACKED ENetProtocolSendUnreliable; 00157 00158 typedef struct _ENetProtocolSendUnsequenced 00159 { 00160 ENetProtocolCommandHeader header; 00161 enet_uint16 unsequencedGroup; 00162 enet_uint16 dataLength; 00163 } ENET_PACKED ENetProtocolSendUnsequenced; 00164 00165 typedef struct _ENetProtocolSendFragment 00166 { 00167 ENetProtocolCommandHeader header; 00168 enet_uint16 startSequenceNumber; 00169 enet_uint16 dataLength; 00170 enet_uint32 fragmentCount; 00171 enet_uint32 fragmentNumber; 00172 enet_uint32 totalLength; 00173 enet_uint32 fragmentOffset; 00174 } ENET_PACKED ENetProtocolSendFragment; 00175 00176 typedef union _ENetProtocol 00177 { 00178 ENetProtocolCommandHeader header; 00179 ENetProtocolAcknowledge acknowledge; 00180 ENetProtocolConnect connect; 00181 ENetProtocolVerifyConnect verifyConnect; 00182 ENetProtocolDisconnect disconnect; 00183 ENetProtocolPing ping; 00184 ENetProtocolSendReliable sendReliable; 00185 ENetProtocolSendUnreliable sendUnreliable; 00186 ENetProtocolSendUnsequenced sendUnsequenced; 00187 ENetProtocolSendFragment sendFragment; 00188 ENetProtocolBandwidthLimit bandwidthLimit; 00189 ENetProtocolThrottleConfigure throttleConfigure; 00190 } ENET_PACKED ENetProtocol; 00191 00192 #ifdef _MSC_VER_ 00193 #pragma pack(pop) 00194 #endif 00195 00196 #endif /* __ENET_PROTOCOL_H__ */ 00197