OSDN Git Service

Prepare environment for Earnie's tools.
[mingw/mingw-org-wsl.git] / wslapi / include / ws2spi.h
1 /*
2  * ws2spi.h
3  *
4  * Winsock 2 Service Provider Interface.
5  *
6  *
7  * THIS SOFTWARE IS NOT COPYRIGHTED
8  *
9  * This source code is offered for use in the public domain. You may
10  * use, modify or distribute it freely.
11  *
12  * This code is distributed in the hope that it will be useful but
13  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
14  * DISCLAIMED. This includes but is not limited to warranties of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  *
17  */
18 #ifndef _WS2SPI_H
19 #define _WS2SPI_H
20 #if __GNUC__ >= 3
21 #pragma GCC system_header
22 #endif
23
24 #include <winsock2.h>
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* __cplusplus */
29
30 #define WSPAPI WSAAPI
31 #define WSPDESCRIPTION_LEN 255
32
33 #ifndef RC_INVOKED
34
35 typedef struct WSPData {
36         WORD wVersion;
37         WORD wHighVersion;
38         WCHAR szDescription[WSPDESCRIPTION_LEN+1];
39 } WSPDATA, FAR *LPWSPDATA;
40 typedef struct _WSATHREADID {
41         HANDLE ThreadHandle;
42         DWORD Reserved;
43 } WSATHREADID, FAR *LPWSATHREADID;
44
45 typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD);
46 typedef VOID (CALLBACK FAR *LPWSAUSERAPC)(DWORD);
47
48 /* Prototypes for service provider procedure table */
49 typedef SOCKET (WSPAPI *LPWSPACCEPT)(SOCKET,LPSOCKADDR,LPINT,LPCONDITIONPROC,DWORD,LPINT);
50 typedef INT (WSPAPI *LPWSPADDRESSTOSTRING)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD,LPINT);
51 typedef INT (WSPAPI *LPWSPASYNCSELECT)(SOCKET,HWND,UINT,LONG,LPINT);
52 typedef INT (WSPAPI *LPWSPBIND)(SOCKET,const struct sockaddr*,INT,LPINT);
53 typedef INT (WSPAPI *LPWSPCANCELBLOCKINGCALL)(LPINT);
54 typedef INT (WSPAPI *LPWSPCLEANUP)(LPINT);
55 typedef INT (WSPAPI *LPWSPCLOSESOCKET)(SOCKET,LPINT);
56 typedef INT (WSPAPI *LPWSPCONNECT)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,LPINT);
57 typedef INT (WSPAPI *LPWSPDUPLICATESOCKET)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW,LPINT);
58 typedef INT (WSPAPI *LPWSPENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS,LPINT);
59 typedef INT (WSPAPI *LPWSPEVENTSELECT)(SOCKET,WSAEVENT,LONG,LPINT);
60 typedef BOOL (WSPAPI *LPWSPGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD,LPINT);
61 typedef INT (WSPAPI *LPWSPGETPEERNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
62 typedef BOOL (WSPAPI *LPWSPGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS,LPINT);
63 typedef INT (WSPAPI *LPWSPGETSOCKNAME)(SOCKET,LPSOCKADDR,LPINT,LPINT);
64 typedef INT (WSPAPI *LPWSPGETSOCKOPT)(SOCKET,INT,INT,CHAR FAR*,LPINT,LPINT);
65 typedef INT (WSPAPI *LPWSPIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,
66              LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
67 typedef SOCKET (WSPAPI *LPWSPJOINLEAF)(SOCKET,const struct sockaddr*,INT,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD,LPINT);
68 typedef INT (WSPAPI *LPWSPLISTEN)(SOCKET,INT,LPINT);
69 typedef INT (WSPAPI *LPWSPRECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,
70 LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
71 typedef INT (WSPAPI *LPWSPRECVDISCONNECT)(SOCKET,LPWSABUF,LPINT);
72 typedef INT (WSPAPI *LPWSPRECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPSOCKADDR,
73 LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
74 typedef INT (WSPAPI *LPWSPSELECT)(INT,LPFD_SET,LPFD_SET,LPFD_SET,CONST TIMEVAL*,LPINT);
75 typedef INT (WSPAPI *LPWSPSEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,
76 LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
77 typedef INT (WSPAPI *LPWSPSENDDISCONNECT)(SOCKET,LPWSABUF,LPINT);
78 typedef INT (WSPAPI *LPWSPSENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct sockaddr*,
79              INT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE,LPWSATHREADID,LPINT);
80 typedef INT (WSPAPI *LPWSPSETSOCKOPT)(SOCKET,INT,INT,CONST CHAR FAR*,INT,LPINT);
81 typedef INT (WSPAPI *LPWSPSHUTDOWN)(SOCKET,INT,LPINT);
82 typedef SOCKET (WSPAPI *LPWSPSOCKET)(INT,INT,INT,LPWSAPROTOCOL_INFOW,GROUP,DWORD,LPINT);
83 typedef INT (WSPAPI *LPWSPSTRINGTOADDRESS)(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT,LPINT);
84
85 /* Service provider procedure table */
86 typedef struct _WSPPROC_TABLE {
87   LPWSPACCEPT lpWSPAccept;
88   LPWSPADDRESSTOSTRING lpWSPAddressToString;
89   LPWSPASYNCSELECT lpWSPAsyncSelect;
90   LPWSPBIND lpWSPBind;
91   LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
92   LPWSPCLEANUP lpWSPCleanup;
93   LPWSPCLOSESOCKET lpWSPCloseSocket;
94   LPWSPCONNECT lpWSPConnect;
95   LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
96   LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
97   LPWSPEVENTSELECT lpWSPEventSelect;
98   LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
99   LPWSPGETPEERNAME lpWSPGetPeerName;
100   LPWSPGETSOCKNAME lpWSPGetSockName;
101   LPWSPGETSOCKOPT lpWSPGetSockOpt;
102   LPWSPGETQOSBYNAME lpWSPGetQOSByName;
103   LPWSPIOCTL lpWSPIoctl;
104   LPWSPJOINLEAF lpWSPJoinLeaf;
105   LPWSPLISTEN lpWSPListen;
106   LPWSPRECV lpWSPRecv;
107   LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
108   LPWSPRECVFROM lpWSPRecvFrom;
109   LPWSPSELECT lpWSPSelect;
110   LPWSPSEND lpWSPSend;
111   LPWSPSENDDISCONNECT lpWSPSendDisconnect;
112   LPWSPSENDTO lpWSPSendTo;
113   LPWSPSETSOCKOPT lpWSPSetSockOpt;
114   LPWSPSHUTDOWN lpWSPShutdown;
115   LPWSPSOCKET lpWSPSocket;
116   LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
117 } WSPPROC_TABLE, FAR* LPWSPPROC_TABLE;
118
119 /* Prototypes for service provider upcall procedure table */
120 typedef BOOL (WSPAPI *LPWPUCLOSEEVENT)(WSAEVENT,LPINT);
121 typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE)(SOCKET,LPINT);
122 typedef INT (WSPAPI *LPWPUCLOSETHREAD)(LPWSATHREADID,LPINT);
123 typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT)(LPINT);
124 typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD,DWORD,LPINT);
125 typedef SOCKET (WSPAPI *LPWPUFDISSET)(SOCKET,LPFD_SET);
126 typedef INT (WSPAPI *LPWPUGETPROVIDERPATH)(LPGUID,LPWSTR,LPINT,LPINT);
127 typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE)(DWORD,SOCKET,LPINT);
128 typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD)(LPWSATHREADID,LPINT);
129 typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);
130 typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD,LPBLOCKINGCALLBACK FAR*,LPDWORD,LPINT);
131 typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET,LPDWORD,LPINT);
132 typedef INT (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID,LPWSAUSERAPC,DWORD,LPINT);
133 typedef BOOL (WSPAPI *LPWPURESETEVENT)(WSAEVENT,LPINT);
134 typedef BOOL (WSPAPI *LPWPUSETEVENT)(WSAEVENT,LPINT);
135 /* Available only directly from the DLL */
136 typedef INT (WSPAPI *LPWPUCOMPLETEOVERLAPPEDREQUEST)(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
137
138 /* Service Provider upcall table */
139 typedef struct _WSPUPCALLTABLE {
140         LPWPUCLOSEEVENT lpWPUCloseEvent;
141         LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
142         LPWPUCREATEEVENT lpWPUCreateEvent;
143         LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
144         LPWPUFDISSET lpWPUFDIsSet;
145         LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
146         LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
147         LPWPUPOSTMESSAGE lpWPUPostMessage;
148         LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
149         LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
150         LPWPUQUEUEAPC lpWPUQueueApc;
151         LPWPURESETEVENT lpWPUResetEvent;
152         LPWPUSETEVENT lpWPUSetEvent;
153         LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
154         LPWPUCLOSETHREAD lpWPUCloseThread;
155 } WSPUPCALLTABLE, FAR* LPWSPUPCALLTABLE;
156
157 typedef INT (WSPAPI *LPWSPSTARTUP)(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
158
159 /* Prototypes for service provider namespace procedure table */
160 typedef INT (WSPAPI *LPNSPCLEANUP)(LPGUID);
161 typedef INT (WSPAPI *LPNSPGETSERVICECLASSINFO)(LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
162 typedef INT (WSPAPI *LPNSPINSTALLSERVICECLASS)(LPGUID,LPWSASERVICECLASSINFOW);
163 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEBEGIN)(LPGUID,LPWSAQUERYSETW,LPWSASERVICECLASSINFOW,DWORD,LPHANDLE);
164 typedef INT (WSPAPI *LPNSPLOOKUPSERVICEEND)(HANDLE);
165 typedef INT (WSPAPI *LPNSPLOOKUPSERVICENEXT)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSET);
166 typedef INT (WSPAPI *LPNSPREMOVESERVICECLASS)(LPGUID,LPGUID);
167 typedef INT (WSPAPI *LPNSPSETSERVICE)(LPGUID,LPWSASERVICECLASSINFOW,LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
168
169 typedef struct _NSP_ROUTINE {
170   DWORD cbSize;
171   DWORD dwMajorVersion;
172   DWORD dwMinorVersion;
173   LPNSPCLEANUP NSPCleanup;
174   LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
175   LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
176   LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
177   LPNSPSETSERVICE NSPSetService;
178   LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
179   LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
180   LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
181 } NSP_ROUTINE, *PNSP_ROUTINE, *LPNSP_ROUTINE;
182
183 INT WSPAPI NSPStartup(LPGUID,LPNSP_ROUTINE);
184
185 /* WinSock 2 DLL function prototypes */
186 INT WSPAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
187 INT WSPAPI WSPStartup(WORD,LPWSPDATA,LPWSAPROTOCOL_INFOW,WSPUPCALLTABLE,LPWSPPROC_TABLE);
188 INT WSPAPI WSCDeinstallProvider(LPGUID,LPINT);
189 INT WSPAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);
190 INT WSPAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);
191 INT WSPAPI WSCInstallProvider(CONST LPGUID,CONST LPWSTR,CONST LPWSAPROTOCOL_INFOW,DWORD,LPINT);
192 INT WSPAPI WSCEnableNSProvider(LPGUID,BOOL);
193 INT WSPAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);
194 INT WSPAPI WSCUnInstallNameSpace(LPGUID);
195 INT WSPAPI WSCWriteProviderOrder(LPDWORD,DWORD);
196
197 #endif /* RC_INVOKED */
198
199 #ifdef __cplusplus
200 }
201 #endif /* __cplusplus */
202 #endif