source: trunk/include/win/winsock2.h@ 22018

Last change on this file since 22018 was 21552, checked in by abwillis, 15 years ago

Ticket #25 WSALookupServiceBeginA and W stubs.

File size: 15.8 KB
Line 
1/*
2 * Winsock 2 definitions - used for ws2_32.dll
3 *
4 * FIXME: Still missing required Winsock 2 definitions.
5 */
6
7#ifndef __WINSOCK2API__
8#define __WINSOCK2API__
9
10#include <winsock.h>
11
12/* proper 4-byte packing */
13#include <pshpack4.h>
14
15#define SO_GROUP_ID 0x2001
16#define SO_GROUP_PRIORITY 0x2002
17#define SO_MAX_MSG_SIZE 0x2003
18#define SO_PROTOCOL_INFOA 0x2004
19#define SO_PROTOCOL_INFOW 0x2005
20#define SO_PROTOCOL_INFO WINELIB_NAME_AW(SO_PROTOCOL_INFO)
21
22#define PVD_CONFIG 0x3001
23#define SO_CONDITIONAL_ACCEPT 0x3002
24
25
26/* option flags per socket */
27
28#define FD_MAX_EVENTS 10
29#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
30#define FD_READ_BIT 0
31#define FD_READ (1 << FD_READ_BIT)
32#define FD_WRITE_BIT 1
33#define FD_WRITE (1 << FD_WRITE_BIT)
34#define FD_OOB_BIT 2
35#define FD_OOB (1 << FD_OOB_BIT)
36#define FD_ACCEPT_BIT 3
37#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
38#define FD_CONNECT_BIT 4
39#define FD_CONNECT (1 << FD_CONNECT_BIT)
40#define FD_CLOSE_BIT 5
41#define FD_CLOSE (1 << FD_CLOSE_BIT)
42#define FD_QOS_BIT 6
43#define FD_QOS (1 << FD_QOS_BIT)
44#define FD_GROUP_QOS_BIT 7
45#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
46#define FD_ROUTING_INTERFACE_CHANGE_BIT 8
47#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
48#define FD_ADDRESS_LIST_CHANGE_BIT 9
49#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
50
51/* Constants for LPCONDITIONPROC */
52#define CF_ACCEPT 0x0000
53#define CF_REJECT 0x0001
54#define CF_DEFER 0x0002
55
56/* Constants for shutdown() */
57#define SD_RECEIVE 0x00
58#define SD_SEND 0x01
59#define SD_BOTH 0x02
60
61/*
62 * Constants for WSAIoctl()
63 */
64#define IOC_UNIX 0x00000000
65#define IOC_WS2 0x08000000
66#define IOC_PROTOCOL 0x10000000
67#define IOC_VENDOR 0x18000000
68#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
69#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
70#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
71#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
72#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
73#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
74#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
75#define SIO_FLUSH _WSAIO(IOC_WS2,4)
76#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
77#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
78#define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
79#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
80#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
81#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
82#define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
83#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
84#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
85#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
86#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
87#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
88#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
89#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_W32,24)
90#define SIO_GET_INTERFACE_LIST WS_IOR ('t', 127, u_long)
91
92/* Unfortunately the sockaddr_in6 structure doesn't
93 seem to be defined in a standard place, even across
94 different Linux distributions. Until IPv6 support settles
95 down, let's do our own here so the sockaddr_gen
96 union is the correct size.*/
97#ifdef s6_addr
98#undef s6_addr
99#endif
100
101struct ws_in_addr6
102{
103 unsigned char s6_addr[16]; /* IPv6 address */
104};
105struct ws_sockaddr_in6
106{
107 short sin6_family; /* AF_INET6 */
108 u_short sin6_port; /* Transport level port number */
109 u_long sin6_flowinfo; /* IPv6 flow information */
110 struct ws_in_addr6 sin6_addr; /* IPv6 address */
111};
112
113struct ws_in_addr
114{
115 union {
116 struct { BYTE s_b1,s_b2,s_b3,s_b4; } S_un_b;
117 struct { WORD s_w1,s_w2; } S_un_w;
118 UINT S_addr;
119 } S_un;
120#define ws_addr S_un.S_addr /* can be used for most tcp & ip code */
121#define ws_host S_un.S_un_b.s_b2 /* host on imp */
122#define ws_net S_un.S_un_b.s_b1 /* network */
123#define ws_imp S_un.S_un_w.s_w2 /* imp */
124#define ws_impno S_un.S_un_b.s_b4 /* imp # */
125#define ws_lh S_un.S_un_b.s_b3 /* logical host */
126};
127
128struct ws_sockaddr_in
129{
130 SHORT sin_family;
131 WORD sin_port;
132 struct ws_in_addr sin_addr;
133 BYTE sin_zero[8];
134};
135
136typedef union sockaddr_gen
137{
138 struct sockaddr Address;
139 struct ws_sockaddr_in AddressIn;
140 struct ws_sockaddr_in6 AddressIn6;
141} sockaddr_gen;
142
143/* ws_hostent, ws_protoent, ws_servent, ws_netent are 4-byte aligned here ! */
144
145typedef struct ws_hostent32
146{
147 char *h_name; /* official name of host */
148 char **h_aliases; /* alias list */
149 short h_addrtype; /* host address type */
150 short h_length; /* length of address */
151 char **h_addr_list; /* list of addresses from name server */
152} _ws_hostent32;
153
154typedef struct ws_protoent32
155{
156 char *p_name; /* official protocol name */
157 char **p_aliases; /* alias list */
158 short p_proto; /* protocol # */
159} _ws_protoent32;
160
161typedef struct ws_servent32
162{
163 char *s_name; /* official service name */
164 char **s_aliases; /* alias list */
165 short s_port; /* port # */
166 char *s_proto; /* protocol to use */
167} _ws_servent32;
168
169typedef struct ws_netent32
170{
171 char *n_name; /* official name of net */
172 char **n_aliases; /* alias list */
173 short n_addrtype; /* net address type */
174 u_long n_net; /* network # */
175} _ws_netent32;
176
177/* Structure to keep interface specific information */
178typedef struct _INTERFACE_INFO
179{
180 u_long iiFlags; /* Interface flags */
181 sockaddr_gen iiAddress; /* Interface address */
182 sockaddr_gen iiBroadcastAddress; /* Broadcast address */
183 sockaddr_gen iiNetmask; /* Network mask */
184} INTERFACE_INFO, * LPINTERFACE_INFO;
185
186/* Possible flags for the iiFlags - bitmask */
187#ifndef HAVE_NET_IF_H
188# define IFF_UP 0x00000001 /* Interface is up */
189# define IFF_BROADCAST 0x00000002 /* Broadcast is supported */
190# define IFF_LOOPBACK 0x00000004 /* this is loopback interface */
191# define IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */
192# define IFF_MULTICAST 0x00000010 /* multicast is supported */
193#endif
194
195#ifndef GUID_DEFINED
196#include "guiddef.h"
197#endif
198
199#define MAX_PROTOCOL_CHAIN 7
200#define BASE_PROTOCOL 1
201#define LAYERED_PROTOCOL 0
202
203typedef struct _WSAPROTOCOLCHAIN
204{
205 int ChainLen; /* the length of the chain, */
206 /* length = 0 means layered protocol, */
207 /* length = 1 means base protocol, */
208 /* length > 1 means protocol chain */
209 DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */
210} WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN;
211#define WSAPROTOCOL_LEN 255
212
213typedef struct _WSAPROTOCOL_INFOA
214{
215 DWORD dwServiceFlags1;
216 DWORD dwServiceFlags2;
217 DWORD dwServiceFlags3;
218 DWORD dwServiceFlags4;
219 DWORD dwProviderFlags;
220 GUID ProviderId;
221 DWORD dwCatalogEntryId;
222 WSAPROTOCOLCHAIN ProtocolChain;
223 int iVersion;
224 int iAddressFamily;
225 int iMaxSockAddr;
226 int iMinSockAddr;
227 int iSocketType;
228 int iProtocol;
229 int iProtocolMaxOffset;
230 int iNetworkByteOrder;
231 int iSecurityScheme;
232 DWORD dwMessageSize;
233 DWORD dwProviderReserved;
234 CHAR szProtocol[WSAPROTOCOL_LEN+1];
235} WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA;
236
237typedef struct _WSAPROTOCOL_INFOW
238{
239 DWORD dwServiceFlags1;
240 DWORD dwServiceFlags2;
241 DWORD dwServiceFlags3;
242 DWORD dwServiceFlags4;
243 DWORD dwProviderFlags;
244 GUID ProviderId;
245 DWORD dwCatalogEntryId;
246 WSAPROTOCOLCHAIN ProtocolChain;
247 int iVersion;
248 int iAddressFamily;
249 int iMaxSockAddr;
250 int iMinSockAddr;
251 int iSocketType;
252 int iProtocol;
253 int iProtocolMaxOffset;
254 int iNetworkByteOrder;
255 int iSecurityScheme;
256 DWORD dwMessageSize;
257 DWORD dwProviderReserved;
258 WCHAR szProtocol[WSAPROTOCOL_LEN+1];
259} WSAPROTOCOL_INFOW, * LPWSAPROTOCOL_INFOW;
260
261typedef struct _WSANETWORKEVENTS
262{
263 long lNetworkEvents;
264 int iErrorCode[FD_MAX_EVENTS];
265} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
266
267typedef struct _WSABUF
268{
269 ULONG len;
270 CHAR* buf;
271} WSABUF, *LPWSABUF;
272
273typedef struct _OVERLAPPED * LPWSAOVERLAPPED;
274typedef HANDLE WSAEVENT;
275
276#define WSA_IO_PENDING (ERROR_IO_PENDING)
277#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE)
278#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE)
279#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER)
280#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY)
281#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED)
282
283#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
284#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
285#define WSA_WAIT_FAILED ((DWORD)-1L)
286#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0)
287#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION)
288#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT)
289#define WSA_INFINITE (INFINITE)
290
291typedef unsigned int GROUP;
292#define SG_UNCONSTRAINED_GROUP 0x01
293#define SG_CONSTRAINED_GROUP 0x02
294
295#define WSAAPI FAR PASCAL
296
297/*
298 * FLOWSPEC and SERVICETYPE should eventually move to qos.h
299 */
300
301typedef ULONG SERVICETYPE;
302
303typedef struct _FLOWSPEC {
304 unsigned int TokenRate;
305 unsigned int TokenBucketSize;
306 unsigned int PeakBandwidth;
307 unsigned int Latency;
308 unsigned int DelayVariation;
309 SERVICETYPE ServiceType;
310 unsigned int MaxSduSize;
311 unsigned int MinimumPolicedSize;
312 } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
313
314typedef struct _QUALITYOFSERVICE {
315 FLOWSPEC SendingFlowspec;
316 FLOWSPEC ReceivingFlowspec;
317 WSABUF ProviderSpecific;
318 } QOS, *LPQOS;
319
320typedef int (* CALLBACK LPCONDITIONPROC)
321(
322 LPWSABUF lpCallerId,
323 LPWSABUF lpCallerData,
324 LPQOS lpSQOS,
325 LPQOS lpGQOS,
326 LPWSABUF lpCalleeId,
327 LPWSABUF lpCalleeData,
328 GROUP *g,
329 DWORD dwCallbackData
330);
331
332typedef void (* CALLBACK LPWSAOVERLAPPED_COMPLETION_ROUTINE)
333(
334 DWORD dwError,
335 DWORD cbTransferred,
336 LPWSAOVERLAPPED lpOverlapped,
337 DWORD dwFlags
338);
339
340#ifndef _tagBLOB_DEFINED
341#define _tagBLOB_DEFINED
342#define _BLOB_DEFINED
343#define _LPBLOB_DEFINED
344typedef struct _BLOB {
345 ULONG cbSize;
346 BYTE *pBlobData;
347} BLOB, *LPBLOB;
348#endif
349
350#ifndef __CSADDR_DEFINED__
351#define __CSADDR_DEFINED__
352
353typedef struct _SOCKET_ADDRESS {
354 LPSOCKADDR lpSockaddr;
355 INT iSockaddrLength;
356} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
357
358typedef struct _CSADDR_INFO {
359 SOCKET_ADDRESS LocalAddr;
360 SOCKET_ADDRESS RemoteAddr;
361 INT iSocketType;
362 INT iProtocol;
363} CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;
364#endif
365
366/*socket address list */
367typedef struct _SOCKET_ADDRESS_LIST {
368 INT iAddressCount;
369 SOCKET_ADDRESS Address[1];
370} SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;
371
372/* addressfamily protocol pairs */
373typedef struct _AFPROTOCOLS {
374 INT iAddressFamily;
375 INT iProtocol;
376} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
377
378/* client query definitions */
379typedef enum _WSAEcomparator {
380 COMP_EQUAL = 0,
381 COMP_NOTLESS
382} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
383
384typedef struct _WSAVersion {
385 DWORD dwVersion;
386 WSAECOMPARATOR ecHow;
387} WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
388
389
390typedef struct _WSAQuerySetA {
391 DWORD dwSize;
392 LPSTR lpszServiceInstanceName;
393 LPGUID lpServiceClassId;
394 LPWSAVERSION lpVersion;
395 LPSTR lpszComment;
396 DWORD dwNameSpace;
397 LPGUID lpNSProviderId;
398 LPSTR lpszContext;
399 DWORD dwNumberOfProtocols;
400 LPAFPROTOCOLS lpafpProtocols;
401 LPSTR lpszQueryString;
402 DWORD dwNumberOfCsAddrs;
403 LPCSADDR_INFO lpcsaBuffer;
404 DWORD dwOutputFlags;
405 LPBLOB lpBlob;
406} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
407
408typedef struct _WSAQuerySetW {
409 DWORD dwSize;
410 LPWSTR lpszServiceInstanceName;
411 LPGUID lpServiceClassId;
412 LPWSAVERSION lpVersion;
413 LPWSTR lpszComment;
414 DWORD dwNameSpace;
415 LPGUID lpNSProviderId;
416 LPWSTR lpszContext;
417 DWORD dwNumberOfProtocols;
418 LPAFPROTOCOLS lpafpProtocols;
419 LPWSTR lpszQueryString;
420 DWORD dwNumberOfCsAddrs;
421 LPCSADDR_INFO lpcsaBuffer;
422 DWORD dwOutputFlags;
423 LPBLOB lpBlob;
424} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
425
426DECL_WINELIB_TYPE_AW(WSAQUERYSET)
427DECL_WINELIB_TYPE_AW(PWSAQUERYSET)
428DECL_WINELIB_TYPE_AW(LPWSAQUERYSET)
429
430/* Function declarations */
431int WINAPI WSAEnumNetworkEvents(SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents);
432int WINAPI WSAEventSelect(SOCKET s, WSAEVENT hEventObject, long lNetworkEvents);
433WSAEVENT WINAPI WSACreateEvent(void);
434BOOL WINAPI WSACloseEvent(WSAEVENT event);
435SOCKET WINAPI WSASocketA(int af, int type, int protocol,
436 LPWSAPROTOCOL_INFOA lpProtocolInfo,
437 GROUP g, DWORD dwFlags);
438INT WINAPI WSASend(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
439 LPDWORD lpNumberOfBytesSent, DWORD dwFlags,
440 LPWSAOVERLAPPED lpOverlapped,
441 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
442INT WINAPI WSASendTo(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
443 LPDWORD lpNumberOfBytesSent, DWORD dwFlags,
444 const struct sockaddr *to, int tolen,
445 LPWSAOVERLAPPED lpOverlapped,
446 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
447int WINAPI WSASendDisconnect(SOCKET s, LPWSABUF lpOutboundDisconnectData);
448int WINAPI WSAIoctl(SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer,
449 DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer,
450 LPDWORD lpcbBytesReturned, LPWSAOVERLAPPED lpOverlapped,
451 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
452int WINAPI WSARecv (SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
453 LPDWORD lpNumberOfBytesReceived, LPDWORD lpFlags,
454 LPWSAOVERLAPPED lpOverlapped,
455 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
456INT WINAPI WSARecvFrom(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
457 LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom,
458 LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped,
459 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
460INT WINAPI WSALookupServiceBeginA( LPWSAQUERYSETA, DWORD, LPHANDLE);
461INT WINAPI WSALookupServiceBeginW( LPWSAQUERYSETW, DWORD, LPHANDLE);
462#define WSALookupServiceBegin WINELIB_NAME_AW(WSALookupServiceBegin)
463
464extern INT WINAPI ioctlsocket(SOCKET s, LONG cmd, ULONG *argp);
465
466#include <poppack.h>
467
468#endif
Note: See TracBrowser for help on using the repository browser.