packed structs

This commit is contained in:
eihrul 2010-03-22 17:17:07 +00:00
parent ea38380174
commit 2be268a77b
3 changed files with 51 additions and 38 deletions

View file

@ -7,7 +7,7 @@
#include <stdlib.h> #include <stdlib.h>
typedef struct typedef struct _ENetCallbacks
{ {
void * (ENET_CALLBACK * malloc) (size_t size); void * (ENET_CALLBACK * malloc) (size_t size);
void (ENET_CALLBACK * free) (void * memory); void (ENET_CALLBACK * free) (void * memory);

View file

@ -23,25 +23,25 @@ extern "C"
#include "enet/list.h" #include "enet/list.h"
#include "enet/callbacks.h" #include "enet/callbacks.h"
typedef enum typedef enum _ENetVersion
{ {
ENET_VERSION = 1 ENET_VERSION = 1
} ENetVersion; } ENetVersion;
typedef enum typedef enum _ENetSocketType
{ {
ENET_SOCKET_TYPE_STREAM = 1, ENET_SOCKET_TYPE_STREAM = 1,
ENET_SOCKET_TYPE_DATAGRAM = 2 ENET_SOCKET_TYPE_DATAGRAM = 2
} ENetSocketType; } ENetSocketType;
typedef enum typedef enum _ENetSocketWait
{ {
ENET_SOCKET_WAIT_NONE = 0, ENET_SOCKET_WAIT_NONE = 0,
ENET_SOCKET_WAIT_SEND = (1 << 0), ENET_SOCKET_WAIT_SEND = (1 << 0),
ENET_SOCKET_WAIT_RECEIVE = (1 << 1) ENET_SOCKET_WAIT_RECEIVE = (1 << 1)
} ENetSocketWait; } ENetSocketWait;
typedef enum typedef enum _ENetSocketOption
{ {
ENET_SOCKOPT_NONBLOCK = 1, ENET_SOCKOPT_NONBLOCK = 1,
ENET_SOCKOPT_BROADCAST = 2, ENET_SOCKOPT_BROADCAST = 2,
@ -83,7 +83,7 @@ typedef struct _ENetAddress
@sa ENetPacket @sa ENetPacket
*/ */
typedef enum typedef enum _ENetPacketFlag
{ {
/** packet must be received by the target peer and resend attempts should be /** packet must be received by the target peer and resend attempts should be
* made until the packet is delivered */ * made until the packet is delivered */
@ -161,7 +161,7 @@ typedef struct _ENetIncomingCommand
ENetPacket * packet; ENetPacket * packet;
} ENetIncomingCommand; } ENetIncomingCommand;
typedef enum typedef enum _ENetPeerState
{ {
ENET_PEER_STATE_DISCONNECTED = 0, ENET_PEER_STATE_DISCONNECTED = 0,
ENET_PEER_STATE_CONNECTING = 1, ENET_PEER_STATE_CONNECTING = 1,
@ -319,7 +319,7 @@ typedef struct _ENetHost
/** /**
* An ENet event type, as specified in @ref ENetEvent. * An ENet event type, as specified in @ref ENetEvent.
*/ */
typedef enum typedef enum _ENetEventType
{ {
/** no event occurred within the specified time limit */ /** no event occurred within the specified time limit */
ENET_EVENT_TYPE_NONE = 0, ENET_EVENT_TYPE_NONE = 0,

View file

@ -19,7 +19,7 @@ enum
ENET_PROTOCOL_MAXIMUM_PEER_ID = 0x7FFF ENET_PROTOCOL_MAXIMUM_PEER_ID = 0x7FFF
}; };
typedef enum typedef enum _ENetProtocolCommand
{ {
ENET_PROTOCOL_COMMAND_NONE = 0, ENET_PROTOCOL_COMMAND_NONE = 0,
ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1, ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1,
@ -38,7 +38,7 @@ typedef enum
ENET_PROTOCOL_COMMAND_MASK = 0x0F ENET_PROTOCOL_COMMAND_MASK = 0x0F
} ENetProtocolCommand; } ENetProtocolCommand;
typedef enum typedef enum _ENetProtocolFlag
{ {
ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7), ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7),
ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6), ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6),
@ -47,28 +47,37 @@ typedef enum
ENET_PROTOCOL_HEADER_FLAG_MASK = 0x8000 ENET_PROTOCOL_HEADER_FLAG_MASK = 0x8000
} ENetProtocolFlag; } 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_uint32 checksum;
enet_uint16 peerID; enet_uint16 peerID;
enet_uint16 sentTime; enet_uint16 sentTime;
} ENetProtocolHeader; } ENET_PACKED ENetProtocolHeader;
typedef struct typedef struct _ENetProtocolCommandHeader
{ {
enet_uint8 command; enet_uint8 command;
enet_uint8 channelID; enet_uint8 channelID;
enet_uint16 reliableSequenceNumber; enet_uint16 reliableSequenceNumber;
} ENetProtocolCommandHeader; } ENET_PACKED ENetProtocolCommandHeader;
typedef struct typedef struct _ENetProtocolAcknowledge
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 receivedReliableSequenceNumber; enet_uint16 receivedReliableSequenceNumber;
enet_uint16 receivedSentTime; enet_uint16 receivedSentTime;
} ENetProtocolAcknowledge; } ENET_PACKED ENetProtocolAcknowledge;
typedef struct typedef struct _ENetProtocolConnect
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 outgoingPeerID; enet_uint16 outgoingPeerID;
@ -81,9 +90,9 @@ typedef struct
enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleAcceleration;
enet_uint32 packetThrottleDeceleration; enet_uint32 packetThrottleDeceleration;
enet_uint32 sessionID; enet_uint32 sessionID;
} ENetProtocolConnect; } ENET_PACKED ENetProtocolConnect;
typedef struct typedef struct _ENetProtocolVerifyConnect
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 outgoingPeerID; enet_uint16 outgoingPeerID;
@ -95,55 +104,55 @@ typedef struct
enet_uint32 packetThrottleInterval; enet_uint32 packetThrottleInterval;
enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleAcceleration;
enet_uint32 packetThrottleDeceleration; enet_uint32 packetThrottleDeceleration;
} ENetProtocolVerifyConnect; } ENET_PACKED ENetProtocolVerifyConnect;
typedef struct typedef struct _ENetProtocolBandwidthLimit
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint32 incomingBandwidth; enet_uint32 incomingBandwidth;
enet_uint32 outgoingBandwidth; enet_uint32 outgoingBandwidth;
} ENetProtocolBandwidthLimit; } ENET_PACKED ENetProtocolBandwidthLimit;
typedef struct typedef struct _ENetProtocolThrottleConfigure
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint32 packetThrottleInterval; enet_uint32 packetThrottleInterval;
enet_uint32 packetThrottleAcceleration; enet_uint32 packetThrottleAcceleration;
enet_uint32 packetThrottleDeceleration; enet_uint32 packetThrottleDeceleration;
} ENetProtocolThrottleConfigure; } ENET_PACKED ENetProtocolThrottleConfigure;
typedef struct typedef struct _ENetProtocolDisconnect
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint32 data; enet_uint32 data;
} ENetProtocolDisconnect; } ENET_PACKED ENetProtocolDisconnect;
typedef struct typedef struct _ENetProtocolPing
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
} ENetProtocolPing; } ENET_PACKED ENetProtocolPing;
typedef struct typedef struct _ENetProtocolSendReliable
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 dataLength; enet_uint16 dataLength;
} ENetProtocolSendReliable; } ENET_PACKED ENetProtocolSendReliable;
typedef struct typedef struct _ENetProtocolSendUnreliable
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 unreliableSequenceNumber; enet_uint16 unreliableSequenceNumber;
enet_uint16 dataLength; enet_uint16 dataLength;
} ENetProtocolSendUnreliable; } ENET_PACKED ENetProtocolSendUnreliable;
typedef struct typedef struct _ENetProtocolSendUnsequenced
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 unsequencedGroup; enet_uint16 unsequencedGroup;
enet_uint16 dataLength; enet_uint16 dataLength;
} ENetProtocolSendUnsequenced; } ENET_PACKED ENetProtocolSendUnsequenced;
typedef struct typedef struct _ENetProtocolSendFragment
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
enet_uint16 startSequenceNumber; enet_uint16 startSequenceNumber;
@ -152,9 +161,9 @@ typedef struct
enet_uint32 fragmentNumber; enet_uint32 fragmentNumber;
enet_uint32 totalLength; enet_uint32 totalLength;
enet_uint32 fragmentOffset; enet_uint32 fragmentOffset;
} ENetProtocolSendFragment; } ENET_PACKED ENetProtocolSendFragment;
typedef union typedef union _ENetProtocol
{ {
ENetProtocolCommandHeader header; ENetProtocolCommandHeader header;
ENetProtocolAcknowledge acknowledge; ENetProtocolAcknowledge acknowledge;
@ -168,7 +177,11 @@ typedef union
ENetProtocolSendFragment sendFragment; ENetProtocolSendFragment sendFragment;
ENetProtocolBandwidthLimit bandwidthLimit; ENetProtocolBandwidthLimit bandwidthLimit;
ENetProtocolThrottleConfigure throttleConfigure; ENetProtocolThrottleConfigure throttleConfigure;
} ENetProtocol; } ENET_PACKED ENetProtocol;
#ifdef _MSC_VER_
#pragma pack(pop)
#endif
#endif /* __ENET_PROTOCOL_H__ */ #endif /* __ENET_PROTOCOL_H__ */