Merge pull request #5 from nostar/main

Handle unknown YSF packets
pull/8/head
Tom Early 4 years ago committed by GitHub
commit 3701edcf1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -186,6 +186,18 @@ void CYsfProtocol::Task(void)
EncodeServerStatusPacket(&Buffer);
Send(Buffer, Ip);
}
else if ( IsValidInfoPacket(Buffer) )
{
// Do nothing
}
else if ( IsValidAckPacket(Buffer) )
{
// Do nothing
}
else if ( IsValidOptionsPacket(Buffer) )
{
// Do nothing
}
else
{
#ifdef DEBUG
@ -882,6 +894,31 @@ bool CYsfProtocol::IsValidServerStatusPacket(const CBuffer &Buffer) const
return ( (Buffer.size() >= 4) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
}
// Info packet sent by some clients -- currently ignored by YSFReflector
bool CYsfProtocol::IsValidInfoPacket(const CBuffer &Buffer) const
{
uint8_t tag[] = { 'Y','S','F','I' };
return ( (Buffer.size() >= 4) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
}
// Valid packet sent by registry as an ACK response to a server status reply from reflector
bool CYsfProtocol::IsValidAckPacket(const CBuffer &Buffer) const
{
uint8_t tag[] = { 'Y','S','F','V' };
return ( (Buffer.size() >= 4) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
}
bool CYsfProtocol::IsValidOptionsPacket(const CBuffer &Buffer) const
{
uint8_t tag[] = { 'Y','S','F','O' };
return ( (Buffer.size() >= 4) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
}
// server status packet encoding helpers
bool CYsfProtocol::EncodeServerStatusPacket(CBuffer *Buffer) const

@ -101,6 +101,9 @@ protected:
// server status packet decoding helpers
bool IsValidServerStatusPacket(const CBuffer &) const;
bool IsValidInfoPacket(const CBuffer &) const;
bool IsValidAckPacket(const CBuffer &) const;
bool IsValidOptionsPacket(const CBuffer &) const;
uint32_t CalcHash(const uint8_t *, int) const;
// server status packet encoding helpers

Loading…
Cancel
Save

Powered by TurnKey Linux.