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