From 79b3eaa57afaa7a6efd765645d415e8712ffbb28 Mon Sep 17 00:00:00 2001 From: SASANO Takayoshi Date: Wed, 1 Jul 2020 19:48:07 +0900 Subject: [PATCH] replace SSRC source from IPv4 address to random number Previous implementation uses SSRC as IPv4 address that is same behaviour of Kenwood's NXDN repeater. RFC 3350 RTP protocol recommends SSRC uses random number. So I use MT19937 random number generator instead of IP address. And if this is no problem, I will do two changes. - replace rand() in DMRNetwork.cpp and DStarNetwork.cpp to MT19937 - remove getLocalAddress() in UDPSocket.cpp --- NXDNKenwoodNetwork.cpp | 9 +++++++-- NXDNKenwoodNetwork.h | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/NXDNKenwoodNetwork.cpp b/NXDNKenwoodNetwork.cpp index 8531f90..496462f 100644 --- a/NXDNKenwoodNetwork.cpp +++ b/NXDNKenwoodNetwork.cpp @@ -56,7 +56,8 @@ m_rtcpTimer(1000U, 0U, 200U), m_hangTimer(1000U, 5U), m_hangType(0U), m_hangSrc(0U), -m_hangDst(0U) +m_hangDst(0U), +m_random() { assert(localPort > 0U); assert(!gwyAddress.empty()); @@ -65,6 +66,10 @@ m_hangDst(0U) m_sacch = new unsigned char[10U]; m_address = CUDPSocket::lookup(gwyAddress); + + std::random_device rd; + std::mt19937 mt(rd()); + m_random = mt; } CNXDNKenwoodNetwork::~CNXDNKenwoodNetwork() @@ -87,7 +92,7 @@ bool CNXDNKenwoodNetwork::open() return false; } - m_ssrc = m_rtpSocket.getLocalAddress(); + m_ssrc = m_random(); return true; } diff --git a/NXDNKenwoodNetwork.h b/NXDNKenwoodNetwork.h index e0c1099..6645c23 100644 --- a/NXDNKenwoodNetwork.h +++ b/NXDNKenwoodNetwork.h @@ -25,6 +25,7 @@ #include #include +#include class CNXDNKenwoodNetwork : public INXDNNetwork { public: @@ -69,6 +70,7 @@ private: unsigned char m_hangType; unsigned short m_hangSrc; unsigned short m_hangDst; + std::mt19937 m_random; bool processIcomVoiceHeader(const unsigned char* data); bool processIcomVoiceData(const unsigned char* data);