Skip to content
Snippets Groups Projects
Commit db8bb221 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

parseIPv4Address() and IPv4AddresstoStr() now return/accept network byte order

Since that's the most used/assumed byte order for IP addresses, let's make
that the default and eliminate a lot of unnecessary byte-swapping.

This fixes the issue reported by Keyop in IRC, introduced in commit 29b93c32
parent 8fdf0405
No related branches found
No related tags found
No related merge requests found
Pipeline #8288 passed
......@@ -52,7 +52,7 @@ int sbbs_t::exec_net(csi_t* csi)
SOCKADDR_IN addr;
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr);
addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET;
if ((i = bind(sock, (struct sockaddr *) &addr, sizeof (addr))) != 0) {
......@@ -538,7 +538,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr)
}
memset(addr, 0, sizeof(SOCKADDR_IN));
addr->sin_addr.s_addr = htonl(startup->outgoing4.s_addr);
addr->sin_addr.s_addr = startup->outgoing4.s_addr;
addr->sin_family = AF_INET;
if (bind(data_sock, (struct sockaddr *)addr, xp_sockaddr_len(addr)) != 0) {
......
......@@ -5308,7 +5308,7 @@ static BOOL sendmail_open_socket(SOCKET *sock, CRYPT_SESSION *session)
}
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr);
addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET;
i = bind(*sock, (struct sockaddr *)&addr, sizeof(addr));
......
......@@ -273,7 +273,7 @@ bool sbbs_t::telnet_gate(char* destaddr, uint mode, unsigned timeout, str_list_t
}
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(startup->outgoing4.s_addr);
addr.sin_addr.s_addr = startup->outgoing4.s_addr;
addr.sin_family = AF_INET;
if ((i = bind(remote_socket, (struct sockaddr *) &addr, sizeof (addr))) != 0) {
......
......@@ -110,6 +110,7 @@ void freeNameServerList(str_list_t list)
}
// If the input is invalid, INADDR_NONE (usually -1) is returned
// The return value is in *network* (not host) byte order
uint32_t parseIPv4Address(const char* value)
{
uint32_t result = 0;
......@@ -123,7 +124,7 @@ uint32_t parseIPv4Address(const char* value)
if (inet_pton(AF_INET, value, &result) != 1)
result = INADDR_NONE;
#endif
return ntohl(result);
return result;
}
struct in6_addr parseIPv6Address(const char* value)
......@@ -149,6 +150,7 @@ struct in6_addr parseIPv6Address(const char* value)
return ret;
}
// 'addr' must be in network byte order
const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
{
#if defined _WIN32
......@@ -156,7 +158,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
WSADATA wsaData;
SOCKADDR_IN sockaddr = {0};
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(addr);
sockaddr.sin_addr.s_addr = addr;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
return NULL;
......@@ -167,7 +169,7 @@ const char* IPv4AddressToStr(uint32_t addr, char* dest, size_t size)
return dest;
#else
struct in_addr in_addr;
in_addr.s_addr = htonl(addr);
in_addr.s_addr = addr;
return inet_ntop(AF_INET, &in_addr, dest, size);
#endif
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment