From 2be268a77bee17ae7bf47ffbcbb4f4d68d81608d Mon Sep 17 00:00:00 2001 From: eihrul Date: Mon, 22 Mar 2010 17:17:07 +0000 Subject: packed structs --- include/enet/callbacks.h | 2 +- include/enet/enet.h | 14 +++++----- include/enet/protocol.h | 73 ++++++++++++++++++++++++++++-------------------- 3 files changed, 51 insertions(+), 38 deletions(-) diff --git a/include/enet/callbacks.h b/include/enet/callbacks.h index be29ae0..0b9e693 100644 --- a/include/enet/callbacks.h +++ b/include/enet/callbacks.h @@ -7,7 +7,7 @@ #include -typedef struct +typedef struct _ENetCallbacks { void * (ENET_CALLBACK * malloc) (size_t size); void (ENET_CALLBACK * free) (void * memory); diff --git a/include/enet/enet.h b/include/enet/enet.h index cf7b2d0..dca564c 100644 --- a/include/enet/enet.h +++ b/include/enet/enet.h @@ -23,25 +23,25 @@ extern "C" #include "enet/list.h" #include "enet/callbacks.h" -typedef enum +typedef enum _ENetVersion { ENET_VERSION = 1 } ENetVersion; -typedef enum +typedef enum _ENetSocketType { ENET_SOCKET_TYPE_STREAM = 1, ENET_SOCKET_TYPE_DATAGRAM = 2 } ENetSocketType; -typedef enum +typedef enum _ENetSocketWait { ENET_SOCKET_WAIT_NONE = 0, ENET_SOCKET_WAIT_SEND = (1 << 0), ENET_SOCKET_WAIT_RECEIVE = (1 << 1) } ENetSocketWait; -typedef enum +typedef enum _ENetSocketOption { ENET_SOCKOPT_NONBLOCK = 1, ENET_SOCKOPT_BROADCAST = 2, @@ -83,7 +83,7 @@ typedef struct _ENetAddress @sa ENetPacket */ -typedef enum +typedef enum _ENetPacketFlag { /** packet must be received by the target peer and resend attempts should be * made until the packet is delivered */ @@ -161,7 +161,7 @@ typedef struct _ENetIncomingCommand ENetPacket * packet; } ENetIncomingCommand; -typedef enum +typedef enum _ENetPeerState { ENET_PEER_STATE_DISCONNECTED = 0, ENET_PEER_STATE_CONNECTING = 1, @@ -319,7 +319,7 @@ typedef struct _ENetHost /** * An ENet event type, as specified in @ref ENetEvent. */ -typedef enum +typedef enum _ENetEventType { /** no event occurred within the specified time limit */ ENET_EVENT_TYPE_NONE = 0, diff --git a/include/enet/protocol.h b/include/enet/protocol.h index 363857b..4e61cad 100644 --- a/include/enet/protocol.h +++ b/include/enet/protocol.h @@ -19,7 +19,7 @@ enum ENET_PROTOCOL_MAXIMUM_PEER_ID = 0x7FFF }; -typedef enum +typedef enum _ENetProtocolCommand { ENET_PROTOCOL_COMMAND_NONE = 0, ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1, @@ -38,7 +38,7 @@ typedef enum ENET_PROTOCOL_COMMAND_MASK = 0x0F } ENetProtocolCommand; -typedef enum +typedef enum _ENetProtocolFlag { ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7), ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6), @@ -47,28 +47,37 @@ typedef enum ENET_PROTOCOL_HEADER_FLAG_MASK = 0x8000 } ENetProtocolFlag; -typedef struct +#ifdef _MSC_VER_ +#pragma pack(push, 1) +#define ENET_PACKED +#elif defined(__GNUC__) +#define ENET_PACKED __attribute__ ((packed)) +#else +#define ENET_PACKED +#endif + +typedef struct _ENetProtocolHeader { enet_uint32 checksum; enet_uint16 peerID; enet_uint16 sentTime; -} ENetProtocolHeader; +} ENET_PACKED ENetProtocolHeader; -typedef struct +typedef struct _ENetProtocolCommandHeader { enet_uint8 command; enet_uint8 channelID; enet_uint16 reliableSequenceNumber; -} ENetProtocolCommandHeader; +} ENET_PACKED ENetProtocolCommandHeader; -typedef struct +typedef struct _ENetProtocolAcknowledge { ENetProtocolCommandHeader header; enet_uint16 receivedReliableSequenceNumber; enet_uint16 receivedSentTime; -} ENetProtocolAcknowledge; +} ENET_PACKED ENetProtocolAcknowledge; -typedef struct +typedef struct _ENetProtocolConnect { ENetProtocolCommandHeader header; enet_uint16 outgoingPeerID; @@ -81,9 +90,9 @@ typedef struct enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleDeceleration; enet_uint32 sessionID; -} ENetProtocolConnect; +} ENET_PACKED ENetProtocolConnect; -typedef struct +typedef struct _ENetProtocolVerifyConnect { ENetProtocolCommandHeader header; enet_uint16 outgoingPeerID; @@ -95,55 +104,55 @@ typedef struct enet_uint32 packetThrottleInterval; enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleDeceleration; -} ENetProtocolVerifyConnect; +} ENET_PACKED ENetProtocolVerifyConnect; -typedef struct +typedef struct _ENetProtocolBandwidthLimit { ENetProtocolCommandHeader header; enet_uint32 incomingBandwidth; enet_uint32 outgoingBandwidth; -} ENetProtocolBandwidthLimit; +} ENET_PACKED ENetProtocolBandwidthLimit; -typedef struct +typedef struct _ENetProtocolThrottleConfigure { ENetProtocolCommandHeader header; enet_uint32 packetThrottleInterval; enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleDeceleration; -} ENetProtocolThrottleConfigure; +} ENET_PACKED ENetProtocolThrottleConfigure; -typedef struct +typedef struct _ENetProtocolDisconnect { ENetProtocolCommandHeader header; enet_uint32 data; -} ENetProtocolDisconnect; +} ENET_PACKED ENetProtocolDisconnect; -typedef struct +typedef struct _ENetProtocolPing { ENetProtocolCommandHeader header; -} ENetProtocolPing; +} ENET_PACKED ENetProtocolPing; -typedef struct +typedef struct _ENetProtocolSendReliable { ENetProtocolCommandHeader header; enet_uint16 dataLength; -} ENetProtocolSendReliable; +} ENET_PACKED ENetProtocolSendReliable; -typedef struct +typedef struct _ENetProtocolSendUnreliable { ENetProtocolCommandHeader header; enet_uint16 unreliableSequenceNumber; enet_uint16 dataLength; -} ENetProtocolSendUnreliable; +} ENET_PACKED ENetProtocolSendUnreliable; -typedef struct +typedef struct _ENetProtocolSendUnsequenced { ENetProtocolCommandHeader header; enet_uint16 unsequencedGroup; enet_uint16 dataLength; -} ENetProtocolSendUnsequenced; +} ENET_PACKED ENetProtocolSendUnsequenced; -typedef struct +typedef struct _ENetProtocolSendFragment { ENetProtocolCommandHeader header; enet_uint16 startSequenceNumber; @@ -152,9 +161,9 @@ typedef struct enet_uint32 fragmentNumber; enet_uint32 totalLength; enet_uint32 fragmentOffset; -} ENetProtocolSendFragment; +} ENET_PACKED ENetProtocolSendFragment; -typedef union +typedef union _ENetProtocol { ENetProtocolCommandHeader header; ENetProtocolAcknowledge acknowledge; @@ -168,7 +177,11 @@ typedef union ENetProtocolSendFragment sendFragment; ENetProtocolBandwidthLimit bandwidthLimit; ENetProtocolThrottleConfigure throttleConfigure; -} ENetProtocol; +} ENET_PACKED ENetProtocol; + +#ifdef _MSC_VER_ +#pragma pack(pop) +#endif #endif /* __ENET_PROTOCOL_H__ */ -- cgit v1.2.3