:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / include / wsahelp.h
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS Winsock 2 DLL
4  * FILE:        include/wsahelp.h
5  * PURPOSE:     Header file for the WinSock 2 DLL
6  *              and WinSock 2 Helper DLLs
7  */
8 #ifndef __WSAHELP_H
9 #define __WSAHELP_H
10
11 #include <winsock2.h>
12
13 #ifdef __cplusplus
14 extern "C"
15 {
16 #endif /* __cplusplus */
17
18 #define WSH_NOTIFY_BIND             0x00000001
19 #define WSH_NOTIFY_LISTEN           0x00000002
20 #define WSH_NOTIFY_CONNECT          0x00000004
21 #define WSH_NOTIFY_ACCEPT           0x00000008
22 #define WSH_NOTIFY_SHUTDOWN_RECEIVE 0x00000010
23 #define WSH_NOTIFY_SHUTDOWN_SEND    0x00000020
24 #define WSH_NOTIFY_SHUTDOWN_ALL     0x00000040
25 #define WSH_NOTIFY_CLOSE            0x00000080
26 #define WSH_NOTIFY_CONNECT_ERROR    0x00000100
27
28 #define SOL_INTERNAL    0xFFFE
29
30 #define SO_CONTEXT  1
31
32 typedef enum _SOCKADDR_ADDRESS_INFO {
33     SockaddrAddressInfoNormal,
34     SockaddrAddressInfoWildcard,
35     SockaddrAddressInfoBroadcast,
36     SockaddrAddressInfoLoopback
37 } SOCKADDR_ADDRESS_INFO, *PSOCKADDR_ADDRESS_INFO;
38
39 typedef enum _SOCKADDR_ENDPOINT_INFO {
40     SockaddrEndpointInfoNormal,
41     SockaddrEndpointInfoWildcard,
42     SockaddrEndpointInfoReserved,
43 } SOCKADDR_ENDPOINT_INFO, *PSOCKADDR_ENDPOINT_INFO;
44
45
46 typedef struct _WINSOCK_MAPPING {
47     DWORD Rows;
48     DWORD Columns;
49     struct {
50         DWORD AddressFamily;
51         DWORD SocketType;
52         DWORD Protocol;
53     } Mapping[1];
54 } WINSOCK_MAPPING, *PWINSOCK_MAPPING;
55
56
57 typedef struct _SOCKADDR_INFO {
58     SOCKADDR_ADDRESS_INFO AddressInfo;
59     SOCKADDR_ENDPOINT_INFO EndpointInfo;
60 } SOCKADDR_INFO, *PSOCKADDR_INFO;
61  
62
63 INT
64 WINAPI
65 WSHAddressToString(
66     IN      LPSOCKADDR Address,
67     IN      INT AddressLength,
68     IN      LPWSAPROTOCOL_INFOW ProtocolInfo    OPTIONAL,
69     OUT     LPWSTR AddressString,
70     IN OUT  LPDWORD AddressStringLength);
71
72 INT
73 WINAPI
74 WSHEnumProtocols(
75     IN      LPINT lpiProtocols  OPTIONAL,
76     IN      LPWSTR lpTransportKeyName,
77     IN OUT  LPVOID lpProtocolBuffer,
78     IN OUT  LPDWORD lpdwBufferLength);
79
80 INT
81 WINAPI
82 WSHGetBroadcastSockaddr(
83     IN  PVOID HelperDllSocketContext,
84     OUT PSOCKADDR Sockaddr,
85     OUT PINT SockaddrLength);
86
87 INT
88 WINAPI
89 WSHGetProviderGuid(
90     IN  LPWSTR ProviderName,
91     OUT LPGUID ProviderGuid);
92
93 INT
94 WINAPI
95 WSHGetSockaddrType(
96     IN  PSOCKADDR Sockaddr,
97     IN  DWORD SockaddrLength,
98     OUT PSOCKADDR_INFO SockaddrInfo);
99
100 INT
101 WINAPI
102 WSHGetSocketInformation(
103     IN  PVOID HelperDllSocketContext,
104     IN  SOCKET SocketHandle,
105     IN  HANDLE TdiAddressObjectHandle,
106     IN  HANDLE TdiConnectionObjectHandle,
107     IN  INT Level,
108     IN  INT OptionName,
109     OUT PCHAR OptionValue,
110     OUT INT OptionLength);
111
112 INT
113 WINAPI
114 WSHGetWildcardSockaddr(
115     IN  PVOID HelperDllSocketContext,
116     OUT PSOCKADDR Sockaddr,
117     OUT PINT SockaddrLength);
118
119 DWORD
120 WINAPI
121 WSHGetWinsockMapping(
122     OUT PWINSOCK_MAPPING Mapping,
123     IN  DWORD MappingLength);
124
125 INT
126 WINAPI
127 WSHGetWSAProtocolInfo(
128     IN  LPWSTR ProviderName,
129     OUT LPWSAPROTOCOL_INFOW *ProtocolInfo,
130     OUT LPDWORD ProtocolInfoEntries);
131
132 INT
133 WINAPI
134 WSHIoctl(
135     IN  PVOID HelperDllSocketContext,
136     IN  SOCKET SocketHandle,
137     IN  HANDLE TdiAddressObjectHandle,
138     IN  HANDLE TdiConnectionObjectHandle,
139     IN  DWORD IoControlCode,
140     IN  LPVOID InputBuffer,
141     IN  DWORD InputBufferLength,
142     IN  LPVOID OutputBuffer,
143     IN  DWORD OutputBufferLength,
144     OUT LPDWORD NumberOfBytesReturned,
145     IN  LPWSAOVERLAPPED Overlapped,
146     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine,
147     OUT LPBOOL NeedsCompletion);
148
149 INT
150 WINAPI
151 WSHJoinLeaf(
152     IN  PVOID HelperDllSocketContext,
153     IN  SOCKET SocketHandle,
154     IN  HANDLE TdiAddressObjectHandle,
155     IN  HANDLE TdiConnectionObjectHandle,
156     IN  PVOID LeafHelperDllSocketContext,
157     IN  SOCKET LeafSocketHandle,
158     IN  PSOCKADDR Sockaddr,
159     IN  DWORD SockaddrLength,
160     IN  LPWSABUF CallerData,
161     IN  LPWSABUF CalleeData,
162     IN  LPQOS SocketQOS,
163     IN  LPQOS GroupQOS,
164     IN  DWORD Flags);
165
166 INT
167 WINAPI
168 WSHNotify(
169     IN  PVOID HelperDllSocketContext,
170     IN  SOCKET SocketHandle,
171     IN  HANDLE TdiAddressObjectHandle,
172     IN  HANDLE TdiConnectionObjectHandle,
173     IN  DWORD NotifyEvent);
174
175 INT
176 WINAPI
177 WSHOpenSocket(
178     IN OUT  PINT AddressFamily,
179     IN OUT  PINT SocketType,
180     IN OUT  PINT Protocol,
181     OUT     PUNICODE_STRING TransportDeviceName,
182     OUT     PVOID HelperDllSocketContext,
183     OUT     PDWORD NotificationEvents);
184
185 INT
186 WINAPI
187 WSHOpenSocket2(
188     OUT PINT AddressFamily,
189     IN  OUT PINT SocketType,
190     IN  OUT PINT Protocol,
191     IN  GROUP Group,
192     IN  DWORD Flags,
193     OUT PUNICODE_STRING TransportDeviceName,
194     OUT PVOID *HelperDllSocketContext,
195     OUT PDWORD NotificationEvents);
196
197 INT
198 WINAPI
199 WSHSetSocketInformation(
200     IN  PVOID HelperDllSocketContext,
201     IN  SOCKET SocketHandle,
202     IN  HANDLE TdiAddressObjectHandle,
203     IN  HANDLE TdiConnectionObjectHandle,
204     IN  INT Level,
205     IN  INT OptionName,
206     IN  PCHAR OptionValue,
207     IN  INT OptionLength);
208
209 INT
210 WINAPI
211 WSHStringToAddress(
212     IN      LPWSTR AddressString,
213     IN      DWORD AddressFamily,
214     IN      LPWSAPROTOCOL_INFOW ProtocolInfo    OPTIONAL,
215     OUT     LPSOCKADDR Address,
216     IN OUT  LPDWORD AddressStringLength);
217
218
219
220 typedef INT (WINAPI * PWSH_ADDRESS_TO_STRING)(
221     IN      LPSOCKADDR Address,
222     IN      INT AddressLength,
223     IN      LPWSAPROTOCOL_INFOW ProtocolInfo    OPTIONAL,
224     OUT     LPWSTR AddressString,
225     IN OUT  LPDWORD AddressStringLength);
226
227 typedef INT (WINAPI * PWSH_ENUM_PROTOCOLS)(
228     IN      LPINT lpiProtocols  OPTIONAL,
229     IN      LPWSTR lpTransportKeyName,
230     IN OUT  LPVOID lpProtocolBuffer,
231     IN OUT  LPDWORD lpdwBufferLength);
232
233 typedef INT (WINAPI * PWSH_GET_BROADCAST_SOCKADDR)(
234     IN  PVOID HelperDllSocketContext,
235     OUT PSOCKADDR Sockaddr,
236     OUT PINT SockaddrLength);
237
238 typedef INT (WINAPI * PWSH_GET_PROVIDER_GUID)(
239     IN  LPWSTR ProviderName,
240     OUT LPGUID ProviderGuid);
241
242 typedef INT (WINAPI * PWSH_GET_SOCKADDR_TYPE)(
243     IN  PSOCKADDR Sockaddr,
244     IN  DWORD SockaddrLength,
245     OUT PSOCKADDR_INFO SockaddrInfo);
246
247 typedef INT (WINAPI * PWSH_GET_SOCKET_INFORMATION)(
248     IN  PVOID HelperDllSocketContext,
249     IN  SOCKET SocketHandle,
250     IN  HANDLE TdiAddressObjectHandle,
251     IN  HANDLE TdiConnectionObjectHandle,
252     IN  INT Level,
253     IN  INT OptionName,
254     OUT PCHAR OptionValue,
255     OUT INT OptionLength);
256
257 typedef INT (WINAPI * PWSH_GET_WILDCARD_SOCKEADDR)(
258     IN  PVOID HelperDllSocketContext,
259     OUT PSOCKADDR Sockaddr,
260     OUT PINT SockaddrLength);
261
262 typedef DWORD (WINAPI * PWSH_GET_WINSOCK_MAPPING)(
263     OUT PWINSOCK_MAPPING Mapping,
264     IN  DWORD MappingLength);
265
266 typedef INT (WINAPI * PWSH_GET_WSAPROTOCOL_INFO)(
267     IN  LPWSTR ProviderName,
268     OUT LPWSAPROTOCOL_INFOW *ProtocolInfo,
269     OUT LPDWORD ProtocolInfoEntries);
270
271 typedef INT (WINAPI * PWSH_IOCTL)(
272     IN  PVOID HelperDllSocketContext,
273     IN  SOCKET SocketHandle,
274     IN  HANDLE TdiAddressObjectHandle,
275     IN  HANDLE TdiConnectionObjectHandle,
276     IN  DWORD IoControlCode,
277     IN  LPVOID InputBuffer,
278     IN  DWORD InputBufferLength,
279     IN  LPVOID OutputBuffer,
280     IN  DWORD OutputBufferLength,
281     OUT LPDWORD NumberOfBytesReturned,
282     IN  LPWSAOVERLAPPED Overlapped,
283     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine,
284     OUT LPBOOL NeedsCompletion);
285
286 typedef INT (WINAPI * PWSH_JOIN_LEAF)(
287     IN  PVOID HelperDllSocketContext,
288     IN  SOCKET SocketHandle,
289     IN  HANDLE TdiAddressObjectHandle,
290     IN  HANDLE TdiConnectionObjectHandle,
291     IN  PVOID LeafHelperDllSocketContext,
292     IN  SOCKET LeafSocketHandle,
293     IN  PSOCKADDR Sockaddr,
294     IN  DWORD SockaddrLength,
295     IN  LPWSABUF CallerData,
296     IN  LPWSABUF CalleeData,
297     IN  LPQOS SocketQOS,
298     IN  LPQOS GroupQOS,
299     IN  DWORD Flags);
300
301 typedef INT (WINAPI * PWSH_NOTIFY)(
302     IN  PVOID HelperDllSocketContext,
303     IN  SOCKET SocketHandle,
304     IN  HANDLE TdiAddressObjectHandle,
305     IN  HANDLE TdiConnectionObjectHandle,
306     IN  DWORD NotifyEvent);
307
308 typedef INT (WINAPI * PWSH_OPEN_SOCKET)(
309     IN OUT  PINT AddressFamily,
310     IN OUT  PINT SocketType,
311     IN OUT  PINT Protocol,
312     OUT     PUNICODE_STRING TransportDeviceName,
313     OUT     PVOID HelperDllSocketContext,
314     OUT     PDWORD NotificationEvents);
315
316 typedef INT (WINAPI * PWSH_OPEN_SOCKET2)(
317     OUT PINT AddressFamily,
318     IN  OUT PINT SocketType,
319     IN  OUT PINT Protocol,
320     IN  GROUP Group,
321     IN  DWORD Flags,
322     OUT PUNICODE_STRING TransportDeviceName,
323     OUT PVOID *HelperDllSocketContext,
324     OUT PDWORD NotificationEvents);
325
326 typedef INT (WINAPI * PWSH_SET_SOCKET_INFORMATION)(
327     IN  PVOID HelperDllSocketContext,
328     IN  SOCKET SocketHandle,
329     IN  HANDLE TdiAddressObjectHandle,
330     IN  HANDLE TdiConnectionObjectHandle,
331     IN  INT Level,
332     IN  INT OptionName,
333     IN  PCHAR OptionValue,
334     IN  INT OptionLength);
335
336 typedef INT (WINAPI * PWSH_STRING_TO_ADDRESS)(
337     IN      LPWSTR AddressString,
338     IN      DWORD AddressFamily,
339     IN      LPWSAPROTOCOL_INFOW ProtocolInfo    OPTIONAL,
340     OUT     LPSOCKADDR Address,
341     IN OUT  LPDWORD AddressStringLength);
342
343 #ifdef __cplusplus
344 };
345 #endif /* __cplusplus */
346
347 #endif /* __WSAHELP_H */
348
349 /* EOF */