Reject out of order packets.

This commit is contained in:
Jonathan Naylor
2016-07-12 07:05:48 +01:00
parent 495b3b6913
commit 3af36dd8c0
2 changed files with 18 additions and 11 deletions

View File

@@ -515,15 +515,18 @@ void CDStarControl::writeNetwork()
unsigned char n = data[1U];
insertSilence(data + 1U, n);
unsigned int errors = m_fec.regenerateDStar(data + 2U);
blankDTMF(data + 2U);
// Insert silence and reject if in the past
bool ret = insertSilence(data + 2U, n);
if (!ret)
return;
m_netErrs += errors;
m_netBits += 48U;
blankDTMF(data + 2U);
// Regenerate the sync
if (n == 0U)
CSync::addDStarSync(data + 2U);
@@ -791,7 +794,7 @@ void CDStarControl::closeFile()
}
}
void CDStarControl::insertSilence(const unsigned char* data, unsigned char seqNo)
bool CDStarControl::insertSilence(const unsigned char* data, unsigned char seqNo)
{
assert(data != NULL);
@@ -799,8 +802,8 @@ void CDStarControl::insertSilence(const unsigned char* data, unsigned char seqNo
unsigned int oldSeqNo = (m_netN + 1U) % 21U;
if (oldSeqNo == seqNo) {
// Just copy the data, nothing else to do here
::memcpy(m_lastFrame, data, DSTAR_FRAME_LENGTH_BYTES + 1U);
return;
::memcpy(m_lastFrame, data + 1U, DSTAR_FRAME_LENGTH_BYTES + 1U);
return true;
}
LogDebug("D-Star, current=%u last=%u", seqNo, m_netN);
@@ -811,10 +814,14 @@ void CDStarControl::insertSilence(const unsigned char* data, unsigned char seqNo
else
count = (21U + seqNo) - oldSeqNo;
if (count < 10U)
if (count >= 10U)
return false;
insertSilence(count);
::memcpy(m_lastFrame, data, DSTAR_FRAME_LENGTH_BYTES + 1U);
::memcpy(m_lastFrame, data + 1U, DSTAR_FRAME_LENGTH_BYTES + 1U);
return true;
}
void CDStarControl::insertSilence(unsigned int count)

View File

@@ -98,7 +98,7 @@ private:
bool writeFile(const unsigned char* data, unsigned int length);
void closeFile();
void insertSilence(const unsigned char* data, unsigned char seqNo);
bool insertSilence(const unsigned char* data, unsigned char seqNo);
void insertSilence(unsigned int count);
void blankDTMF(unsigned char* data) const;