mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 06:55:52 +08:00
Clean ups for IPv6.
This commit is contained in:
@@ -36,9 +36,10 @@ const unsigned int BUFFER_LENGTH = 200U;
|
||||
CNXDNKenwoodNetwork::CNXDNKenwoodNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gwyAddress, unsigned int gwyPort, bool debug) :
|
||||
m_rtpSocket(localAddress, localPort + 0U),
|
||||
m_rtcpSocket(localAddress, localPort + 1U),
|
||||
m_rtcpaddress(),
|
||||
m_rtpaddress(),
|
||||
m_addrlen(),
|
||||
m_rtcpAddr(),
|
||||
m_rtpAddr(),
|
||||
m_rtcpAddrLen(0U),
|
||||
m_rtpAddrLen(0U),
|
||||
m_enabled(false),
|
||||
m_headerSeen(false),
|
||||
m_seen1(false),
|
||||
@@ -65,8 +66,11 @@ m_random()
|
||||
|
||||
m_sacch = new unsigned char[10U];
|
||||
|
||||
CUDPSocket::lookup(gwyAddress, gwyPort + 1, m_rtcpaddress, m_addrlen);
|
||||
CUDPSocket::lookup(gwyAddress, gwyPort, m_rtpaddress, m_addrlen);
|
||||
if (CUDPSocket::lookup(gwyAddress, gwyPort + 1U, m_rtcpAddr, m_rtcpAddrLen) != 0)
|
||||
m_rtcpAddrLen = 0U;
|
||||
|
||||
if (CUDPSocket::lookup(gwyAddress, gwyPort + 0U, m_rtpAddr, m_rtpAddrLen) != 0)
|
||||
m_rtpAddrLen = 0U;
|
||||
|
||||
std::random_device rd;
|
||||
std::mt19937 mt(rd());
|
||||
@@ -80,16 +84,17 @@ CNXDNKenwoodNetwork::~CNXDNKenwoodNetwork()
|
||||
|
||||
bool CNXDNKenwoodNetwork::open()
|
||||
{
|
||||
if (m_rtcpAddrLen == 0U || m_rtpAddrLen == 0U) {
|
||||
LogError("Unable to resolve the address of the NXDN Gateway");
|
||||
return false;
|
||||
}
|
||||
|
||||
LogMessage("Opening Kenwood connection");
|
||||
|
||||
if (CUDPSocket::isNone(m_rtpaddress) ||
|
||||
CUDPSocket::isNone(m_rtcpaddress))
|
||||
if (!m_rtcpSocket.open(m_rtcpAddr))
|
||||
return false;
|
||||
|
||||
if (!m_rtcpSocket.open())
|
||||
return false;
|
||||
|
||||
if (!m_rtpSocket.open()) {
|
||||
if (!m_rtpSocket.open(m_rtpAddr)) {
|
||||
m_rtcpSocket.close();
|
||||
return false;
|
||||
}
|
||||
@@ -365,7 +370,7 @@ bool CNXDNKenwoodNetwork::writeRTPVoiceHeader(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 47U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 47U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 47U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTPVoiceTrailer(const unsigned char* data)
|
||||
@@ -411,7 +416,7 @@ bool CNXDNKenwoodNetwork::writeRTPVoiceTrailer(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 47U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 47U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 47U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTPVoiceData(const unsigned char* data)
|
||||
@@ -457,7 +462,7 @@ bool CNXDNKenwoodNetwork::writeRTPVoiceData(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 59U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 59U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 59U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTPDataHeader(const unsigned char* data)
|
||||
@@ -499,7 +504,7 @@ bool CNXDNKenwoodNetwork::writeRTPDataHeader(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTPDataTrailer(const unsigned char* data)
|
||||
@@ -541,7 +546,7 @@ bool CNXDNKenwoodNetwork::writeRTPDataTrailer(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTPDataData(const unsigned char* data)
|
||||
@@ -583,7 +588,7 @@ bool CNXDNKenwoodNetwork::writeRTPDataData(const unsigned char* data)
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTP Data Sent", buffer, 42U);
|
||||
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpaddress, m_addrlen);
|
||||
return m_rtpSocket.write(buffer, 42U, m_rtpAddr, m_rtpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTCPStart()
|
||||
@@ -643,7 +648,7 @@ bool CNXDNKenwoodNetwork::writeRTCPStart()
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 28U);
|
||||
|
||||
return m_rtcpSocket.write(buffer, 28U, m_rtcpaddress, m_addrlen);
|
||||
return m_rtcpSocket.write(buffer, 28U, m_rtcpAddr, m_rtcpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTCPPing()
|
||||
@@ -685,7 +690,7 @@ bool CNXDNKenwoodNetwork::writeRTCPPing()
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 28U);
|
||||
|
||||
return m_rtcpSocket.write(buffer, 28U, m_rtcpaddress, m_addrlen);
|
||||
return m_rtcpSocket.write(buffer, 28U, m_rtcpAddr, m_rtcpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::writeRTCPHang(unsigned char type, unsigned short src, unsigned short dst)
|
||||
@@ -728,7 +733,7 @@ bool CNXDNKenwoodNetwork::writeRTCPHang()
|
||||
if (m_debug)
|
||||
CUtils::dump(1U, "Kenwood Network RTCP Data Sent", buffer, 20U);
|
||||
|
||||
return m_rtcpSocket.write(buffer, 20U, m_rtcpaddress, m_addrlen);
|
||||
return m_rtcpSocket.write(buffer, 20U, m_rtcpAddr, m_rtcpAddrLen);
|
||||
}
|
||||
|
||||
bool CNXDNKenwoodNetwork::read(unsigned char* data)
|
||||
@@ -764,11 +769,16 @@ unsigned int CNXDNKenwoodNetwork::readRTP(unsigned char* data)
|
||||
unsigned char buffer[BUFFER_LENGTH];
|
||||
|
||||
sockaddr_storage address;
|
||||
unsigned int addrlen;
|
||||
int length = m_rtpSocket.read(buffer, BUFFER_LENGTH, address, addrlen);
|
||||
if (length <= 0 || !CUDPSocket::match(m_rtpaddress, address, IMT_ADDRESS_ONLY))
|
||||
unsigned int addrLen;
|
||||
int length = m_rtpSocket.read(buffer, BUFFER_LENGTH, address, addrLen);
|
||||
if (length <= 0)
|
||||
return 0U;
|
||||
|
||||
if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) {
|
||||
LogMessage("NXDN, RTP packet received from an invalid source");
|
||||
return 0U;
|
||||
}
|
||||
|
||||
if (!m_enabled)
|
||||
return 0U;
|
||||
|
||||
@@ -789,9 +799,14 @@ unsigned int CNXDNKenwoodNetwork::readRTCP(unsigned char* data)
|
||||
sockaddr_storage address;
|
||||
unsigned int addrlen;
|
||||
int length = m_rtcpSocket.read(buffer, BUFFER_LENGTH, address, addrlen);
|
||||
if (length <= 0 || !CUDPSocket::match(m_rtcpaddress, address, IMT_ADDRESS_ONLY))
|
||||
if (length <= 0)
|
||||
return 0U;
|
||||
|
||||
if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) {
|
||||
LogMessage("NXDN, RTCP packet received from an invalid source");
|
||||
return 0U;
|
||||
}
|
||||
|
||||
if (!m_enabled)
|
||||
return 0U;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user