| /** |
| * D header file for POSIX. |
| * |
| * Copyright: Copyright Sean Kelly 2005 - 2009. |
| * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). |
| * Authors: Sean Kelly |
| * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition |
| */ |
| |
| /* Copyright Sean Kelly 2005 - 2009. |
| * Distributed under the Boost Software License, Version 1.0. |
| * (See accompanying file LICENSE or copy at |
| * http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| module core.sys.posix.arpa.inet; |
| |
| import core.sys.posix.config; |
| public import core.stdc.inttypes; // for uint32_t, uint16_t |
| public import core.sys.posix.sys.socket; // for socklen_t |
| |
| version (OSX) |
| version = Darwin; |
| else version (iOS) |
| version = Darwin; |
| else version (TVOS) |
| version = Darwin; |
| else version (WatchOS) |
| version = Darwin; |
| |
| version (Posix): |
| extern (C) nothrow @nogc: |
| |
| // |
| // Required |
| // |
| /* |
| NOTE: The following must must be defined in core.sys.posix.arpa.inet to break |
| a circular import: in_port_t, in_addr_t, struct in_addr, INET_ADDRSTRLEN. |
| |
| in_port_t // from core.sys.posix.netinet.in_ |
| in_addr_t // from core.sys.posix.netinet.in_ |
| |
| struct in_addr // from core.sys.posix.netinet.in_ |
| INET_ADDRSTRLEN // from core.sys.posix.netinet.in_ |
| |
| uint32_t // from core.stdc.inttypes |
| uint16_t // from core.stdc.inttypes |
| |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| // per spec: const char* inet_ntop(int, const void*, char*, socklen_t); |
| char* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| */ |
| |
| version (CRuntime_Glibc) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (Darwin) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (FreeBSD) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (NetBSD) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (OpenBSD) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @safe pure extern (D) |
| { |
| version (BigEndian) |
| { |
| uint32_t htonl(uint32_t x) { return x; } |
| uint16_t htons(uint16_t x) { return x; } |
| } |
| else |
| { |
| import core.bitop : bswap, byteswap; |
| |
| uint32_t htonl(uint32_t x) { return bswap(x); } |
| uint16_t htons(uint16_t x) { return byteswap(x); } |
| } |
| alias ntohl = htonl; |
| alias ntohs = htons; |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (DragonFlyBSD) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (Solaris) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (CRuntime_Bionic) |
| { |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @safe pure extern (D) |
| { |
| version (BigEndian) |
| { |
| uint32_t htonl(uint32_t x) { return x; } |
| uint16_t htons(uint16_t x) { return x; } |
| } |
| else |
| { |
| import core.bitop : bswap, byteswap; |
| |
| uint32_t htonl(uint32_t x) { return bswap(x); } |
| uint16_t htons(uint16_t x) { return byteswap(x); } |
| } |
| alias ntohl = htonl; |
| alias ntohs = htons; |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, size_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (CRuntime_Musl) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| else version (CRuntime_UClibc) |
| { |
| alias uint16_t in_port_t; |
| alias uint32_t in_addr_t; |
| |
| struct in_addr |
| { |
| in_addr_t s_addr; |
| } |
| |
| @trusted pure |
| { |
| uint32_t htonl(uint32_t); |
| uint16_t htons(uint16_t); |
| uint32_t ntohl(uint32_t); |
| uint16_t ntohs(uint16_t); |
| } |
| |
| in_addr_t inet_addr(const scope char*); |
| char* inet_ntoa(in_addr); |
| const(char)* inet_ntop(int, const scope void*, char*, socklen_t); |
| int inet_pton(int, const scope char*, void*); |
| } |
| |
| /* |
| NOTE: The following must must be defined in core.sys.posix.arpa.inet to break |
| a circular import: INET6_ADDRSTRLEN. |
| |
| INET6_ADDRSTRLEN // from core.sys.posix.netinet.in_ |
| */ |
| |
| enum INET_ADDRSTRLEN = 16; |
| enum INET6_ADDRSTRLEN = 46; |