mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
Some endianess related fixes and cleanups
* Fixed: build fail at bigendian platform in result typo in code * Hide endianess related convertions into EndianConvert/EndianConvertReverse calls * Linkning errors protection from attemps convertion pointers.
This commit is contained in:
parent
89893215e5
commit
51b2290be6
3 changed files with 17 additions and 19 deletions
|
|
@ -46,12 +46,18 @@ namespace ByteConverter
|
||||||
|
|
||||||
#if MANGOS_ENDIAN == MANGOS_BIGENDIAN
|
#if MANGOS_ENDIAN == MANGOS_BIGENDIAN
|
||||||
template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); }
|
template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); }
|
||||||
|
template<typename T> inline void EndianConvertReverse(T&) { }
|
||||||
#else
|
#else
|
||||||
template<typename T> inline void EndianConvert(T&) { }
|
template<typename T> inline void EndianConvert(T&) { }
|
||||||
|
template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
template<typename T> inline void EndianConvert(T*) { }
|
template<typename T> void EndianConvert(T*); // will generate link error
|
||||||
|
template<typename T> void EndianConvertReverse(T*); // will generate link error
|
||||||
|
|
||||||
inline void EndianConvert(uint8&) { }
|
inline void EndianConvert(uint8&) { }
|
||||||
inline void EndianConvert( int8&) { }
|
inline void EndianConvert( int8&) { }
|
||||||
|
inline void EndianConvertReverse(uint8&) { }
|
||||||
|
inline void EndianConvertReverse( int8&) { }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -377,21 +377,14 @@ int WorldSocket::handle_input_header (void)
|
||||||
|
|
||||||
ClientPktHeader& header = *((ClientPktHeader*) m_Header.rd_ptr ());
|
ClientPktHeader& header = *((ClientPktHeader*) m_Header.rd_ptr ());
|
||||||
|
|
||||||
header.size = ACE_NTOHS (header.size);
|
EndianConvertReverse(header.size);
|
||||||
|
EndianConvert(header.cmd);
|
||||||
|
|
||||||
#if ACE_BYTE_ORDER == ACE_BIG_ENDIAN
|
if ((header.size < 4) || (header.size > 10240) ||
|
||||||
header.cmd = ACE_SWAP_LONG (header.cmd)
|
(header.cmd < 0) || (header.cmd > 10240) )
|
||||||
#endif // ACE_BIG_ENDIAN
|
|
||||||
|
|
||||||
if ((header.size < 4) ||
|
|
||||||
(header.size > 10240) ||
|
|
||||||
(header.cmd < 0) ||
|
|
||||||
(header.cmd > 10240)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
sLog.outError ("WorldSocket::handle_input_header: client sent mailformed packet size = %d , cmd = %d",
|
sLog.outError ("WorldSocket::handle_input_header: client sent mailformed packet size = %d , cmd = %d",
|
||||||
header.size,
|
header.size, header.cmd);
|
||||||
header.cmd);
|
|
||||||
|
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -664,7 +657,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the content of the packet
|
// Read the content of the packet
|
||||||
recvPacket >> BuiltNumberClient; // for now no use
|
recvPacket >> BuiltNumberClient; // for now no use
|
||||||
recvPacket >> unk2;
|
recvPacket >> unk2;
|
||||||
recvPacket >> account;
|
recvPacket >> account;
|
||||||
|
|
||||||
|
|
@ -974,13 +967,10 @@ int WorldSocket::iSendPacket (const WorldPacket& pct)
|
||||||
ServerPktHeader header;
|
ServerPktHeader header;
|
||||||
|
|
||||||
header.cmd = pct.GetOpcode ();
|
header.cmd = pct.GetOpcode ();
|
||||||
|
EndianConvert(header.cmd);
|
||||||
#if ACE_BYTE_ORDER == ACE_BIG_ENDIAN
|
|
||||||
header.cmd = ACE_SWAP_WORD (header.cmd)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
header.size = (uint16) pct.size () + 2;
|
header.size = (uint16) pct.size () + 2;
|
||||||
header.size = ACE_HTONS (header.size);
|
EndianConvertReverse(header.size);
|
||||||
|
|
||||||
m_Crypt.EncryptSend ((uint8*) & header, sizeof (header));
|
m_Crypt.EncryptSend ((uint8*) & header, sizeof (header));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "ByteBuffer.h"
|
#include "ByteBuffer.h"
|
||||||
|
|
||||||
|
// Note: m_opcode and size stored in platfom dependent format
|
||||||
|
// ignore endianess until send, and converted at receive
|
||||||
class WorldPacket : public ByteBuffer
|
class WorldPacket : public ByteBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue