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
|
||||
template<typename T> inline void EndianConvert(T& val) { ByteConverter::apply<T>(&val); }
|
||||
template<typename T> inline void EndianConvertReverse(T&) { }
|
||||
#else
|
||||
template<typename T> inline void EndianConvert(T&) { }
|
||||
template<typename T> inline void EndianConvertReverse(T& val) { ByteConverter::apply<T>(&val); }
|
||||
#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( int8&) { }
|
||||
inline void EndianConvertReverse(uint8&) { }
|
||||
inline void EndianConvertReverse( int8&) { }
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -377,21 +377,14 @@ int WorldSocket::handle_input_header (void)
|
|||
|
||||
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
|
||||
header.cmd = ACE_SWAP_LONG (header.cmd)
|
||||
#endif // ACE_BIG_ENDIAN
|
||||
|
||||
if ((header.size < 4) ||
|
||||
(header.size > 10240) ||
|
||||
(header.cmd < 0) ||
|
||||
(header.cmd > 10240)
|
||||
)
|
||||
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",
|
||||
header.size,
|
||||
header.cmd);
|
||||
header.size, header.cmd);
|
||||
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
|
|
@ -974,13 +967,10 @@ int WorldSocket::iSendPacket (const WorldPacket& pct)
|
|||
ServerPktHeader header;
|
||||
|
||||
header.cmd = pct.GetOpcode ();
|
||||
|
||||
#if ACE_BYTE_ORDER == ACE_BIG_ENDIAN
|
||||
header.cmd = ACE_SWAP_WORD (header.cmd)
|
||||
#endif
|
||||
EndianConvert(header.cmd);
|
||||
|
||||
header.size = (uint16) pct.size () + 2;
|
||||
header.size = ACE_HTONS (header.size);
|
||||
EndianConvertReverse(header.size);
|
||||
|
||||
m_Crypt.EncryptSend ((uint8*) & header, sizeof (header));
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
#include "Common.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
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue