diff options
Diffstat (limited to 'indra/llmessage')
-rw-r--r-- | indra/llmessage/llhost.cpp | 2 | ||||
-rw-r--r-- | indra/llmessage/net.cpp | 22 | ||||
-rw-r--r-- | indra/llmessage/net.h | 1 |
3 files changed, 20 insertions, 5 deletions
diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp index 8e9e23393d..238cf3e12b 100644 --- a/indra/llmessage/llhost.cpp +++ b/indra/llmessage/llhost.cpp @@ -124,7 +124,7 @@ BOOL LLHost::setHostByName(const std::string& hostname) he = gethostbyname(local_name.c_str()); if(!he) { - U32 ip_address = inet_addr(hostname.c_str()); + U32 ip_address = ip_string_to_u32(hostname.c_str()); he = gethostbyaddr((char *)&ip_address, sizeof(ip_address), AF_INET); } diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp index f63faa511a..cc93b2bf8e 100644 --- a/indra/llmessage/net.cpp +++ b/indra/llmessage/net.cpp @@ -83,6 +83,7 @@ typedef int socklen_t; static U32 gsnReceivingIFAddr = INVALID_HOST_IP_ADDRESS; // Address to which datagram was sent const char* LOOPBACK_ADDRESS_STRING = "127.0.0.1"; +const char* BROADCAST_ADDRESS_STRING = "255.255.255.255"; #if LL_DARWIN // Mac OS X returns an error when trying to set these to 400000. Smaller values succeed. @@ -170,7 +171,21 @@ char *u32_to_ip_string(U32 ip, char *ip_string) // Wrapper for inet_addr() U32 ip_string_to_u32(const char* ip_string) { - return inet_addr(ip_string); + // *NOTE: Windows doesn't support inet_aton(), so we are using + // inet_addr(). Unfortunately, INADDR_NONE == INADDR_BROADCAST, so + // we have to check whether the input is a broadcast address before + // deciding that @ip_string is invalid. + // + // Also, our definition of INVALID_HOST_IP_ADDRESS doesn't allow us to + // use wildcard addresses. -Ambroff + U32 ip = inet_addr(ip_string); + if (ip == INADDR_NONE + && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0) + { + llwarns << "ip_string_to_u32() failed, Error: Invalid IP string '" << ip_string << "'" << llendl; + return INVALID_HOST_IP_ADDRESS; + } + return ip; } @@ -293,9 +308,8 @@ S32 start_net(S32& socket_out, int& nPort) LL_DEBUGS("AppInit") << "startNet - send buffer size : " << snd_size << LL_ENDL; // Setup a destination address - char achMCAddr[MAXADDRSTR] = " "; /* Flawfinder: ignore */ stDstAddr.sin_family = AF_INET; - stDstAddr.sin_addr.s_addr = inet_addr(achMCAddr); + stDstAddr.sin_addr.s_addr = INVALID_HOST_IP_ADDRESS; stDstAddr.sin_port = htons(nPort); socket_out = hSocket; @@ -502,7 +516,7 @@ S32 start_net(S32& socket_out, int& nPort) // Setup a destination address char achMCAddr[MAXADDRSTR] = "127.0.0.1"; /* Flawfinder: ignore */ stDstAddr.sin_family = AF_INET; - stDstAddr.sin_addr.s_addr = inet_addr(achMCAddr); + stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr); stDstAddr.sin_port = htons(nPort); socket_out = hSocket; diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h index 45b07a0ab8..f86e1f0a53 100644 --- a/indra/llmessage/net.h +++ b/indra/llmessage/net.h @@ -63,6 +63,7 @@ char* u32_to_ip_string(U32 ip, char *ip_string); // NULL on failure, ip_string U32 ip_string_to_u32(const char* ip_string); // Wrapper for inet_addr() extern const char* LOOPBACK_ADDRESS_STRING; +extern const char* BROADCAST_ADDRESS_STRING; // useful MTU consts |