return v;
}
-#ifdef __GNUC__
- #define PACKED_ATTRIBUTE __attribute__((__packed__))
-#else
- #define PACKED_ATTRIBUTE
- #pragma pack(push,1)
-#endif
+#pragma pack(push,1)
namespace aux
{
}
template <class T>
-struct PACKED_ATTRIBUTE big_endian
+struct big_endian
{
T operator=(T i) { m_integer = aux::host_to_network(i); return i; }
operator T() const { return aux::network_to_host(m_integer); }
typedef big_endian<uint32> uint32_big;
typedef big_endian<uint16> uint16_big;
-#ifndef __GNUC__
- #pragma pack(pop)
-#endif
+#pragma pack(pop)
template<typename T> static inline void zeromem(T *a, size_t count = 1) { memset(a, 0, count * sizeof(T)); }
char addrbuf2[65];
#define addrfmt(x, s) x.fmt(s, sizeof(s))
-#ifdef __GNUC__
- #define PACKED_ATTRIBUTE __attribute__((__packed__))
-#else
- #define PACKED_ATTRIBUTE
- #pragma pack(push,1)
-#endif
+#pragma pack(push,1)
-struct PACKED_ATTRIBUTE PackedSockAddr {
+struct PackedSockAddr {
// The values are always stored here in network byte order
union {
}
};
-struct PACKED_ATTRIBUTE RST_Info {
+struct RST_Info {
PackedSockAddr addr;
uint32 connid;
uint32 timestamp;
#define PACKET_SIZE_BIG 1400
#define PACKET_SIZE_HUGE_BUCKET 4
-struct PACKED_ATTRIBUTE PacketFormat {
+struct PacketFormat {
// connection ID
uint32_big connid;
uint32_big tv_sec;
uint16_big ack_nr;
};
-struct PACKED_ATTRIBUTE PacketFormatAck {
+struct PacketFormatAck {
PacketFormat pf;
byte ext_next;
byte ext_len;
byte acks[4];
};
-struct PACKED_ATTRIBUTE PacketFormatExtensions {
+struct PacketFormatExtensions {
PacketFormat pf;
byte ext_next;
byte ext_len;
byte extensions[8];
};
-struct PACKED_ATTRIBUTE PacketFormatV1 {
+struct PacketFormatV1 {
// packet_type (4 high bits)
// protocol version (4 low bits)
byte ver_type;
uint16_big ack_nr;
};
-struct PACKED_ATTRIBUTE PacketFormatAckV1 {
+struct PacketFormatAckV1 {
PacketFormatV1 pf;
byte ext_next;
byte ext_len;
byte acks[4];
};
-struct PACKED_ATTRIBUTE PacketFormatExtensionsV1 {
+struct PacketFormatExtensionsV1 {
PacketFormatV1 pf;
byte ext_next;
byte ext_len;
byte extensions[8];
};
-#ifndef __GNUC__
- #pragma pack(pop)
-#endif
+#pragma pack(pop)
enum {
ST_DATA = 0, // Data packet.