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 )
|
void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
||||||
{
|
{
|
||||||
Packets::FFXIVARR_PACKET_HEADER packetHeader;
|
m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) );
|
||||||
const auto headerResult = Packets::getHeader( buffer, 0, packetHeader );
|
// 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 )
|
if( headerResult == Incomplete )
|
||||||
{
|
|
||||||
Logger::info( "Dropping connection due to incomplete packet header." );
|
|
||||||
Logger::info( "FIXME: Packet message bounary is not implemented." );
|
|
||||||
disconnect();
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if( headerResult == Malformed )
|
if( headerResult == Malformed )
|
||||||
{
|
{
|
||||||
|
@ -74,16 +71,11 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
||||||
|
|
||||||
// Dissect packet list
|
// Dissect packet list
|
||||||
std::vector< Packets::FFXIVARR_PACKET_RAW > packetList;
|
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 );
|
packetHeader, packetList );
|
||||||
|
|
||||||
if( packetResult == Incomplete )
|
if( packetResult == Incomplete )
|
||||||
{
|
|
||||||
Logger::info( "Dropping connection due to incomplete packets." );
|
|
||||||
Logger::info( "FIXME: Packet message bounary is not implemented." );
|
|
||||||
disconnect();
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if( packetResult == Malformed )
|
if( packetResult == Malformed )
|
||||||
{
|
{
|
||||||
|
@ -94,6 +86,7 @@ void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer )
|
||||||
|
|
||||||
// Handle it
|
// Handle it
|
||||||
handlePackets( packetHeader, packetList );
|
handlePackets( packetHeader, packetList );
|
||||||
|
m_packets.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ namespace Sapphire::Network
|
||||||
|
|
||||||
LockedQueue< Packets::GamePacketPtr > m_inQueue;
|
LockedQueue< Packets::GamePacketPtr > m_inQueue;
|
||||||
LockedQueue< Packets::GamePacketPtr > m_outQueue;
|
LockedQueue< Packets::GamePacketPtr > m_outQueue;
|
||||||
|
std::vector< uint8_t > m_packets;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GameConnection( HivePtr pHive, AcceptorPtr pAcceptor, FrameworkPtr pFw );
|
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 )
|
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.
|
// This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now.
|
||||||
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
||||||
const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader );
|
const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader );
|
||||||
|
|
||||||
if( ( headerResult == Incomplete ) || ( headerResult == Malformed ) )
|
if( headerResult == Incomplete )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if( headerResult == Malformed )
|
||||||
|
{
|
||||||
|
Logger::info( "Dropping connection due to malformed packet header." );
|
||||||
|
disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Dissect packet list
|
// Dissect packet list
|
||||||
std::vector< Packets::FFXIVARR_PACKET_RAW > packetList;
|
std::vector< Packets::FFXIVARR_PACKET_RAW > packetList;
|
||||||
const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ),
|
const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ),
|
||||||
packetHeader, packetList );
|
packetHeader, packetList );
|
||||||
|
|
||||||
if( ( packetResult == Incomplete ) || ( packetResult == Malformed ) )
|
if( packetResult == Incomplete )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if( packetResult == Malformed )
|
||||||
|
{
|
||||||
|
Logger::info( "Dropping connection due to malformed packets." );
|
||||||
|
disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle it
|
// Handle it
|
||||||
handlePackets( packetHeader, packetList );
|
handlePackets( packetHeader, packetList );
|
||||||
m_packets.clear();
|
m_packets.clear();
|
||||||
|
|
Loading…
Add table
Reference in a new issue