From e77fa3b3fa96bf6727c2706b1d8dffb383931a26 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 20 Sep 2020 21:43:46 +0100 Subject: [PATCH] Get Windows working. --- NXDNGateway/NXDNGateway.cpp | 2 ++ NXDNGateway/UDPSocket.cpp | 26 ++++++++++++++------------ NXDNGateway/UDPSocket.h | 4 ++++ NXDNParrot/NXDNParrot.cpp | 4 +++- NXDNParrot/UDPSocket.cpp | 26 ++++++++++++++------------ NXDNParrot/UDPSocket.h | 6 +++++- NXDNReflector/NXDNReflector.cpp | 2 ++ NXDNReflector/UDPSocket.cpp | 26 ++++++++++++++------------ NXDNReflector/UDPSocket.h | 4 ++++ 9 files changed, 62 insertions(+), 38 deletions(-) diff --git a/NXDNGateway/NXDNGateway.cpp b/NXDNGateway/NXDNGateway.cpp index 385d8f4..02091be 100644 --- a/NXDNGateway/NXDNGateway.cpp +++ b/NXDNGateway/NXDNGateway.cpp @@ -94,10 +94,12 @@ m_conf(file), m_writer(NULL), m_gps(NULL) { + CUDPSocket::startup(); } CNXDNGateway::~CNXDNGateway() { + CUDPSocket::shutdown(); } void CNXDNGateway::run() diff --git a/NXDNGateway/UDPSocket.cpp b/NXDNGateway/UDPSocket.cpp index 382925f..3f6192a 100644 --- a/NXDNGateway/UDPSocket.cpp +++ b/NXDNGateway/UDPSocket.cpp @@ -37,12 +37,6 @@ m_address_save(address), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -56,12 +50,6 @@ m_address_save(), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -72,6 +60,20 @@ m_counter(0U) CUDPSocket::~CUDPSocket() { +} + +void CUDPSocket::startup() +{ +#if defined(_WIN32) || defined(_WIN64) + WSAData data; + int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); + if (wsaRet != 0) + LogError("Error from WSAStartup"); +#endif +} + +void CUDPSocket::shutdown() +{ #if defined(_WIN32) || defined(_WIN64) ::WSACleanup(); #endif diff --git a/NXDNGateway/UDPSocket.h b/NXDNGateway/UDPSocket.h index 3f5585b..6e3846c 100644 --- a/NXDNGateway/UDPSocket.h +++ b/NXDNGateway/UDPSocket.h @@ -60,8 +60,12 @@ public: void close(); void close(const unsigned int index); + static void startup(); + static void shutdown(); + static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length); static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length, struct addrinfo& hints); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/NXDNParrot/NXDNParrot.cpp b/NXDNParrot/NXDNParrot.cpp index d9db5e7..9e63a20 100644 --- a/NXDNParrot/NXDNParrot.cpp +++ b/NXDNParrot/NXDNParrot.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2018 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2018,2020 by Jonathan Naylor G4KLX * * 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 @@ -50,10 +50,12 @@ int main(int argc, char** argv) CNXDNParrot::CNXDNParrot(unsigned int port) : m_port(port) { + CUDPSocket::startup(); } CNXDNParrot::~CNXDNParrot() { + CUDPSocket::shutdown(); } void CNXDNParrot::run() diff --git a/NXDNParrot/UDPSocket.cpp b/NXDNParrot/UDPSocket.cpp index 382925f..3f6192a 100644 --- a/NXDNParrot/UDPSocket.cpp +++ b/NXDNParrot/UDPSocket.cpp @@ -37,12 +37,6 @@ m_address_save(address), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -56,12 +50,6 @@ m_address_save(), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -72,6 +60,20 @@ m_counter(0U) CUDPSocket::~CUDPSocket() { +} + +void CUDPSocket::startup() +{ +#if defined(_WIN32) || defined(_WIN64) + WSAData data; + int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); + if (wsaRet != 0) + LogError("Error from WSAStartup"); +#endif +} + +void CUDPSocket::shutdown() +{ #if defined(_WIN32) || defined(_WIN64) ::WSACleanup(); #endif diff --git a/NXDNParrot/UDPSocket.h b/NXDNParrot/UDPSocket.h index 6df7d79..6e3846c 100644 --- a/NXDNParrot/UDPSocket.h +++ b/NXDNParrot/UDPSocket.h @@ -32,7 +32,7 @@ #include #include #else -#include +#include #endif #if !defined(UDP_SOCKET_MAX) @@ -60,8 +60,12 @@ public: void close(); void close(const unsigned int index); + static void startup(); + static void shutdown(); + static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length); static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length, struct addrinfo& hints); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/NXDNReflector/NXDNReflector.cpp b/NXDNReflector/NXDNReflector.cpp index ce26899..06a6453 100644 --- a/NXDNReflector/NXDNReflector.cpp +++ b/NXDNReflector/NXDNReflector.cpp @@ -83,10 +83,12 @@ m_icomNetwork(NULL), m_kenwoodNetwork(NULL), m_repeaters() { + CUDPSocket::startup(); } CNXDNReflector::~CNXDNReflector() { + CUDPSocket::shutdown(); } void CNXDNReflector::run() diff --git a/NXDNReflector/UDPSocket.cpp b/NXDNReflector/UDPSocket.cpp index 382925f..3f6192a 100644 --- a/NXDNReflector/UDPSocket.cpp +++ b/NXDNReflector/UDPSocket.cpp @@ -37,12 +37,6 @@ m_address_save(address), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -56,12 +50,6 @@ m_address_save(), m_port_save(port), m_counter(0U) { -#if defined(_WIN32) || defined(_WIN64) - WSAData data; - int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); - if (wsaRet != 0) - LogError("Error from WSAStartup"); -#endif for (int i = 0; i < UDP_SOCKET_MAX; i++) { m_address[i] = ""; m_port[i] = 0U; @@ -72,6 +60,20 @@ m_counter(0U) CUDPSocket::~CUDPSocket() { +} + +void CUDPSocket::startup() +{ +#if defined(_WIN32) || defined(_WIN64) + WSAData data; + int wsaRet = ::WSAStartup(MAKEWORD(2, 2), &data); + if (wsaRet != 0) + LogError("Error from WSAStartup"); +#endif +} + +void CUDPSocket::shutdown() +{ #if defined(_WIN32) || defined(_WIN64) ::WSACleanup(); #endif diff --git a/NXDNReflector/UDPSocket.h b/NXDNReflector/UDPSocket.h index 3f5585b..6e3846c 100644 --- a/NXDNReflector/UDPSocket.h +++ b/NXDNReflector/UDPSocket.h @@ -60,8 +60,12 @@ public: void close(); void close(const unsigned int index); + static void startup(); + static void shutdown(); + static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length); static int lookup(const std::string& hostName, unsigned int port, sockaddr_storage& address, unsigned int& address_length, struct addrinfo& hints); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); static bool isNone(const sockaddr_storage& addr);