From c3ffd221de8438971971d8562fa93860d29dbdd2 Mon Sep 17 00:00:00 2001 From: Gator96100 Date: Thu, 3 Sep 2015 19:49:14 +0200 Subject: [PATCH] Added support for hostnames --- src/network/network.cpp | 16 +++++++++++++++- src/network/network.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 57523bfd8f..47532eb651 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -314,7 +314,7 @@ bool Network::BeginClient(const char* host, unsigned short port) SOCKADDR_IN server_address; server_address.sin_family = AF_INET; - server_address.sin_addr.S_un.S_addr = inet_addr(host); + server_address.sin_addr.S_un.S_addr = inet_addr(network_getAddress((char *)host)); server_address.sin_port = htons(port); if (connect(server_socket, (SOCKADDR*)&server_address, sizeof(SOCKADDR_IN)) != 0) { @@ -1047,6 +1047,20 @@ void network_send_gamecmd(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 } } +static char *network_getAddress(char *host) +{ + struct hostent *remoteHost; + struct in_addr addr; + + remoteHost = gethostbyname(host); + if (remoteHost != NULL && remoteHost->h_addrtype == AF_INET && remoteHost->h_addr_list[0] != 0) { + addr.s_addr = *(u_long *)remoteHost->h_addr_list[0]; + return inet_ntoa(addr); + } + + return host; +} + #else int network_get_mode() { return NETWORK_MODE_NONE; } uint32 network_get_server_tick() { return RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32); } diff --git a/src/network/network.h b/src/network/network.h index bd7015897f..c7dcdeca50 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -241,6 +241,7 @@ void network_send_chat(const char* text); void network_send_gamecmd(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 esi, uint32 edi, uint32 ebp, uint8 callback); void network_print_error(); +static char *network_getAddress(char *host); #ifdef __cplusplus }