diff --git a/include/psdk/mswsock.h b/include/psdk/mswsock.h index 988fb9febb7..abbcb60a9e8 100644 --- a/include/psdk/mswsock.h +++ b/include/psdk/mswsock.h @@ -299,7 +299,7 @@ WSARecvEx( OUT char FAR *buf, IN int len, IN OUT int FAR *flags); -#else //(_WIN32_WINNT < 0x0600) +#else INT PASCAL FAR @@ -308,7 +308,7 @@ WSARecvEx( OUT CHAR FAR *buf, IN INT len, IN OUT INT FAR *flags); -#endif //(_WIN32_WINNT < 0x0600) +#endif /* (_WIN32_WINNT < 0x0600) */ BOOL PASCAL diff --git a/include/psdk/winsock.h b/include/psdk/winsock.h index 7d4bf5c45a9..cca60cc078e 100644 --- a/include/psdk/winsock.h +++ b/include/psdk/winsock.h @@ -314,38 +314,9 @@ int PASCAL gethostname(char*,int); #define INADDR_BROADCAST (u_long)0xffffffff #define INADDR_NONE 0xffffffff -struct sockaddr_in { - short sin_family; - u_short sin_port; - struct in_addr sin_addr; - char sin_zero[8]; -}; - #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 -typedef struct WSAData { - WORD wVersion; - WORD wHighVersion; -#ifdef _WIN64 - unsigned short iMaxSockets; - unsigned short iMaxUdpDg; - char *lpVendorInfo; - char szDescription[WSADESCRIPTION_LEN+1]; - char szSystemStatus[WSASYS_STATUS_LEN+1]; -#else - char szDescription[WSADESCRIPTION_LEN+1]; - char szSystemStatus[WSASYS_STATUS_LEN+1]; - unsigned short iMaxSockets; - unsigned short iMaxUdpDg; - char *lpVendorInfo; -} WSADATA, FAR *LPWSADATA; - -/* - * Note that the next 5 IP defines are specific to WinSock 1.1 (wsock32.dll). - * They will cause errors or unexpected results if used with the - * (gs)etsockopts exported from the WinSock 2 lib, ws2_32.dll. Refer ws2tcpip.h. - */ #define IP_MULTICAST_IF 2 #define IP_MULTICAST_TTL 3 #define IP_MULTICAST_LOOP 4 @@ -359,11 +330,6 @@ typedef struct WSAData { #define IP_DEFAULT_MULTICAST_LOOP 1 #define IP_MAX_MEMBERSHIPS 20 -struct ip_mreq { - struct in_addr imr_multiaddr; - struct in_addr imr_interface; -}; - #define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1) @@ -403,11 +369,6 @@ struct ip_mreq { #define AF_ATM 22 #define AF_INET6 23 -struct sockproto { - u_short sp_family; - u_short sp_protocol; -}; - #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET @@ -510,6 +471,79 @@ struct sockproto { #define WSANO_ADDRESS WSANO_DATA +#define TF_DISCONNECT 0x01 +#define TF_REUSE_SOCKET 0x02 +#define TF_WRITE_BEHIND 0x04 + +#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e) +#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error) +#define WSAGETASYNCBUFLEN(l) LOWORD(l) +#define WSAGETASYNCERROR(l) HIWORD(l) +#define WSAGETSELECTEVENT(l) LOWORD(l) +#define WSAGETSELECTERROR(l) HIWORD(l) + +typedef struct sockaddr SOCKADDR; +typedef struct sockaddr *PSOCKADDR; +typedef struct sockaddr *LPSOCKADDR; +typedef struct sockaddr_in SOCKADDR_IN; +typedef struct sockaddr_in *PSOCKADDR_IN; +typedef struct sockaddr_in *LPSOCKADDR_IN; +typedef struct linger LINGER; +typedef struct linger *PLINGER; +typedef struct linger *LPLINGER; +typedef struct in_addr IN_ADDR; +typedef struct in_addr *PIN_ADDR; +typedef struct in_addr *LPIN_ADDR; +typedef struct fd_set FD_SET; +typedef struct fd_set *PFD_SET; +typedef struct fd_set *LPFD_SET; +typedef struct hostent HOSTENT; +typedef struct hostent *PHOSTENT; +typedef struct hostent *LPHOSTENT; +typedef struct servent SERVENT; +typedef struct servent *PSERVENT; +typedef struct servent *LPSERVENT; +typedef struct protoent PROTOENT; +typedef struct protoent *PPROTOENT; +typedef struct protoent *LPPROTOENT; +typedef struct timeval TIMEVAL; +typedef struct timeval *PTIMEVAL; +typedef struct timeval *LPTIMEVAL; + +struct sockaddr_in { + short sin_family; + u_short sin_port; + struct in_addr sin_addr; + char sin_zero[8]; +}; + +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; +#ifdef _WIN64 + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char *lpVendorInfo; + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; +#else + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char *lpVendorInfo; +} WSADATA, FAR *LPWSADATA; + +struct ip_mreq { + struct in_addr imr_multiaddr; + struct in_addr imr_interface; +}; + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +}; + SOCKET PASCAL FAR accept( @@ -831,10 +865,6 @@ typedef struct _TRANSMIT_FILE_BUFFERS { DWORD TailLength; } TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; -#define TF_DISCONNECT 0x01 -#define TF_REUSE_SOCKET 0x02 -#define TF_WRITE_BEHIND 0x04 - BOOL PASCAL FAR TransmitFile( @@ -870,41 +900,6 @@ GetAcceptExSockaddrs( OUT struct sockaddr **RemoteSockaddr, OUT LPINT RemoteSockaddrLength); -#define WSAMAKEASYNCREPLY(b,e) MAKELONG(b,e) -#define WSAMAKESELECTREPLY(e,error) MAKELONG(e,error) -#define WSAGETASYNCBUFLEN(l) LOWORD(l) -#define WSAGETASYNCERROR(l) HIWORD(l) -#define WSAGETSELECTEVENT(l) LOWORD(l) -#define WSAGETSELECTERROR(l) HIWORD(l) - -typedef struct sockaddr SOCKADDR; -typedef struct sockaddr *PSOCKADDR; -typedef struct sockaddr *LPSOCKADDR; -typedef struct sockaddr_in SOCKADDR_IN; -typedef struct sockaddr_in *PSOCKADDR_IN; -typedef struct sockaddr_in *LPSOCKADDR_IN; -typedef struct linger LINGER; -typedef struct linger *PLINGER; -typedef struct linger *LPLINGER; -typedef struct in_addr IN_ADDR; -typedef struct in_addr *PIN_ADDR; -typedef struct in_addr *LPIN_ADDR; -typedef struct fd_set FD_SET; -typedef struct fd_set *PFD_SET; -typedef struct fd_set *LPFD_SET; -typedef struct hostent HOSTENT; -typedef struct hostent *PHOSTENT; -typedef struct hostent *LPHOSTENT; -typedef struct servent SERVENT; -typedef struct servent *PSERVENT; -typedef struct servent *LPSERVENT; -typedef struct protoent PROTOENT; -typedef struct protoent *PPROTOENT; -typedef struct protoent *LPPROTOENT; -typedef struct timeval TIMEVAL; -typedef struct timeval *PTIMEVAL; -typedef struct timeval *LPTIMEVAL; - #if(_WIN32_WINNT >= 0x0501) #ifdef IPV6STRICT diff --git a/include/psdk/winsock2.h b/include/psdk/winsock2.h index 0c68281e331..23e01e19809 100644 --- a/include/psdk/winsock2.h +++ b/include/psdk/winsock2.h @@ -270,47 +270,11 @@ struct protoent { #define IMPLINK_LOWEXPER 156 #define IMPLINK_HIGHEXPER 158 -#ifndef s_addr - -#define s_addr S_un.S_addr -#define s_host S_un.S_un_b.s_b2 -#define s_net S_un.S_un_b.s_b1 -#define s_imp S_un.S_un_w.s_w2 -#define s_impno S_un.S_un_b.s_b4 -#define s_lh S_un.S_un_b.s_b3 - -typedef struct in_addr { - union { - struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; - struct { u_short s_w1,s_w2; } S_un_w; - u_long S_addr; - } S_un; -} IN_ADDR, *PIN_ADDR; - -#endif /* s_addr */ - #define ADDR_ANY INADDR_ANY #define WSADESCRIPTION_LEN 256 #define WSASYS_STATUS_LEN 128 -typedef struct WSAData { - WORD wVersion; - WORD wHighVersion; -#ifdef _WIN64 - unsigned short iMaxSockets; - unsigned short iMaxUdpDg; - char *lpVendorInfo; - char szDescription[WSADESCRIPTION_LEN+1]; - char szSystemStatus[WSASYS_STATUS_LEN+1]; -#else - char szDescription[WSADESCRIPTION_LEN+1]; - char szSystemStatus[WSASYS_STATUS_LEN+1]; - unsigned short iMaxSockets; - unsigned short iMaxUdpDg; - char *lpVendorInfo; -} WSADATA, FAR *LPWSADATA; - #define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1) @@ -356,11 +320,6 @@ typedef struct WSAData { #endif #define PVD_CONFIG 0x3001 -struct sockproto { - u_short sp_family; - u_short sp_protocol; -}; - #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET @@ -517,64 +476,6 @@ struct sockproto { #endif /* !WSABASEERR */ -#ifdef WIN32 - -#define WSAAPI FAR PASCAL -#define WSAEVENT HANDLE -#define LPWSAEVENT LPHANDLE -#define WSAOVERLAPPED OVERLAPPED -typedef struct _OVERLAPPED *LPWSAOVERLAPPED; -#define WSA_IO_PENDING (ERROR_IO_PENDING) -#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE) -#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE) -#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) -#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY) -#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED) -#define WSA_INVALID_EVENT ((WSAEVENT)NULL) -#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) -#define WSA_WAIT_FAILED ((DWORD)-1L) -#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0) -#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION) -#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT) -#define WSA_INFINITE (INFINITE) - -#else /* WIN16 */ - -#define WSAAPI FAR PASCAL -typedef DWORD WSAEVENT, FAR * LPWSAEVENT; - -typedef struct _WSAOVERLAPPED { - DWORD Internal; - DWORD InternalHigh; - DWORD Offset; - DWORD OffsetHigh; - WSAEVENT hEvent; -} WSAOVERLAPPED, FAR * LPWSAOVERLAPPED; - -#define WSA_IO_PENDING (WSAEWOULDBLOCK) -#define WSA_IO_INCOMPLETE (WSAEWOULDBLOCK) -#define WSA_INVALID_HANDLE (WSAENOTSOCK) -#define WSA_INVALID_PARAMETER (WSAEINVAL) -#define WSA_NOT_ENOUGH_MEMORY (WSAENOBUFS) -#define WSA_OPERATION_ABORTED (WSAEINTR) - -#define WSA_INVALID_EVENT ((WSAEVENT)NULL) -#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) -#define WSA_WAIT_FAILED ((DWORD)-1L) -#define WSA_WAIT_EVENT_0 ((DWORD)0) -#define WSA_WAIT_TIMEOUT ((DWORD)0x102L) -#define WSA_INFINITE ((DWORD)-1L) - -#endif /* WIN32 */ - -#include - -typedef struct _QualityOfService { - FLOWSPEC SendingFlowspec; - FLOWSPEC ReceivingFlowspec; - WSABUF ProviderSpecific; -} QOS, *LPQOS; - #define CF_ACCEPT 0x0000 #define CF_REJECT 0x0001 #define CF_DEFER 0x0002 @@ -582,86 +483,16 @@ typedef struct _QualityOfService { #define SD_SEND 0x01 #define SD_BOTH 0x02 -typedef unsigned int GROUP; - #define SG_UNCONSTRAINED_GROUP 0x01 #define SG_CONSTRAINED_GROUP 0x02 -typedef struct _WSANETWORKEVENTS { - LONG lNetworkEvents; - int iErrorCode[FD_MAX_EVENTS]; -} WSANETWORKEVENTS, *LPWSANETWORKEVENTS; - -#ifndef GUID_DEFINED -#include -#endif - #define MAX_PROTOCOL_CHAIN 7 #define BASE_PROTOCOL 1 #define LAYERED_PROTOCOL 0 -typedef struct _WSAPROTOCOLCHAIN { - int ChainLen; - DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; -} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN; - #define WSAPROTOCOL_LEN 255 -typedef struct _WSAPROTOCOL_INFOA { - DWORD dwServiceFlags1; - DWORD dwServiceFlags2; - DWORD dwServiceFlags3; - DWORD dwServiceFlags4; - DWORD dwProviderFlags; - GUID ProviderId; - DWORD dwCatalogEntryId; - WSAPROTOCOLCHAIN ProtocolChain; - int iVersion; - int iAddressFamily; - int iMaxSockAddr; - int iMinSockAddr; - int iSocketType; - int iProtocol; - int iProtocolMaxOffset; - int iNetworkByteOrder; - int iSecurityScheme; - DWORD dwMessageSize; - DWORD dwProviderReserved; - CHAR szProtocol[WSAPROTOCOL_LEN+1]; -} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA; - -typedef struct _WSAPROTOCOL_INFOW { - DWORD dwServiceFlags1; - DWORD dwServiceFlags2; - DWORD dwServiceFlags3; - DWORD dwServiceFlags4; - DWORD dwProviderFlags; - GUID ProviderId; - DWORD dwCatalogEntryId; - WSAPROTOCOLCHAIN ProtocolChain; - int iVersion; - int iAddressFamily; - int iMaxSockAddr; - int iMinSockAddr; - int iSocketType; - int iProtocol; - int iProtocolMaxOffset; - int iNetworkByteOrder; - int iSecurityScheme; - DWORD dwMessageSize; - DWORD dwProviderReserved; - WCHAR szProtocol[WSAPROTOCOL_LEN+1]; -} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW; - -#ifdef UNICODE -typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; -typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; -#else -typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; -typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; -#endif - #define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001 #define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002 #define PFL_HIDDEN 0x00000004 @@ -705,81 +536,9 @@ typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; #define WSA_FLAG_MULTIPOINT_D_LEAF 0x10 #define WSA_FLAG_ACCESS_SYSTEM_SECURITY 0x40 -typedef int -(CALLBACK *LPCONDITIONPROC)( - IN LPWSABUF lpCallerId, - IN LPWSABUF lpCallerData, - IN OUT LPQOS lpSQOS, - IN OUT LPQOS lpGQOS, - IN LPWSABUF lpCalleeId, - IN LPWSABUF lpCalleeData, - OUT GROUP FAR *g, - IN DWORD_PTR dwCallbackData); - -typedef void -(CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)( - IN DWORD dwError, - IN DWORD cbTransferred, - IN LPWSAOVERLAPPED lpOverlapped, - IN DWORD dwFlags); - -#if(_WIN32_WINNT >= 0x0501) - -#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25) - -typedef enum _WSACOMPLETIONTYPE { - NSP_NOTIFY_IMMEDIATELY = 0, - NSP_NOTIFY_HWND, - NSP_NOTIFY_EVENT, - NSP_NOTIFY_PORT, - NSP_NOTIFY_APC -} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, *LPWSACOMPLETIONTYPE; - -typedef struct _WSACOMPLETION { - WSACOMPLETIONTYPE Type; - union { - struct { - HWND hWnd; - UINT uMsg; - WPARAM context; - } WindowMessage; - struct { - LPWSAOVERLAPPED lpOverlapped; - } Event; - struct { - LPWSAOVERLAPPED lpOverlapped; - LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; - } Apc; - struct { - LPWSAOVERLAPPED lpOverlapped; - HANDLE hPort; - ULONG_PTR Key; - } Port; - } Parameters; -} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION; - -#endif /* (_WIN32_WINNT >= 0x0501) */ - #define TH_NETDEV 0x00000001 #define TH_TAPI 0x00000002 -#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ -#define __BLOB_T_DEFINED -/* wine is using a diff define */ -#ifndef _tagBLOB_DEFINED -#define _tagBLOB_DEFINED -#define _BLOB_DEFINED -#define _LPBLOB_DEFINED - -typedef struct _BLOB { - ULONG cbSize; - BYTE *pBlobData; -} BLOB,*PBLOB,*LPBLOB; - -#endif /* _tagBLOB_DEFINED */ - -#endif /* __BLOB_T_DEFINED */ - #define SERVICE_MULTIPLE 0x00000001 #define NS_ALL 0 @@ -846,6 +605,282 @@ typedef struct _BLOB { #define SERVICE_TYPE_VALUE_OBJECTID SERVICE_TYPE_VALUE_OBJECTIDA #endif +#define LUP_DEEP 0x0001 +#define LUP_CONTAINERS 0x0002 +#define LUP_NOCONTAINERS 0x0004 +#define LUP_NEAREST 0x0008 +#define LUP_RETURN_NAME 0x0010 +#define LUP_RETURN_TYPE 0x0020 +#define LUP_RETURN_VERSION 0x0040 +#define LUP_RETURN_COMMENT 0x0080 +#define LUP_RETURN_ADDR 0x0100 +#define LUP_RETURN_BLOB 0x0200 +#define LUP_RETURN_ALIASES 0x0400 +#define LUP_RETURN_QUERY_STRING 0x0800 +#define LUP_RETURN_ALL 0x0FF0 +#define LUP_RES_SERVICE 0x8000 +#define LUP_FLUSHCACHE 0x1000 +#define LUP_FLUSHPREVIOUS 0x2000 +#define LUP_NON_AUTHORITATIVE 0x4000 +#define LUP_SECURE 0x8000 +#define LUP_RETURN_PREFERRED_NAMES 0x10000 +#define LUP_ADDRCONFIG 0x00100000 +#define LUP_DUAL_ADDR 0x00200000 +#define LUP_FILESERVER 0x00400000 + +#define RESULT_IS_ALIAS 0x0001 +#if(_WIN32_WINNT >= 0x0501) +#define RESULT_IS_ADDED 0x0010 +#define RESULT_IS_CHANGED 0x0020 +#define RESULT_IS_DELETED 0x0040 +#endif + + + + + + +#ifndef s_addr + +#define s_addr S_un.S_addr +#define s_host S_un.S_un_b.s_b2 +#define s_net S_un.S_un_b.s_b1 +#define s_imp S_un.S_un_w.s_w2 +#define s_impno S_un.S_un_b.s_b4 +#define s_lh S_un.S_un_b.s_b3 + +typedef struct in_addr { + union { + struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; + struct { u_short s_w1,s_w2; } S_un_w; + u_long S_addr; + } S_un; +} IN_ADDR, *PIN_ADDR; + +#endif /* s_addr */ + +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; +#ifdef _WIN64 + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char *lpVendorInfo; + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; +#else + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char *lpVendorInfo; +} WSADATA, FAR *LPWSADATA; + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +}; + +#ifdef WIN32 + +#define WSAAPI FAR PASCAL +#define WSAEVENT HANDLE +#define LPWSAEVENT LPHANDLE +#define WSAOVERLAPPED OVERLAPPED +typedef struct _OVERLAPPED *LPWSAOVERLAPPED; +#define WSA_IO_PENDING (ERROR_IO_PENDING) +#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE) +#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE) +#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) +#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY) +#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED) +#define WSA_INVALID_EVENT ((WSAEVENT)NULL) +#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) +#define WSA_WAIT_FAILED ((DWORD)-1L) +#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0) +#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION) +#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT) +#define WSA_INFINITE (INFINITE) + +#else /* WIN16 */ + +#define WSAAPI FAR PASCAL +typedef DWORD WSAEVENT, FAR * LPWSAEVENT; + +typedef struct _WSAOVERLAPPED { + DWORD Internal; + DWORD InternalHigh; + DWORD Offset; + DWORD OffsetHigh; + WSAEVENT hEvent; +} WSAOVERLAPPED, FAR * LPWSAOVERLAPPED; + +#define WSA_IO_PENDING (WSAEWOULDBLOCK) +#define WSA_IO_INCOMPLETE (WSAEWOULDBLOCK) +#define WSA_INVALID_HANDLE (WSAENOTSOCK) +#define WSA_INVALID_PARAMETER (WSAEINVAL) +#define WSA_NOT_ENOUGH_MEMORY (WSAENOBUFS) +#define WSA_OPERATION_ABORTED (WSAEINTR) + +#define WSA_INVALID_EVENT ((WSAEVENT)NULL) +#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS) +#define WSA_WAIT_FAILED ((DWORD)-1L) +#define WSA_WAIT_EVENT_0 ((DWORD)0) +#define WSA_WAIT_TIMEOUT ((DWORD)0x102L) +#define WSA_INFINITE ((DWORD)-1L) + +#endif /* WIN32 */ + +#include + +typedef struct _QualityOfService { + FLOWSPEC SendingFlowspec; + FLOWSPEC ReceivingFlowspec; + WSABUF ProviderSpecific; +} QOS, *LPQOS; + +typedef unsigned int GROUP; + +typedef struct _WSANETWORKEVENTS { + LONG lNetworkEvents; + int iErrorCode[FD_MAX_EVENTS]; +} WSANETWORKEVENTS, *LPWSANETWORKEVENTS; + +#ifndef GUID_DEFINED +#include +#endif + +typedef struct _WSAPROTOCOLCHAIN { + int ChainLen; + DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; +} WSAPROTOCOLCHAIN, *LPWSAPROTOCOLCHAIN; + +typedef struct _WSAPROTOCOL_INFOA { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + CHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA; + +typedef struct _WSAPROTOCOL_INFOW { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + WCHAR szProtocol[WSAPROTOCOL_LEN+1]; +} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW; + +#ifdef UNICODE +typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; +#else +typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; +typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; +#endif + +typedef int +(CALLBACK *LPCONDITIONPROC)( + IN LPWSABUF lpCallerId, + IN LPWSABUF lpCallerData, + IN OUT LPQOS lpSQOS, + IN OUT LPQOS lpGQOS, + IN LPWSABUF lpCalleeId, + IN LPWSABUF lpCalleeData, + OUT GROUP FAR *g, + IN DWORD_PTR dwCallbackData); + +typedef void +(CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)( + IN DWORD dwError, + IN DWORD cbTransferred, + IN LPWSAOVERLAPPED lpOverlapped, + IN DWORD dwFlags); + +#if(_WIN32_WINNT >= 0x0501) + +#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25) + +typedef enum _WSACOMPLETIONTYPE { + NSP_NOTIFY_IMMEDIATELY = 0, + NSP_NOTIFY_HWND, + NSP_NOTIFY_EVENT, + NSP_NOTIFY_PORT, + NSP_NOTIFY_APC +} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, *LPWSACOMPLETIONTYPE; + +typedef struct _WSACOMPLETION { + WSACOMPLETIONTYPE Type; + union { + struct { + HWND hWnd; + UINT uMsg; + WPARAM context; + } WindowMessage; + struct { + LPWSAOVERLAPPED lpOverlapped; + } Event; + struct { + LPWSAOVERLAPPED lpOverlapped; + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; + } Apc; + struct { + LPWSAOVERLAPPED lpOverlapped; + HANDLE hPort; + ULONG_PTR Key; + } Port; + } Parameters; +} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION; + +#endif /* (_WIN32_WINNT >= 0x0501) */ + +#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ +#define __BLOB_T_DEFINED +/* wine is using a diff define */ +#ifndef _tagBLOB_DEFINED +#define _tagBLOB_DEFINED +#define _BLOB_DEFINED +#define _LPBLOB_DEFINED + +typedef struct _BLOB { + ULONG cbSize; + BYTE *pBlobData; +} BLOB,*PBLOB,*LPBLOB; + +#endif /* _tagBLOB_DEFINED */ + +#endif /* __BLOB_T_DEFINED */ + typedef struct _AFPROTOCOLS { INT iAddressFamily; INT iProtocol; @@ -947,36 +982,6 @@ typedef PWSAQUERYSET2A PWSAQUERYSET2; typedef LPWSAQUERYSET2A LPWSAQUERYSET2; #endif /* UNICODE */ -#define LUP_DEEP 0x0001 -#define LUP_CONTAINERS 0x0002 -#define LUP_NOCONTAINERS 0x0004 -#define LUP_NEAREST 0x0008 -#define LUP_RETURN_NAME 0x0010 -#define LUP_RETURN_TYPE 0x0020 -#define LUP_RETURN_VERSION 0x0040 -#define LUP_RETURN_COMMENT 0x0080 -#define LUP_RETURN_ADDR 0x0100 -#define LUP_RETURN_BLOB 0x0200 -#define LUP_RETURN_ALIASES 0x0400 -#define LUP_RETURN_QUERY_STRING 0x0800 -#define LUP_RETURN_ALL 0x0FF0 -#define LUP_RES_SERVICE 0x8000 -#define LUP_FLUSHCACHE 0x1000 -#define LUP_FLUSHPREVIOUS 0x2000 -#define LUP_NON_AUTHORITATIVE 0x4000 -#define LUP_SECURE 0x8000 -#define LUP_RETURN_PREFERRED_NAMES 0x10000 -#define LUP_ADDRCONFIG 0x00100000 -#define LUP_DUAL_ADDR 0x00200000 -#define LUP_FILESERVER 0x00400000 - -#define RESULT_IS_ALIAS 0x0001 -#if(_WIN32_WINNT >= 0x0501) -#define RESULT_IS_ADDED 0x0010 -#define RESULT_IS_CHANGED 0x0020 -#define RESULT_IS_DELETED 0x0040 -#endif - typedef enum _WSAESETSERVICEOP { RNRSERVICE_REGISTER=0, RNRSERVICE_DEREGISTER, diff --git a/include/psdk/ws2bth.h b/include/psdk/ws2bth.h index 9fa517a4c92..dbe96cbcf40 100644 --- a/include/psdk/ws2bth.h +++ b/include/psdk/ws2bth.h @@ -21,13 +21,6 @@ #define NS_BTH 16 #endif -typedef struct _SOCKADDR_BTH { - USHORT addressFamily; - BTH_ADDR btAddr; - GUID serviceClassId; - ULONG port; -} SOCKADDR_BTH, *PSOCKADDR_BTH; - DEFINE_GUID(SVCID_BTH_PROVIDER, 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d); #define BTH_ADDR_STRING_SIZE 12 @@ -50,15 +43,6 @@ DEFINE_GUID(SVCID_BTH_PROVIDER, 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe #define BTH_SDP_VERSION 1 -typedef struct _BTH_SET_SERVICE { - PULONG pSdpVersion; - HANDLE *pRecordHandle; - ULONG fCodService; - ULONG Reserved[5]; - ULONG ulRecordLength; - UCHAR pRecord[1]; -} BTH_SET_SERVICE, *PBTH_SET_SERVICE; - #define SDP_DEFAULT_INQUIRY_SECONDS 6 #define SDP_MAX_INQUIRY_SECONDS 60 @@ -68,19 +52,6 @@ typedef struct _BTH_SET_SERVICE { #define SDP_SERVICE_ATTRIBUTE_REQUEST 2 #define SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST 3 -typedef struct _BTH_QUERY_DEVICE { - ULONG LAP; - UCHAR length; -} BTH_QUERY_DEVICE, *PBTH_QUERY_DEVICE; - -typedef struct _BTH_QUERY_SERVICE { - ULONG type; - ULONG serviceHandle; - SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY]; - ULONG numRange; - SdpAttributeRange pRange[1]; -} BTH_QUERY_SERVICE, *PBTH_QUERY_SERVICE; - #define BTHNS_RESULT_DEVICE_CONNECTED 0x00010000 #define BTHNS_RESULT_DEVICE_REMEMBERED 0x00020000 #define BTHNS_RESULT_DEVICE_AUTHENTICATED 0x00040000 @@ -108,20 +79,11 @@ typedef struct _BTH_QUERY_SERVICE { #define MSC_BREAK_BIT BIT(1) #define MSC_SET_BREAK_LENGTH(b, l) ((b) = ((b)&0x3) | (((l)&0xf) << 4)) -typedef struct _RFCOMM_MSC_DATA { - UCHAR Signals; - UCHAR Break; -} RFCOMM_MSC_DATA, *PRFCOMM_MSC_DATA; - #define RLS_ERROR 0x01 #define RLS_OVERRUN 0x02 #define RLS_PARITY 0x04 #define RLS_FRAMING 0x08 -typedef struct _RFCOMM_RLS_DATA { - UCHAR LineStatus; -} RFCOMM_RLS_DATA, *PRFCOMM_RLS_DATA; - #define RPN_BAUD_2400 0 #define RPN_BAUD_4800 1 #define RPN_BAUD_7200 2 @@ -174,6 +136,50 @@ typedef struct _RFCOMM_RLS_DATA { #define RFCOMM_CMD_RPN_REQUEST 4 #define RFCOMM_CMD_RPN_RESPONSE 5 + + + + + + +typedef struct _SOCKADDR_BTH { + USHORT addressFamily; + BTH_ADDR btAddr; + GUID serviceClassId; + ULONG port; +} SOCKADDR_BTH, *PSOCKADDR_BTH; + +typedef struct _BTH_SET_SERVICE { + PULONG pSdpVersion; + HANDLE *pRecordHandle; + ULONG fCodService; + ULONG Reserved[5]; + ULONG ulRecordLength; + UCHAR pRecord[1]; +} BTH_SET_SERVICE, *PBTH_SET_SERVICE; + +typedef struct _BTH_QUERY_DEVICE { + ULONG LAP; + UCHAR length; +} BTH_QUERY_DEVICE, *PBTH_QUERY_DEVICE; + +typedef struct _BTH_QUERY_SERVICE { + ULONG type; + ULONG serviceHandle; + SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY]; + ULONG numRange; + SdpAttributeRange pRange[1]; +} BTH_QUERY_SERVICE, *PBTH_QUERY_SERVICE; + +typedef struct _RFCOMM_MSC_DATA { + UCHAR Signals; + UCHAR Break; +} RFCOMM_MSC_DATA, *PRFCOMM_MSC_DATA; + +typedef struct _RFCOMM_RLS_DATA { + UCHAR LineStatus; +} RFCOMM_RLS_DATA, *PRFCOMM_RLS_DATA; + typedef struct _RFCOMM_RPN_DATA { UCHAR Baud; UCHAR Data; diff --git a/include/psdk/ws2def.h b/include/psdk/ws2def.h index 99e0318838c..081e24daefc 100644 --- a/include/psdk/ws2def.h +++ b/include/psdk/ws2def.h @@ -130,43 +130,6 @@ typedef USHORT ADDRESS_FAMILY; #define TCP_NODELAY 0x0001 -typedef struct sockaddr { -#if (_WIN32_WINNT < 0x0600) - u_short sa_family; -#else - ADDRESS_FAMILY sa_family; -#endif - CHAR sa_data[14]; -} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR; - -#ifndef __CSADDR_DEFINED__ -#define __CSADDR_DEFINED__ - -typedef struct _SOCKET_ADDRESS { - LPSOCKADDR lpSockaddr; - INT iSockaddrLength; -} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS; - -typedef struct _SOCKET_ADDRESS_LIST { - INT iAddressCount; - SOCKET_ADDRESS Address[1]; -} SOCKET_ADDRESS_LIST, *PSOCKET_ADDRESS_LIST, FAR *LPSOCKET_ADDRESS_LIST; - -#if (_WIN32_WINNT >= 0x0600) -#define SIZEOF_SOCKET_ADDRESS_LIST(AddressCount) \ - (FIELD_OFFSET(SOCKET_ADDRESS_LIST, Address) + \ - AddressCount * sizeof(SOCKET_ADDRESS)) -#endif - -typedef struct _CSADDR_INFO { - SOCKET_ADDRESS LocalAddr; - SOCKET_ADDRESS RemoteAddr; - INT iSocketType; - INT iProtocol; -} CSADDR_INFO, *PCSADDR_INFO, FAR *LPCSADDR_INFO ; - -#endif /* __CSADDR_DEFINED__ */ - #define _SS_MAXSIZE 128 #define _SS_ALIGNSIZE (sizeof(__int64)) @@ -182,32 +145,6 @@ typedef struct _CSADDR_INFO { #endif /* (_WIN32_WINNT >= 0x0600) */ -typedef struct sockaddr_storage { - ADDRESS_FAMILY ss_family; - CHAR __ss_pad1[_SS_PAD1SIZE]; - __int64 __ss_align; - CHAR __ss_pad2[_SS_PAD2SIZE]; -} SOCKADDR_STORAGE_LH, *PSOCKADDR_STORAGE_LH, FAR *LPSOCKADDR_STORAGE_LH; - -typedef struct sockaddr_storage_xp { - short ss_family; - CHAR __ss_pad1[_SS_PAD1SIZE]; - __int64 __ss_align; - CHAR __ss_pad2[_SS_PAD2SIZE]; -} SOCKADDR_STORAGE_XP, *PSOCKADDR_STORAGE_XP, FAR *LPSOCKADDR_STORAGE_XP; - -#if (_WIN32_WINNT >= 0x0600) - -typedef SOCKADDR_STORAGE_LH SOCKADDR_STORAGE; -typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE; - -#elif (_WIN32_WINNT >= 0x0501) - -typedef SOCKADDR_STORAGE_XP SOCKADDR_STORAGE; -typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE; - -#endif /* (_WIN32_WINNT >= 0x0600) */ - #define IOC_UNIX 0x00000000 #define IOC_WS2 0x08000000 #define IOC_PROTOCOL 0x10000000 @@ -252,59 +189,6 @@ typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE; #define IPPROTO_IP 0 -typedef enum { -#if (_WIN32_WINNT >= 0x0501) - IPPROTO_HOPOPTS = 0, -#endif - IPPROTO_ICMP = 1, - IPPROTO_IGMP = 2, - IPPROTO_GGP = 3, -#if (_WIN32_WINNT >= 0x0501) - IPPROTO_IPV4 = 4, -#endif -#if (_WIN32_WINNT >= 0x0600) - IPPROTO_ST = 5, -#endif - IPPROTO_TCP = 6, -#if (_WIN32_WINNT >= 0x0600) - IPPROTO_CBT = 7, - IPPROTO_EGP = 8, - IPPROTO_IGP = 9, -#endif - IPPROTO_PUP = 12, - IPPROTO_UDP = 17, - IPPROTO_IDP = 22, -#if (_WIN32_WINNT >= 0x0600) - IPPROTO_RDP = 27, -#endif -#if (_WIN32_WINNT >= 0x0501) - IPPROTO_IPV6 = 41, - IPPROTO_ROUTING = 43, - IPPROTO_FRAGMENT = 44, - IPPROTO_ESP = 50, - IPPROTO_AH = 51, - IPPROTO_ICMPV6 = 58, - IPPROTO_NONE = 59, - IPPROTO_DSTOPTS = 60, -#endif /* (_WIN32_WINNT >= 0x0501) */ - IPPROTO_ND = 77, -#if(_WIN32_WINNT >= 0x0501) - IPPROTO_ICLFXBM = 78, -#endif -#if (_WIN32_WINNT >= 0x0600) - IPPROTO_PIM = 103, - IPPROTO_PGM = 113, - IPPROTO_L2TP = 115, - IPPROTO_SCTP = 132, -#endif /* (_WIN32_WINNT >= 0x0600) */ - IPPROTO_RAW = 255, - IPPROTO_MAX = 256, - IPPROTO_RESERVED_RAW = 257, - IPPROTO_RESERVED_IPSEC = 258, - IPPROTO_RESERVED_IPSECOFFLOAD = 259, - IPPROTO_RESERVED_MAX = 260 -} IPPROTO, *PIPROTO; - #define IPPORT_TCPMUX 1 #define IPPORT_ECHO 7 #define IPPORT_DISCARD 9 @@ -389,6 +273,206 @@ typedef enum { #define INADDR_BROADCAST (ULONG)0xffffffff #define INADDR_NONE 0xffffffff +#define SCOPEID_UNSPECIFIED_INIT {0} + +#define IOCPARM_MASK 0x7f +#define IOC_VOID 0x20000000 +#define IOC_OUT 0x40000000 +#define IOC_IN 0x80000000 +#define IOC_INOUT (IOC_IN|IOC_OUT) + +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) +#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define MSG_TRUNC 0x0100 +#define MSG_CTRUNC 0x0200 +#define MSG_BCAST 0x0400 +#define MSG_MCAST 0x0800 + +#define AI_PASSIVE 0x00000001 +#define AI_CANONNAME 0x00000002 +#define AI_NUMERICHOST 0x00000004 +#define AI_NUMERICSERV 0x00000008 + +#define AI_ALL 0x00000100 +#define AI_ADDRCONFIG 0x00000400 +#define AI_V4MAPPED 0x00000800 + +#define AI_NON_AUTHORITATIVE 0x00004000 +#define AI_SECURE 0x00008000 +#define AI_RETURN_PREFERRED_NAMES 0x00010000 + +#define AI_FQDN 0x00020000 +#define AI_FILESERVER 0x00040000 + +#define NS_ALL 0 + +#define NS_SAP 1 +#define NS_NDS 2 +#define NS_PEER_BROWSE 3 +#define NS_SLP 5 +#define NS_DHCP 6 + +#define NS_TCPIP_LOCAL 10 +#define NS_TCPIP_HOSTS 11 +#define NS_DNS 12 +#define NS_NETBT 13 +#define NS_WINS 14 + +#if(_WIN32_WINNT >= 0x0501) +#define NS_NLA 15 +#endif + +#if(_WIN32_WINNT >= 0x0600) +#define NS_BTH 16 +#endif + +#define NS_NBP 20 + +#define NS_MS 30 +#define NS_STDA 31 +#define NS_NTDS 32 + +#if(_WIN32_WINNT >= 0x0600) +#define NS_EMAIL 37 +#define NS_PNRPNAME 38 +#define NS_PNRPCLOUD 39 +#endif + +#define NS_X500 40 +#define NS_NIS 41 +#define NS_NISPLUS 42 + +#define NS_WRQ 50 + +#define NS_NETDES 60 + +#define NI_NOFQDN 0x01 +#define NI_NUMERICHOST 0x02 +#define NI_NAMEREQD 0x04 +#define NI_NUMERICSERV 0x08 +#define NI_DGRAM 0x10 + +#define NI_MAXHOST 1025 +#define NI_MAXSERV 32 + +typedef struct sockaddr { +#if (_WIN32_WINNT < 0x0600) + u_short sa_family; +#else + ADDRESS_FAMILY sa_family; +#endif + CHAR sa_data[14]; +} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR; + +#ifndef __CSADDR_DEFINED__ +#define __CSADDR_DEFINED__ + +typedef struct _SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS; + +typedef struct _SOCKET_ADDRESS_LIST { + INT iAddressCount; + SOCKET_ADDRESS Address[1]; +} SOCKET_ADDRESS_LIST, *PSOCKET_ADDRESS_LIST, FAR *LPSOCKET_ADDRESS_LIST; + +#if (_WIN32_WINNT >= 0x0600) +#define SIZEOF_SOCKET_ADDRESS_LIST(AddressCount) \ + (FIELD_OFFSET(SOCKET_ADDRESS_LIST, Address) + \ + AddressCount * sizeof(SOCKET_ADDRESS)) +#endif + +typedef struct _CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} CSADDR_INFO, *PCSADDR_INFO, FAR *LPCSADDR_INFO ; + +#endif /* __CSADDR_DEFINED__ */ + +typedef struct sockaddr_storage { + ADDRESS_FAMILY ss_family; + CHAR __ss_pad1[_SS_PAD1SIZE]; + __int64 __ss_align; + CHAR __ss_pad2[_SS_PAD2SIZE]; +} SOCKADDR_STORAGE_LH, *PSOCKADDR_STORAGE_LH, FAR *LPSOCKADDR_STORAGE_LH; + +typedef struct sockaddr_storage_xp { + short ss_family; + CHAR __ss_pad1[_SS_PAD1SIZE]; + __int64 __ss_align; + CHAR __ss_pad2[_SS_PAD2SIZE]; +} SOCKADDR_STORAGE_XP, *PSOCKADDR_STORAGE_XP, FAR *LPSOCKADDR_STORAGE_XP; + +#if (_WIN32_WINNT >= 0x0600) + +typedef SOCKADDR_STORAGE_LH SOCKADDR_STORAGE; +typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE; + +#elif (_WIN32_WINNT >= 0x0501) + +typedef SOCKADDR_STORAGE_XP SOCKADDR_STORAGE; +typedef SOCKADDR_STORAGE *PSOCKADDR_STORAGE, FAR *LPSOCKADDR_STORAGE; + +#endif /* (_WIN32_WINNT >= 0x0600) */ + +typedef enum { +#if (_WIN32_WINNT >= 0x0501) + IPPROTO_HOPOPTS = 0, +#endif + IPPROTO_ICMP = 1, + IPPROTO_IGMP = 2, + IPPROTO_GGP = 3, +#if (_WIN32_WINNT >= 0x0501) + IPPROTO_IPV4 = 4, +#endif +#if (_WIN32_WINNT >= 0x0600) + IPPROTO_ST = 5, +#endif + IPPROTO_TCP = 6, +#if (_WIN32_WINNT >= 0x0600) + IPPROTO_CBT = 7, + IPPROTO_EGP = 8, + IPPROTO_IGP = 9, +#endif + IPPROTO_PUP = 12, + IPPROTO_UDP = 17, + IPPROTO_IDP = 22, +#if (_WIN32_WINNT >= 0x0600) + IPPROTO_RDP = 27, +#endif +#if (_WIN32_WINNT >= 0x0501) + IPPROTO_IPV6 = 41, + IPPROTO_ROUTING = 43, + IPPROTO_FRAGMENT = 44, + IPPROTO_ESP = 50, + IPPROTO_AH = 51, + IPPROTO_ICMPV6 = 58, + IPPROTO_NONE = 59, + IPPROTO_DSTOPTS = 60, +#endif /* (_WIN32_WINNT >= 0x0501) */ + IPPROTO_ND = 77, +#if(_WIN32_WINNT >= 0x0501) + IPPROTO_ICLFXBM = 78, +#endif +#if (_WIN32_WINNT >= 0x0600) + IPPROTO_PIM = 103, + IPPROTO_PGM = 113, + IPPROTO_L2TP = 115, + IPPROTO_SCTP = 132, +#endif /* (_WIN32_WINNT >= 0x0600) */ + IPPROTO_RAW = 255, + IPPROTO_MAX = 256, + IPPROTO_RESERVED_RAW = 257, + IPPROTO_RESERVED_IPSEC = 258, + IPPROTO_RESERVED_IPSECOFFLOAD = 259, + IPPROTO_RESERVED_MAX = 260 +} IPPROTO, *PIPROTO; + typedef enum { ScopeLevelInterface = 1, ScopeLevelLink = 2, @@ -410,8 +494,6 @@ typedef struct { }; } SCOPE_ID, *PSCOPE_ID; -#define SCOPEID_UNSPECIFIED_INIT {0} - typedef struct sockaddr_in { #if(_WIN32_WINNT < 0x0600) short sin_family; @@ -431,16 +513,6 @@ typedef struct sockaddr_dl { } SOCKADDR_DL, *PSOCKADDR_DL; #endif -#define IOCPARM_MASK 0x7f -#define IOC_VOID 0x20000000 -#define IOC_OUT 0x40000000 -#define IOC_IN 0x80000000 -#define IOC_INOUT (IOC_IN|IOC_OUT) - -#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) -#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) -#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) - typedef struct _WSABUF { ULONG len; CHAR FAR *buf; @@ -587,27 +659,6 @@ typedef WSACMSGHDR CMSGHDR, *PCMSGHDR; #define CMSG_LEN WSA_CMSG_LEN #endif -#define MSG_TRUNC 0x0100 -#define MSG_CTRUNC 0x0200 -#define MSG_BCAST 0x0400 -#define MSG_MCAST 0x0800 - -#define AI_PASSIVE 0x00000001 -#define AI_CANONNAME 0x00000002 -#define AI_NUMERICHOST 0x00000004 -#define AI_NUMERICSERV 0x00000008 - -#define AI_ALL 0x00000100 -#define AI_ADDRCONFIG 0x00000400 -#define AI_V4MAPPED 0x00000800 - -#define AI_NON_AUTHORITATIVE 0x00004000 -#define AI_SECURE 0x00008000 -#define AI_RETURN_PREFERRED_NAMES 0x00010000 - -#define AI_FQDN 0x00020000 -#define AI_FILESERVER 0x00040000 - typedef struct addrinfo { int ai_flags; int ai_family; @@ -662,57 +713,6 @@ typedef struct addrinfoexW { #endif /* (_WIN32_WINNT >= 0x0600) */ -#define NS_ALL 0 - -#define NS_SAP 1 -#define NS_NDS 2 -#define NS_PEER_BROWSE 3 -#define NS_SLP 5 -#define NS_DHCP 6 - -#define NS_TCPIP_LOCAL 10 -#define NS_TCPIP_HOSTS 11 -#define NS_DNS 12 -#define NS_NETBT 13 -#define NS_WINS 14 - -#if(_WIN32_WINNT >= 0x0501) -#define NS_NLA 15 -#endif - -#if(_WIN32_WINNT >= 0x0600) -#define NS_BTH 16 -#endif - -#define NS_NBP 20 - -#define NS_MS 30 -#define NS_STDA 31 -#define NS_NTDS 32 - -#if(_WIN32_WINNT >= 0x0600) -#define NS_EMAIL 37 -#define NS_PNRPNAME 38 -#define NS_PNRPCLOUD 39 -#endif - -#define NS_X500 40 -#define NS_NIS 41 -#define NS_NISPLUS 42 - -#define NS_WRQ 50 - -#define NS_NETDES 60 - -#define NI_NOFQDN 0x01 -#define NI_NUMERICHOST 0x02 -#define NI_NAMEREQD 0x04 -#define NI_NUMERICSERV 0x08 -#define NI_DGRAM 0x10 - -#define NI_MAXHOST 1025 -#define NI_MAXSERV 32 - #ifdef __cplusplus } #endif diff --git a/include/psdk/ws2ipdef.h b/include/psdk/ws2ipdef.h index 5bb88b797b7..f7b6c4d1ccd 100644 --- a/include/psdk/ws2ipdef.h +++ b/include/psdk/ws2ipdef.h @@ -1,15 +1,593 @@ -#ifndef _WS2IPDEF_ +#pragma once + #define _WS2IPDEF_ #ifdef __cplusplus extern "C" { #endif +#ifndef WS2IPDEF_ASSERT +#define WS2IPDEF_ASSERT(exp) ((VOID) 0) +#endif +#ifdef _MSC_VER +#define WS2TCPIP_INLINE __inline +#else +#define WS2TCPIP_INLINE extern inline +#endif +#include + +#define IFF_UP 0x00000001 +#define IFF_BROADCAST 0x00000002 +#define IFF_LOOPBACK 0x00000004 +#define IFF_POINTTOPOINT 0x00000008 +#define IFF_MULTICAST 0x00000010 + +#define IP_OPTIONS 1 +#define IP_HDRINCL 2 +#define IP_TOS 3 +#define IP_TTL 4 +#define IP_MULTICAST_IF 9 +#define IP_MULTICAST_TTL 10 +#define IP_MULTICAST_LOOP 11 +#define IP_ADD_MEMBERSHIP 12 +#define IP_DROP_MEMBERSHIP 13 +#define IP_DONTFRAGMENT 14 +#define IP_ADD_SOURCE_MEMBERSHIP 15 +#define IP_DROP_SOURCE_MEMBERSHIP 16 +#define IP_BLOCK_SOURCE 17 +#define IP_UNBLOCK_SOURCE 18 +#define IP_PKTINFO 19 +#define IP_HOPLIMIT 21 +#define IP_RECEIVE_BROADCAST 22 +#define IP_RECVIF 24 +#define IP_RECVDSTADDR 25 +#define IP_IFLIST 28 +#define IP_ADD_IFLIST 29 +#define IP_DEL_IFLIST 30 +#define IP_UNICAST_IF 31 +#define IP_RTHDR 32 +#define IP_RECVRTHDR 38 +#define IP_TCLASS 39 +#define IP_RECVTCLASS 40 +#define IP_ORIGINAL_ARRIVAL_IF 47 + +#define IP_UNSPECIFIED_TYPE_OF_SERVICE -1 + +#define IPV6_ADDRESS_BITS RTL_BITS_OF(IN6_ADDR) + +#define SS_PORT(ssp) (((PSOCKADDR_IN)(ssp))->sin_port) + +#define SIO_GET_INTERFACE_LIST _IOR('t', 127, ULONG) +#define SIO_GET_INTERFACE_LIST_EX _IOR('t', 126, ULONG) +#define SIO_SET_MULTICAST_FILTER _IOW('t', 125, ULONG) +#define SIO_GET_MULTICAST_FILTER _IOW('t', 124 | IOC_IN, ULONG) +#define SIOCSIPMSFILTER SIO_SET_MULTICAST_FILTER +#define SIOCGIPMSFILTER SIO_GET_MULTICAST_FILTER + +#define SIOCSMSFILTER _IOW('t', 126, ULONG) +#define SIOCGMSFILTER _IOW('t', 127 | IOC_IN, ULONG) + +#if (NTDDI_VERSION >= NTDDI_VISTASP1) + +#define IDEAL_SEND_BACKLOG_IOCTLS + +#define SIO_IDEAL_SEND_BACKLOG_QUERY _IOR('t', 123, ULONG) +#define SIO_IDEAL_SEND_BACKLOG_CHANGE _IO('t', 122) + +#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ + +#define MCAST_JOIN_GROUP 41 +#define MCAST_LEAVE_GROUP 42 +#define MCAST_BLOCK_SOURCE 43 +#define MCAST_UNBLOCK_SOURCE 44 +#define MCAST_JOIN_SOURCE_GROUP 45 +#define MCAST_LEAVE_SOURCE_GROUP 46 + +#define IP_MSFILTER_SIZE(NumSources) \ + (sizeof(IP_MSFILTER) - sizeof(IN_ADDR) + (NumSources) * sizeof(IN_ADDR)) + +#define IPV6_HOPOPTS 1 +#define IPV6_HDRINCL 2 +#define IPV6_UNICAST_HOPS 4 +#define IPV6_MULTICAST_IF 9 +#define IPV6_MULTICAST_HOPS 10 +#define IPV6_MULTICAST_LOOP 11 +#define IPV6_ADD_MEMBERSHIP 12 +#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +#define IPV6_DROP_MEMBERSHIP 13 +#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +#define IPV6_DONTFRAG 14 +#define IPV6_PKTINFO 19 +#define IPV6_HOPLIMIT 21 +#define IPV6_PROTECTION_LEVEL 23 +#define IPV6_RECVIF 24 +#define IPV6_RECVDSTADDR 25 +#define IPV6_CHECKSUM 26 +#define IPV6_V6ONLY 27 +#define IPV6_IFLIST 28 +#define IPV6_ADD_IFLIST 29 +#define IPV6_DEL_IFLIST 30 +#define IPV6_UNICAST_IF 31 +#define IPV6_RTHDR 32 +#define IPV6_RECVRTHDR 38 +#define IPV6_TCLASS 39 +#define IPV6_RECVTCLASS 40 + +#define IP_UNSPECIFIED_HOP_LIMIT -1 + +#define IP_PROTECTION_LEVEL IPV6_PROTECTION_LEVEL +#define PROTECTION_LEVEL_UNRESTRICTED 10 +#define PROTECTION_LEVEL_EDGERESTRICTED 20 +#define PROTECTION_LEVEL_RESTRICTED 30 + +#if (NTDDI_VERSION < NTDDI_VISTA) +#define PROTECTION_LEVEL_DEFAULT PROTECTION_LEVEL_EDGERESTRICTED +#else +#define PROTECTION_LEVEL_DEFAULT ((UINT)-1) +#endif + +#define INET_ADDRSTRLEN 22 +#define INET6_ADDRSTRLEN 65 + +#define TCP_OFFLOAD_NO_PREFERENCE 0 +#define TCP_OFFLOAD_NOT_PREFERRED 1 +#define TCP_OFFLOAD_PREFERRED 2 + +#define TCP_EXPEDITED_1122 0x0002 +#define TCP_KEEPALIVE 3 +#define TCP_MAXSEG 4 +#define TCP_MAXRT 5 +#define TCP_STDURG 6 +#define TCP_NOURG 7 +#define TCP_ATMARK 8 +#define TCP_NOSYNRETRIES 9 +#define TCP_TIMESTAMPS 10 +#define TCP_OFFLOAD_PREFERENCE 11 +#define TCP_CONGESTION_ALGORITHM 12 +#define TCP_DELAY_FIN_ACK 13 + +struct sockaddr_in6_old { + SHORT sin6_family; + USHORT sin6_port; + ULONG sin6_flowinfo; + IN6_ADDR sin6_addr; +}; + +typedef union sockaddr_gen { + struct sockaddr Address; + struct sockaddr_in AddressIn; + struct sockaddr_in6_old AddressIn6; +} sockaddr_gen; + +typedef struct _INTERFACE_INFO { + ULONG iiFlags; + sockaddr_gen iiAddress; + sockaddr_gen iiBroadcastAddress; + sockaddr_gen iiNetmask; +} INTERFACE_INFO, FAR *LPINTERFACE_INFO; + +typedef struct _INTERFACE_INFO_EX { + ULONG iiFlags; + SOCKET_ADDRESS iiAddress; + SOCKET_ADDRESS iiBroadcastAddress; + SOCKET_ADDRESS iiNetmask; +} INTERFACE_INFO_EX, FAR *LPINTERFACE_INFO_EX; + +typedef struct sockaddr_in6 { + ADDRESS_FAMILY sin6_family; + USHORT sin6_port; + ULONG sin6_flowinfo; + IN6_ADDR sin6_addr; + union { + ULONG sin6_scope_id; + SCOPE_ID sin6_scope_struct; + }; +} SOCKADDR_IN6_LH, *PSOCKADDR_IN6_LH, FAR *LPSOCKADDR_IN6_LH; + +typedef struct sockaddr_in6_w2ksp1 { + short sin6_family; + USHORT sin6_port; + ULONG sin6_flowinfo; + struct in6_addr sin6_addr; + ULONG sin6_scope_id; +} SOCKADDR_IN6_W2KSP1, *PSOCKADDR_IN6_W2KSP1, FAR *LPSOCKADDR_IN6_W2KSP1; + +#if (NTDDI_VERSION >= NTDDI_VISTA) + +typedef SOCKADDR_IN6_LH SOCKADDR_IN6; +typedef SOCKADDR_IN6_LH *PSOCKADDR_IN6; +typedef SOCKADDR_IN6_LH FAR *LPSOCKADDR_IN6; + +#elif(NTDDI_VERSION >= NTDDI_WIN2KSP1) + +typedef SOCKADDR_IN6_W2KSP1 SOCKADDR_IN6; +typedef SOCKADDR_IN6_W2KSP1 *PSOCKADDR_IN6; +typedef SOCKADDR_IN6_W2KSP1 FAR *LPSOCKADDR_IN6; + +#else + +typedef SOCKADDR_IN6_LH SOCKADDR_IN6; +typedef SOCKADDR_IN6_LH *PSOCKADDR_IN6; +typedef SOCKADDR_IN6_LH FAR *LPSOCKADDR_IN6; + +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ + +typedef union _SOCKADDR_INET { + SOCKADDR_IN Ipv4; + SOCKADDR_IN6 Ipv6; + ADDRESS_FAMILY si_family; +} SOCKADDR_INET, *PSOCKADDR_INET; + +typedef struct _sockaddr_in6_pair { + PSOCKADDR_IN6 SourceAddress; + PSOCKADDR_IN6 DestinationAddress; +} SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR; + +#if (NTDDI_VERSION >= NTDDI_WIN2KSP1) + +#define IN6ADDR_ANY_INIT {0} +#define IN6ADDR_LOOPBACK_INIT {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1} +#define IN6ADDR_ALLNODESONNODE_INIT {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01} +#define IN6ADDR_ALLNODESONLINK_INIT {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01} +#define IN6ADDR_ALLROUTERSONLINK_INIT {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02} +#define IN6ADDR_ALLMLDV2ROUTERSONLINK_INIT {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16} +#define IN6ADDR_TEREDOINITIALLINKLOCALADDRESS_INIT {0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe} +#define IN6ADDR_TEREDOOLDLINKLOCALADDRESSXP_INIT {0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'T', 'E', 'R', 'E', 'D', 'O'} +#define IN6ADDR_TEREDOOLDLINKLOCALADDRESSVISTA_INIT {0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} +#define IN6ADDR_LINKLOCALPREFIX_INIT {0xfe, 0x80, } +#define IN6ADDR_MULTICASTPREFIX_INIT {0xff, 0x00, } +#define IN6ADDR_SOLICITEDNODEMULTICASTPREFIX_INIT {0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, } +#define IN6ADDR_V4MAPPEDPREFIX_INIT {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, } +#define IN6ADDR_6TO4PREFIX_INIT {0x20, 0x02, } +#define IN6ADDR_TEREDOPREFIX_INIT {0x20, 0x01, 0x00, 0x00, } +#define IN6ADDR_TEREDOPREFIX_INIT_OLD {0x3f, 0xfe, 0x83, 0x1f, } + +#define IN6ADDR_LINKLOCALPREFIX_LENGTH 64 +#define IN6ADDR_MULTICASTPREFIX_LENGTH 8 +#define IN6ADDR_SOLICITEDNODEMULTICASTPREFIX_LENGTH 104 +#define IN6ADDR_V4MAPPEDPREFIX_LENGTH 96 +#define IN6ADDR_6TO4PREFIX_LENGTH 16 +#define IN6ADDR_TEREDOPREFIX_LENGTH 32 + +extern CONST SCOPE_ID scopeid_unspecified; + +extern CONST IN_ADDR in4addr_any; +extern CONST IN_ADDR in4addr_loopback; +extern CONST IN_ADDR in4addr_broadcast; +extern CONST IN_ADDR in4addr_allnodesonlink; +extern CONST IN_ADDR in4addr_allroutersonlink; +extern CONST IN_ADDR in4addr_alligmpv3routersonlink; +extern CONST IN_ADDR in4addr_allteredohostsonlink; +extern CONST IN_ADDR in4addr_linklocalprefix; +extern CONST IN_ADDR in4addr_multicastprefix; + +extern CONST IN6_ADDR in6addr_any; +extern CONST IN6_ADDR in6addr_loopback; +extern CONST IN6_ADDR in6addr_allnodesonnode; +extern CONST IN6_ADDR in6addr_allnodesonlink; +extern CONST IN6_ADDR in6addr_allroutersonlink; +extern CONST IN6_ADDR in6addr_allmldv2routersonlink; +extern CONST IN6_ADDR in6addr_teredoinitiallinklocaladdress; +extern CONST IN6_ADDR in6addr_linklocalprefix; +extern CONST IN6_ADDR in6addr_multicastprefix; +extern CONST IN6_ADDR in6addr_solicitednodemulticastprefix; +extern CONST IN6_ADDR in6addr_v4mappedprefix; +extern CONST IN6_ADDR in6addr_6to4prefix; +extern CONST IN6_ADDR in6addr_teredoprefix; +extern CONST IN6_ADDR in6addr_teredoprefix_old; + +#ifndef __midl + +WS2TCPIP_INLINE +BOOLEAN +IN6_ADDR_EQUAL(CONST IN6_ADDR *x, CONST IN6_ADDR *y) { + __int64 UNALIGNED *a; + __int64 UNALIGNED *b; + + a = (__int64 UNALIGNED *)x; + b = (__int64 UNALIGNED *)y; + return (BOOLEAN)((a[1] == b[1]) && (a[0] == b[0])); +} + +#define IN6_ARE_ADDR_EQUAL IN6_ADDR_EQUAL + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_UNSPECIFIED(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_words[0] == 0) && + (a->s6_words[1] == 0) && + (a->s6_words[2] == 0) && + (a->s6_words[3] == 0) && + (a->s6_words[4] == 0) && + (a->s6_words[5] == 0) && + (a->s6_words[6] == 0) && + (a->s6_words[7] == 0)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_LOOPBACK(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_words[0] == 0) && + (a->s6_words[1] == 0) && + (a->s6_words[2] == 0) && + (a->s6_words[3] == 0) && + (a->s6_words[4] == 0) && + (a->s6_words[5] == 0) && + (a->s6_words[6] == 0) && + (a->s6_words[7] == 0x0100)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MULTICAST(CONST IN6_ADDR *a) { + return (BOOLEAN)(a->s6_bytes[0] == 0xff); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_EUI64(CONST IN6_ADDR *a) { + return (BOOLEAN)(((a->s6_bytes[0] & 0xe0) != 0) && + !IN6_IS_ADDR_MULTICAST(a)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_EUI64(a) && + (a->s6_words[4] == 0) && + (a->s6_words[5] == 0) && + (a->s6_words[6] == 0) && + (a->s6_words[7] == 0)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_EUI64(a) && + (a->s6_words[4] == 0xfffd) && + (a->s6_words[5] == 0xffff) && + (a->s6_words[6] == 0xffff) && + ((a->s6_words[7] & 0x80ff) == 0x80ff)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_ANYCAST(CONST IN6_ADDR *a) { + return (IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST(a) || + IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST(a)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_LINKLOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_bytes[0] == 0xfe) && + ((a->s6_bytes[1] & 0xc0) == 0x80)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_SITELOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_bytes[0] == 0xfe) && + ((a->s6_bytes[1] & 0xc0) == 0xc0)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_GLOBAL(CONST IN6_ADDR *a) { + ULONG High = (a->s6_bytes[0] & 0xf0); + return (BOOLEAN)((High != 0) && (High != 0xf0)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_V4MAPPED(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_words[0] == 0) && + (a->s6_words[1] == 0) && + (a->s6_words[2] == 0) && + (a->s6_words[3] == 0) && + (a->s6_words[4] == 0) && + (a->s6_words[5] == 0xffff)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_V4COMPAT(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_words[0] == 0) && + (a->s6_words[1] == 0) && + (a->s6_words[2] == 0) && + (a->s6_words[3] == 0) && + (a->s6_words[4] == 0) && + (a->s6_words[5] == 0) && + !((a->s6_words[6] == 0) && + (a->s6_addr[14] == 0) && + ((a->s6_addr[15] == 0) || (a->s6_addr[15] == 1)))); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_V4TRANSLATED(CONST IN6_ADDR *a) { + return (BOOLEAN)((a->s6_words[0] == 0) && + (a->s6_words[1] == 0) && + (a->s6_words[2] == 0) && + (a->s6_words[3] == 0) && + (a->s6_words[4] == 0xffff) && + (a->s6_words[5] == 0)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MC_NODELOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_MULTICAST(a) && + ((a->s6_bytes[1] & 0xf) == 1)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MC_LINKLOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_MULTICAST(a) && + ((a->s6_bytes[1] & 0xf) == 2)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MC_SITELOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_MULTICAST(a) && + ((a->s6_bytes[1] & 0xf) == 5)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MC_ORGLOCAL(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_MULTICAST(a) && + ((a->s6_bytes[1] & 0xf) == 8)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6_IS_ADDR_MC_GLOBAL(CONST IN6_ADDR *a) { + return (BOOLEAN)(IN6_IS_ADDR_MULTICAST(a) && + ((a->s6_bytes[1] & 0xf) == 0xe)); +} + +WS2TCPIP_INLINE +VOID +IN6_SET_ADDR_UNSPECIFIED(PIN6_ADDR a) { + memset(a->s6_bytes, 0, sizeof(IN6_ADDR)); +} + +WS2TCPIP_INLINE +VOID +IN6_SET_ADDR_LOOPBACK(PIN6_ADDR a) { + memset(a->s6_bytes, 0, sizeof(IN6_ADDR)); + a->s6_bytes[15] = 1; +} + +WS2TCPIP_INLINE +VOID +IN6ADDR_SETANY(PSOCKADDR_IN6 a) { + a->sin6_family = AF_INET6; + a->sin6_port = 0; + a->sin6_flowinfo = 0; + IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr); + a->sin6_scope_id = 0; +} + +WS2TCPIP_INLINE +VOID +IN6ADDR_SETLOOPBACK(PSOCKADDR_IN6 a) { + a->sin6_family = AF_INET6; + a->sin6_port = 0; + a->sin6_flowinfo = 0; + IN6_SET_ADDR_LOOPBACK(&a->sin6_addr); + a->sin6_scope_id = 0; +} + +WS2TCPIP_INLINE +BOOLEAN +IN6ADDR_ISANY(CONST SOCKADDR_IN6 *a) { + WS2IPDEF_ASSERT(a->sin6_family == AF_INET6); + return IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6ADDR_ISLOOPBACK(CONST SOCKADDR_IN6 *a) { + WS2IPDEF_ASSERT(a->sin6_family == AF_INET6); + return IN6_IS_ADDR_LOOPBACK(&a->sin6_addr); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6ADDR_ISEQUAL(CONST SOCKADDR_IN6 *a, CONST SOCKADDR_IN6 *b) { + WS2IPDEF_ASSERT(a->sin6_family == AF_INET6); + return (BOOLEAN)(a->sin6_scope_id == b->sin6_scope_id && + IN6_ADDR_EQUAL(&a->sin6_addr, &b->sin6_addr)); +} + +WS2TCPIP_INLINE +BOOLEAN +IN6ADDR_ISUNSPECIFIED(CONST SOCKADDR_IN6 *a) { + WS2IPDEF_ASSERT(a->sin6_family == AF_INET6); + return (BOOLEAN)(a->sin6_scope_id == 0 && + IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); +} + +#endif /* __midl */ + +#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP1) */ + +typedef enum _MULTICAST_MODE_TYPE { + MCAST_INCLUDE = 0, + MCAST_EXCLUDE +} MULTICAST_MODE_TYPE; + +typedef struct ip_mreq { + IN_ADDR imr_multiaddr; + IN_ADDR imr_interface; +} IP_MREQ, *PIP_MREQ; + +typedef struct ip_mreq_source { + IN_ADDR imr_multiaddr; + IN_ADDR imr_sourceaddr; + IN_ADDR imr_interface; +} IP_MREQ_SOURCE, *PIP_MREQ_SOURCE; + +typedef struct ip_msfilter { + IN_ADDR imsf_multiaddr; + IN_ADDR imsf_interface; + MULTICAST_MODE_TYPE imsf_fmode; + ULONG imsf_numsrc; + IN_ADDR imsf_slist[1]; +} IP_MSFILTER, *PIP_MSFILTER; + +typedef struct ipv6_mreq { + IN6_ADDR ipv6mr_multiaddr; + ULONG ipv6mr_interface; +} IPV6_MREQ, *PIPV6_MREQ; + +#if (NTDDI_VERSION >= NTDDI_WINXP) + +typedef struct group_req { + ULONG gr_interface; + SOCKADDR_STORAGE gr_group; +} GROUP_REQ, *PGROUP_REQ; + +typedef struct group_source_req { + ULONG gsr_interface; + SOCKADDR_STORAGE gsr_group; + SOCKADDR_STORAGE gsr_source; +} GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ; + +typedef struct group_filter { + ULONG gf_interface; + SOCKADDR_STORAGE gf_group; + MULTICAST_MODE_TYPE gf_fmode; + ULONG gf_numsrc; + SOCKADDR_STORAGE gf_slist[1]; +} GROUP_FILTER, *PGROUP_FILTER; + +#define GROUP_FILTER_SIZE(numsrc) \ + (sizeof(GROUP_FILTER) - sizeof(SOCKADDR_STORAGE) \ + + (numsrc) * sizeof(SOCKADDR_STORAGE)) + +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ + +typedef struct in_pktinfo { + IN_ADDR ipi_addr; + ULONG ipi_ifindex; +} IN_PKTINFO, *PIN_PKTINFO; + +C_ASSERT(sizeof(IN_PKTINFO) == 8); + +typedef struct in6_pktinfo { + IN6_ADDR ipi6_addr; + ULONG ipi6_ifindex; +} IN6_PKTINFO, *PIN6_PKTINFO; + +C_ASSERT(sizeof(IN6_PKTINFO) == 20); #ifdef __cplusplus } #endif - -#endif