Converting to ipv6

feature/IPV6_#35B
Geoffrey Merck 3 years ago
parent ecbcd987be
commit 85f09cc7c7

10
.vscode/tasks.json vendored

@ -13,7 +13,10 @@
"USE_GPSD=1",
"all"
],
"group": "build",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
@ -91,10 +94,7 @@
"ENABLE_DEBUG=1",
"USE_GPSD=1"
],
"group": {
"kind": "build",
"isDefault": true
},
"group": "build",
"problemMatcher": []
}
]

@ -26,7 +26,7 @@
#define TOIPV6(s) ((struct sockaddr_in6*)&s)
#define TOIPV4(s) (((struct sockaddr_in*)&s))
#define GETPORT(s) (s.ss_family == AF_INET6 ? TOIPV6(s)->sin6_port : TOIPV4(s)->sin_port)
#define SETPORT(s, p) (if(s.ss_family == AF_INET6)TOIPV6(s)->sin6_port = p;else TOIPV4(s)->sin_port = p;)
#define SETPORT(s, p) ({if(s.ss_family == AF_INET6)TOIPV6(s)->sin6_port = p;else TOIPV4(s)->sin_port = p;})
enum IPMATCHTYPE {
IMT_ADDRESS_AND_PORT,

@ -0,0 +1,43 @@
/*
* Copyright (c) 2021-2023 by Geoffrey Merck F4FXL / KC3FRA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <cstring>
#include "NetworkDestination.h"
CNetworkDestination::CNetworkDestination(const CNetworkDestination& destination) :
m_destination(destination.m_destination)
{
}
CNetworkDestination::CNetworkDestination()
{
::memset(&m_destination, 0, sizeof(sockaddr_storage));
}
void CNetworkDestination::setDestination(const sockaddr_storage & destination)
{
m_destination = destination;
}
sockaddr_storage CNetworkDestination::getDestination() const
{
return m_destination;
}

@ -0,0 +1,33 @@
/*
* Copyright (c) 2021-2023 by Geoffrey Merck F4FXL / KC3FRA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#pragma once
#include <netinet/in.h>
class CNetworkDestination {
public:
CNetworkDestination();
CNetworkDestination(const CNetworkDestination & destination);
void setDestination(const sockaddr_storage& destination);
sockaddr_storage getDestination() const;
private:
sockaddr_storage m_destination;
};

@ -28,22 +28,93 @@
#include "Version.h"
#include "Utils.h"
#include "Log.h"
#include "NetUtils.h"
const char *HTML = "<table border=\"0\" width=\"95%%\"><tr><td width=\"4%%\"><img border=\"0\" src=%s></td><td width=\"96%%\"><font size=\"2\"><b>%s</b> DStarGateway %s</font></td></tr></table>";
CConnectData::CConnectData(GATEWAY_TYPE gatewayType, const std::string& repeater, const std::string& reflector, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_gatewayType(gatewayType),
m_repeater(repeater),
m_reflector(reflector),
m_type(type),
m_locator(),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
assert(repeater.size());
assert(reflector.size());
}
CConnectData::CConnectData(const std::string& repeater, const std::string& reflector, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_gatewayType(GT_REPEATER),
m_repeater(repeater),
m_reflector(reflector),
m_type(type),
m_locator(),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
assert(repeater.size());
assert(reflector.size());
}
CConnectData::CConnectData(const std::string& repeater, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_gatewayType(GT_REPEATER),
m_repeater(repeater),
m_reflector(),
m_type(type),
m_locator(),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
assert(repeater.size());
}
CConnectData::CConnectData(const std::string& repeater, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_gatewayType(GT_REPEATER),
m_repeater(repeater),
m_reflector(),
m_type(CT_UNLINK),
m_locator(),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
assert(repeater.size());
}
CConnectData::CConnectData(CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_gatewayType(GT_REPEATER),
m_repeater(),
m_reflector(),
m_type(type),
m_locator(),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
}
CConnectData::CConnectData(GATEWAY_TYPE gatewayType, const std::string& repeater, const std::string& reflector, CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
m_gatewayType(gatewayType),
m_repeater(repeater),
m_reflector(reflector),
m_type(type),
m_locator(),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
assert(repeater.size());
assert(reflector.size());
m_yourAddressAndPort.ss_family = AF_INET6;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)yourPort);
}
CConnectData::CConnectData(const std::string& repeater, const std::string& reflector, CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -52,13 +123,16 @@ m_repeater(repeater),
m_reflector(reflector),
m_type(type),
m_locator(),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
assert(repeater.size());
assert(reflector.size());
m_yourAddressAndPort.ss_family = AF_INET6;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)yourPort);
}
CConnectData::CConnectData(const std::string& repeater, CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -67,12 +141,15 @@ m_repeater(repeater),
m_reflector(),
m_type(type),
m_locator(),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
assert(repeater.size());
m_yourAddressAndPort.ss_family = AF_INET6;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)yourPort);
}
CConnectData::CConnectData(const std::string& repeater, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -81,12 +158,15 @@ m_repeater(repeater),
m_reflector(),
m_type(CT_UNLINK),
m_locator(),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
assert(repeater.size());
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)yourPort);
}
CConnectData::CConnectData(CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -95,11 +175,14 @@ m_repeater(),
m_reflector(),
m_type(type),
m_locator(),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)yourPort);
}
CConnectData::CConnectData() :
@ -108,8 +191,7 @@ m_repeater(" "),
m_reflector(),
m_type(CT_LINK1),
m_locator(),
m_yourAddress(),
m_yourPort(0U),
m_yourAddressAndPort(),
m_myPort(0U)
{
}

@ -1,7 +1,7 @@
/*
* Copyright (C) 2010,2012,2013 by Jonathan Naylor G4KLX
* Copyright (c) 2017 by Thomas A. Early N7TAE
* Copyright (c) 2021 by Geoffrey Merck F4FXL / KC3FRA
* Copyright (c) 2021-2023 by Geoffrey Merck F4FXL / KC3FRA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -35,6 +35,12 @@ enum CD_TYPE {
class CConnectData {
public:
CConnectData(GATEWAY_TYPE gatewayType, const std::string& repeater, const std::string& reflector, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CConnectData(const std::string& repeater, const std::string& reflector, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CConnectData(const std::string& repeater, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CConnectData(const std::string& repeater, CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CConnectData(CD_TYPE type, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CConnectData(GATEWAY_TYPE gatewayType, const std::string& repeater, const std::string& reflector, CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
CConnectData(const std::string& repeater, const std::string& reflector, CD_TYPE type, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
CConnectData(const std::string& repeater, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
@ -57,8 +63,7 @@ public:
std::string getReflector() const;
CD_TYPE getType() const;
in_addr getYourAddress() const;
unsigned int getYourPort() const;
sockaddr_storage getYourAddressAndPort() const;
unsigned int getMyPort() const;
void setLocator(const std::string& locator);
@ -69,8 +74,7 @@ private:
std::string m_reflector;
CD_TYPE m_type;
std::string m_locator;
in_addr m_yourAddress;
unsigned int m_yourPort;
sockaddr_storage m_yourAddressAndPort;
unsigned int m_myPort;
};

@ -23,6 +23,7 @@
#include "Utils.h"
#include "StringUtils.h"
#include "Log.h"
#include "NetUtils.h"
unsigned int CDCSHandler::m_maxReflectors = 0U;
CDCSHandler** CDCSHandler::m_reflectors = NULL;
@ -46,8 +47,7 @@ m_xlxReflector(),
m_isXlx(false),
m_repeater(repeater),
m_handler(protoHandler),
m_yourAddress(address),
m_yourPort(port),
m_yourAddressAndPort(),
m_myPort(0U),
m_direction(direction),
m_linkState(DCS_LINKING),
@ -71,6 +71,10 @@ m_rptCall2()
assert(handler != NULL);
assert(port > 0U);
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = address;
SETPORT(m_yourAddressAndPort, (in_port_t)port);
m_myPort = protoHandler->getPort();
m_pollInactivityTimer.start();
@ -184,15 +188,13 @@ void CDCSHandler::getInfo(IReflectorCallback* handler, CRemoteRepeaterData& data
void CDCSHandler::process(CAMBEData& data)
{
in_addr yourAddress = data.getYourAddress();
unsigned int yourPort = data.getYourPort();
auto destination = data.getDestination();
unsigned int myPort = data.getMyPort();
for (unsigned int i = 0U; i < m_maxReflectors; i++) {
CDCSHandler* reflector = m_reflectors[i];
if (reflector != NULL) {
if (reflector->m_yourAddress.s_addr == yourAddress.s_addr &&
reflector->m_yourPort == yourPort &&
if (CNetUtils::match(reflector->m_yourAddressAndPort, destination, IMT_ADDRESS_AND_PORT) &&
reflector->m_myPort == myPort) {
reflector->processInt(data);
return;
@ -205,10 +207,9 @@ void CDCSHandler::process(CPollData& poll)
{
std::string reflector = poll.getData1();
std::string repeater = poll.getData2();
in_addr yourAddress = poll.getYourAddress();
unsigned int yourPort = poll.getYourPort();
unsigned int myPort = poll.getMyPort();
unsigned int length = poll.getLength();
sockaddr_storage yourDestination = poll.getYourAddressAndPort();
unsigned int myPort = poll.getMyPort();
unsigned int length = poll.getLength();
// Check to see if we already have a link
for (unsigned int i = 0U; i < m_maxReflectors; i++) {
@ -217,19 +218,16 @@ void CDCSHandler::process(CPollData& poll)
if (handler != NULL) {
if (handler->m_reflector == reflector &&
handler->m_repeater == repeater &&
handler->m_yourAddress.s_addr == yourAddress.s_addr &&
handler->m_yourPort == yourPort &&
handler->m_myPort == myPort &&
CNetUtils::match(handler->m_yourAddressAndPort, yourDestination, IMT_ADDRESS_AND_PORT) &&
handler->m_direction == DIR_OUTGOING &&
handler->m_linkState == DCS_LINKED &&
length == 22U) {
handler->m_pollInactivityTimer.start();
CPollData reply(handler->m_repeater, handler->m_reflector, handler->m_direction, handler->m_yourAddress, handler->m_yourPort);
CPollData reply(handler->m_repeater, handler->m_reflector, handler->m_direction, handler->m_yourAddressAndPort);
handler->m_handler->writePoll(reply);
return;
} else if (handler->m_reflector.substr(0, LONG_CALLSIGN_LENGTH - 1U) == reflector.substr(0, LONG_CALLSIGN_LENGTH - 1U) &&
handler->m_yourAddress.s_addr == yourAddress.s_addr &&
handler->m_yourPort == yourPort &&
CNetUtils::match(handler->m_yourAddressAndPort, yourDestination, IMT_ADDRESS_AND_PORT) &&
handler->m_myPort == myPort &&
handler->m_direction == DIR_INCOMING &&
handler->m_linkState == DCS_LINKED &&
@ -262,8 +260,7 @@ void CDCSHandler::process(CConnectData& connect)
}
// else if type == CT_LINK1 or type == CT_LINK2
in_addr yourAddress = connect.getYourAddress();
unsigned int yourPort = connect.getYourPort();
sockaddr_storage yourAddressAndPort = connect.getYourAddressAndPort();
unsigned int myPort = connect.getMyPort();
std::string repeaterCallsign = connect.getRepeater();
@ -273,8 +270,7 @@ void CDCSHandler::process(CConnectData& connect)
for (unsigned int i = 0U; i < m_maxReflectors; i++) {
if (m_reflectors[i] != NULL) {
if (m_reflectors[i]->m_direction == DIR_INCOMING &&
m_reflectors[i]->m_yourAddress.s_addr == yourAddress.s_addr &&
m_reflectors[i]->m_yourPort == yourPort &&
CNetUtils::match(m_reflectors[i]->m_yourAddressAndPort, yourAddressAndPort, IMT_ADDRESS_AND_PORT) &&
m_reflectors[i]->m_myPort == myPort &&
m_reflectors[i]->m_repeater == reflectorCallsign &&
m_reflectors[i]->m_reflector == repeaterCallsign)
@ -286,7 +282,7 @@ void CDCSHandler::process(CConnectData& connect)
IReflectorCallback* handler = CRepeaterHandler::findDVRepeater(reflectorCallsign);
if (handler == NULL) {
CLog::logInfo("DCS connect to unknown reflector %s from %s", reflectorCallsign.c_str(), repeaterCallsign.c_str());
CConnectData reply(repeaterCallsign, reflectorCallsign, CT_NAK, connect.getYourAddress(), connect.getYourPort());
CConnectData reply(repeaterCallsign, reflectorCallsign, CT_NAK, connect.getYourAddressAndPort());
m_incoming->writeConnect(reply);
return;
}

@ -112,8 +112,7 @@ private:
bool m_isXlx;
std::string m_repeater;
CDCSProtocolHandler* m_handler;
in_addr m_yourAddress;
unsigned int m_yourPort;
sockaddr_storage m_yourAddressAndPort;
unsigned int m_myPort;
DIRECTION m_direction;
DCS_STATE m_linkState;

@ -61,7 +61,7 @@ bool CDCSProtocolHandler::writeData(const CAMBEData& data)
CUtils::dump("Sending Data", buffer, length);
#endif
return m_socket.write(buffer, length, data.getYourAddress(), data.getYourPort());
return m_socket.write(buffer, length, data.getDestination());
}
bool CDCSProtocolHandler::writePoll(const CPollData& poll)

@ -80,7 +80,7 @@ bool CDPlusProtocolHandler::writeAMBE(const CAMBEData& data)
CUtils::dump("Sending Data", buffer, length);
#endif
return m_socket.write(buffer, length, data.getYourAddress(), data.getYourPort());
return m_socket.write(buffer, length, data.getDestination());
}
bool CDPlusProtocolHandler::writePoll(const CPollData& poll)

@ -21,6 +21,8 @@
#include <cassert>
#include <cstring>
#include "NetUtils.h"
#include "HeardData.h"
CHeardData::CHeardData() :
@ -131,6 +133,19 @@ void CHeardData::setDestination(const in_addr& address, unsigned int port)
m_port = port;
}
struct sockaddr_storage CHeardData::getDestination() const
{
{
struct sockaddr_storage dest;
::memset(&dest, 0, sizeof(sockaddr_storage));
dest.ss_family = AF_INET;
TOIPV4(dest)->sin_addr = m_address;
TOIPV4(dest)->sin_port = htons(m_port);
return dest;
}
}
in_addr CHeardData::getAddress() const
{
return m_address;

@ -40,6 +40,8 @@ public:
void setDestination(const in_addr& address, unsigned int port);
struct sockaddr_storage getDestination() const;
in_addr getAddress() const;
unsigned int getPort() const;

@ -24,6 +24,19 @@
#include "PollData.h"
#include "DStarDefines.h"
#include "Utils.h"
#include "NetUtils.h"
CPollData::CPollData(const std::string& data1, const std::string& data2, DIRECTION direction, const sockaddr_storage& yourAddressAndPort, unsigned int myPort) :
m_data1(data1),
m_data2(data2),
m_direction(direction),
m_dongle(false),
m_length(0U),
m_yourAddressAndPort(yourAddressAndPort),
m_myPort(myPort)
{
assert(GETPORT(yourAddressAndPort) > 0U);
}
CPollData::CPollData(const std::string& data1, const std::string& data2, DIRECTION direction, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
m_data1(data1),
@ -31,11 +44,14 @@ m_data2(data2),
m_direction(direction),
m_dongle(false),
m_length(0U),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
}
CPollData::CPollData(const std::string& data, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -44,11 +60,14 @@ m_data2(),
m_direction(DIR_OUTGOING),
m_dongle(false),
m_length(0U),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
}
CPollData::CPollData(const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort) :
@ -57,11 +76,14 @@ m_data2(),
m_direction(DIR_OUTGOING),
m_dongle(false),
m_length(0U),
m_yourAddress(yourAddress),
m_yourPort(yourPort),
m_yourAddressAndPort(),
m_myPort(myPort)
{
assert(yourPort > 0U);
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
}
CPollData::CPollData() :
@ -70,8 +92,7 @@ m_data2(),
m_direction(DIR_OUTGOING),
m_dongle(false),
m_length(0U),
m_yourAddress(),
m_yourPort(0U),
m_yourAddressAndPort(),
m_myPort(0U)
{
}
@ -91,8 +112,9 @@ bool CPollData::setDExtraData(const unsigned char* data, unsigned int length, co
m_dongle = data[LONG_CALLSIGN_LENGTH] != 0x00;
m_length = length;
m_yourAddress = yourAddress;
m_yourPort = yourPort;
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
m_myPort = myPort;
return true;
@ -111,8 +133,9 @@ bool CPollData::setDCSData(const unsigned char* data, unsigned int length, const
m_data2 = sdata.substr(9, LONG_CALLSIGN_LENGTH);
m_length = length;
m_direction = DIR_INCOMING;
m_yourAddress = yourAddress;
m_yourPort = yourPort;
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
m_myPort = myPort;
break;
@ -122,8 +145,9 @@ bool CPollData::setDCSData(const unsigned char* data, unsigned int length, const
m_data2.push_back(sdata[17]);
m_length = length;
m_direction = DIR_OUTGOING;
m_yourAddress = yourAddress;
m_yourPort = yourPort;
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
m_myPort = myPort;
break;
}
@ -140,8 +164,9 @@ bool CPollData::setCCSData(const unsigned char* data, unsigned int length, const
m_data1 = std::string((const char*)data);
m_data1.resize(25);
m_length = length;
m_yourAddress = yourAddress;
m_yourPort = yourPort;
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
m_myPort = myPort;
return true;
@ -152,8 +177,9 @@ bool CPollData::setDPlusData(const unsigned char* /*data*/, unsigned int length,
assert(yourPort > 0U);
m_length = length;
m_yourAddress = yourAddress;
m_yourPort = yourPort;
m_yourAddressAndPort.ss_family = AF_INET;
TOIPV4(m_yourAddressAndPort)->sin_addr = yourAddress;
SETPORT(m_yourAddressAndPort, (in_port_t)myPort);
m_myPort = myPort;
return true;
@ -265,14 +291,9 @@ bool CPollData::isDongle() const
return m_dongle;
}
in_addr CPollData::getYourAddress() const
{
return m_yourAddress;
}
unsigned int CPollData::getYourPort() const
sockaddr_storage CPollData::getYourAddressAndPort()
{
return m_yourPort;
return m_yourAddressAndPort;
}
unsigned int CPollData::getMyPort() const

@ -27,6 +27,7 @@
class CPollData {
public:
CPollData(const std::string& data1, const std::string& data2, DIRECTION direction, const sockaddr_storage& yourAddressAndPort, unsigned int myPort = 0U);
CPollData(const std::string& data1, const std::string& data2, DIRECTION direction, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
CPollData(const std::string& data, const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
CPollData(const in_addr& yourAddress, unsigned int yourPort, unsigned int myPort = 0U);
@ -51,8 +52,7 @@ public:
bool isDongle() const;
in_addr getYourAddress() const;
unsigned int getYourPort() const;
sockaddr_storage getYourAddressAndPort();
unsigned int getMyPort() const;
DIRECTION getDirection() const;
@ -64,8 +64,7 @@ private:
DIRECTION m_direction;
bool m_dongle;
unsigned int m_length;
in_addr m_yourAddress;
unsigned int m_yourPort;
sockaddr_storage m_yourAddressAndPort;
unsigned int m_myPort;
};

@ -45,6 +45,7 @@ m_header()
}
CAMBEData::CAMBEData(const CAMBEData& data) :
CNetworkDestination(data),
m_rptSeq(data.m_rptSeq),
m_outSeq(data.m_outSeq),
m_id(data.m_id),
@ -557,43 +558,16 @@ bool CAMBEData::isSync() const
return (m_outSeq & 0x1FU) == 0x00U;
}
void CAMBEData::setDestination(const in_addr& address, unsigned int port)
{
m_yourAddress = address;
m_yourPort = port;
}
void CAMBEData::setText(const std::string& text)
{
m_text = text;
}
in_addr CAMBEData::getYourAddress() const
{
return m_yourAddress;
}
unsigned int CAMBEData::getYourPort() const
{
return m_yourPort;
}
unsigned int CAMBEData::getMyPort() const
{
return m_myPort;
}
struct sockaddr_storage CAMBEData::getDestination() const
{
struct sockaddr_storage dest;
::memset(&dest, 0, sizeof(sockaddr_storage));
dest.ss_family = AF_INET;
TOIPV4(dest)->sin_addr = m_yourAddress;
TOIPV4(dest)->sin_port = htons(m_yourPort);
return dest;
}
CHeaderData& CAMBEData::getHeader()
{
return m_header;

@ -23,9 +23,11 @@
#include <string>
#include <netinet/in.h>
#include "NetworkDestination.h"
#include "HeaderData.h"
class CAMBEData {
class CAMBEData : public CNetworkDestination {
public:
CAMBEData();
CAMBEData(const CAMBEData& data);

Loading…
Cancel
Save

Powered by TurnKey Linux.