enet
protocol.h
Go to the documentation of this file.
1 
5 #ifndef __ENET_PROTOCOL_H__
6 #define __ENET_PROTOCOL_H__
7 
8 #include "enet/types.h"
9 
10 enum
11 {
12  ENET_PROTOCOL_MINIMUM_MTU = 576,
13  ENET_PROTOCOL_MAXIMUM_MTU = 4096,
14  ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32,
15  ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096,
16  ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 32768,
17  ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1,
18  ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255,
19  ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF,
20  ENET_PROTOCOL_MAXIMUM_PACKET_SIZE = 1024 * 1024 * 1024,
21  ENET_PROTOCOL_MAXIMUM_FRAGMENT_COUNT = 1024 * 1024
22 };
23 
24 typedef enum _ENetProtocolCommand
25 {
26  ENET_PROTOCOL_COMMAND_NONE = 0,
27  ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1,
28  ENET_PROTOCOL_COMMAND_CONNECT = 2,
29  ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3,
30  ENET_PROTOCOL_COMMAND_DISCONNECT = 4,
31  ENET_PROTOCOL_COMMAND_PING = 5,
32  ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6,
33  ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7,
34  ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8,
35  ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9,
36  ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10,
37  ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11,
38  ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE_FRAGMENT = 12,
39  ENET_PROTOCOL_COMMAND_COUNT = 13,
40 
41  ENET_PROTOCOL_COMMAND_MASK = 0x0F
42 } ENetProtocolCommand;
43 
44 typedef enum _ENetProtocolFlag
45 {
46  ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7),
47  ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6),
48 
49  ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = (1 << 14),
50  ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15),
51  ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME,
52 
53  ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12),
54  ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12
55 } ENetProtocolFlag;
56 
57 #ifdef _MSC_VER_
58 #pragma pack(push, 1)
59 #define ENET_PACKED
60 #elif defined(__GNUC__)
61 #define ENET_PACKED __attribute__ ((packed))
62 #else
63 #define ENET_PACKED
64 #endif
65 
66 typedef struct _ENetProtocolHeader
67 {
68  enet_uint16 peerID;
69  enet_uint16 sentTime;
70 } ENET_PACKED ENetProtocolHeader;
71 
73 {
74  enet_uint8 command;
75  enet_uint8 channelID;
76  enet_uint16 reliableSequenceNumber;
77 } ENET_PACKED ENetProtocolCommandHeader;
78 
80 {
81  ENetProtocolCommandHeader header;
82  enet_uint16 receivedReliableSequenceNumber;
83  enet_uint16 receivedSentTime;
84 } ENET_PACKED ENetProtocolAcknowledge;
85 
86 typedef struct _ENetProtocolConnect
87 {
88  ENetProtocolCommandHeader header;
89  enet_uint16 outgoingPeerID;
90  enet_uint8 incomingSessionID;
91  enet_uint8 outgoingSessionID;
92  enet_uint32 mtu;
93  enet_uint32 windowSize;
94  enet_uint32 channelCount;
95  enet_uint32 incomingBandwidth;
96  enet_uint32 outgoingBandwidth;
97  enet_uint32 packetThrottleInterval;
98  enet_uint32 packetThrottleAcceleration;
99  enet_uint32 packetThrottleDeceleration;
100  enet_uint32 connectID;
101  enet_uint32 data;
102 } ENET_PACKED ENetProtocolConnect;
103 
105 {
106  ENetProtocolCommandHeader header;
107  enet_uint16 outgoingPeerID;
108  enet_uint8 incomingSessionID;
109  enet_uint8 outgoingSessionID;
110  enet_uint32 mtu;
111  enet_uint32 windowSize;
112  enet_uint32 channelCount;
113  enet_uint32 incomingBandwidth;
114  enet_uint32 outgoingBandwidth;
115  enet_uint32 packetThrottleInterval;
116  enet_uint32 packetThrottleAcceleration;
117  enet_uint32 packetThrottleDeceleration;
118  enet_uint32 connectID;
119 } ENET_PACKED ENetProtocolVerifyConnect;
120 
122 {
123  ENetProtocolCommandHeader header;
124  enet_uint32 incomingBandwidth;
125  enet_uint32 outgoingBandwidth;
126 } ENET_PACKED ENetProtocolBandwidthLimit;
127 
129 {
130  ENetProtocolCommandHeader header;
131  enet_uint32 packetThrottleInterval;
132  enet_uint32 packetThrottleAcceleration;
133  enet_uint32 packetThrottleDeceleration;
134 } ENET_PACKED ENetProtocolThrottleConfigure;
135 
137 {
138  ENetProtocolCommandHeader header;
139  enet_uint32 data;
140 } ENET_PACKED ENetProtocolDisconnect;
141 
142 typedef struct _ENetProtocolPing
143 {
144  ENetProtocolCommandHeader header;
145 } ENET_PACKED ENetProtocolPing;
146 
148 {
149  ENetProtocolCommandHeader header;
150  enet_uint16 dataLength;
151 } ENET_PACKED ENetProtocolSendReliable;
152 
154 {
155  ENetProtocolCommandHeader header;
156  enet_uint16 unreliableSequenceNumber;
157  enet_uint16 dataLength;
158 } ENET_PACKED ENetProtocolSendUnreliable;
159 
161 {
162  ENetProtocolCommandHeader header;
163  enet_uint16 unsequencedGroup;
164  enet_uint16 dataLength;
165 } ENET_PACKED ENetProtocolSendUnsequenced;
166 
168 {
169  ENetProtocolCommandHeader header;
170  enet_uint16 startSequenceNumber;
171  enet_uint16 dataLength;
172  enet_uint32 fragmentCount;
173  enet_uint32 fragmentNumber;
174  enet_uint32 totalLength;
175  enet_uint32 fragmentOffset;
176 } ENET_PACKED ENetProtocolSendFragment;
177 
178 typedef union _ENetProtocol
179 {
180  ENetProtocolCommandHeader header;
181  ENetProtocolAcknowledge acknowledge;
182  ENetProtocolConnect connect;
183  ENetProtocolVerifyConnect verifyConnect;
184  ENetProtocolDisconnect disconnect;
185  ENetProtocolPing ping;
186  ENetProtocolSendReliable sendReliable;
187  ENetProtocolSendUnreliable sendUnreliable;
188  ENetProtocolSendUnsequenced sendUnsequenced;
189  ENetProtocolSendFragment sendFragment;
190  ENetProtocolBandwidthLimit bandwidthLimit;
191  ENetProtocolThrottleConfigure throttleConfigure;
192 } ENET_PACKED ENetProtocol;
193 
194 #ifdef _MSC_VER_
195 #pragma pack(pop)
196 #endif
197 
198 #endif /* __ENET_PROTOCOL_H__ */
199