2017-08-08 13:53:47 +02:00
|
|
|
#include "LobbyPacketContainer.h"
|
2017-12-18 12:36:52 +01:00
|
|
|
#include <common/Network/GamePacket.h>
|
|
|
|
#include <common/Network/GamePacketNew.h>
|
|
|
|
#include <common/Crypt/blowfish.h>
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
namespace Network {
|
|
|
|
namespace Packets {
|
|
|
|
|
|
|
|
LobbyPacketContainer::LobbyPacketContainer( uint8_t* encKey )
|
|
|
|
{
|
|
|
|
memset( &m_header, 0, sizeof( Core::Network::Packets::FFXIVARR_PACKET_HEADER ) );
|
|
|
|
m_header.size = sizeof( Core::Network::Packets::FFXIVARR_PACKET_HEADER );
|
|
|
|
|
|
|
|
m_encKey = encKey;
|
|
|
|
|
|
|
|
memset( m_dataBuf, 0, 0x1570 );
|
|
|
|
}
|
|
|
|
|
|
|
|
LobbyPacketContainer::~LobbyPacketContainer()
|
|
|
|
{
|
|
|
|
m_entryList.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
void LobbyPacketContainer::addPacket( GamePacketPtr pEntry )
|
|
|
|
{
|
|
|
|
memcpy( m_dataBuf + m_header.size, pEntry->getData(), pEntry->getSize() );
|
|
|
|
|
|
|
|
// encryption key is set, we want to encrypt this packet
|
|
|
|
if( m_encKey != NULL )
|
|
|
|
{
|
|
|
|
BlowFish blowfish;
|
|
|
|
blowfish.initialize( m_encKey, 0x10 );
|
|
|
|
blowfish.Encode( m_dataBuf + m_header.size + 0x10, m_dataBuf + m_header.size + 0x10, pEntry->getSize() - 0x10 );
|
|
|
|
}
|
|
|
|
|
|
|
|
m_header.size += pEntry->getSize();
|
|
|
|
m_header.count++;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t LobbyPacketContainer::getSize() const
|
|
|
|
{
|
|
|
|
return m_header.size;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t* LobbyPacketContainer::getRawData( bool addstuff )
|
|
|
|
{
|
|
|
|
if( addstuff )
|
|
|
|
{
|
|
|
|
m_header.unknown_0 = 0xff41a05252;
|
|
|
|
m_header.timestamp = Core::Util::getTimeMs();
|
|
|
|
}
|
|
|
|
memcpy( m_dataBuf, &m_header, sizeof( Core::Network::Packets::FFXIVARR_PACKET_HEADER ) );
|
|
|
|
return m_dataBuf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|