protocol.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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
  46. | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME,
  47. ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12),
  48. ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12
  49. } ENetProtocolFlag;
  50. #ifdef _MSC_VER_
  51. #pragma pack(push, 1)
  52. #define ENET_PACKED
  53. #elif defined(__GNUC__)
  54. #define ENET_PACKED __attribute__ ((packed))
  55. #else
  56. #define ENET_PACKED
  57. #endif
  58. typedef struct _ENetProtocolHeader
  59. {
  60. enet_uint16 peerID;
  61. enet_uint16 sentTime;
  62. }ENET_PACKED ENetProtocolHeader;
  63. typedef struct _ENetProtocolCommandHeader
  64. {
  65. enet_uint8 command;
  66. enet_uint8 channelID;
  67. enet_uint16 reliableSequenceNumber;
  68. }ENET_PACKED ENetProtocolCommandHeader;
  69. typedef struct _ENetProtocolAcknowledge
  70. {
  71. ENetProtocolCommandHeader header;
  72. enet_uint16 receivedReliableSequenceNumber;
  73. enet_uint16 receivedSentTime;
  74. }ENET_PACKED ENetProtocolAcknowledge;
  75. typedef struct _ENetProtocolConnect
  76. {
  77. ENetProtocolCommandHeader header;
  78. enet_uint16 outgoingPeerID;
  79. enet_uint8 incomingSessionID;
  80. enet_uint8 outgoingSessionID;
  81. enet_uint32 mtu;
  82. enet_uint32 windowSize;
  83. enet_uint32 channelCount;
  84. enet_uint32 incomingBandwidth;
  85. enet_uint32 outgoingBandwidth;
  86. enet_uint32 packetThrottleInterval;
  87. enet_uint32 packetThrottleAcceleration;
  88. enet_uint32 packetThrottleDeceleration;
  89. enet_uint32 connectID;
  90. enet_uint32 data;
  91. }ENET_PACKED ENetProtocolConnect;
  92. typedef struct _ENetProtocolVerifyConnect
  93. {
  94. ENetProtocolCommandHeader header;
  95. enet_uint16 outgoingPeerID;
  96. enet_uint8 incomingSessionID;
  97. enet_uint8 outgoingSessionID;
  98. enet_uint32 mtu;
  99. enet_uint32 windowSize;
  100. enet_uint32 channelCount;
  101. enet_uint32 incomingBandwidth;
  102. enet_uint32 outgoingBandwidth;
  103. enet_uint32 packetThrottleInterval;
  104. enet_uint32 packetThrottleAcceleration;
  105. enet_uint32 packetThrottleDeceleration;
  106. enet_uint32 connectID;
  107. }ENET_PACKED ENetProtocolVerifyConnect;
  108. typedef struct _ENetProtocolBandwidthLimit
  109. {
  110. ENetProtocolCommandHeader header;
  111. enet_uint32 incomingBandwidth;
  112. enet_uint32 outgoingBandwidth;
  113. }ENET_PACKED ENetProtocolBandwidthLimit;
  114. typedef struct _ENetProtocolThrottleConfigure
  115. {
  116. ENetProtocolCommandHeader header;
  117. enet_uint32 packetThrottleInterval;
  118. enet_uint32 packetThrottleAcceleration;
  119. enet_uint32 packetThrottleDeceleration;
  120. }ENET_PACKED ENetProtocolThrottleConfigure;
  121. typedef struct _ENetProtocolDisconnect
  122. {
  123. ENetProtocolCommandHeader header;
  124. enet_uint32 data;
  125. }ENET_PACKED ENetProtocolDisconnect;
  126. typedef struct _ENetProtocolPing
  127. {
  128. ENetProtocolCommandHeader header;
  129. }ENET_PACKED ENetProtocolPing;
  130. typedef struct _ENetProtocolSendReliable
  131. {
  132. ENetProtocolCommandHeader header;
  133. enet_uint16 dataLength;
  134. }ENET_PACKED ENetProtocolSendReliable;
  135. typedef struct _ENetProtocolSendUnreliable
  136. {
  137. ENetProtocolCommandHeader header;
  138. enet_uint16 unreliableSequenceNumber;
  139. enet_uint16 dataLength;
  140. }ENET_PACKED ENetProtocolSendUnreliable;
  141. typedef struct _ENetProtocolSendUnsequenced
  142. {
  143. ENetProtocolCommandHeader header;
  144. enet_uint16 unsequencedGroup;
  145. enet_uint16 dataLength;
  146. }ENET_PACKED ENetProtocolSendUnsequenced;
  147. typedef struct _ENetProtocolSendFragment
  148. {
  149. ENetProtocolCommandHeader header;
  150. enet_uint16 startSequenceNumber;
  151. enet_uint16 dataLength;
  152. enet_uint32 fragmentCount;
  153. enet_uint32 fragmentNumber;
  154. enet_uint32 totalLength;
  155. enet_uint32 fragmentOffset;
  156. }ENET_PACKED ENetProtocolSendFragment;
  157. typedef union _ENetProtocol
  158. {
  159. ENetProtocolCommandHeader header;
  160. ENetProtocolAcknowledge acknowledge;
  161. ENetProtocolConnect connect;
  162. ENetProtocolVerifyConnect verifyConnect;
  163. ENetProtocolDisconnect disconnect;
  164. ENetProtocolPing ping;
  165. ENetProtocolSendReliable sendReliable;
  166. ENetProtocolSendUnreliable sendUnreliable;
  167. ENetProtocolSendUnsequenced sendUnsequenced;
  168. ENetProtocolSendFragment sendFragment;
  169. ENetProtocolBandwidthLimit bandwidthLimit;
  170. ENetProtocolThrottleConfigure throttleConfigure;
  171. }ENET_PACKED ENetProtocol;
  172. #ifdef _MSC_VER_
  173. #pragma pack(pop)
  174. #endif
  175. #endif /* __ENET_PROTOCOL_H__ */