modified for IPv6 supported CUDPSocket

This commit is contained in:
SASANO Takayoshi 2020-03-28 05:40:35 +09:00
parent 5dccd5c5ce
commit c92039d83b
17 changed files with 105 additions and 132 deletions

View File

@ -36,6 +36,7 @@ const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 55U;
CDMRNetwork::CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, HW_TYPE hwType) :
m_addressStr(address),
m_address(),
m_addrlen(),
m_port(port),
m_id(NULL),
m_password(password),
@ -73,7 +74,7 @@ m_beacon(false)
assert(id > 1000U);
assert(!password.empty());
m_address = CUDPSocket::lookup(address);
CUDPSocket::lookup(m_addressStr, m_port, m_address, m_addrlen);
m_buffer = new unsigned char[BUFFER_LENGTH];
m_salt = new unsigned char[sizeof(uint32_t)];
@ -124,8 +125,8 @@ bool CDMRNetwork::open()
{
LogMessage("DMR, Opening DMR Network");
if (m_address.s_addr == INADDR_NONE)
m_address = CUDPSocket::lookup(m_addressStr);
if (CUDPSocket::isnone(m_address))
CUDPSocket::lookup(m_addressStr, m_port, m_address, m_addrlen);
m_status = WAITING_CONNECT;
m_timeoutTimer.stop();
@ -377,9 +378,9 @@ void CDMRNetwork::clock(unsigned int ms)
return;
}
in_addr address;
unsigned int port;
int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, port);
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(m_buffer, BUFFER_LENGTH, address, addrlen);
if (length < 0) {
LogError("DMR, Socket has failed, retrying connection to the master");
close();
@ -390,7 +391,7 @@ void CDMRNetwork::clock(unsigned int ms)
// if (m_debug && length > 0)
// CUtils::dump(1U, "Network Received", m_buffer, length);
if (length > 0 && m_address.s_addr == address.s_addr && m_port == port) {
if (length > 0 && CUDPSocket::match(m_address, address)) {
if (::memcmp(m_buffer, "DMRD", 4U) == 0) {
if (m_enabled) {
if (m_debug)
@ -663,7 +664,7 @@ bool CDMRNetwork::write(const unsigned char* data, unsigned int length)
// if (m_debug)
// CUtils::dump(1U, "Network Transmitted", data, length);
bool ret = m_socket.write(data, length, m_address, m_port);
bool ret = m_socket.write(data, length, m_address, m_addrlen);
if (!ret) {
LogError("DMR, Socket has failed when writing data to the master, retrying connection");
m_socket.close();

View File

@ -60,7 +60,8 @@ public:
private:
std::string m_addressStr;
in_addr m_address;
sockaddr_storage m_address;
unsigned int m_addrlen;
unsigned int m_port;
uint8_t* m_id;
std::string m_password;

View File

@ -33,7 +33,7 @@ const unsigned int BUFFER_LENGTH = 100U;
CDStarNetwork::CDStarNetwork(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool duplex, const char* version, bool debug) :
m_socket(localPort),
m_address(),
m_port(gatewayPort),
m_addrlen(),
m_duplex(duplex),
m_version(version),
m_debug(debug),
@ -46,7 +46,7 @@ m_pollTimer(1000U, 60U),
m_linkStatus(LS_NONE),
m_linkReflector(NULL)
{
m_address = CUDPSocket::lookup(gatewayAddress);
CUDPSocket::lookup(gatewayAddress, gatewayPort, m_address, m_addrlen);
m_linkReflector = new unsigned char[DSTAR_LONG_CALLSIGN_LENGTH];
@ -63,7 +63,7 @@ bool CDStarNetwork::open()
{
LogMessage("Opening D-Star network connection");
if (m_address.s_addr == INADDR_NONE)
if (CUDPSocket::isnone(m_address))
return false;
m_pollTimer.start();
@ -100,7 +100,7 @@ bool CDStarNetwork::writeHeader(const unsigned char* header, unsigned int length
CUtils::dump(1U, "D-Star Network Header Sent", buffer, 49U);
for (unsigned int i = 0U; i < 2U; i++) {
bool ret = m_socket.write(buffer, 49U, m_address, m_port);
bool ret = m_socket.write(buffer, 49U, m_address, m_addrlen);
if (!ret)
return false;
}
@ -143,7 +143,7 @@ bool CDStarNetwork::writeData(const unsigned char* data, unsigned int length, un
if (m_debug)
CUtils::dump(1U, "D-Star Network Data Sent", buffer, length + 9U);
return m_socket.write(buffer, length + 9U, m_address, m_port);
return m_socket.write(buffer, length + 9U, m_address, m_addrlen);
}
bool CDStarNetwork::writePoll(const char* text)
@ -167,7 +167,7 @@ bool CDStarNetwork::writePoll(const char* text)
// if (m_debug)
// CUtils::dump(1U, "D-Star Network Poll Sent", buffer, 6U + length);
return m_socket.write(buffer, 6U + length, m_address, m_port);
return m_socket.write(buffer, 6U + length, m_address, m_addrlen);
}
void CDStarNetwork::clock(unsigned int ms)
@ -192,18 +192,12 @@ void CDStarNetwork::clock(unsigned int ms)
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrlen);
if (length <= 0 || !CUDPSocket::match(m_address, address))
return;
// Check if the data is for us
if (m_address.s_addr != address.s_addr || m_port != port) {
LogMessage("D-Star packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port);
return;
}
// Invalid packet type?
if (::memcmp(buffer, "DSRP", 4U) != 0)
return;

View File

@ -51,8 +51,8 @@ public:
private:
CUDPSocket m_socket;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
bool m_duplex;
const char* m_version;
bool m_debug;

View File

@ -316,8 +316,8 @@ int CMMDVMHost::run()
return 1;
}
in_addr transparentAddress;
unsigned int transparentPort = 0U;
sockaddr_storage transparentAddress;
unsigned int transparentAddrLen;
CUDPSocket* transparentSocket = NULL;
unsigned int sendFrameType = 0U;
@ -333,8 +333,7 @@ int CMMDVMHost::run()
LogInfo(" Local Port: %u", localPort);
LogInfo(" Send Frame Type: %u", sendFrameType);
transparentAddress = CUDPSocket::lookup(remoteAddress);
transparentPort = remotePort;
CUDPSocket::lookup(remoteAddress, remotePort, transparentAddress, transparentAddrLen);
transparentSocket = new CUDPSocket(localPort);
ret = transparentSocket->open();
@ -793,7 +792,7 @@ int CMMDVMHost::run()
len = m_modem->readTransparentData(data);
if (transparentSocket != NULL && len > 0U)
transparentSocket->write(data, len, transparentAddress, transparentPort);
transparentSocket->write(data, len, transparentAddress, transparentAddrLen);
if (!m_fixedMode) {
if (m_modeTimer.isRunning() && m_modeTimer.hasExpired())
@ -942,9 +941,9 @@ int CMMDVMHost::run()
}
if (transparentSocket != NULL) {
in_addr address;
unsigned int port = 0U;
len = transparentSocket->read(data, 200U, address, port);
sockaddr_storage address;
unsigned int addrlen;
len = transparentSocket->read(data, 200U, address, addrlen);
if (len > 0U)
m_modem->writeTransparentData(data, len);
}

View File

@ -26,7 +26,7 @@
CMobileGPS::CMobileGPS(const std::string& address, unsigned int port, CDMRNetwork* network) :
m_idTimer(1000U, 60U),
m_address(),
m_port(port),
m_addrlen(),
m_socket(),
m_network(network)
{
@ -34,7 +34,7 @@ m_network(network)
assert(port > 0U);
assert(network != NULL);
m_address = CUDPSocket::lookup(address);
CUDPSocket::lookup(address, port, m_address, m_addrlen);
}
CMobileGPS::~CMobileGPS()
@ -71,16 +71,16 @@ void CMobileGPS::close()
bool CMobileGPS::pollGPS()
{
return m_socket.write((unsigned char*)"MMDVMHost", 9U, m_address, m_port);
return m_socket.write((unsigned char*)"MMDVMHost", 9U, m_address, m_addrlen);
}
void CMobileGPS::sendReport()
{
// Grab GPS data if it's available
unsigned char buffer[200U];
in_addr address;
unsigned int port;
int ret = m_socket.read(buffer, 200U, address, port);
sockaddr_storage address;
unsigned int addrlen;
int ret = m_socket.read(buffer, 200U, address, addrlen);
if (ret <= 0)
return;

View File

@ -51,8 +51,8 @@ public:
private:
CTimer m_idTimer;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
CUDPSocket m_socket;
CDMRNetwork* m_network;

View File

@ -31,7 +31,7 @@ const unsigned int BUFFER_LENGTH = 200U;
CNXDNNetwork::CNXDNNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug) :
m_socket(localAddress, localPort),
m_address(),
m_port(gatewayPort),
m_addrlen(),
m_debug(debug),
m_enabled(false),
m_buffer(1000U, "NXDN Network")
@ -39,7 +39,7 @@ m_buffer(1000U, "NXDN Network")
assert(gatewayPort > 0U);
assert(!gatewayAddress.empty());
m_address = CUDPSocket::lookup(gatewayAddress);
CUDPSocket::lookup(gatewayAddress, gatewayPort, m_address, m_addrlen);
}
CNXDNNetwork::~CNXDNNetwork()
@ -50,7 +50,7 @@ bool CNXDNNetwork::open()
{
LogMessage("Opening NXDN network connection");
if (m_address.s_addr == INADDR_NONE)
if (CUDPSocket::isnone(m_address))
return false;
return m_socket.open();
@ -100,25 +100,19 @@ bool CNXDNNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE ty
if (m_debug)
CUtils::dump(1U, "NXDN Network Data Sent", buffer, 102U);
return m_socket.write(buffer, 102U, m_address, m_port);
return m_socket.write(buffer, 102U, m_address, m_addrlen);
}
void CNXDNNetwork::clock(unsigned int ms)
{
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrlen);
if (length <= 0 || !CUDPSocket::match(m_address, address))
return;
// Check if the data is for us
if (m_address.s_addr != address.s_addr || port != m_port) {
LogMessage("NXDN packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port);
return;
}
// Invalid packet type?
if (::memcmp(buffer, "ICOM", 4U) != 0)
return;

View File

@ -57,8 +57,8 @@ public:
private:
CUDPSocket m_socket;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
bool m_debug;
bool m_enabled;
CRingBuffer<unsigned char> m_buffer;

View File

@ -90,13 +90,13 @@ const unsigned int BUFFER_LENGTH = 100U;
CP25Network::CP25Network(const std::string& gatewayAddress, unsigned int gatewayPort, unsigned int localPort, bool debug) :
m_socket(localPort),
m_address(),
m_port(gatewayPort),
m_addrlen(),
m_debug(debug),
m_enabled(false),
m_buffer(1000U, "P25 Network"),
m_audio()
{
m_address = CUDPSocket::lookup(gatewayAddress);
CUDPSocket::lookup(gatewayAddress, gatewayPort, m_address, m_addrlen);
}
CP25Network::~CP25Network()
@ -107,7 +107,7 @@ bool CP25Network::open()
{
LogMessage("Opening P25 network connection");
if (m_address.s_addr == INADDR_NONE)
if (CUDPSocket::isnone(m_address))
return false;
return m_socket.open();
@ -126,7 +126,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 22U);
bool ret = m_socket.write(buffer, 22U, m_address, m_port);
bool ret = m_socket.write(buffer, 22U, m_address, m_addrlen);
if (!ret)
return false;
@ -137,7 +137,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 14U);
ret = m_socket.write(buffer, 14U, m_address, m_port);
ret = m_socket.write(buffer, 14U, m_address, m_addrlen);
if (!ret)
return false;
@ -150,7 +150,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -165,7 +165,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -180,7 +180,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -191,7 +191,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -202,7 +202,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -213,7 +213,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -226,7 +226,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU1 Sent", buffer, 16U);
ret = m_socket.write(buffer, 16U, m_address, m_port);
ret = m_socket.write(buffer, 16U, m_address, m_addrlen);
if (!ret)
return false;
@ -234,7 +234,7 @@ bool CP25Network::writeLDU1(const unsigned char* ldu1, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network END Sent", REC80, 17U);
ret = m_socket.write(REC80, 17U, m_address, m_port);
ret = m_socket.write(REC80, 17U, m_address, m_addrlen);
if (!ret)
return false;
}
@ -255,7 +255,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 22U);
bool ret = m_socket.write(buffer, 22U, m_address, m_port);
bool ret = m_socket.write(buffer, 22U, m_address, m_addrlen);
if (!ret)
return false;
@ -266,7 +266,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 14U);
ret = m_socket.write(buffer, 14U, m_address, m_port);
ret = m_socket.write(buffer, 14U, m_address, m_addrlen);
if (!ret)
return false;
@ -283,7 +283,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -297,7 +297,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -311,7 +311,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -326,7 +326,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -337,7 +337,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -348,7 +348,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 17U);
ret = m_socket.write(buffer, 17U, m_address, m_port);
ret = m_socket.write(buffer, 17U, m_address, m_addrlen);
if (!ret)
return false;
@ -361,7 +361,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network LDU2 Sent", buffer, 16U);
ret = m_socket.write(buffer, 16U, m_address, m_port);
ret = m_socket.write(buffer, 16U, m_address, m_addrlen);
if (!ret)
return false;
@ -369,7 +369,7 @@ bool CP25Network::writeLDU2(const unsigned char* ldu2, const CP25Data& control,
if (m_debug)
CUtils::dump(1U, "P25 Network END Sent", REC80, 17U);
ret = m_socket.write(REC80, 17U, m_address, m_port);
ret = m_socket.write(REC80, 17U, m_address, m_addrlen);
if (!ret)
return false;
}
@ -381,18 +381,12 @@ void CP25Network::clock(unsigned int ms)
{
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrlen);
if (length <= 0 || !CUDPSocket::match(m_address, address))
return;
// Check if the data is for us
if (m_address.s_addr != address.s_addr || m_port != port) {
LogMessage("P25 packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port);
return;
}
if (!m_enabled)
return;

View File

@ -49,8 +49,8 @@ public:
private:
CUDPSocket m_socket;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
bool m_debug;
bool m_enabled;
CRingBuffer<unsigned char> m_buffer;

View File

@ -31,12 +31,12 @@ const unsigned int BUFFER_LENGTH = 200U;
CPOCSAGNetwork::CPOCSAGNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug) :
m_socket(myAddress, myPort),
m_address(),
m_port(gatewayPort),
m_addrlen(),
m_debug(debug),
m_enabled(false),
m_buffer(1000U, "POCSAG Network")
{
m_address = CUDPSocket::lookup(gatewayAddress);
CUDPSocket::lookup(gatewayAddress, gatewayPort, m_address, m_addrlen);
}
CPOCSAGNetwork::~CPOCSAGNetwork()
@ -47,7 +47,7 @@ bool CPOCSAGNetwork::open()
{
LogMessage("Opening POCSAG network connection");
if (m_address.s_addr == INADDR_NONE)
if (CUDPSocket::isnone(m_address))
return false;
return m_socket.open();
@ -57,18 +57,12 @@ void CPOCSAGNetwork::clock(unsigned int ms)
{
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrlen);
if (length <= 0 || !CUDPSocket::match(m_address, address))
return;
// Check if the data is for us
if (m_address.s_addr != address.s_addr || m_port != port) {
LogMessage("POCSAG packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port);
return;
}
// Invalid packet type?
if (::memcmp(buffer, "POCSAG", 6U) != 0)
return;
@ -118,7 +112,7 @@ void CPOCSAGNetwork::enable(bool enabled)
unsigned char c = enabled ? 0x00U : 0xFFU;
m_socket.write(&c, 1U, m_address, m_port);
m_socket.write(&c, 1U, m_address, m_addrlen);
m_enabled = enabled;
}

View File

@ -46,8 +46,8 @@ public:
private:
CUDPSocket m_socket;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
bool m_debug;
bool m_enabled;
CRingBuffer<unsigned char> m_buffer;

View File

@ -67,9 +67,11 @@ int CRemoteCommand::send(const std::string& command)
if (!ret)
return 1;
in_addr address = CUDPSocket::lookup("localhost");
sockaddr_storage address;
unsigned int addrlen;
CUDPSocket::lookup("localhost", m_port, address, addrlen);
ret = socket.write((unsigned char*)command.c_str(), command.length(), address, m_port);
ret = socket.write((unsigned char*)command.c_str(), command.length(), address, addrlen);
if (!ret) {
socket.close();
return 1;

View File

@ -53,9 +53,9 @@ REMOTE_COMMAND CRemoteControl::getCommand()
char command[BUFFER_LENGTH];
char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int ret = m_socket.read((unsigned char*)buffer, BUFFER_LENGTH, address, port);
sockaddr_storage address;
unsigned int addrlen;
int ret = m_socket.read((unsigned char*)buffer, BUFFER_LENGTH, address, addrlen);
if (ret > 0) {
buffer[ret] = '\0';

View File

@ -31,7 +31,7 @@ const unsigned int BUFFER_LENGTH = 200U;
CYSFNetwork::CYSFNetwork(const std::string& myAddress, unsigned int myPort, const std::string& gatewayAddress, unsigned int gatewayPort, const std::string& callsign, bool debug) :
m_socket(myAddress, myPort),
m_address(),
m_port(gatewayPort),
m_addrlen(),
m_callsign(),
m_debug(debug),
m_enabled(false),
@ -42,7 +42,7 @@ m_tag(NULL)
m_callsign = callsign;
m_callsign.resize(YSF_CALLSIGN_LENGTH, ' ');
m_address = CUDPSocket::lookup(gatewayAddress);
CUDPSocket::lookup(gatewayAddress, gatewayPort, m_address, m_addrlen);
m_tag = new unsigned char[YSF_CALLSIGN_LENGTH];
::memset(m_tag, ' ', YSF_CALLSIGN_LENGTH);
@ -57,7 +57,7 @@ bool CYSFNetwork::open()
{
LogMessage("Opening YSF network connection");
if (m_address.s_addr == INADDR_NONE)
if (CUDPSocket::isnone(m_address))
return false;
m_pollTimer.start();
@ -97,7 +97,7 @@ bool CYSFNetwork::write(const unsigned char* src, const unsigned char* dest, con
if (m_debug)
CUtils::dump(1U, "YSF Network Data Sent", buffer, 155U);
return m_socket.write(buffer, 155U, m_address, m_port);
return m_socket.write(buffer, 155U, m_address, m_addrlen);
}
bool CYSFNetwork::writePoll()
@ -115,7 +115,7 @@ bool CYSFNetwork::writePoll()
if (m_debug)
CUtils::dump(1U, "YSF Network Poll Sent", buffer, 14U);
return m_socket.write(buffer, 14U, m_address, m_port);
return m_socket.write(buffer, 14U, m_address, m_addrlen);
}
void CYSFNetwork::clock(unsigned int ms)
@ -128,18 +128,12 @@ void CYSFNetwork::clock(unsigned int ms)
unsigned char buffer[BUFFER_LENGTH];
in_addr address;
unsigned int port;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, port);
if (length <= 0)
sockaddr_storage address;
unsigned int addrlen;
int length = m_socket.read(buffer, BUFFER_LENGTH, address, addrlen);
if (length <= 0 || !CUDPSocket::match(m_address, address))
return;
// Check if the data is for us
if (m_address.s_addr != address.s_addr || m_port != port) {
LogMessage("YSF packet received from an invalid source, %08X != %08X and/or %u != %u", m_address.s_addr, address.s_addr, m_port, port);
return;
}
// Ignore incoming polls
if (::memcmp(buffer, "YSFP", 4U) == 0)
return;

View File

@ -48,8 +48,8 @@ public:
private:
CUDPSocket m_socket;
in_addr m_address;
unsigned int m_port;
sockaddr_storage m_address;
unsigned int m_addrlen;
std::string m_callsign;
bool m_debug;
bool m_enabled;