@ -407,6 +407,7 @@ bool CYsfProtocol::IsValidDvPacket(const CBuffer &Buffer, CYSFFICH *Fich)
bool CYsfProtocol : : IsValidDvHeaderPacket ( const CIp & Ip , const CYSFFICH & Fich , const CBuffer & Buffer , std : : unique_ptr < CDvHeaderPacket > & header , std : : array < std : : unique_ptr < CDvFramePacket > , 5 > & frames )
{
CCallsign csMY ;
// DV header ?
if ( Fich . getFI ( ) = = YSF_FI_HEADER )
{
@ -421,7 +422,14 @@ bool CYsfProtocol::IsValidDvHeaderPacket(const CIp &Ip, const CYSFFICH &Fich, co
char sz [ YSF_CALLSIGN_LENGTH + 1 ] ;
memcpy ( sz , & ( Buffer . data ( ) [ 14 ] ) , YSF_CALLSIGN_LENGTH ) ;
sz [ YSF_CALLSIGN_LENGTH ] = 0 ;
CCallsign csMY = CCallsign ( ( const char * ) sz ) ;
for ( uint32_t i = 0 ; i < YSF_CALLSIGN_LENGTH ; + + i ) {
if ( ( sz [ i ] = = ' / ' ) | | ( sz [ i ] = = ' \\ ' ) | | ( sz [ i ] = = ' - ' ) | | ( sz [ i ] = = ' ' ) ) {
sz [ i ] = 0 ;
}
}
csMY = CCallsign ( ( const char * ) sz ) ;
memcpy ( sz , & ( Buffer . data ( ) [ 4 ] ) , YSF_CALLSIGN_LENGTH ) ;
sz [ YSF_CALLSIGN_LENGTH ] = 0 ;
CCallsign rpt1 = CCallsign ( ( const char * ) sz ) ;
@ -439,12 +447,12 @@ bool CYsfProtocol::IsValidDvHeaderPacket(const CIp &Ip, const CYSFFICH &Fich, co
{
uint8_t uiAmbe [ 9 ] ;
memset ( uiAmbe , 0x00 , sizeof ( uiAmbe ) ) ;
frames [ 0 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 0 , 0 , false ) ) ;
frames [ 1 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 1 , 0 , false ) ) ;
frames [ 0 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 0 , 0 , csMY , false ) ) ;
frames [ 1 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 1 , 0 , csMY , false ) ) ;
}
// check validity of packets
if ( header & & frames [ 0 ] & & frames [ 1 ] & & header- > IsValid ( ) & & frames[ 0 ] - > IsValid ( ) & & frames [ 1 ] - > IsValid ( ) )
if ( header & & frames [ 0 ] & & frames [ 1 ] & & frames[ 0 ] - > IsValid ( ) & & frames [ 1 ] - > IsValid ( ) )
return true ;
}
@ -467,14 +475,26 @@ bool CYsfProtocol::IsValidDvFramePacket(const CIp &Ip, const CYSFFICH &Fich, con
uint8_t ambe4 [ 9 ] ;
uint8_t * ambes [ 5 ] = { ambe0 , ambe1 , ambe2 , ambe3 , ambe4 } ;
CYsfUtils : : DecodeVD2Vchs ( ( unsigned char * ) & ( Buffer . data ( ) [ 35 ] ) , ambes ) ;
char sz [ YSF_CALLSIGN_LENGTH + 1 ] ;
: : memcpy ( sz , & ( Buffer . data ( ) [ 14 ] ) , YSF_CALLSIGN_LENGTH ) ;
sz [ YSF_CALLSIGN_LENGTH ] = 0 ;
for ( uint32_t i = 0 ; i < YSF_CALLSIGN_LENGTH ; + + i ) {
if ( ( sz [ i ] = = ' / ' ) | | ( sz [ i ] = = ' \\ ' ) | | ( sz [ i ] = = ' - ' ) | | ( sz [ i ] = = ' ' ) ) {
sz [ i ] = 0 ;
}
}
CCallsign csMY = CCallsign ( ( const char * ) sz ) ;
// get DV frames
uint8_t fid = Buffer . data ( ) [ 34 ] ;
frames [ 0 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe0 , uiStreamId , Fich . getFN ( ) , 0 , fid , false ) ) ;
frames [ 1 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe1 , uiStreamId , Fich . getFN ( ) , 1 , fid , false ) ) ;
frames [ 2 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe2 , uiStreamId , Fich . getFN ( ) , 2 , fid , false ) ) ;
frames [ 3 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe3 , uiStreamId , Fich . getFN ( ) , 3 , fid , false ) ) ;
frames [ 4 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe4 , uiStreamId , Fich . getFN ( ) , 4 , fid , false ) ) ;
frames [ 0 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe0 , uiStreamId , Fich . getFN ( ) , 0 , fid , csMY , false ) ) ;
frames [ 1 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe1 , uiStreamId , Fich . getFN ( ) , 1 , fid , csMY , false ) ) ;
frames [ 2 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe2 , uiStreamId , Fich . getFN ( ) , 2 , fid , csMY , false ) ) ;
frames [ 3 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe3 , uiStreamId , Fich . getFN ( ) , 3 , fid , csMY , false ) ) ;
frames [ 4 ] = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( ambe4 , uiStreamId , Fich . getFN ( ) , 4 , fid , csMY , false ) ) ;
// check validity of packets
if ( frames [ 0 ] & & frames [ 0 ] - > IsValid ( ) & & frames [ 1 ] & & frames [ 1 ] - > IsValid ( ) & & frames [ 2 ] & & frames [ 2 ] - > IsValid ( ) & & frames [ 3 ] & & frames [ 3 ] - > IsValid ( ) & & frames [ 4 ] & & frames [ 4 ] - > IsValid ( ) )
@ -495,8 +515,21 @@ bool CYsfProtocol::IsValidDvLastFramePacket(const CIp &Ip, const CYSFFICH &Fich,
{
uint8_t uiAmbe [ 9 ] ;
memset ( uiAmbe , 0x00 , sizeof ( uiAmbe ) ) ;
oneframe = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 0 , 0 , false ) ) ;
lastframe = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 1 , 0 , true ) ) ;
char sz [ YSF_CALLSIGN_LENGTH + 1 ] ;
: : memcpy ( sz , & ( Buffer . data ( ) [ 14 ] ) , YSF_CALLSIGN_LENGTH ) ;
sz [ YSF_CALLSIGN_LENGTH ] = 0 ;
for ( uint32_t i = 0 ; i < YSF_CALLSIGN_LENGTH ; + + i ) {
if ( ( sz [ i ] = = ' / ' ) | | ( sz [ i ] = = ' \\ ' ) | | ( sz [ i ] = = ' - ' ) | | ( sz [ i ] = = ' ' ) ) {
sz [ i ] = 0 ;
}
}
CCallsign csMY = CCallsign ( ( const char * ) sz ) ;
oneframe = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 0 , 0 , csMY , false ) ) ;
lastframe = std : : unique_ptr < CDvFramePacket > ( new CDvFramePacket ( uiAmbe , uiStreamId , Fich . getFN ( ) , 1 , 0 , csMY , true ) ) ;
}
// check validity of packets