protocol.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /**
  2. @file protocol.h
  3. @brief ENet protocol
  4. */
  5. #ifndef __ENET_PROTOCOL_H__
  6. #define __ENET_PROTOCOL_H__
  7. #include "enet/types.h"
  8. enum
  9. {
  10. ENET_PROTOCOL_MINIMUM_MTU = 576,
  11. ENET_PROTOCOL_MAXIMUM_MTU = 4096,
  12. ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32,
  13. ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096,
  14. ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 32768,
  15. ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1,
  16. ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255,
  17. ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF,
  18. ENET_PROTOCOL_MAXIMUM_PACKET_SIZE = 1024 * 1024 * 1024,
  19. ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT = 1024 * 1024
  20. };
  21. typedef enum _ENetProtocolCommand
  22. {
  23. ENET_PROTOCOL_COMMAND_NONE = 0,
  24. ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1,
  25. ENET_PROTOCOL_COMMAND_CONNECT = 2,
  26. ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3,
  27. ENET_PROTOCOL_COMMAND_DISCONNECT = 4,
  28. ENET_PROTOCOL_COMMAND_PING = 5,
  29. ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6,
  30. ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7,
  31. ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8,
  32. ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9,
  33. ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10,
  34. ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11,
  35. ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT = 12,
  36. ENET_PROTOCOL_COMMAND_COUNT = 13,
  37. ENET_PROTOCOL_COMMAND_MASK = 0x0F
  38. } ENetProtocolCommand;
  39. typedef enum _ENetProtocolFlag
  40. {
  41. ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7),
  42. ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6),
  43. ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = (1 << 14),
  44. ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15),
  45. ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME,
  46. ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12),
  47. ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12
  48. } ENetProtocolFlag;
  49. #ifdef _MSC_VER_
  50. #pragma pack(push, 1)
  51. #define ENET_PACKED
  52. #elif defined(__GNUC__)
  53. #define ENET_PACKED __attribute__ ((packed))
  54. #else
  55. #define ENET_PACKED
  56. #endif
  57. typedef struct _ENetProtocolHeader
  58. {
  59. enet_uint16 peerID;
  60. enet_uint16 sentTime;
  61. } ENET_PACKED ENetProtocolHeader;
  62. typedef struct _ENetProtocolCommandHeader
  63. {
  64. enet_uint8 command;
  65. enet_uint8 channelID;
  66. enet_uint16 reliableSequenceNumber;
  67. } ENET_PACKED ENetProtocolCommandHeader;
  68. typedef struct _ENetProtocolAcknowledge
  69. {
  70. ENetProtocolCommandHeader header;
  71. enet_uint16 receivedReliableSequenceNumber;
  72. enet_uint16 receivedSentTime;
  73. } ENET_PACKED ENetProtocolAcknowledge;
  74. typedef struct _ENetProtocolConnect
  75. {
  76. ENetProtocolCommandHeader header;
  77. enet_uint16 outgoingPeerID;
  78. enet_uint8 incomingSessionID;
  79. enet_uint8 outgoingSessionID;
  80. enet_uint32 mtu;
  81. enet_uint32 windowSize;
  82. enet_uint32 channelCount;
  83. enet_uint32 incomingBandwidth;
  84. enet_uint32 outgoingBandwidth;
  85. enet_uint32 packetThrottleInterval;
  86. enet_uint32 packetThrottleAcceleration;
  87. enet_uint32 packetThrottleDeceleration;
  88. enet_uint32 connectID;
  89. enet_uint32 data;
  90. } ENET_PACKED ENetProtocolConnect;
  91. typedef struct _ENetProtocolVerifyConnect
  92. {
  93. ENetProtocolCommandHeader header;
  94. enet_uint16 outgoingPeerID;
  95. enet_uint8 incomingSessionID;
  96. enet_uint8 outgoingSessionID;
  97. enet_uint32 mtu;
  98. enet_uint32 windowSize;
  99. enet_uint32 channelCount;
  100. enet_uint32 incomingBandwidth;
  101. enet_uint32 outgoingBandwidth;
  102. enet_uint32 packetThrottleInterval;
  103. enet_uint32 packetThrottleAcceleration;
  104. enet_uint32 packetThrottleDeceleration;
  105. enet_uint32 connectID;
  106. } ENET_PACKED ENetProtocolVerifyConnect;
  107. typedef struct _ENetProtocolBandwidthLimit
  108. {
  109. ENetProtocolCommandHeader header;
  110. enet_uint32 incomingBandwidth;
  111. enet_uint32 outgoingBandwidth;
  112. } ENET_PACKED ENetProtocolBandwidthLimit;
  113. typedef struct _ENetProtocolThrottleConfigure
  114. {
  115. ENetProtocolCommandHeader header;
  116. enet_uint32 packetThrottleInterval;
  117. enet_uint32 packetThrottleAcceleration;
  118. enet_uint32 packetThrottleDeceleration;
  119. } ENET_PACKED ENetProtocolThrottleConfigure;
  120. typedef struct _ENetProtocolDisconnect
  121. {
  122. ENetProtocolCommandHeader header;
  123. enet_uint32 data;
  124. } ENET_PACKED ENetProtocolDisconnect;
  125. typedef struct _ENetProtocolPing
  126. {
  127. ENetProtocolCommandHeader header;
  128. } ENET_PACKED ENetProtocolPing;
  129. typedef struct _ENetProtocolSendReliable
  130. {
  131. ENetProtocolCommandHeader header;
  132. enet_uint16 dataLength;
  133. } ENET_PACKED ENetProtocolSendReliable;
  134. typedef struct _ENetProtocolSendUnreliable
  135. {
  136. ENetProtocolCommandHeader header;
  137. enet_uint16 unreliableSequenceNumber;
  138. enet_uint16 dataLength;
  139. } ENET_PACKED ENetProtocolSendUnreliable;
  140. typedef struct _ENetProtocolSendUnsequenced
  141. {
  142. ENetProtocolCommandHeader header;
  143. enet_uint16 unsequencedGroup;
  144. enet_uint16 dataLength;
  145. } ENET_PACKED ENetProtocolSendUnsequenced;
  146. typedef struct _ENetProtocolSendFragment
  147. {
  148. ENetProtocolCommandHeader header;
  149. enet_uint16 startSequenceNumber;
  150. enet_uint16 dataLength;
  151. enet_uint32 fragmentCount;
  152. enet_uint32 fragmentNumber;
  153. enet_uint32 totalLength;
  154. enet_uint32 fragmentOffset;
  155. } ENET_PACKED ENetProtocolSendFragment;
  156. typedef union _ENetProtocol
  157. {
  158. ENetProtocolCommandHeader header;
  159. ENetProtocolAcknowledge acknowledge;
  160. ENetProtocolConnect connect;
  161. ENetProtocolVerifyConnect verifyConnect;
  162. ENetProtocolDisconnect disconnect;
  163. ENetProtocolPing ping;
  164. ENetProtocolSendReliable sendReliable;
  165. ENetProtocolSendUnreliable sendUnreliable;
  166. ENetProtocolSendUnsequenced sendUnsequenced;
  167. ENetProtocolSendFragment sendFragment;
  168. ENetProtocolBandwidthLimit bandwidthLimit;
  169. ENetProtocolThrottleConfigure throttleConfigure;
  170. } ENET_PACKED ENetProtocol;
  171. #ifdef _MSC_VER_
  172. #pragma pack(pop)
  173. #endif
  174. #endif /* __ENET_PROTOCOL_H__ */