|
|
|
|
@ -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
|
|
|
|
|
|