Go to the documentation of this file.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
00197