Clean ups for IPv6.

This commit is contained in:
Jonathan Naylor
2020-09-06 12:54:08 +01:00
parent e45f0edec4
commit 7d3e899104
17 changed files with 323 additions and 259 deletions

View File

@@ -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;