Send an RTCP RR packet when we get a timeout to see if we are really dead.

This commit is contained in:
Isaac Connor 2015-01-28 12:36:11 -05:00
parent 56c82cfbb5
commit b97f2fa4f6
1 changed files with 18 additions and 2 deletions

View File

@ -302,6 +302,9 @@ int RtpCtrlThread::run()
select.addReader( &rtpCtrlServer );
unsigned char buffer[ZM_NETWORK_BUFSIZ];
bool timeout = false; // used as a flag that we had a timeout, and then sent an RR to see if we wake back up. Real timeout will happen when this is true.
while ( !mStop && select.wait() >= 0 )
{
if ( mStop )
@ -309,9 +312,22 @@ int RtpCtrlThread::run()
Select::CommsList readable = select.getReadable();
if ( readable.size() == 0 )
{
if ( ! timeout ) {
ssize_t nBytes;
unsigned char *bufferPtr = buffer;
bufferPtr += generateRr( bufferPtr, sizeof(buffer)-(bufferPtr-buffer) );
bufferPtr += generateSdes( bufferPtr, sizeof(buffer)-(bufferPtr-buffer) );
Debug( 4, "Sending %zd bytes on sd %d", bufferPtr-buffer, rtpCtrlServer.getWriteDesc() );
Debug( 5, "Sending %s", buffer );
if ( (nBytes = rtpCtrlServer.send( buffer, bufferPtr-buffer )) < 0 )
Error( "Unable to send: %s", strerror( errno ) );
timeout = true;
continue;
} else {
Error( "RTCP timed out" );
break;
}
}
for ( Select::CommsList::iterator iter = readable.begin(); iter != readable.end(); iter++ )
{
if ( UdpInetSocket *socket = dynamic_cast<UdpInetSocket *>(*iter) )