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