diff --git a/src/source/PeerConnection/Retransmitter.c b/src/source/PeerConnection/Retransmitter.c index b8b66a483b..3e28373b0f 100644 --- a/src/source/PeerConnection/Retransmitter.c +++ b/src/source/PeerConnection/Retransmitter.c @@ -1,6 +1,21 @@ #define LOG_CLASS "Retransmitter" #include "../Include_i.h" +/** + Layout of Retransmitter + 0 [ PSequenceNumberList ] + 8 [ seqNumberListLen ] + 12 [ validIndexList ] + 16 [ PValidIndexList ] + 24 (PSequenceNumberList) [ seq_num_0 ] + 26 (PSequenceNumberList + 1) [ seq_num_1 ] + ... + (PSequenceNumberList + seqNumListLen - 1) [ seq_num_{seqNumListLen - 1} ] + PValidIndexList = (PSequenceNumberList + seqNumListLen) [ valid_index_0 ] + (PValidIndexList + 1) [ valid_index_1 ] + ... + (PValidIndexList + validIndexLen - 1) [ valid_index_{seqNumListLen - 1} ] +**/ STATUS createRetransmitter(UINT32 seqNumListLen, UINT32 validIndexListLen, PRetransmitter* ppRetransmitter) { @@ -104,8 +119,7 @@ STATUS resendPacketOnNack(PRtcpPacket pRtcpPacket, PKvsPeerConnection pKvsPeerCo DLOGV("Resent packet ssrc %lu seq %lu failed 0x%08x", pRtpPacket->header.ssrc, pRtpPacket->header.sequenceNumber, retStatus); } // putBackPacketToRollingBuffer - retStatus = - rollingBufferInsertData(pSenderTranceiver->sender.packetBuffer->pRollingBuffer, pRetransmitter->sequenceNumberList[index], item); + retStatus = rollingBufferInsertData(pSenderTranceiver->sender.packetBuffer->pRollingBuffer, pRetransmitter->validIndexList[index], item); CHK(retStatus == STATUS_SUCCESS || retStatus == STATUS_ROLLING_BUFFER_NOT_IN_RANGE, retStatus); // free the packet if it is not in the valid range any more diff --git a/src/source/Rtcp/RtcpPacket.c b/src/source/Rtcp/RtcpPacket.c index 9346f90af4..7dd6614ef3 100644 --- a/src/source/Rtcp/RtcpPacket.c +++ b/src/source/Rtcp/RtcpPacket.c @@ -32,7 +32,7 @@ STATUS setRtcpPacketFromBytes(PBYTE pRawPacket, UINT32 pRawPacketsLen, PRtcpPack return retStatus; } -// Given a RTCP Packet list extract the list of SSRCes, since the list of SSRCes may not be know ahead of time (because of BLP) +// Given a RTCP Packet list extract the list of SSRCes, since the list of SSRCes may not be known ahead of time (because of BLP) // we need to allocate the list dynamically STATUS rtcpNackListGet(PBYTE pPayload, UINT32 payloadLen, PUINT32 pSenderSsrc, PUINT32 pReceiverSsrc, PUINT16 pSequenceNumberList, PUINT32 pSequenceNumberListLen) @@ -55,14 +55,14 @@ STATUS rtcpNackListGet(PBYTE pPayload, UINT32 payloadLen, PUINT32 pSenderSsrc, P BLP = getInt16(*(PUINT16) (pPayload + i + 2)); // If pSsrcList is not NULL and we have space push and increment - if (pSequenceNumberList != NULL && sequenceNumberCount <= *pSequenceNumberListLen) { + if (pSequenceNumberList != NULL && sequenceNumberCount < *pSequenceNumberListLen) { pSequenceNumberList[sequenceNumberCount] = currentSequenceNumber; } sequenceNumberCount++; for (j = 0; j < 16; j++) { if ((BLP & (1 << j)) >> j) { - if (pSequenceNumberList != NULL && sequenceNumberCount <= *pSequenceNumberListLen) { + if (pSequenceNumberList != NULL && sequenceNumberCount < *pSequenceNumberListLen) { pSequenceNumberList[sequenceNumberCount] = (currentSequenceNumber + j + 1); } sequenceNumberCount++; diff --git a/tst/RtcpFunctionalityTest.cpp b/tst/RtcpFunctionalityTest.cpp index d7cc2437fe..21259a87e5 100644 --- a/tst/RtcpFunctionalityTest.cpp +++ b/tst/RtcpFunctionalityTest.cpp @@ -168,6 +168,7 @@ TEST_F(RtcpFunctionalityTest, onRtcpPacketCompoundNack) freeRtpPacket(&pRtpPacket); } + TEST_F(RtcpFunctionalityTest, onRtcpPacketCompound) { KvsPeerConnection peerConnection{};