mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 07:07:45 +00:00
add malformed packet check back in and handle lobby connections better
This commit is contained in:
parent
acbfff5ab0
commit
9eb765e85a
3 changed files with 24 additions and 16 deletions
|
@ -54,16 +54,13 @@ void Sapphire::Network::GameConnection::onDisconnect()
|
|||
|
||||
void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
||||
{
|
||||
Packets::FFXIVARR_PACKET_HEADER packetHeader;
|
||||
const auto headerResult = Packets::getHeader( buffer, 0, packetHeader );
|
||||
m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) );
|
||||
// This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now.
|
||||
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
||||
const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader );
|
||||
|
||||
if( headerResult == Incomplete )
|
||||
{
|
||||
Logger::info( "Dropping connection due to incomplete packet header." );
|
||||
Logger::info( "FIXME: Packet message bounary is not implemented." );
|
||||
disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
if( headerResult == Malformed )
|
||||
{
|
||||
|
@ -74,16 +71,11 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
|||
|
||||
// Dissect packet list
|
||||
std::vector< Packets::FFXIVARR_PACKET_RAW > packetList;
|
||||
const auto packetResult = Packets::getPackets( buffer, sizeof( struct FFXIVARR_PACKET_HEADER ),
|
||||
const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ),
|
||||
packetHeader, packetList );
|
||||
|
||||
if( packetResult == Incomplete )
|
||||
{
|
||||
Logger::info( "Dropping connection due to incomplete packets." );
|
||||
Logger::info( "FIXME: Packet message bounary is not implemented." );
|
||||
disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
if( packetResult == Malformed )
|
||||
{
|
||||
|
@ -94,6 +86,7 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
|||
|
||||
// Handle it
|
||||
handlePackets( packetHeader, packetList );
|
||||
m_packets.clear();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ namespace Sapphire::Network
|
|||
|
||||
LockedQueue< Packets::GamePacketPtr > m_inQueue;
|
||||
LockedQueue< Packets::GamePacketPtr > m_outQueue;
|
||||
std::vector< uint8_t > m_packets;
|
||||
|
||||
public:
|
||||
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor, FrameworkPtr pFw );
|
||||
|
|
|
@ -154,22 +154,36 @@ void Sapphire::Network::GameConnection::onDisconnect()
|
|||
|
||||
void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
||||
{
|
||||
m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) );
|
||||
m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) );
|
||||
// This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now.
|
||||
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
||||
const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader );
|
||||
|
||||
if( ( headerResult == Incomplete ) || ( headerResult == Malformed ) )
|
||||
if( headerResult == Incomplete )
|
||||
return;
|
||||
|
||||
if( headerResult == Malformed )
|
||||
{
|
||||
Logger::info( "Dropping connection due to malformed packet header." );
|
||||
disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
// Dissect packet list
|
||||
std::vector< Packets::FFXIVARR_PACKET_RAW > packetList;
|
||||
const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ),
|
||||
packetHeader, packetList );
|
||||
|
||||
if( ( packetResult == Incomplete ) || ( packetResult == Malformed ) )
|
||||
if( packetResult == Incomplete )
|
||||
return;
|
||||
|
||||
if( packetResult == Malformed )
|
||||
{
|
||||
Logger::info( "Dropping connection due to malformed packets." );
|
||||
disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle it
|
||||
handlePackets( packetHeader, packetList );
|
||||
m_packets.clear();
|
||||
|
|
Loading…
Add table
Reference in a new issue