protocol.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 = 0x7FFF
  18. };
  19. typedef enum
  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_COUNT = 12,
  34. ENET_PROTOCOL_COMMAND_MASK = 0x0F
  35. } ENetProtocolCommand;
  36. typedef enum
  37. {
  38. ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7),
  39. ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6),
  40. ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15),
  41. ENET_PROTOCOL_HEADER_FLAG_MASK = 0x8000
  42. } ENetProtocolFlag;
  43. typedef struct
  44. {
  45. enet_uint32 checksum;
  46. enet_uint16 peerID;
  47. enet_uint16 sentTime;
  48. } ENetProtocolHeader;
  49. typedef struct
  50. {
  51. enet_uint8 command;
  52. enet_uint8 channelID;
  53. enet_uint16 reliableSequenceNumber;
  54. } ENetProtocolCommandHeader;
  55. typedef struct
  56. {
  57. ENetProtocolCommandHeader header;
  58. enet_uint16 receivedReliableSequenceNumber;
  59. enet_uint16 receivedSentTime;
  60. } ENetProtocolAcknowledge;
  61. typedef struct
  62. {
  63. ENetProtocolCommandHeader header;
  64. enet_uint16 outgoingPeerID;
  65. enet_uint16 mtu;
  66. enet_uint32 windowSize;
  67. enet_uint32 channelCount;
  68. enet_uint32 incomingBandwidth;
  69. enet_uint32 outgoingBandwidth;
  70. enet_uint32 packetThrottleInterval;
  71. enet_uint32 packetThrottleAcceleration;
  72. enet_uint32 packetThrottleDeceleration;
  73. enet_uint32 sessionID;
  74. } ENetProtocolConnect;
  75. typedef struct
  76. {
  77. ENetProtocolCommandHeader header;
  78. enet_uint16 outgoingPeerID;
  79. enet_uint16 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. } ENetProtocolVerifyConnect;
  88. typedef struct
  89. {
  90. ENetProtocolCommandHeader header;
  91. enet_uint32 incomingBandwidth;
  92. enet_uint32 outgoingBandwidth;
  93. } ENetProtocolBandwidthLimit;
  94. typedef struct
  95. {
  96. ENetProtocolCommandHeader header;
  97. enet_uint32 packetThrottleInterval;
  98. enet_uint32 packetThrottleAcceleration;
  99. enet_uint32 packetThrottleDeceleration;
  100. } ENetProtocolThrottleConfigure;
  101. typedef struct
  102. {
  103. ENetProtocolCommandHeader header;
  104. enet_uint32 data;
  105. } ENetProtocolDisconnect;
  106. typedef struct
  107. {
  108. ENetProtocolCommandHeader header;
  109. } ENetProtocolPing;
  110. typedef struct
  111. {
  112. ENetProtocolCommandHeader header;
  113. enet_uint16 dataLength;
  114. } ENetProtocolSendReliable;
  115. typedef struct
  116. {
  117. ENetProtocolCommandHeader header;
  118. enet_uint16 unreliableSequenceNumber;
  119. enet_uint16 dataLength;
  120. } ENetProtocolSendUnreliable;
  121. typedef struct
  122. {
  123. ENetProtocolCommandHeader header;
  124. enet_uint16 unsequencedGroup;
  125. enet_uint16 dataLength;
  126. } ENetProtocolSendUnsequenced;
  127. typedef struct
  128. {
  129. ENetProtocolCommandHeader header;
  130. enet_uint16 startSequenceNumber;
  131. enet_uint16 dataLength;
  132. enet_uint32 fragmentCount;
  133. enet_uint32 fragmentNumber;
  134. enet_uint32 totalLength;
  135. enet_uint32 fragmentOffset;
  136. } ENetProtocolSendFragment;
  137. typedef union
  138. {
  139. ENetProtocolCommandHeader header;
  140. ENetProtocolAcknowledge acknowledge;
  141. ENetProtocolConnect connect;
  142. ENetProtocolVerifyConnect verifyConnect;
  143. ENetProtocolDisconnect disconnect;
  144. ENetProtocolPing ping;
  145. ENetProtocolSendReliable sendReliable;
  146. ENetProtocolSendUnreliable sendUnreliable;
  147. ENetProtocolSendUnsequenced sendUnsequenced;
  148. ENetProtocolSendFragment sendFragment;
  149. ENetProtocolBandwidthLimit bandwidthLimit;
  150. ENetProtocolThrottleConfigure throttleConfigure;
  151. } ENetProtocol;
  152. #endif /* __ENET_PROTOCOL_H__ */