[Opalvoip-svn] SF.net SVN: opalvoip:[34862] opal/branches/v3_16
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2016-07-11 18:24:59
|
Revision: 34862 http://sourceforge.net/p/opalvoip/code/34862 Author: rjongbloed Date: 2016-07-11 18:24:56 +0000 (Mon, 11 Jul 2016) Log Message: ----------- Increased range for detection of duplicate packets when decoding PCAP file. Also enhanced the trace logging during the discovery phase. Modified Paths: -------------- opal/branches/v3_16/include/rtp/pcapfile.h opal/branches/v3_16/src/rtp/pcapfile.cxx Modified: opal/branches/v3_16/include/rtp/pcapfile.h =================================================================== --- opal/branches/v3_16/include/rtp/pcapfile.h 2016-07-11 18:24:05 UTC (rev 34861) +++ opal/branches/v3_16/include/rtp/pcapfile.h 2016-07-11 18:24:56 UTC (rev 34862) @@ -115,6 +115,7 @@ DiscoveredRTPKey(); Comparison Compare(const PObject & obj) const; + void PrintOn(ostream & strm) const; }; struct DiscoveredRTPInfo : DiscoveredRTPKey { Modified: opal/branches/v3_16/src/rtp/pcapfile.cxx =================================================================== --- opal/branches/v3_16/src/rtp/pcapfile.cxx 2016-07-11 18:24:05 UTC (rev 34861) +++ opal/branches/v3_16/src/rtp/pcapfile.cxx 2016-07-11 18:24:56 UTC (rev 34862) @@ -281,7 +281,7 @@ RTP_SequenceNumber sequenceDelta = thisSequenceNumber - expectedSequenceNumber; if (context.m_lastSequenceNumber != 0) { - if (sequenceDelta > (1<<16)-100) { + if (sequenceDelta > (1<<16)-500) { PTRACE(3, "Skipping duplicate or out of order RTP packet " << thisSequenceNumber); return 0; } @@ -345,6 +345,12 @@ } +void OpalPCAPFile::DiscoveredRTPKey::PrintOn(ostream & strm) const +{ + strm << m_src << " -> " << m_dst << " src=" << RTP_TRACE_SRC(m_ssrc); +} + + OpalPCAPFile::DiscoveredRTPInfo::DiscoveredRTPInfo() : m_payloadType(RTP_DataFrame::IllegalPayloadType) { @@ -421,16 +427,22 @@ bool Finalise(DiscoveredRTPInfo & info, const PayloadMap & payloadType2mediaFormat) { - if (m_totalPackets < 100) // Not worth worrying about + if (m_totalPackets < 100) { // Not worth worrying about + PTRACE(4, &info, "Not enough packets (" << m_totalPackets << ") for " << info); return false; + } - unsigned matchThreshold = m_totalPackets*4/5; // 80% + unsigned matchThreshold = m_totalPackets/2; // 50% - if (m_matchedSequenceNumber < matchThreshold) // Most of them consecutive + if (m_matchedSequenceNumber < matchThreshold) { // Most of them consecutive + PTRACE(4, &info, "Not enough consecutive sequence numbers (" << m_matchedSequenceNumber << ") for " << info); return false; + } - if (m_matchedTimestamps < matchThreshold) // Most of them consecutive + if (m_matchedTimestamps < matchThreshold) { // Most of them monotonic increasing + PTRACE(4, &info, "Not enough monotonic timestamps (" << m_matchedTimestamps << ") for " << info); return false; + } unsigned maxPayloadTypeCount = 0; for (map<RTP_DataFrame::PayloadTypes, unsigned>::iterator it = m_payloadTypes.begin(); it != m_payloadTypes.end(); ++it) { @@ -439,8 +451,10 @@ info.m_payloadType = it->first; } } - if (maxPayloadTypeCount < m_totalPackets/2) + if (maxPayloadTypeCount < matchThreshold) { + PTRACE(4, &info, "Not enough with same payload type (" << maxPayloadTypeCount << ") for " << info); return false; + } // look for known types PayloadMap::const_iterator pt2mf = payloadType2mediaFormat.find(info.m_payloadType); @@ -495,7 +509,7 @@ if (!Restart()) return false; - PTRACE(4, "Starting RTP discovery"); + PTRACE(3, "Starting RTP discovery"); map<DiscoveredRTPKey, DiscoveryInfo> discoveryMap; @@ -519,10 +533,12 @@ key.m_ssrc = rtp.GetSyncSource(); map<DiscoveredRTPKey, DiscoveryInfo>::iterator it; - if ((it = discoveryMap.find(key)) == discoveryMap.end()) + if ((it = discoveryMap.find(key)) != discoveryMap.end()) + it->second.ProcessPacket(rtp); + else { discoveryMap.insert(make_pair(key, rtp)); - else - it->second.ProcessPacket(rtp); + PTRACE(4, "Adding RTP discovery possibility: " << key); + } } PTRACE(4, "Finalising RTP discovery: " << discoveryMap.size() << " possibilities"); @@ -535,7 +551,7 @@ delete info; } - PTRACE(4, "Completed RTP discovery: " << discoveredRTP << " streams"); + PTRACE(3, "Completed RTP discovery: " << discoveredRTP << " streams"); return Restart(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |