diff --git a/reflector/YSFProtocol.cpp b/reflector/YSFProtocol.cpp index eb261aa..f67fd1f 100644 --- a/reflector/YSFProtocol.cpp +++ b/reflector/YSFProtocol.cpp @@ -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 diff --git a/reflector/YSFProtocol.h b/reflector/YSFProtocol.h index 5a90628..666ef40 100644 --- a/reflector/YSFProtocol.h +++ b/reflector/YSFProtocol.h @@ -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