even tho the timestamp field is not used by DVM, lets ensure we roll the timestamp so the difference calculation never results in a rollover;

pull/42/head
Bryan Biedenkapp 2 years ago
parent 8bbcea2c6d
commit a4d6857922

@ -89,6 +89,7 @@ FNENetwork::FNENetwork(HostFNE* host, const std::string& address, uint16_t port,
m_peers(), m_peers(),
m_maintainenceTimer(1000U, pingTime), m_maintainenceTimer(1000U, pingTime),
m_updateLookupTimer(1000U, (updateLookupTime * 60U)), m_updateLookupTimer(1000U, (updateLookupTime * 60U)),
m_callInProgress(false),
m_verbose(verbose) m_verbose(verbose)
{ {
assert(host != nullptr); assert(host != nullptr);
@ -156,6 +157,11 @@ void FNENetwork::clock(uint32_t ms)
m_peers.erase(peerId); m_peers.erase(peerId);
} }
// roll the RTP timestamp if no call is in progress
if (!m_callInProgress) {
frame::RTPHeader::resetStartTime();
}
m_maintainenceTimer.start(); m_maintainenceTimer.start();
} }

@ -237,6 +237,8 @@ namespace network
Timer m_maintainenceTimer; Timer m_maintainenceTimer;
Timer m_updateLookupTimer; Timer m_updateLookupTimer;
bool m_callInProgress;
bool m_verbose; bool m_verbose;
/// <summary>Helper to send the list of whitelisted RIDs to the specified peer.</summary> /// <summary>Helper to send the list of whitelisted RIDs to the specified peer.</summary>

@ -248,6 +248,13 @@ void Network::clock(uint32_t ms)
return; return;
} }
// roll the RTP timestamp if no call is in progress
if ((m_status == NET_STAT_RUNNING) &&
(m_rxDMRStreamId[0U] == 0U && m_rxDMRStreamId[1U] == 0U) &&
m_rxP25StreamId == 0U && m_rxNXDNStreamId == 0U) {
frame::RTPHeader::resetStartTime();
}
sockaddr_storage address; sockaddr_storage address;
uint32_t addrLen; uint32_t addrLen;

@ -119,3 +119,11 @@ void RTPHeader::encode(uint8_t* data)
__SET_UINT32(m_timestamp, data, 4U); // Timestamp __SET_UINT32(m_timestamp, data, 4U); // Timestamp
__SET_UINT32(m_ssrc, data, 8U); // Synchronization Source Identifier __SET_UINT32(m_ssrc, data, 8U); // Synchronization Source Identifier
} }
/// <summary>
/// Helper to reset the start timestamp.
/// </summary>
void RTPHeader::resetStartTime()
{
m_wcStart = hrc::hrc_t();
}

@ -62,6 +62,9 @@ namespace network
/// <summary>Encode a RTP header.</summary> /// <summary>Encode a RTP header.</summary>
virtual void encode(uint8_t* data); virtual void encode(uint8_t* data);
/// <summary>Helper to reset the start timestamp.</summary>
static void resetStartTime();
public: public:
/// <summary>RTP Protocol Version.</summary> /// <summary>RTP Protocol Version.</summary>
__READONLY_PROPERTY(uint8_t, version, Version); __READONLY_PROPERTY(uint8_t, version, Version);

@ -156,6 +156,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
LogMessage(LOG_NET, "DMR, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u", LogMessage(LOG_NET, "DMR, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u",
peerId, srcId, dstId, duration / 1000, streamId); peerId, srcId, dstId, duration / 1000, streamId);
m_network->m_callInProgress = false;
} }
// is this a new call stream? // is this a new call stream?
@ -194,6 +195,7 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
status.streamId = streamId; status.streamId = streamId;
m_status[dstId] = status; // this *could* be an issue if a dstId appears on both slots somehow... m_status[dstId] = status; // this *could* be an issue if a dstId appears on both slots somehow...
LogMessage(LOG_NET, "DMR, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId); LogMessage(LOG_NET, "DMR, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId);
m_network->m_callInProgress = true;
} }
} }
@ -218,6 +220,9 @@ bool TagDMRData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
LogDebug(LOG_NET, "DMR, srcPeer = %u, dstPeer = %u, seqNo = %u, srcId = %u, dstId = %u, flco = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u", LogDebug(LOG_NET, "DMR, srcPeer = %u, dstPeer = %u, seqNo = %u, srcId = %u, dstId = %u, flco = $%02X, slotNo = %u, len = %u, pktSeq = %u, stream = %u",
peerId, peer.first, seqNo, srcId, dstId, flco, slotNo, len, pktSeq, streamId); peerId, peer.first, seqNo, srcId, dstId, flco, slotNo, len, pktSeq, streamId);
} }
if (!m_network->m_callInProgress)
m_network->m_callInProgress = true;
} }
} }

@ -128,6 +128,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
LogMessage(LOG_NET, "NXDN, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u", LogMessage(LOG_NET, "NXDN, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u",
peerId, srcId, dstId, duration / 1000, streamId); peerId, srcId, dstId, duration / 1000, streamId);
m_network->m_callInProgress = false;
} }
// is this a new call stream? // is this a new call stream?
@ -165,6 +166,7 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
status.streamId = streamId; status.streamId = streamId;
m_status[dstId] = status; m_status[dstId] = status;
LogMessage(LOG_NET, "NXDN, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId); LogMessage(LOG_NET, "NXDN, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId);
m_network->m_callInProgress = true;
} }
} }
} }
@ -190,6 +192,9 @@ bool TagNXDNData::processFrame(const uint8_t* data, uint32_t len, uint32_t peerI
LogDebug(LOG_NET, "NXDN, srcPeer = %u, dstPeer = %u, messageType = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u", LogDebug(LOG_NET, "NXDN, srcPeer = %u, dstPeer = %u, messageType = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u",
peerId, peer.first, messageType, srcId, dstId, len, pktSeq, streamId); peerId, peer.first, messageType, srcId, dstId, len, pktSeq, streamId);
} }
if (!m_network->m_callInProgress)
m_network->m_callInProgress = true;
} }
} }

@ -170,6 +170,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
LogMessage(LOG_NET, "P25, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u", LogMessage(LOG_NET, "P25, Call End, peer = %u, srcId = %u, dstId = %u, duration = %u, streamId = %u",
peerId, srcId, dstId, duration / 1000, streamId); peerId, srcId, dstId, duration / 1000, streamId);
m_network->m_callInProgress = false;
} }
// is this a new call stream? // is this a new call stream?
@ -207,6 +208,7 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
status.streamId = streamId; status.streamId = streamId;
m_status[dstId] = status; m_status[dstId] = status;
LogMessage(LOG_NET, "P25, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId); LogMessage(LOG_NET, "P25, Call Start, peer = %u, srcId = %u, dstId = %u, streamId = %u", peerId, srcId, dstId, streamId);
m_network->m_callInProgress = true;
} }
} }
} }
@ -232,6 +234,9 @@ bool TagP25Data::processFrame(const uint8_t* data, uint32_t len, uint32_t peerId
LogDebug(LOG_NET, "P25, srcPeer = %u, dstPeer = %u, duid = $%02X, lco = $%02X, MFId = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u", LogDebug(LOG_NET, "P25, srcPeer = %u, dstPeer = %u, duid = $%02X, lco = $%02X, MFId = $%02X, srcId = %u, dstId = %u, len = %u, pktSeq = %u, streamId = %u",
peerId, peer.first, duid, lco, MFId, srcId, dstId, len, pktSeq, streamId); peerId, peer.first, duid, lco, MFId, srcId, dstId, len, pktSeq, streamId);
} }
if (!m_network->m_callInProgress)
m_network->m_callInProgress = true;
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.