/*
 *  ws2tcpip.h  Windows Sockets (version 2) TCP/IP functions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _WS2TCPIP_H_
#define _WS2TCPIP_H_

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

#include <winsock2.h>
#include <ws2ipdef.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Windows Sockets TCP/IP primitive data types */
typedef int socklen_t;

/* UDP socket options */
#define UDP_NOCHECKSUM          1
#define UDP_CHECKSUM_COVERAGE   20

/* Error codes for getaddrinfo() */
#define EAI_AGAIN           WSATRY_AGAIN
#define EAI_BADFLAGS        WSAEINVAL
#define EAI_FAIL            WSANO_RECOVERY
#define EAI_FAMILY          WSAEAFNOSUPPORT
#define EAI_MEMORY          WSA_NOT_ENOUGH_MEMORY
#define EAI_NOSECURENAME    WSA_SECURE_HOST_NOT_FOUND
#define EAI_NONAME          WSAHOST_NOT_FOUND
#define EAI_SERVICE         WSATYPE_NOT_FOUND
#define EAI_SOCKTYPE        WSAESOCKTNOSUPPORT
#define EAI_IPSECPOLICY     WSA_IPSEC_NAME_POLICY_ERROR
#define EAI_NODATA          EAI_NONAME

/* Maximum sizes */
#define GAI_STRERROR_BUFFER_SIZE    1024

/* Address information (structure defined in ws2def.h) */
#ifdef UNICODE
typedef ADDRINFOW   ADDRINFOT;
typedef ADDRINFOW   *PADDRINFOT;
#else
typedef ADDRINFOA   ADDRINFOT;
typedef ADDRINFOA   *PADDRINFOT;
#endif
typedef ADDRINFOA   ADDRINFO;
typedef ADDRINFOA   *LPADDRINFO;

/* Address information (extended version) (structure defined in ws2def.h) */
#if (_WIN32_WINNT >= 0x0600)
#ifdef UNICODE
typedef ADDRINFOEXW     ADDRINFOEX;
typedef ADDRINFOEXW     *PADDRINFOEX;
#else
typedef ADDRINFOEXA     ADDRINFOEX;
typedef ADDRINFOEXA     *PADDRINFOEX;
#endif
#endif

/* Lookup service completion routine */
#if (_WIN32_WINNT >= 0x0600)
typedef void (CALLBACK *LPLOOKUPSERVICE_COMPLETION_ROUTINE)( DWORD, DWORD, LPWSAOVERLAPPED );
#endif

/* Functions in WS2_32.DLL */
WINSOCK_API_LINKAGE VOID WSAAPI     freeaddrinfo( PADDRINFOA );
WINSOCK_API_LINKAGE INT WSAAPI      getaddrinfo( PCSTR, PCSTR, const ADDRINFOA *, PADDRINFOA * );
WINSOCK_API_LINKAGE INT WSAAPI      getnameinfo( const SOCKADDR *, socklen_t, PCHAR, DWORD, PCHAR, DWORD, INT );
#if (_WIN32_WINNT >= 0x0600)
WINSOCK_API_LINKAGE void WSAAPI     FreeAddrInfoEx( PADDRINFOEXA );
WINSOCK_API_LINKAGE void WSAAPI     FreeAddrInfoExW( PADDRINFOEXW );
WINSOCK_API_LINKAGE INT WSAAPI      GetAddrInfoExA( PCSTR, PCSTR, DWORD, LPGUID, const ADDRINFOEXA *, PADDRINFOEXA *, struct timeval *, LPOVERLAPPED, LPLOOKUPSERVICE_COMPLETION_ROUTINE, LPHANDLE );
WINSOCK_API_LINKAGE INT WSAAPI      GetAddrInfoExW( PCWSTR, PCWSTR, DWORD, LPGUID, const ADDRINFOEXW *, PADDRINFOEXW *, struct timeval *, LPOVERLAPPED, LPLOOKUPSERVICE_COMPLETION_ROUTINE, LPHANDLE );
WINSOCK_API_LINKAGE INT WSAAPI      SetAddrInfoExA( PCSTR, PCSTR, SOCKET_ADDRESS *, DWORD, LPBLOB, DWORD, DWORD, LPGUID, struct timeval *, LPOVERLAPPED, LPLOOKUPSERVICE_COMPLETION_ROUTINE, LPHANDLE );
WINSOCK_API_LINKAGE INT WSAAPI      SetAddrInfoExW( PCWSTR, PCWSTR, SOCKET_ADDRESS *, DWORD, LPBLOB, DWORD, DWORD, LPGUID, struct timeval *, LPOVERLAPPED, LPLOOKUPSERVICE_COMPLETION_ROUTINE, LPHANDLE );
#endif
#if (NTDDI_VERSION >= 0x05010200) || (_WIN32_WINNT >= 0x0502)
WINSOCK_API_LINKAGE VOID WSAAPI     FreeAddrInfoW( PADDRINFOW );
WINSOCK_API_LINKAGE INT WSAAPI      GetAddrInfoW( PCWSTR, PCWSTR, const ADDRINFOW *, PADDRINFOW * );
WINSOCK_API_LINKAGE INT WSAAPI      GetNameInfoW( const SOCKADDR *, socklen_t, PWCHAR, DWORD, PWCHAR, DWORD, INT );
#endif
#if (NTDDI_VERSION >= 0x06000000)
WINSOCK_API_LINKAGE PCWSTR WSAAPI   InetNtopW( INT, PVOID, PWSTR, size_t );
WINSOCK_API_LINKAGE INT WSAAPI      InetPtonW( INT, PCWSTR, PVOID );
WINSOCK_API_LINKAGE PCSTR WSAAPI    inet_ntop( INT, PVOID, PSTR, size_t );
WINSOCK_API_LINKAGE INT WSAAPI      inet_pton( INT, PCSTR, PVOID );
#endif

/* Aliases */
#if (_WIN32_WINNT >= 0x0600)
    #define FreeAddrInfoExA FreeAddrInfoEx
#endif
#if (NTDDI_VERSION >= 0x05010200) || (_WIN32_WINNT >= 0x0502)
    #define FreeAddrInfoA   freeaddrinfo
    #define GetAddrInfoA    getaddrinfo
    #define GetNameInfoA    getnameinfo
#endif
#if (NTDDI_VERSION >= 0x06000000)
    #define InetNtopA       inet_ntop
    #define InetPtonA       inet_pton
#endif

/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
    #if (_WIN32_WINNT >= 0x0600)
        #define FreeAddrInfoEx  FreeAddrInfoExW
        #define GetAddrInfoEx   GetAddrInfoExW
        #define SetAddrInfoEx   SetAddrInfoExW
    #endif
    #if (NTDDI_VERSION >= 0x05010200) || (_WIN32_WINNT >= 0x0502)
        #define FreeAddrInfo    FreeAddrInfoW
        #define GetAddrInfo     GetAddrInfoW
        #define GetNameInfo     GetNameInfoW
    #endif
    #if (NTDDI_VERSION >= 0x06000000)
        #define InetNtop        InetNtopW
        #define InetPton        InetPtonW
    #endif
#else
    #if (_WIN32_WINNT >= 0x0600)
        #define GetAddrInfoEx   GetAddrInfoExA
        #define SetAddrInfoEx   SetAddrInfoExW
    #endif
    #if (NTDDI_VERSION >= 0x05010200) || (_WIN32_WINNT >= 0x0502)
        #define FreeAddrInfo    FreeAddrInfoA
        #define GetAddrInfo     GetAddrInfoW
        #define GetNameInfo     GetNameInfoA
    #endif
    #if (NTDDI_VERSION >= 0x06000000)
        #define InetNtop        InetNtopA
        #define InetPton        InetPtonA
    #endif
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* _WS2TCPIP_H_ */
