From ca52eaf51e2beb3414d6be50031c2df0ef85cc56 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 8 Jul 2024 15:14:30 +0100 Subject: [PATCH] Clean up the code and remove an annoying bug. --- DGIdGateway/UDPSocket.cpp | 51 ++++++++++++++++++++++++++++++--------- DGIdGateway/Version.h | 2 +- DGIdGateway/prebuild.cmd | 2 +- YSFGateway/UDPSocket.cpp | 36 ++++++++++++++++++++++++--- YSFGateway/Version.h | 2 +- YSFGateway/WiresX.cpp | 29 ++++++++-------------- YSFGateway/prebuild.cmd | 2 +- YSFParrot/UDPSocket.cpp | 36 ++++++++++++++++++++++++--- YSFParrot/Version.h | 2 +- YSFParrot/prebuild.cmd | 2 +- 10 files changed, 119 insertions(+), 45 deletions(-) diff --git a/DGIdGateway/UDPSocket.cpp b/DGIdGateway/UDPSocket.cpp index 6981e29..0ad8aea 100644 --- a/DGIdGateway/UDPSocket.cpp +++ b/DGIdGateway/UDPSocket.cpp @@ -36,7 +36,11 @@ CUDPSocket::CUDPSocket(const std::string& address, unsigned short port) : m_localAddress(address), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -44,7 +48,11 @@ m_af(AF_UNSPEC) CUDPSocket::CUDPSocket(unsigned short port) : m_localAddress(), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -97,7 +105,9 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd return err; } - ::memcpy(&addr, res->ai_addr, address_length = res->ai_addrlen); + address_length = (unsigned int)res->ai_addrlen; + + ::memcpy(&addr, res->ai_addr, address_length); ::freeaddrinfo(res); @@ -146,7 +156,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad bool CUDPSocket::isNone(const sockaddr_storage& addr) { - struct sockaddr_in *in = (struct sockaddr_in *)&addr; + struct sockaddr_in *in = (struct sockaddr_in*)&addr; return ((addr.ss_family == AF_INET) && (in->sin_addr.s_addr == htonl(INADDR_NONE))); } @@ -160,7 +170,11 @@ bool CUDPSocket::open(const sockaddr_storage& address) bool CUDPSocket::open() { +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd == INVALID_SOCKET); +#else assert(m_fd == -1); +#endif sockaddr_storage addr; unsigned int addrlen; @@ -191,7 +205,7 @@ bool CUDPSocket::open() if (m_localPort > 0U) { int reuse = 1; - if (::setsockopt(m_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { + if (::setsockopt(m_fd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse)) == -1) { #if defined(_WIN32) || defined(_WIN64) LogError("Cannot set the UDP socket option, err: %lu", ::GetLastError()); #else @@ -217,11 +231,18 @@ bool CUDPSocket::open() return true; } -int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int &addressLength) +int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storage& address, unsigned int& addressLength) { assert(buffer != NULL); assert(length > 0U); - assert(m_fd >= 0); + +#if defined(_WIN32) || defined(_WIN64) + if (m_fd == INVALID_SOCKET) + return 0; +#else + if (m_fd == -1) + return 0; +#endif // Check that the readfrom() won't block struct pollfd pfd; @@ -254,9 +275,9 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag #endif #if defined(_WIN32) || defined(_WIN64) - int len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&address, &size); + int len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr*)&address, &size); #else - ssize_t len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&address, &size); + ssize_t len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr*)&address, &size); #endif if (len <= 0) { #if defined(_WIN32) || defined(_WIN64) @@ -282,14 +303,18 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s { assert(buffer != NULL); assert(length > 0U); +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd != INVALID_SOCKET); +#else assert(m_fd >= 0); +#endif bool result = false; #if defined(_WIN32) || defined(_WIN64) - int ret = ::sendto(m_fd, (char *)buffer, length, 0, (sockaddr *)&address, addressLength); + int ret = ::sendto(m_fd, (char*)buffer, length, 0, (sockaddr*)&address, addressLength); #else - ssize_t ret = ::sendto(m_fd, (char *)buffer, length, 0, (sockaddr *)&address, addressLength); + ssize_t ret = ::sendto(m_fd, (char*)buffer, length, 0, (sockaddr*)&address, addressLength); #endif if (ret < 0) { @@ -313,13 +338,15 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s void CUDPSocket::close() { - if (m_fd >= 0) { #if defined(_WIN32) || defined(_WIN64) + if (m_fd != INVALID_SOCKET) { ::closesocket(m_fd); + m_fd = INVALID_SOCKET; + } #else + if (m_fd >= 0) { ::close(m_fd); -#endif m_fd = -1; } +#endif } - diff --git a/DGIdGateway/Version.h b/DGIdGateway/Version.h index f31a5c8..5ea5e86 100644 --- a/DGIdGateway/Version.h +++ b/DGIdGateway/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20240129"; +const char* VERSION = "20240708"; #endif diff --git a/DGIdGateway/prebuild.cmd b/DGIdGateway/prebuild.cmd index 697fde9..71f3f5d 100644 --- a/DGIdGateway/prebuild.cmd +++ b/DGIdGateway/prebuild.cmd @@ -8,7 +8,7 @@ set HEADFILE=..\.git\HEAD set HASHFILE=0 if exist %HEADFILE% ( for /F "tokens=4 delims=/:" %%a in ('type %HEADFILE%') do set HEADBRANCH=%%a - set HASHFILE=.git\refs\heads\!HEADBRANCH! + set HASHFILE=..\.git\refs\heads\!HEADBRANCH! echo Found Git HEAD file: %HEADFILE% echo Git HEAD branch: !HEADBRANCH! echo Git HASH file: !HASHFILE! diff --git a/YSFGateway/UDPSocket.cpp b/YSFGateway/UDPSocket.cpp index 6981e29..c28c039 100644 --- a/YSFGateway/UDPSocket.cpp +++ b/YSFGateway/UDPSocket.cpp @@ -36,7 +36,11 @@ CUDPSocket::CUDPSocket(const std::string& address, unsigned short port) : m_localAddress(address), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -44,7 +48,11 @@ m_af(AF_UNSPEC) CUDPSocket::CUDPSocket(unsigned short port) : m_localAddress(), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -97,7 +105,9 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd return err; } - ::memcpy(&addr, res->ai_addr, address_length = res->ai_addrlen); + address_length = (unsigned int)res->ai_addrlen; + + ::memcpy(&addr, res->ai_addr, address_length); ::freeaddrinfo(res); @@ -160,7 +170,11 @@ bool CUDPSocket::open(const sockaddr_storage& address) bool CUDPSocket::open() { +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd == INVALID_SOCKET); +#else assert(m_fd == -1); +#endif sockaddr_storage addr; unsigned int addrlen; @@ -221,7 +235,14 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag { assert(buffer != NULL); assert(length > 0U); - assert(m_fd >= 0); + +#if defined(_WIN32) || defined(_WIN64) + if (m_fd == INVALID_SOCKET) + return 0; +#else + if (m_fd == -1) + return 0; +#endif // Check that the readfrom() won't block struct pollfd pfd; @@ -282,7 +303,11 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s { assert(buffer != NULL); assert(length > 0U); +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd != INVALID_SOCKET); +#else assert(m_fd >= 0); +#endif bool result = false; @@ -313,13 +338,16 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s void CUDPSocket::close() { - if (m_fd >= 0) { #if defined(_WIN32) || defined(_WIN64) + if (m_fd != INVALID_SOCKET) { ::closesocket(m_fd); + m_fd = INVALID_SOCKET; + } #else + if (m_fd >= 0) { ::close(m_fd); -#endif m_fd = -1; } +#endif } diff --git a/YSFGateway/Version.h b/YSFGateway/Version.h index f31a5c8..5ea5e86 100644 --- a/YSFGateway/Version.h +++ b/YSFGateway/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20240129"; +const char* VERSION = "20240708"; #endif diff --git a/YSFGateway/WiresX.cpp b/YSFGateway/WiresX.cpp index 247564a..0394799 100644 --- a/YSFGateway/WiresX.cpp +++ b/YSFGateway/WiresX.cpp @@ -830,10 +830,10 @@ void CWiresX::sendAllReply() for (unsigned int i = 0U; i < 10U; i++) data[i + 12U] = m_node.at(i); - unsigned int total = curr.size(); + unsigned int total = (unsigned int)curr.size(); if (total > 999U) total = 999U; - unsigned int n = curr.size() - m_start; + unsigned int n = (unsigned int)curr.size() - m_start; if (n > 20U) n = 20U; ::sprintf((char*)(data + 22U), "%03u%03u", 20U, total); @@ -923,10 +923,10 @@ void CWiresX::sendSearchReply() data[22U] = '1'; - unsigned int total = search.size(); + unsigned int total = (unsigned int)search.size(); if (total > 999U) total = 999U; - unsigned int n = search.size() - m_start; + unsigned int n = (unsigned int)search.size() - m_start; if (n > 20U) n = 20U; ::sprintf((char*)(data + 23U), "%02u%03u", 20U, total); @@ -960,17 +960,13 @@ void CWiresX::sendSearchReply() } unsigned int k = 1029U - offset; - for(unsigned int i = 0U; i < k; i++) - { - if (i % 50U == 49 && i>0) - { + for (unsigned int i = 0U; i < k; i++) { + if (((i % 50U) == 49U) && (i > 0U)) data[i + offset] = 0x0DU; - } else - { data[i + offset] = 0x20U; - } } + offset += k; data[offset + 0U] = 0x03U; // End of data marker @@ -1040,7 +1036,7 @@ void CWiresX::sendCategoryReply() for (unsigned int i = 0U; i < 10U; i++) data[i + 12U] = m_node.at(i); - unsigned int n = m_category.size(); + unsigned int n = (unsigned int)m_category.size(); if (n > 20U) n = 20U; @@ -1075,16 +1071,11 @@ void CWiresX::sendCategoryReply() } unsigned int k = 1029U - offset; - for(unsigned int i = 0U; i < k; i++) - { - if (i % 50U == 49 && i>0) - { + for (unsigned int i = 0U; i < k; i++) { + if (((i % 50U) == 49U) && (i > 0U)) data[i + offset] = 0x0DU; - } else - { data[i + offset] = 0x20U; - } } offset += k; diff --git a/YSFGateway/prebuild.cmd b/YSFGateway/prebuild.cmd index 697fde9..71f3f5d 100644 --- a/YSFGateway/prebuild.cmd +++ b/YSFGateway/prebuild.cmd @@ -8,7 +8,7 @@ set HEADFILE=..\.git\HEAD set HASHFILE=0 if exist %HEADFILE% ( for /F "tokens=4 delims=/:" %%a in ('type %HEADFILE%') do set HEADBRANCH=%%a - set HASHFILE=.git\refs\heads\!HEADBRANCH! + set HASHFILE=..\.git\refs\heads\!HEADBRANCH! echo Found Git HEAD file: %HEADFILE% echo Git HEAD branch: !HEADBRANCH! echo Git HASH file: !HASHFILE! diff --git a/YSFParrot/UDPSocket.cpp b/YSFParrot/UDPSocket.cpp index 6981e29..c28c039 100644 --- a/YSFParrot/UDPSocket.cpp +++ b/YSFParrot/UDPSocket.cpp @@ -36,7 +36,11 @@ CUDPSocket::CUDPSocket(const std::string& address, unsigned short port) : m_localAddress(address), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -44,7 +48,11 @@ m_af(AF_UNSPEC) CUDPSocket::CUDPSocket(unsigned short port) : m_localAddress(), m_localPort(port), +#if defined(_WIN32) || defined(_WIN64) +m_fd(INVALID_SOCKET), +#else m_fd(-1), +#endif m_af(AF_UNSPEC) { } @@ -97,7 +105,9 @@ int CUDPSocket::lookup(const std::string& hostname, unsigned short port, sockadd return err; } - ::memcpy(&addr, res->ai_addr, address_length = res->ai_addrlen); + address_length = (unsigned int)res->ai_addrlen; + + ::memcpy(&addr, res->ai_addr, address_length); ::freeaddrinfo(res); @@ -160,7 +170,11 @@ bool CUDPSocket::open(const sockaddr_storage& address) bool CUDPSocket::open() { +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd == INVALID_SOCKET); +#else assert(m_fd == -1); +#endif sockaddr_storage addr; unsigned int addrlen; @@ -221,7 +235,14 @@ int CUDPSocket::read(unsigned char* buffer, unsigned int length, sockaddr_storag { assert(buffer != NULL); assert(length > 0U); - assert(m_fd >= 0); + +#if defined(_WIN32) || defined(_WIN64) + if (m_fd == INVALID_SOCKET) + return 0; +#else + if (m_fd == -1) + return 0; +#endif // Check that the readfrom() won't block struct pollfd pfd; @@ -282,7 +303,11 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s { assert(buffer != NULL); assert(length > 0U); +#if defined(_WIN32) || defined(_WIN64) + assert(m_fd != INVALID_SOCKET); +#else assert(m_fd >= 0); +#endif bool result = false; @@ -313,13 +338,16 @@ bool CUDPSocket::write(const unsigned char* buffer, unsigned int length, const s void CUDPSocket::close() { - if (m_fd >= 0) { #if defined(_WIN32) || defined(_WIN64) + if (m_fd != INVALID_SOCKET) { ::closesocket(m_fd); + m_fd = INVALID_SOCKET; + } #else + if (m_fd >= 0) { ::close(m_fd); -#endif m_fd = -1; } +#endif } diff --git a/YSFParrot/Version.h b/YSFParrot/Version.h index d5be025..b09e89a 100644 --- a/YSFParrot/Version.h +++ b/YSFParrot/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20240129"; +const char* VERSION = "20240708"; #endif diff --git a/YSFParrot/prebuild.cmd b/YSFParrot/prebuild.cmd index 697fde9..71f3f5d 100644 --- a/YSFParrot/prebuild.cmd +++ b/YSFParrot/prebuild.cmd @@ -8,7 +8,7 @@ set HEADFILE=..\.git\HEAD set HASHFILE=0 if exist %HEADFILE% ( for /F "tokens=4 delims=/:" %%a in ('type %HEADFILE%') do set HEADBRANCH=%%a - set HASHFILE=.git\refs\heads\!HEADBRANCH! + set HASHFILE=..\.git\refs\heads\!HEADBRANCH! echo Found Git HEAD file: %HEADFILE% echo Git HEAD branch: !HEADBRANCH! echo Git HASH file: !HASHFILE!