| 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 |