Do not use recursive calling in NetEq test tools
This CL removes recursive calling in: - NETEQTEST_DummyRTPpacket::readFromFile, - NETEQTEST_RTPpacket::readFromFile. The files currently exist for both NetEq3 and NetEq4, and all are changed with this CL. R=turaj@webrtc.org Review URL: https://webrtc-codereview.appspot.com/4699004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5200 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -31,116 +31,121 @@ int NETEQTEST_DummyRTPpacket::readFromFile(FILE *fp)
|
|||||||
|
|
||||||
uint16_t length, plen;
|
uint16_t length, plen;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
int packetLen;
|
||||||
|
|
||||||
if (fread(&length, 2, 1, fp) == 0)
|
bool readNextPacket = true;
|
||||||
{
|
while (readNextPacket) {
|
||||||
|
readNextPacket = false;
|
||||||
|
if (fread(&length, 2, 1, fp) == 0)
|
||||||
|
{
|
||||||
reset();
|
reset();
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
length = ntohs(length);
|
length = ntohs(length);
|
||||||
|
|
||||||
if (fread(&plen, 2, 1, fp) == 0)
|
if (fread(&plen, 2, 1, fp) == 0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int packetLen = ntohs(plen);
|
packetLen = ntohs(plen);
|
||||||
|
|
||||||
if (fread(&offset, 4, 1, fp) == 0)
|
if (fread(&offset, 4, 1, fp) == 0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// Store in local variable until we have passed the reset below.
|
// Store in local variable until we have passed the reset below.
|
||||||
uint32_t receiveTime = ntohl(offset);
|
uint32_t receiveTime = ntohl(offset);
|
||||||
|
|
||||||
// Use length here because a plen of 0 specifies rtcp.
|
// Use length here because a plen of 0 specifies rtcp.
|
||||||
length = (uint16_t) (length - _kRDHeaderLen);
|
length = (uint16_t) (length - _kRDHeaderLen);
|
||||||
|
|
||||||
// check buffer size
|
// check buffer size
|
||||||
if (_datagram && _memSize < length + 1)
|
if (_datagram && _memSize < length + 1)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_datagram)
|
if (!_datagram)
|
||||||
{
|
{
|
||||||
// Add one extra byte, to be able to fake a dummy payload of one byte.
|
// Add one extra byte, to be able to fake a dummy payload of one byte.
|
||||||
_datagram = new uint8_t[length + 1];
|
_datagram = new uint8_t[length + 1];
|
||||||
_memSize = length + 1;
|
_memSize = length + 1;
|
||||||
}
|
}
|
||||||
memset(_datagram, 0, length + 1);
|
memset(_datagram, 0, length + 1);
|
||||||
|
|
||||||
if (length == 0)
|
if (length == 0)
|
||||||
{
|
{
|
||||||
_datagramLen = 0;
|
_datagramLen = 0;
|
||||||
return packetLen;
|
return packetLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read basic header
|
// Read basic header
|
||||||
if (fread(_datagram, 1, _kBasicHeaderLen, fp)
|
if (fread(_datagram, 1, _kBasicHeaderLen, fp)
|
||||||
!= (size_t)_kBasicHeaderLen)
|
!= (size_t)_kBasicHeaderLen)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_receiveTime = receiveTime;
|
_receiveTime = receiveTime;
|
||||||
_datagramLen = _kBasicHeaderLen;
|
_datagramLen = _kBasicHeaderLen;
|
||||||
int header_length = _kBasicHeaderLen;
|
int header_length = _kBasicHeaderLen;
|
||||||
|
|
||||||
// Parse the basic header
|
// Parse the basic header
|
||||||
WebRtcNetEQ_RTPInfo tempRTPinfo;
|
WebRtcNetEQ_RTPInfo tempRTPinfo;
|
||||||
int P, X, CC;
|
int P, X, CC;
|
||||||
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
|
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
|
||||||
|
|
||||||
// Check if we have to extend the header
|
// Check if we have to extend the header
|
||||||
if (X != 0 || CC != 0)
|
if (X != 0 || CC != 0)
|
||||||
{
|
{
|
||||||
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
|
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
|
||||||
assert(_memSize >= newLen + 1);
|
assert(_memSize >= newLen + 1);
|
||||||
|
|
||||||
// Read extension from file
|
// Read extension from file
|
||||||
size_t readLen = newLen - _kBasicHeaderLen;
|
size_t readLen = newLen - _kBasicHeaderLen;
|
||||||
if (fread(_datagram + _kBasicHeaderLen, 1, readLen,
|
if (fread(_datagram + _kBasicHeaderLen, 1, readLen,
|
||||||
fp) != readLen)
|
fp) != readLen)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_datagramLen = newLen;
|
_datagramLen = newLen;
|
||||||
header_length = newLen;
|
header_length = newLen;
|
||||||
|
|
||||||
if (X != 0)
|
if (X != 0)
|
||||||
{
|
{
|
||||||
int totHdrLen = calcHeaderLength(X, CC);
|
int totHdrLen = calcHeaderLength(X, CC);
|
||||||
assert(_memSize >= totHdrLen);
|
assert(_memSize >= totHdrLen);
|
||||||
|
|
||||||
// Read extension from file
|
// Read extension from file
|
||||||
size_t readLen = totHdrLen - newLen;
|
size_t readLen = totHdrLen - newLen;
|
||||||
if (fread(_datagram + newLen, 1, readLen, fp)
|
if (fread(_datagram + newLen, 1, readLen, fp)
|
||||||
!= readLen)
|
!= readLen)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_datagramLen = totHdrLen;
|
_datagramLen = totHdrLen;
|
||||||
header_length = totHdrLen;
|
header_length = totHdrLen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Make sure that we have at least one byte of dummy payload.
|
// Make sure that we have at least one byte of dummy payload.
|
||||||
_datagramLen = std::max(static_cast<int>(length), header_length + 1);
|
_datagramLen = std::max(static_cast<int>(length), header_length + 1);
|
||||||
assert(_datagramLen <= _memSize);
|
assert(_datagramLen <= _memSize);
|
||||||
|
|
||||||
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
||||||
{
|
{
|
||||||
// discard this payload
|
// discard this payload
|
||||||
return readFromFile(fp);
|
readNextPacket = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_filterSSRC && _selectSSRC != SSRC())
|
if (_filterSSRC && _selectSSRC != SSRC())
|
||||||
{
|
{
|
||||||
// Discard this payload.
|
// Discard this payload.
|
||||||
return(readFromFile(fp));
|
readNextPacket = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return packetLen;
|
return packetLen;
|
||||||
|
|||||||
@@ -107,62 +107,66 @@ int NETEQTEST_RTPpacket::readFromFile(FILE *fp)
|
|||||||
|
|
||||||
uint16_t length, plen;
|
uint16_t length, plen;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
int packetLen;
|
||||||
|
|
||||||
if (fread(&length,2,1,fp)==0)
|
bool readNextPacket = true;
|
||||||
{
|
while (readNextPacket) {
|
||||||
reset();
|
readNextPacket = false;
|
||||||
return(-2);
|
if (fread(&length,2,1,fp)==0)
|
||||||
}
|
{
|
||||||
length = ntohs(length);
|
reset();
|
||||||
|
return(-2);
|
||||||
|
}
|
||||||
|
length = ntohs(length);
|
||||||
|
|
||||||
if (fread(&plen,2,1,fp)==0)
|
if (fread(&plen,2,1,fp)==0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
int packetLen = ntohs(plen);
|
packetLen = ntohs(plen);
|
||||||
|
|
||||||
if (fread(&offset,4,1,fp)==0)
|
if (fread(&offset,4,1,fp)==0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
uint32_t receiveTime = ntohl(offset); // store in local variable until we have passed the reset below
|
// store in local variable until we have passed the reset below
|
||||||
|
uint32_t receiveTime = ntohl(offset);
|
||||||
|
|
||||||
// Use length here because a plen of 0 specifies rtcp
|
// Use length here because a plen of 0 specifies rtcp
|
||||||
length = (uint16_t) (length - _kRDHeaderLen);
|
length = (uint16_t) (length - _kRDHeaderLen);
|
||||||
|
|
||||||
// check buffer size
|
// check buffer size
|
||||||
if (_datagram && _memSize < length)
|
if (_datagram && _memSize < length)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_datagram)
|
if (!_datagram)
|
||||||
{
|
{
|
||||||
_datagram = new uint8_t[length];
|
_datagram = new uint8_t[length];
|
||||||
_memSize = length;
|
_memSize = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fread((unsigned short *) _datagram,1,length,fp) != length)
|
if (fread((unsigned short *) _datagram,1,length,fp) != length)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
_datagramLen = length;
|
_datagramLen = length;
|
||||||
_receiveTime = receiveTime;
|
_receiveTime = receiveTime;
|
||||||
|
|
||||||
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
||||||
{
|
{
|
||||||
// discard this payload
|
readNextPacket = true;
|
||||||
return(readFromFile(fp));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (_filterSSRC && _selectSSRC != SSRC())
|
if (_filterSSRC && _selectSSRC != SSRC())
|
||||||
{
|
{
|
||||||
// Discard this payload.
|
readNextPacket = true;
|
||||||
return(readFromFile(fp));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(packetLen);
|
return(packetLen);
|
||||||
|
|||||||
@@ -29,105 +29,109 @@ int NETEQTEST_DummyRTPpacket::readFromFile(FILE *fp)
|
|||||||
|
|
||||||
uint16_t length, plen;
|
uint16_t length, plen;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
int packetLen;
|
||||||
|
|
||||||
if (fread(&length, 2, 1, fp) == 0)
|
bool readNextPacket = true;
|
||||||
{
|
while (readNextPacket) {
|
||||||
reset();
|
readNextPacket = false;
|
||||||
return -2;
|
if (fread(&length, 2, 1, fp) == 0)
|
||||||
}
|
{
|
||||||
length = ntohs(length);
|
reset();
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
length = ntohs(length);
|
||||||
|
|
||||||
if (fread(&plen, 2, 1, fp) == 0)
|
if (fread(&plen, 2, 1, fp) == 0)
|
||||||
{
|
|
||||||
reset();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
int packetLen = ntohs(plen);
|
|
||||||
|
|
||||||
if (fread(&offset, 4, 1, fp) == 0)
|
|
||||||
{
|
|
||||||
reset();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
// Store in local variable until we have passed the reset below.
|
|
||||||
uint32_t receiveTime = ntohl(offset);
|
|
||||||
|
|
||||||
// Use length here because a plen of 0 specifies rtcp.
|
|
||||||
length = (uint16_t) (length - _kRDHeaderLen);
|
|
||||||
|
|
||||||
// check buffer size
|
|
||||||
if (_datagram && _memSize < length)
|
|
||||||
{
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_datagram)
|
|
||||||
{
|
|
||||||
_datagram = new uint8_t[length];
|
|
||||||
_memSize = length;
|
|
||||||
}
|
|
||||||
memset(_datagram, 0, length);
|
|
||||||
|
|
||||||
if (length == 0)
|
|
||||||
{
|
|
||||||
_datagramLen = 0;
|
|
||||||
_rtpParsed = false;
|
|
||||||
return packetLen;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read basic header
|
|
||||||
if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
|
|
||||||
!= (size_t)_kBasicHeaderLen)
|
|
||||||
{
|
|
||||||
reset();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
_receiveTime = receiveTime;
|
|
||||||
_datagramLen = _kBasicHeaderLen;
|
|
||||||
|
|
||||||
// Parse the basic header
|
|
||||||
webrtc::WebRtcRTPHeader tempRTPinfo;
|
|
||||||
int P, X, CC;
|
|
||||||
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
|
|
||||||
|
|
||||||
// Check if we have to extend the header
|
|
||||||
if (X != 0 || CC != 0)
|
|
||||||
{
|
|
||||||
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
|
|
||||||
assert(_memSize >= newLen);
|
|
||||||
|
|
||||||
// Read extension from file
|
|
||||||
size_t readLen = newLen - _kBasicHeaderLen;
|
|
||||||
if (fread((unsigned short *) _datagram + _kBasicHeaderLen, 1, readLen,
|
|
||||||
fp) != readLen)
|
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_datagramLen = newLen;
|
packetLen = ntohs(plen);
|
||||||
|
|
||||||
if (X != 0)
|
if (fread(&offset, 4, 1, fp) == 0)
|
||||||
{
|
{
|
||||||
int totHdrLen = calcHeaderLength(X, CC);
|
reset();
|
||||||
assert(_memSize >= totHdrLen);
|
return -1;
|
||||||
|
}
|
||||||
|
// Store in local variable until we have passed the reset below.
|
||||||
|
uint32_t receiveTime = ntohl(offset);
|
||||||
|
|
||||||
|
// Use length here because a plen of 0 specifies rtcp.
|
||||||
|
length = (uint16_t) (length - _kRDHeaderLen);
|
||||||
|
|
||||||
|
// check buffer size
|
||||||
|
if (_datagram && _memSize < length)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_datagram)
|
||||||
|
{
|
||||||
|
_datagram = new uint8_t[length];
|
||||||
|
_memSize = length;
|
||||||
|
}
|
||||||
|
memset(_datagram, 0, length);
|
||||||
|
|
||||||
|
if (length == 0)
|
||||||
|
{
|
||||||
|
_datagramLen = 0;
|
||||||
|
_rtpParsed = false;
|
||||||
|
return packetLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read basic header
|
||||||
|
if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
|
||||||
|
!= (size_t)_kBasicHeaderLen)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
_receiveTime = receiveTime;
|
||||||
|
_datagramLen = _kBasicHeaderLen;
|
||||||
|
|
||||||
|
// Parse the basic header
|
||||||
|
webrtc::WebRtcRTPHeader tempRTPinfo;
|
||||||
|
int P, X, CC;
|
||||||
|
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
|
||||||
|
|
||||||
|
// Check if we have to extend the header
|
||||||
|
if (X != 0 || CC != 0)
|
||||||
|
{
|
||||||
|
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
|
||||||
|
assert(_memSize >= newLen);
|
||||||
|
|
||||||
// Read extension from file
|
// Read extension from file
|
||||||
size_t readLen = totHdrLen - newLen;
|
size_t readLen = newLen - _kBasicHeaderLen;
|
||||||
if (fread((unsigned short *) _datagram + newLen, 1, readLen, fp)
|
if (fread((unsigned short *) _datagram + _kBasicHeaderLen, 1,
|
||||||
!= readLen)
|
readLen, fp) != readLen)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
_datagramLen = totHdrLen;
|
_datagramLen = newLen;
|
||||||
}
|
|
||||||
}
|
|
||||||
_datagramLen = length;
|
|
||||||
|
|
||||||
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
if (X != 0)
|
||||||
{
|
{
|
||||||
// discard this payload
|
int totHdrLen = calcHeaderLength(X, CC);
|
||||||
return readFromFile(fp);
|
assert(_memSize >= totHdrLen);
|
||||||
|
|
||||||
|
// Read extension from file
|
||||||
|
size_t readLen = totHdrLen - newLen;
|
||||||
|
if (fread((unsigned short *) _datagram + newLen, 1, readLen, fp)
|
||||||
|
!= readLen)
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
_datagramLen = totHdrLen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_datagramLen = length;
|
||||||
|
|
||||||
|
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
||||||
|
{
|
||||||
|
readNextPacket = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_rtpParsed = false;
|
_rtpParsed = false;
|
||||||
|
|||||||
@@ -105,56 +105,61 @@ int NETEQTEST_RTPpacket::readFromFile(FILE *fp)
|
|||||||
|
|
||||||
uint16_t length, plen;
|
uint16_t length, plen;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
int packetLen;
|
||||||
|
|
||||||
if (fread(&length,2,1,fp)==0)
|
bool readNextPacket = true;
|
||||||
{
|
while (readNextPacket) {
|
||||||
reset();
|
readNextPacket = false;
|
||||||
return(-2);
|
if (fread(&length,2,1,fp)==0)
|
||||||
}
|
{
|
||||||
length = ntohs(length);
|
reset();
|
||||||
|
return(-2);
|
||||||
|
}
|
||||||
|
length = ntohs(length);
|
||||||
|
|
||||||
if (fread(&plen,2,1,fp)==0)
|
if (fread(&plen,2,1,fp)==0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
int packetLen = ntohs(plen);
|
packetLen = ntohs(plen);
|
||||||
|
|
||||||
if (fread(&offset,4,1,fp)==0)
|
if (fread(&offset,4,1,fp)==0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
uint32_t receiveTime = ntohl(offset); // store in local variable until we have passed the reset below
|
// store in local variable until we have passed the reset below
|
||||||
|
uint32_t receiveTime = ntohl(offset);
|
||||||
|
|
||||||
// Use length here because a plen of 0 specifies rtcp
|
// Use length here because a plen of 0 specifies rtcp
|
||||||
length = (uint16_t) (length - _kRDHeaderLen);
|
length = (uint16_t) (length - _kRDHeaderLen);
|
||||||
|
|
||||||
// check buffer size
|
// check buffer size
|
||||||
if (_datagram && _memSize < length)
|
if (_datagram && _memSize < length)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_datagram)
|
if (!_datagram)
|
||||||
{
|
{
|
||||||
_datagram = new uint8_t[length];
|
_datagram = new uint8_t[length];
|
||||||
_memSize = length;
|
_memSize = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fread((unsigned short *) _datagram,1,length,fp) != length)
|
if (fread((unsigned short *) _datagram,1,length,fp) != length)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
_datagramLen = length;
|
_datagramLen = length;
|
||||||
_receiveTime = receiveTime;
|
_receiveTime = receiveTime;
|
||||||
|
|
||||||
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
|
||||||
{
|
{
|
||||||
// discard this payload
|
readNextPacket = true;
|
||||||
return(readFromFile(fp));
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_rtpParsed = false;
|
_rtpParsed = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user