Avoid buffer overflows in builtin dll loading (with the help of Dmitry
[wine/multimedia.git] / include / winsock2.h
blob4f88973a67ccbba16c43fc65747f97975f9694ab
1 /*
2 * Winsock 2 definitions - used for ws2_32.dll
4 * FIXME: Still missing required Winsock 2 definitions.
5 */
7 #ifndef __WINSOCK2API__
8 #define __WINSOCK2API__
10 #include "winsock.h"
11 #include "wtypes.h"
13 /* proper 4-byte packing */
14 #include "pshpack4.h"
16 #define FD_MAX_EVENTS 10
17 #define FD_READ_BIT 0
18 #define FD_WRITE_BIT 1
19 #define FD_OOB_BIT 2
20 #define FD_ACCEPT_BIT 3
21 #define FD_CONNECT_BIT 4
22 #define FD_CLOSE_BIT 5
25 * Constants for WSAIoctl()
27 #define IOC_UNIX 0x00000000
28 #define IOC_WS2 0x08000000
29 #define IOC_PROTOCOL 0x10000000
30 #define IOC_VENDOR 0x18000000
31 #define _WSAIO(x,y) (IOC_VOID|(x)|(y))
32 #define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
33 #define _WSAIOW(x,y) (IOC_IN|(x)|(y))
34 #define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
35 #define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
36 #define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
37 #define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
38 #define SIO_FLUSH _WSAIO(IOC_WS2,4)
39 #define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
40 #define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
41 #define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
42 #define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
43 #define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
44 #define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
45 #define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
46 #define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
47 #define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
48 #define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
49 #define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
50 #define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
51 #define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
52 #define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_W32,24)
53 #define SIO_GET_INTERFACE_LIST WS_IOR ('t', 127, u_long)
55 /* Unfortunately the sockaddr_in6 structure doesn't
56 seem to be defined in a standard place, even across
57 different Linux distributions. Until IPv6 support settles
58 down, let's do our own here so the sockaddr_gen
59 union is the correct size.*/
60 #ifdef s6_addr
61 #undef s6_addr
62 #endif
64 struct ws_in_addr6
66 unsigned char s6_addr[16]; /* IPv6 address */
68 struct ws_sockaddr_in6
70 short sin6_family; /* AF_INET6 */
71 u_short sin6_port; /* Transport level port number */
72 u_long sin6_flowinfo; /* IPv6 flow information */
73 struct ws_in_addr6 sin6_addr; /* IPv6 address */
76 typedef union sockaddr_gen
78 struct sockaddr Address;
79 struct ws_sockaddr_in AddressIn;
80 struct ws_sockaddr_in6 AddressIn6;
81 } sockaddr_gen;
83 /* ws_hostent, ws_protoent, ws_servent, ws_netent are 4-byte aligned here ! */
85 typedef struct ws_hostent32
87 char *h_name; /* official name of host */
88 char **h_aliases; /* alias list */
89 short h_addrtype; /* host address type */
90 short h_length; /* length of address */
91 char **h_addr_list; /* list of addresses from name server */
92 } _ws_hostent32;
94 typedef struct ws_protoent32
96 char *p_name; /* official protocol name */
97 char **p_aliases; /* alias list */
98 short p_proto; /* protocol # */
99 } _ws_protoent32;
101 typedef struct ws_servent32
103 char *s_name; /* official service name */
104 char **s_aliases; /* alias list */
105 short s_port; /* port # */
106 char *s_proto; /* protocol to use */
107 } _ws_servent32;
109 typedef struct ws_netent32
111 char *n_name; /* official name of net */
112 char **n_aliases; /* alias list */
113 short n_addrtype; /* net address type */
114 u_long n_net; /* network # */
115 } _ws_netent32;
117 /* Structure to keep interface specific information */
118 typedef struct _INTERFACE_INFO
120 u_long iiFlags; /* Interface flags */
121 sockaddr_gen iiAddress; /* Interface address */
122 sockaddr_gen iiBroadcastAddress; /* Broadcast address */
123 sockaddr_gen iiNetmask; /* Network mask */
124 } INTERFACE_INFO, * LPINTERFACE_INFO;
126 /* Possible flags for the iiFlags - bitmask */
127 #ifndef HAVE_NET_IF_H
128 # define IFF_UP 0x00000001 /* Interface is up */
129 # define IFF_BROADCAST 0x00000002 /* Broadcast is supported */
130 # define IFF_LOOPBACK 0x00000004 /* this is loopback interface */
131 # define IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */
132 # define IFF_MULTICAST 0x00000010 /* multicast is supported */
133 #endif
135 #define MAX_PROTOCOL_CHAIN 7
136 #define BASE_PROTOCOL 1
137 #define LAYERED_PROTOCOL 0
139 typedef struct _WSAPROTOCOLCHAIN
141 int ChainLen; /* the length of the chain, */
142 /* length = 0 means layered protocol, */
143 /* length = 1 means base protocol, */
144 /* length > 1 means protocol chain */
145 DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */
146 } WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN;
147 #define WSAPROTOCOL_LEN 255
149 typedef struct _WSAPROTOCOL_INFOA
151 DWORD dwServiceFlags1;
152 DWORD dwServiceFlags2;
153 DWORD dwServiceFlags3;
154 DWORD dwServiceFlags4;
155 DWORD dwProviderFlags;
156 GUID ProviderId;
157 DWORD dwCatalogEntryId;
158 WSAPROTOCOLCHAIN ProtocolChain;
159 int iVersion;
160 int iAddressFamily;
161 int iMaxSockAddr;
162 int iMinSockAddr;
163 int iSocketType;
164 int iProtocol;
165 int iProtocolMaxOffset;
166 int iNetworkByteOrder;
167 int iSecurityScheme;
168 DWORD dwMessageSize;
169 DWORD dwProviderReserved;
170 CHAR szProtocol[WSAPROTOCOL_LEN+1];
171 } WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA;
173 typedef struct _WSANETWORKEVENTS
175 long lNetworkEvents;
176 int iErrorCode[FD_MAX_EVENTS];
177 } WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
179 typedef struct _OVERLAPPED * LPWSAOVERLAPPED;
180 typedef HANDLE WSAEVENT;
181 typedef unsigned int GROUP;
183 typedef void
184 (CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)
186 DWORD dwError,
187 DWORD cbTransferred,
188 LPWSAOVERLAPPED lpOverlapped,
189 DWORD dwFlags
193 /* Function declarations */
194 int WINAPI WSAEnumNetworkEvents(SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents);
195 int WINAPI WSAEventSelect(SOCKET s, WSAEVENT hEventObject, long lNetworkEvents);
196 WSAEVENT WINAPI WSACreateEvent(void);
197 BOOL WINAPI WSACloseEvent(WSAEVENT event);
198 SOCKET WINAPI WSASocketA(int af, int type, int protocol,
199 LPWSAPROTOCOL_INFOA lpProtocolInfo,
200 GROUP g, DWORD dwFlags);
202 #include "poppack.h"
204 #endif