Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion include/linuxfixes.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define SOCKET uint64_t
#define SOCKADDR sockaddr
#define SOCKADDR_IN sockaddr_in
#define SOCKADDR_IN6 sockaddr_in6
#define WSAGetLastError() errno
#define closesocket close
#define SD_BOTH SHUT_RDWR
Expand All @@ -22,4 +23,4 @@

#define ZeroMemory(mem, len) memset(mem, 0, len)

#endif
#endif
20 changes: 10 additions & 10 deletions src/Network/Core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ bool SecurityWarning() {
}

void StartSync(const std::string& Data) {
std::string IP = GetAddr(Data.substr(1, Data.find(':') - 1));
if (IP.find('.') == -1) {
std::string IP = GetAddr(Data.substr(1, Data.find_last_of(':') - 1));
if (IP.find(':') == -1) {
if (IP == "DNS")
UlStatus = "UlConnection Failed! (DNS Lookup Failed)";
else
Expand All @@ -86,16 +86,16 @@ void StartSync(const std::string& Data) {
Terminate = false;
ConfList->clear();
ping = -1;
std::thread GS(TCPGameServer, IP, std::stoi(Data.substr(Data.find(':') + 1)));
std::thread GS(TCPGameServer, IP, std::stoi(Data.substr(Data.find_last_of(':') + 1)));
GS.detach();
info("Connecting to server");
}

void GetServerInfo(std::string Data) {
debug("Fetching server info of " + Data.substr(1));

std::string IP = GetAddr(Data.substr(1, Data.find(':') - 1));
if (IP.find('.') == -1) {
std::string IP = GetAddr(Data.substr(1, Data.find_last_of(':') - 1));
if (IP.find(':') == -1) {
if (IP == "DNS")
warn("Connection Failed! (DNS Lookup Failed) for " + Data);
else
Expand All @@ -104,15 +104,15 @@ void GetServerInfo(std::string Data) {
return;
}

SOCKET ISock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN ServerAddr;
SOCKET ISock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN6 ServerAddr;
if (ISock < 1) {
debug("Socket creation failed with error: " + std::to_string(WSAGetLastError()));
KillSocket(ISock);
CoreSend("I" + Data + ";");
return;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin6_family = AF_INET6;

int port = std::stoi(Data.substr(Data.find(':') + 1));

Expand All @@ -123,8 +123,8 @@ void GetServerInfo(std::string Data) {
return;
}

ServerAddr.sin_port = htons(port);
inet_pton(AF_INET, IP.c_str(), &ServerAddr.sin_addr);
ServerAddr.sin6_port = htons(port);
inet_pton(AF_INET6, IP.c_str(), &ServerAddr.sin6_addr);
if (connect(ISock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) != 0) {
debug("Connection to server failed with error: " + std::to_string(WSAGetLastError()));
KillSocket(ISock);
Expand Down
18 changes: 11 additions & 7 deletions src/Network/DNS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#if defined(_WIN32)
#include <winsock2.h>
#include <ws2tcpip.h>
#elif defined(__linux__)
#include "linuxfixes.h"
#include <arpa/inet.h>
Expand All @@ -18,9 +19,8 @@
#include "Logger.h"

std::string GetAddr(const std::string& IP) {
if (IP.find_first_not_of("0123456789.") == -1)
return IP;
hostent* host;
struct addrinfo* res = nullptr;
struct addrinfo hints {0};
#ifdef _WIN32
WSADATA wsaData;
if (WSAStartup(514, &wsaData) != 0) {
Expand All @@ -30,13 +30,17 @@ std::string GetAddr(const std::string& IP) {
}
#endif

host = gethostbyname(IP.c_str());
if (!host) {
hints.ai_family = AF_INET6;
hints.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG;
if (getaddrinfo(IP.c_str(), NULL, &hints, &res) != 0) {
error("DNS lookup failed! on " + IP);
WSACleanup();
return "DNS";
}
std::string Ret = inet_ntoa(*((struct in_addr*)host->h_addr));
char ipstr[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, ipstr, sizeof(ipstr));
std::string Ret = ipstr;
freeaddrinfo(res);
WSACleanup();
return Ret;
}
}
2 changes: 1 addition & 1 deletion src/Network/GlobalHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ SOCKET SetupListener() {
#endif

ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
Expand Down
10 changes: 5 additions & 5 deletions src/Network/Resources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,16 +197,16 @@ void MultiKill(SOCKET Sock, SOCKET Sock1) {
Terminate = true;
}
SOCKET InitDSock() {
SOCKET DSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN ServerAddr;
SOCKET DSock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN6 ServerAddr;
if (DSock < 1) {
KillSocket(DSock);
Terminate = true;
return 0;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(LastPort);
inet_pton(AF_INET, LastIP.c_str(), &ServerAddr.sin_addr);
ServerAddr.sin6_family = AF_INET6;
ServerAddr.sin6_port = htons(LastPort);
inet_pton(AF_INET6, LastIP.c_str(), &ServerAddr.sin6_addr);
if (connect(DSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr)) != 0) {
KillSocket(DSock);
Terminate = true;
Expand Down
14 changes: 7 additions & 7 deletions src/Network/VehicleData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <string>

SOCKET UDPSock = -1;
sockaddr_in* ToServer = nullptr;
sockaddr_in6* ToServer = nullptr;

void UDPSend(std::string Data) {
if (ClientID == -1 || UDPSock == -1)
Expand Down Expand Up @@ -62,7 +62,7 @@ void UDPParser(std::string_view Packet) {
}
}
void UDPRcv() {
sockaddr_in FromServer {};
sockaddr_in6 FromServer {};
#if defined(_WIN32)
int clientLength = sizeof(FromServer);
#elif defined(__linux__)
Expand All @@ -88,11 +88,11 @@ void UDPClientMain(const std::string& IP, int Port) {
#endif

delete ToServer;
ToServer = new sockaddr_in;
ToServer->sin_family = AF_INET;
ToServer->sin_port = htons(Port);
inet_pton(AF_INET, IP.c_str(), &ToServer->sin_addr);
UDPSock = socket(AF_INET, SOCK_DGRAM, 0);
ToServer = new sockaddr_in6;
ToServer->sin6_family = AF_INET6;
ToServer->sin6_port = htons(Port);
inet_pton(AF_INET6, IP.c_str(), &ToServer->sin6_addr);
UDPSock = socket(AF_INET6, SOCK_DGRAM, 0);
if (!magic.empty())
for (int i = 0; i < 10; i++)
UDPSend(magic);
Expand Down
10 changes: 5 additions & 5 deletions src/Network/VehicleEvent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,23 +151,23 @@ std::string TCPRcv(SOCKET Sock) {
void TCPClientMain(const std::string& IP, int Port) {
LastIP = IP;
LastPort = Port;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN6 ServerAddr;
int RetCode;
#ifdef _WIN32
WSADATA wsaData;
WSAStartup(514, &wsaData); // 2.2
#endif
TCPSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
TCPSock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);

if (TCPSock == -1) {
printf("Client: socket failed! Error code: %d\n", WSAGetLastError());
WSACleanup();
return;
}

ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
inet_pton(AF_INET, IP.c_str(), &ServerAddr.sin_addr);
ServerAddr.sin6_family = AF_INET6;
ServerAddr.sin6_port = htons(Port);
inet_pton(AF_INET6, IP.c_str(), &ServerAddr.sin6_addr);
RetCode = connect(TCPSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr));
if (RetCode != 0) {
UlStatus = "UlConnection Failed!";
Expand Down
Loading