diff --git a/YSFGateway/Network.cpp b/YSFGateway/Network.cpp index 80ed7c3..117fad2 100644 --- a/YSFGateway/Network.cpp +++ b/YSFGateway/Network.cpp @@ -27,30 +27,59 @@ const unsigned int BUFFER_LENGTH = 200U; -CNetwork::CNetwork(const std::string& address, unsigned int port, bool debug) : +CNetwork::CNetwork(const std::string& address, unsigned int port, const std::string& callsign, const std::string& suffix, bool debug) : m_socket(address, port), m_debug(debug), m_address(), m_port(0U), +m_poll(NULL), m_buffer(1000U, "YSF Network Buffer"), m_timer(1000U, 5U) { assert(port > 0U); + + m_poll = new unsigned char[14U]; + ::memcpy(m_poll + 0U, "YSFP", 4U); + + std::string node = callsign; + if (suffix.size() > 0U) { + node.append("-"); + node.append(suffix); + } + node.resize(YSF_CALLSIGN_LENGTH, ' '); + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + m_poll[i + 4U] = node.at(i); } -CNetwork::CNetwork(unsigned int port, bool debug) : +CNetwork::CNetwork(unsigned int port, const std::string& callsign, const std::string& suffix, bool debug) : m_socket(port), m_debug(debug), m_address(), m_port(0U), +m_poll(NULL), m_buffer(1000U, "YSF Network Buffer"), m_timer(1000U, 5U) { assert(port > 0U); + + m_poll = new unsigned char[14U]; + ::memcpy(m_poll + 0U, "YSFP", 4U); + + std::string node = callsign; + if (suffix.size() > 0U) { + node.append("-"); + node.append(suffix); + } + node.resize(YSF_CALLSIGN_LENGTH, ' '); + + for (unsigned int i = 0U; i < YSF_CALLSIGN_LENGTH; i++) + m_poll[i + 4U] = node.at(i); } CNetwork::~CNetwork() { + delete[] m_poll; } bool CNetwork::open() @@ -94,25 +123,7 @@ bool CNetwork::writePoll() if (m_port == 0U) return true; - unsigned char buffer[20U]; - - buffer[0] = 'Y'; - buffer[1] = 'S'; - buffer[2] = 'F'; - buffer[3] = 'P'; - - buffer[4U] = 'G'; - buffer[5U] = 'A'; - buffer[6U] = 'T'; - buffer[7U] = 'E'; - buffer[8U] = 'W'; - buffer[9U] = 'A'; - buffer[10U] = 'Y'; - buffer[11U] = ' '; - buffer[12U] = ' '; - buffer[13U] = ' '; - - return m_socket.write(buffer, 14U, m_address, m_port); + return m_socket.write(m_poll, 14U, m_address, m_port); } void CNetwork::clock(unsigned int ms) diff --git a/YSFGateway/Network.h b/YSFGateway/Network.h index 08a0099..e9045f7 100644 --- a/YSFGateway/Network.h +++ b/YSFGateway/Network.h @@ -29,8 +29,8 @@ class CNetwork { public: - CNetwork(const std::string& address, unsigned int port, bool debug); - CNetwork(unsigned int port, bool debug); + CNetwork(const std::string& address, unsigned int port, const std::string& callsign, const std::string& suffix, bool debug); + CNetwork(unsigned int port, const std::string& callsign, const std::string& suffix, bool debug); ~CNetwork(); bool open(); @@ -51,6 +51,7 @@ private: bool m_debug; in_addr m_address; unsigned int m_port; + unsigned char* m_poll; CRingBuffer m_buffer; CTimer m_timer; diff --git a/YSFGateway/WiresX.cpp b/YSFGateway/WiresX.cpp index 5f67c9f..70c50d8 100644 --- a/YSFGateway/WiresX.cpp +++ b/YSFGateway/WiresX.cpp @@ -40,7 +40,7 @@ const unsigned char ALL_RESP[] = {0x5DU, 0x46U, 0x5FU, 0x26U}; const unsigned char DEFAULT_FICH[] = {0x20U, 0x00U, 0x01U, 0x00U}; -const unsigned char NET_HEADER[] = "YSFDGATEWAY ALL "; +const unsigned char NET_HEADER[] = "YSFD ALL "; CWiresX::CWiresX(const std::string& callsign, const std::string& suffix, CNetwork* network, const std::string& hostsFile, unsigned int statusPort) : m_callsign(callsign), @@ -141,8 +141,10 @@ void CWiresX::setInfo(const std::string& name, unsigned int txFrequency, unsigne for (unsigned int i = 0U; i < 34U; i++) m_header[i] = NET_HEADER[i]; - for (unsigned int i = 0U; i < 10U; i++) + for (unsigned int i = 0U; i < 10U; i++) { + m_header[i + 4U] = m_node.at(i); m_header[i + 14U] = m_node.at(i); + } } bool CWiresX::start() diff --git a/YSFGateway/YSFGateway.cpp b/YSFGateway/YSFGateway.cpp index 346acd9..0a84a56 100644 --- a/YSFGateway/YSFGateway.cpp +++ b/YSFGateway/YSFGateway.cpp @@ -174,7 +174,7 @@ int CYSFGateway::run() std::string myAddress = m_conf.getMyAddress(); unsigned int myPort = m_conf.getMyPort(); - CNetwork rptNetwork(myAddress, myPort, debug); + CNetwork rptNetwork(myAddress, myPort, m_callsign, m_suffix, debug); rptNetwork.setDestination(rptAddress, rptPort); ret = rptNetwork.open(); @@ -185,7 +185,7 @@ int CYSFGateway::run() unsigned int netPort = m_conf.getNetworkDataPort(); - m_netNetwork = new CNetwork(netPort, debug); + m_netNetwork = new CNetwork(netPort, m_callsign, m_suffix, debug); ret = m_netNetwork->open(); if (!ret) { ::LogError("Cannot open the reflector network port");