diff win32/ws2tcpip.d @ 1:4a9dcbd9e54f

-files of 0.13 beta -fixes so that it now compiles with the current dmd version
author marton@basel.hu
date Tue, 05 Apr 2011 20:44:01 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/win32/ws2tcpip.d	Tue Apr 05 20:44:01 2011 +0200
@@ -0,0 +1,281 @@
+/***********************************************************************\
+*                              ws2tcpip.d                               *
+*                                                                       *
+*                       Windows API header module                       *
+*                                                                       *
+*                 Translated from MinGW Windows headers                 *
+*                                                                       *
+*                       Placed into public domain                       *
+\***********************************************************************/
+
+module win32.ws2tcpip;
+
+import win32.w32api;
+//import win32.winbase;
+import win32.windef;
+//import win32.basetyps;
+import win32.winsock2;
+
+enum {
+	IP_OPTIONS					= 1,
+
+	IP_HDRINCL					= 2,
+	IP_TOS						= 3,
+	IP_TTL						= 4,
+	IP_MULTICAST_IF				= 9,
+	IP_MULTICAST_TTL			= 10,
+	IP_MULTICAST_LOOP			= 11,
+	IP_ADD_MEMBERSHIP			= 12,
+	IP_DROP_MEMBERSHIP			= 13,
+	IP_DONTFRAGMENT				= 14,
+	IP_ADD_SOURCE_MEMBERSHIP	= 15,
+	IP_DROP_SOURCE_MEMBERSHIP	= 16,
+	IP_BLOCK_SOURCE				= 17,
+	IP_UNBLOCK_SOURCE			= 18,
+	IP_PKTINFO					= 19
+}	
+
+enum {
+	IPV6_UNICAST_HOPS		= 4,
+	IPV6_MULTICAST_IF		= 9,
+	IPV6_MULTICAST_HOPS		= 10,
+	IPV6_MULTICAST_LOOP		= 11,
+	IPV6_ADD_MEMBERSHIP		= 12,
+	IPV6_DROP_MEMBERSHIP	= 13,
+	IPV6_JOIN_GROUP			= IPV6_ADD_MEMBERSHIP,
+	IPV6_LEAVE_GROUP		= IPV6_DROP_MEMBERSHIP,
+	IPV6_PKTINFO			= 19
+}
+
+const IP_DEFAULT_MULTICAST_TTL = 1;
+const IP_DEFAULT_MULTICAST_LOOP = 1;
+const IP_MAX_MEMBERSHIPS = 20;
+
+const TCP_EXPEDITED_1122 = 2;
+
+const UDP_NOCHECKSUM = 1;
+
+enum {
+	IFF_UP				= 1,
+	IFF_BROADCAST		= 2,
+	IFF_LOOPBACK		= 4,
+	IFF_POINTTOPOINT	= 8,
+	IFF_MULTICAST		= 16
+}
+
+const SIO_GET_INTERFACE_LIST = _IOR!('t', 127, u_long);
+
+const INET_ADDRSTRLEN	= 16;
+const INET6_ADDRSTRLEN	= 46;
+
+const NI_MAXHOST	= 1025;
+const NI_MAXSERV	= 32;
+
+const NI_NOFQDN			= 0x01;
+const NI_NUMERICHOST	= 0x02;
+const NI_NAMEREQD		= 0x04;
+const NI_NUMERICSERV	= 0x08;
+const NI_DGRAM			= 0x10;
+
+const AI_PASSIVE		= 1;
+const AI_CANONNAME		= 2;
+const AI_NUMERICHOST	= 4;
+
+const EAI_AGAIN		= WSATRY_AGAIN;
+const EAI_BADFLAGS	= WSAEINVAL;
+const EAI_FAIL		= WSANO_RECOVERY;
+const EAI_FAMILY	= WSAEAFNOSUPPORT;
+const EAI_MEMORY	= WSA_NOT_ENOUGH_MEMORY;
+const EAI_NODATA	= WSANO_DATA;
+const EAI_NONAME	= WSAHOST_NOT_FOUND;
+const EAI_SERVICE	= WSATYPE_NOT_FOUND;
+const EAI_SOCKTYPE	= WSAESOCKTNOSUPPORT;
+
+struct ip_mreq {
+	IN_ADDR imr_multiaddr;
+	IN_ADDR imr_interface;
+}
+
+struct ip_mreq_source {
+	IN_ADDR imr_multiaddr;
+	IN_ADDR imr_sourceaddr;
+	IN_ADDR imr_interface;
+}
+
+struct ip_msfilter {
+	IN_ADDR		imsf_multiaddr;
+	IN_ADDR		imsf_interface;
+	u_long		imsf_fmode;
+	u_long		imsf_numsrc;
+	IN_ADDR[1]	imsf_slist;
+}
+
+template IP_MSFILTER_SIZE(ULONG numsrc) {
+	const DWORD IP_MSFILTER_SIZE = ip_msfilter.sizeof - IN_ADDR.sizeof + numsrc * IN_ADDR.sizeof;
+}
+
+struct IN_PKTINFO {
+	IN_ADDR	ipi_addr;
+	UINT	ipi_ifindex;
+}
+
+struct IN6_ADDR {
+	union {
+		u_char[16]	_S6_u8;
+		u_short[8]	_S6_u16;
+		u_long[4]	_S6_u32;
+	}
+}
+alias IN6_ADDR* PIN6_ADDR, LPIN6_ADDR;
+
+struct SOCKADDR_IN6 {
+	short sin6_family;
+	u_short sin6_port;
+	u_long sin6_flowinfo;
+	IN6_ADDR sin6_addr;
+	u_long sin6_scope_id;
+};
+alias SOCKADDR_IN6* PSOCKADDR_IN6, LPSOCKADDR_IN6;
+
+extern IN6_ADDR in6addr_any;
+extern IN6_ADDR in6addr_loopback;
+
+/+ TODO: 
+#define IN6_ARE_ADDR_EQUAL(a, b)	\
+    (memcmp ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0)
+
+#define IN6_IS_ADDR_UNSPECIFIED(_addr) \
+	(   (((const u_long *)(_addr))[0] == 0)	\
+	 && (((const u_long *)(_addr))[1] == 0)	\
+	 && (((const u_long *)(_addr))[2] == 0)	\
+	 && (((const u_long *)(_addr))[3] == 0))
+
+#define IN6_IS_ADDR_LOOPBACK(_addr) \
+	(   (((const u_long *)(_addr))[0] == 0)	\
+	 && (((const u_long *)(_addr))[1] == 0)	\
+	 && (((const u_long *)(_addr))[2] == 0)	\
+	 && (((const u_long *)(_addr))[3] == 0x01000000))
+
+#define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] == 0xff)
+
+#define IN6_IS_ADDR_LINKLOCAL(_addr) \
+	(   (((const u_char *)(_addr))[0] == 0xfe)	\
+	 && ((((const u_char *)(_addr))[1] & 0xc0) == 0x80))
+
+#define IN6_IS_ADDR_SITELOCAL(_addr) \
+	(   (((const u_char *)(_addr))[0] == 0xfe)	\
+	 && ((((const u_char *)(_addr))[1] & 0xc0) == 0xc0))
+
+#define IN6_IS_ADDR_V4MAPPED(_addr) \
+	(   (((const u_long *)(_addr))[0] == 0)		\
+	 && (((const u_long *)(_addr))[1] == 0)		\
+	 && (((const u_long *)(_addr))[2] == 0xffff0000))
+
+#define IN6_IS_ADDR_V4COMPAT(_addr) \
+	(   (((const u_long *)(_addr))[0] == 0)		\
+	 && (((const u_long *)(_addr))[1] == 0)		\
+	 && (((const u_long *)(_addr))[2] == 0)		\
+	 && (((const u_long *)(_addr))[3] != 0)		\
+	 && (((const u_long *)(_addr))[3] != 0x01000000))
+
+#define IN6_IS_ADDR_MC_NODELOCAL(_addr)	\
+	(   IN6_IS_ADDR_MULTICAST(_addr)		\
+	 && ((((const u_char *)(_addr))[1] & 0xf) == 0x1)) 
+
+#define IN6_IS_ADDR_MC_LINKLOCAL(_addr)	\
+	(   IN6_IS_ADDR_MULTICAST (_addr)		\
+	 && ((((const u_char *)(_addr))[1] & 0xf) == 0x2))
+
+#define IN6_IS_ADDR_MC_SITELOCAL(_addr)	\
+	(   IN6_IS_ADDR_MULTICAST(_addr)		\
+	 && ((((const u_char *)(_addr))[1] & 0xf) == 0x5))
+
+#define IN6_IS_ADDR_MC_ORGLOCAL(_addr)	\
+	(   IN6_IS_ADDR_MULTICAST(_addr)		\
+	 && ((((const u_char *)(_addr))[1] & 0xf) == 0x8))
+
+#define IN6_IS_ADDR_MC_GLOBAL(_addr)	\
+	(   IN6_IS_ADDR_MULTICAST(_addr)	\
+	 && ((((const u_char *)(_addr))[1] & 0xf) == 0xe))
++/
+
+alias int socklen_t;
+
+struct IPV6_MREG {
+	IN6_ADDR	ipv6mr_multiaddr;
+	uint		ipv6mr_interface;
+}
+
+struct IN6_PKTINFO {
+	IN6_ADDR	ipi6_addr;
+	UINT		ipi6_ifindex;
+}
+
+struct addrinfo {
+	int			ai_flags;
+	int			ai_family;
+	int			ai_socktype;
+	int			ai_protocol;
+	size_t		ai_addrlen;
+	char*		ai_canonname;
+	SOCKADDR*	ai_addr;
+	addrinfo*	ai_next;
+}
+
+extern(Windows) {
+	static if (_WIN32_WINNT >= 0x0501) {
+		void freeaddrinfo(addrinfo*);
+		int getaddrinfo (char*, char*, addrinfo*, addrinfo**);
+		int getnameinfo(SOCKADDR*, socklen_t, char*, DWORD, char*, DWORD, int);
+	}
+}
+
+/+ TODO
+static __inline char*
+gai_strerrorA(int ecode)
+{
+	static char message[1024+1];
+	DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
+	              | FORMAT_MESSAGE_IGNORE_INSERTS
+		      | FORMAT_MESSAGE_MAX_WIDTH_MASK;
+	DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
+  	FormatMessageA(dwFlags, NULL, ecode, dwLanguageId, (LPSTR)message, 1024, NULL);
+	return message;
+}
+static __inline WCHAR*
+gai_strerrorW(int ecode)
+{
+	static WCHAR message[1024+1];
+	DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
+	              | FORMAT_MESSAGE_IGNORE_INSERTS
+		      | FORMAT_MESSAGE_MAX_WIDTH_MASK;
+	DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
+  	FormatMessageW(dwFlags, NULL, ecode, dwLanguageId, (LPWSTR)message, 1024, NULL);
+	return message;
+}
+#ifdef UNICODE
+#define gai_strerror gai_strerrorW
+#else
+#define gai_strerror gai_strerrorA
+#endif
++/
+
+extern(Windows) {
+	INT getnameinfo(SOCKADDR* pSockaddr, socklen_t SockaddrLength,
+		PCHAR pNodeBuffer, DWORD NodeBufferSize, PCHAR pServiceBuffer,
+		DWORD ServiceBufferSize, INT Flags);
+
+	static if (_WIN32_WINNT >= 0x0502) {
+		INT GetNameInfoW(SOCKADDR* pSockaddr, socklen_t SockaddrLength,
+			PWCHAR pNodeBuffer, DWORD NodeBufferSize, PWCHAR pServiceBuffer,
+			DWORD ServiceBufferSize, INT Flags);
+
+		alias getnameinfo GetNameInfoA;
+
+		version(Unicode) {
+			alias GetNameInfoW GetNameInfo;
+		} else {
+			alias GetNameInfoA GetNameInfo;
+		}
+	}
+}