protocol.h 5.5 KB

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