handle edge-case scenario of RTP packet sequence overrun;

pull/51/head
Bryan Biedenkapp 2 years ago
parent 856fa98357
commit 1ef806fef1

@ -731,7 +731,7 @@ uint16_t BaseNetwork::pktSeq(bool reset)
uint16_t curr = m_pktSeq;
++m_pktSeq;
if (m_pktSeq >= RTP_END_OF_CALL_SEQ - 1U) {
if (m_pktSeq > (RTP_END_OF_CALL_SEQ - 1U)) {
m_pktSeq = 0U;
}

@ -188,14 +188,14 @@ void* DiagNetwork::threadedNetworkRx(void* arg)
connection->pktLastSeq(pktSeq);
connection->pktNextSeq(0U);
} else {
if ((connection->currStreamId() == streamId) && (pktSeq != connection->pktNextSeq())) {
if ((connection->currStreamId() == streamId) && (pktSeq != connection->pktNextSeq()) && (pktSeq != (RTP_END_OF_CALL_SEQ - 1U))) {
LogWarning(LOG_NET, "PEER %u stream %u out-of-sequence; %u != %u", peerId, streamId, pktSeq, connection->pktNextSeq());
}
connection->currStreamId(streamId);
connection->pktLastSeq(pktSeq);
connection->pktNextSeq(pktSeq + 1);
if (connection->pktNextSeq() > UINT16_MAX) {
if (connection->pktNextSeq() > (RTP_END_OF_CALL_SEQ - 1U)) {
connection->pktNextSeq(0U);
}
}

@ -366,14 +366,14 @@ void* FNENetwork::threadedNetworkRx(void* arg)
connection->pktLastSeq(pktSeq);
connection->pktNextSeq(0U);
} else {
if ((connection->currStreamId() == streamId) && (pktSeq != connection->pktNextSeq())) {
if ((connection->currStreamId() == streamId) && (pktSeq != connection->pktNextSeq()) && (pktSeq != (RTP_END_OF_CALL_SEQ - 1U))) {
LogWarning(LOG_NET, "PEER %u stream %u out-of-sequence; %u != %u", peerId, streamId, pktSeq, connection->pktNextSeq());
}
connection->currStreamId(streamId);
connection->pktLastSeq(pktSeq);
connection->pktNextSeq(pktSeq + 1);
if (connection->pktNextSeq() > UINT16_MAX) {
if (connection->pktNextSeq() > (RTP_END_OF_CALL_SEQ - 1U)) {
connection->pktNextSeq(0U);
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.