af062818b47340eef15700d2f0211576ba3506eevboxsync/*
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright (C) the Wine project
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
af062818b47340eef15700d2f0211576ba3506eevboxsync */
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync/*
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync */
ee6bcfc59fe3b0230aad85e2ef63d0402b7719b2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef _MSWSOCK_
af062818b47340eef15700d2f0211576ba3506eevboxsync#define _MSWSOCK_
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifdef __cplusplus
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern "C" {
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* defined(__cplusplus) */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_CONNDATA 0x7000
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_CONNOPT 0x7001
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_DISCDATA 0x7002
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_DISCOPT 0x7003
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_CONNDATALEN 0x7004
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_CONNOPTLEN 0x7005
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_DISCDATALEN 0x7006
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_DISCOPTLEN 0x7007
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_CONNDATA 0x7000
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_CONNOPT 0x7001
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_DISCDATA 0x7002
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_DISCOPT 0x7003
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_CONNDATALEN 0x7004
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_CONNOPTLEN 0x7005
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_DISCDATALEN 0x7006
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_DISCOPTLEN 0x7007
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_OPENTYPE 0x7008
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_OPENTYPE 0x7008
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_SYNCHRONOUS_ALERT 0x10
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_SYNCHRONOUS_NONALERT 0x20
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_SYNCHRONOUS_ALERT 0x10
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_SYNCHRONOUS_NONALERT 0x20
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_MAXDG 0x7009
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_MAXPATHDG 0x700A
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_UPDATE_ACCEPT_CONTEXT 0x700B
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_CONNECT_TIME 0x700C
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SO_UPDATE_CONNECT_CONTEXT 0x7010
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_MAXDG 0x7009
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_MAXPATHDG 0x700A
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_UPDATE_ACCEPT_CONTEXT 0x700B
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_CONNECT_TIME 0x700C
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SO_UPDATE_CONNECT_CONTEXT 0x7010
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TCP_BSDURGENT 0x7000
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_TCP_BSDURGENT 0x7000
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_SIO_UDP_CONNRESET _WSAIOW(WS_IOC_VENDOR,12)
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define DE_REUSE_SOCKET TF_REUSE_SOCKET
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef USE_WS_PREFIX
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MSG_TRUNC 0x0100
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MSG_CTRUNC 0x0200
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MSG_BCAST 0x0400
af062818b47340eef15700d2f0211576ba3506eevboxsync#define MSG_MCAST 0x0800
af062818b47340eef15700d2f0211576ba3506eevboxsync#else
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_MSG_TRUNC 0x0100
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_MSG_CTRUNC 0x0200
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_MSG_BCAST 0x0400
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WS_MSG_MCAST 0x0800
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_DISCONNECT 0x01
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_REUSE_SOCKET 0x02
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_WRITE_BEHIND 0x04
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_USE_DEFAULT_WORKER 0x00
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_USE_SYSTEM_THREAD 0x10
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TF_USE_KERNEL_APC 0x20
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_DISCONNECT TF_DISCONNECT
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_REUSE_SOCKET TF_REUSE_SOCKET
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_USE_DEFAULT_WORKER TF_USE_DEFAULT_WORKER
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_USE_SYSTEM_THREAD TF_USE_SYSTEM_THREAD
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_USE_KERNEL_APC TF_USE_KERNEL_APC
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_ELEMENT_MEMORY 1
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_ELEMENT_FILE 2
af062818b47340eef15700d2f0211576ba3506eevboxsync#define TP_ELEMENT_EOP 4
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_ACCEPTEX \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_CONNECTEX \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_DISCONNECTEX \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_GETACCEPTEXSOCKADDRS \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_TRANSMITFILE \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_TRANSMITPACKETS \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
af062818b47340eef15700d2f0211576ba3506eevboxsync#define WSAID_WSARECVMSG \
af062818b47340eef15700d2f0211576ba3506eevboxsync {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct _TRANSMIT_FILE_BUFFERS {
af062818b47340eef15700d2f0211576ba3506eevboxsync LPVOID Head;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD HeadLength;
af062818b47340eef15700d2f0211576ba3506eevboxsync LPVOID Tail;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD TailLength;
af062818b47340eef15700d2f0211576ba3506eevboxsync} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct _TRANSMIT_PACKETS_ELEMENT {
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG dwElFlags;
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG cLength;
af062818b47340eef15700d2f0211576ba3506eevboxsync union {
af062818b47340eef15700d2f0211576ba3506eevboxsync struct {
af062818b47340eef15700d2f0211576ba3506eevboxsync LARGE_INTEGER nFileOffset;
af062818b47340eef15700d2f0211576ba3506eevboxsync HANDLE hFile;
af062818b47340eef15700d2f0211576ba3506eevboxsync } DUMMYSTRUCTNAME;
af062818b47340eef15700d2f0211576ba3506eevboxsync PVOID pBuffer;
af062818b47340eef15700d2f0211576ba3506eevboxsync } DUMMYUNIONNAME;
af062818b47340eef15700d2f0211576ba3506eevboxsync} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct _WSAMSG {
af062818b47340eef15700d2f0211576ba3506eevboxsync LPSOCKADDR name;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT namelen;
af062818b47340eef15700d2f0211576ba3506eevboxsync LPWSABUF lpBuffers;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dwBufferCount;
af062818b47340eef15700d2f0211576ba3506eevboxsync WSABUF Control;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD dwFlags;
af062818b47340eef15700d2f0211576ba3506eevboxsync} WSAMSG, *PWSAMSG, *LPWSAMSG;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef struct _WSACMSGHDR {
af062818b47340eef15700d2f0211576ba3506eevboxsync SIZE_T cmsg_len;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT cmsg_level;
af062818b47340eef15700d2f0211576ba3506eevboxsync INT cmsg_type;
af062818b47340eef15700d2f0211576ba3506eevboxsync /* followed by UCHAR cmsg_data[] */
af062818b47340eef15700d2f0211576ba3506eevboxsync} WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR;
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct sockaddr *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct sockaddr **, LPINT, struct sockaddr **, LPINT);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD);
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef INT (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncBOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
af062818b47340eef15700d2f0211576ba3506eevboxsyncVOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct sockaddr **, LPINT, struct sockaddr **, LPINT);
af062818b47340eef15700d2f0211576ba3506eevboxsyncBOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
af062818b47340eef15700d2f0211576ba3506eevboxsyncINT WINAPI WSARecvEx(SOCKET, char *, INT, INT *);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifdef __cplusplus
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* _MSWSOCK_ */