protocol.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. };
  18. typedef enum
  19. {
  20. ENET_PROTOCOL_COMMAND_NONE = 0,
  21. ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1,
  22. ENET_PROTOCOL_COMMAND_CONNECT = 2,
  23. ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3,
  24. ENET_PROTOCOL_COMMAND_DISCONNECT = 4,
  25. ENET_PROTOCOL_COMMAND_PING = 5,
  26. ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6,
  27. ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7,
  28. ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8,
  29. ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 9,
  30. ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 10
  31. } ENetProtocolCommand;
  32. typedef enum
  33. {
  34. ENET_PROTOCOL_FLAG_ACKNOWLEDGE = (1 << 0)
  35. } ENetProtocolFlag;
  36. typedef struct
  37. {
  38. enet_uint16 peerID;
  39. enet_uint8 flags;
  40. enet_uint8 commandCount;
  41. enet_uint32 sentTime;
  42. enet_uint32 challenge;
  43. } ENetProtocolHeader;
  44. typedef struct
  45. {
  46. enet_uint8 command;
  47. enet_uint8 channelID;
  48. enet_uint8 flags;
  49. enet_uint8 reserved;
  50. enet_uint32 commandLength;
  51. enet_uint32 reliableSequenceNumber;
  52. } ENetProtocolCommandHeader;
  53. typedef struct
  54. {
  55. ENetProtocolCommandHeader header;
  56. enet_uint32 receivedReliableSequenceNumber;
  57. enet_uint32 receivedSentTime;
  58. } ENetProtocolAcknowledge;
  59. typedef struct
  60. {
  61. ENetProtocolCommandHeader header;
  62. enet_uint16 outgoingPeerID;
  63. enet_uint16 mtu;
  64. enet_uint32 windowSize;
  65. enet_uint32 channelCount;
  66. enet_uint32 incomingBandwidth;
  67. enet_uint32 outgoingBandwidth;
  68. enet_uint32 packetThrottleInterval;
  69. enet_uint32 packetThrottleAcceleration;
  70. enet_uint32 packetThrottleDeceleration;
  71. } ENetProtocolConnect;
  72. typedef struct
  73. {
  74. ENetProtocolCommandHeader header;
  75. enet_uint16 outgoingPeerID;
  76. enet_uint16 mtu;
  77. enet_uint32 windowSize;
  78. enet_uint32 channelCount;
  79. enet_uint32 incomingBandwidth;
  80. enet_uint32 outgoingBandwidth;
  81. enet_uint32 packetThrottleInterval;
  82. enet_uint32 packetThrottleAcceleration;
  83. enet_uint32 packetThrottleDeceleration;
  84. } ENetProtocolVerifyConnect;
  85. typedef struct
  86. {
  87. ENetProtocolCommandHeader header;
  88. enet_uint32 incomingBandwidth;
  89. enet_uint32 outgoingBandwidth;
  90. } ENetProtocolBandwidthLimit;
  91. typedef struct
  92. {
  93. ENetProtocolCommandHeader header;
  94. enet_uint32 packetThrottleInterval;
  95. enet_uint32 packetThrottleAcceleration;
  96. enet_uint32 packetThrottleDeceleration;
  97. } ENetProtocolThrottleConfigure;
  98. typedef struct
  99. {
  100. ENetProtocolCommandHeader header;
  101. } ENetProtocolDisconnect;
  102. typedef struct
  103. {
  104. ENetProtocolCommandHeader header;
  105. } ENetProtocolPing;
  106. typedef struct
  107. {
  108. ENetProtocolCommandHeader header;
  109. } ENetProtocolSendReliable;
  110. typedef struct
  111. {
  112. ENetProtocolCommandHeader header;
  113. enet_uint32 unreliableSequenceNumber;
  114. } ENetProtocolSendUnreliable;
  115. typedef struct
  116. {
  117. ENetProtocolCommandHeader header;
  118. enet_uint32 startSequenceNumber;
  119. enet_uint32 fragmentCount;
  120. enet_uint32 fragmentNumber;
  121. enet_uint32 totalLength;
  122. enet_uint32 fragmentOffset;
  123. } ENetProtocolSendFragment;
  124. typedef union
  125. {
  126. ENetProtocolCommandHeader header;
  127. ENetProtocolAcknowledge acknowledge;
  128. ENetProtocolConnect connect;
  129. ENetProtocolVerifyConnect verifyConnect;
  130. ENetProtocolDisconnect disconnect;
  131. ENetProtocolPing ping;
  132. ENetProtocolSendReliable sendReliable;
  133. ENetProtocolSendUnreliable sendUnreliable;
  134. ENetProtocolSendFragment sendFragment;
  135. ENetProtocolBandwidthLimit bandwidthLimit;
  136. ENetProtocolThrottleConfigure throttleConfigure;
  137. } ENetProtocol;
  138. #endif /* __ENET_PROTOCOL_H__ */