From 169b14490c8fded6c303e89bfbff5a983dfc67a2 Mon Sep 17 00:00:00 2001 From: SaltySnail Date: Wed, 21 Aug 2024 01:38:52 +0200 Subject: [PATCH] Added IPv6 support --- src/Network/Core.cpp | 2 +- src/Network/DNS.cpp | 6 ++++-- src/Network/GlobalHandler.cpp | 2 +- src/Network/Resources.cpp | 6 +++--- src/Network/VehicleData.cpp | 6 +++--- src/Network/VehicleEvent.cpp | 6 +++--- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Network/Core.cpp b/src/Network/Core.cpp index 561b9c6..cf4b0b7 100644 --- a/src/Network/Core.cpp +++ b/src/Network/Core.cpp @@ -269,7 +269,7 @@ void CoreMain() { ZeroMemory(&hints, sizeof(hints)); - hints.ai_family = AF_INET; + hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; diff --git a/src/Network/DNS.cpp b/src/Network/DNS.cpp index d28b829..9ad5ac6 100644 --- a/src/Network/DNS.cpp +++ b/src/Network/DNS.cpp @@ -7,6 +7,7 @@ /// #include +#include "IPRegex.h" #if defined(_WIN32) #include @@ -19,8 +20,9 @@ #include "Logger.h" std::string GetAddr(const std::string& IP) { - if (IP.find_first_not_of("0123456789.") == -1) + if (!std::regex_match(IP, IP_REGEX)) { return IP; + } hostent* host; #ifdef _WIN32 WSADATA wsaData; @@ -40,4 +42,4 @@ std::string GetAddr(const std::string& IP) { std::string Ret = inet_ntoa(*((struct in_addr*)host->h_addr)); WSACleanup(); return Ret; -} \ No newline at end of file +} diff --git a/src/Network/GlobalHandler.cpp b/src/Network/GlobalHandler.cpp index dc4b580..5e3c845 100644 --- a/src/Network/GlobalHandler.cpp +++ b/src/Network/GlobalHandler.cpp @@ -156,7 +156,7 @@ SOCKET SetupListener() { #endif ZeroMemory(&hints, sizeof(hints)); - hints.ai_family = AF_INET; + hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; diff --git a/src/Network/Resources.cpp b/src/Network/Resources.cpp index f32c263..c403814 100644 --- a/src/Network/Resources.cpp +++ b/src/Network/Resources.cpp @@ -169,16 +169,16 @@ void MultiKill(SOCKET Sock, SOCKET Sock1) { Terminate = true; } SOCKET InitDSock() { - SOCKET DSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + SOCKET DSock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN ServerAddr; if (DSock < 1) { KillSocket(DSock); Terminate = true; return 0; } - ServerAddr.sin_family = AF_INET; + ServerAddr.sin_family = AF_UNSPEC; ServerAddr.sin_port = htons(LastPort); - inet_pton(AF_INET, LastIP.c_str(), &ServerAddr.sin_addr); + inet_pton(AF_UNSPEC, LastIP.c_str(), &ServerAddr.sin_addr); if (connect(DSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) != 0) { KillSocket(DSock); Terminate = true; diff --git a/src/Network/VehicleData.cpp b/src/Network/VehicleData.cpp index 2331464..bd2284e 100644 --- a/src/Network/VehicleData.cpp +++ b/src/Network/VehicleData.cpp @@ -85,10 +85,10 @@ void UDPClientMain(const std::string& IP, int Port) { delete ToServer; ToServer = new sockaddr_in; - ToServer->sin_family = AF_INET; + ToServer->sin_family = AF_UNSPEC; ToServer->sin_port = htons(Port); - inet_pton(AF_INET, IP.c_str(), &ToServer->sin_addr); - UDPSock = socket(AF_INET, SOCK_DGRAM, 0); + inet_pton(AF_UNSPEC, IP.c_str(), &ToServer->sin_addr); + UDPSock = socket(AF_UNSPEC, SOCK_DGRAM, 0); GameSend("P" + std::to_string(ClientID)); TCPSend("H", TCPSock); UDPSend("p"); diff --git a/src/Network/VehicleEvent.cpp b/src/Network/VehicleEvent.cpp index c02a572..eebd0ab 100644 --- a/src/Network/VehicleEvent.cpp +++ b/src/Network/VehicleEvent.cpp @@ -134,7 +134,7 @@ void TCPClientMain(const std::string& IP, int Port) { WSADATA wsaData; WSAStartup(514, &wsaData); // 2.2 #endif - TCPSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + TCPSock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP); if (TCPSock == -1) { printf("Client: socket failed! Error code: %d\n", WSAGetLastError()); @@ -142,9 +142,9 @@ void TCPClientMain(const std::string& IP, int Port) { return; } - ServerAddr.sin_family = AF_INET; + ServerAddr.sin_family = AF_UNSPEC; ServerAddr.sin_port = htons(Port); - inet_pton(AF_INET, IP.c_str(), &ServerAddr.sin_addr); + inet_pton(AF_UNSPEC, IP.c_str(), &ServerAddr.sin_addr); RetCode = connect(TCPSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)); if (RetCode != 0) { UlStatus = "UlConnection Failed!";