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