diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/ws2spi.h | 955 |
1 files changed, 955 insertions, 0 deletions
diff --git a/public/sdk/inc/ws2spi.h b/public/sdk/inc/ws2spi.h new file mode 100644 index 000000000..7855ba327 --- /dev/null +++ b/public/sdk/inc/ws2spi.h @@ -0,0 +1,955 @@ +/* WS2SPI.H -- definitions to be used with the WinSock service provider. + * + * This header file corresponds to version 2.2.x of the WinSock SPI + * specification. + * + * This file includes parts which are Copyright (c) 1982-1986 Regents + * of the University of California. All rights reserved. The + * Berkeley Software License Agreement specifies the terms and + * conditions for redistribution. + */ + +#ifndef _WINSOCK2SPI_ +#define _WINSOCK2SPI_ + +/* + * Ensure structures are packed consistently. + */ + +#include <pshpack4.h> + +/* + * Pull in WINSOCK2.H if necessary + */ + +#ifndef _WINSOCK2API_ +#include <winsock2.h> +#endif /* _WINSOCK2API_ */ + +#define WSPDESCRIPTION_LEN 255 + +typedef struct WSPData { + WORD wVersion; + WORD wHighVersion; + WCHAR szDescription[WSPDESCRIPTION_LEN+1]; +} WSPDATA, FAR * LPWSPDATA; + +typedef struct _WSATHREADID { + HANDLE ThreadHandle; + DWORD Reserved; +} WSATHREADID, FAR * LPWSATHREADID; + +/* + * SPI function linkage. + */ + +#define WSPAPI WSAAPI + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pointer to a blocking callback. A pointer to a blocking callback is + * returned from the WPUQueryBlockingCallback() upcall. Note that this + * function's signature is not identical to an application's blocking + * hook function. + */ + +typedef +BOOL +(CALLBACK FAR * LPBLOCKINGCALLBACK)( + DWORD dwContext + ); + +/* + * Pointer to a user APC function. This is used as a parameter to the + * WPUQueueUserApc() upcall. Note that this function's signature is not + * identical to an application's completion routine. + */ + +typedef +VOID +(CALLBACK FAR * LPWSAUSERAPC)( + DWORD dwContext + ); + +/* + * Pointers to the individual entries in a service provider's proc table. + */ + +typedef +SOCKET +(WSPAPI * LPWSPACCEPT)( + SOCKET s, + struct sockaddr FAR * addr, + LPINT addrlen, + LPCONDITIONPROC lpfnCondition, + DWORD dwCallbackData, + LPINT lpErrno + ); + +typedef +INT +(WSPAPI * LPWSPADDRESSTOSTRING)( + LPSOCKADDR lpsaAddress, + DWORD dwAddressLength, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + LPWSTR lpszAddressString, + LPDWORD lpdwAddressStringLength, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPASYNCSELECT)( + SOCKET s, + HWND hWnd, + unsigned int wMsg, + long lEvent, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPBIND)( + SOCKET s, + const struct sockaddr FAR * name, + int namelen, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPCANCELBLOCKINGCALL)( + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPCLEANUP)( + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPCLOSESOCKET)( + SOCKET s, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPCONNECT)( + SOCKET s, + const struct sockaddr FAR * name, + int namelen, + LPWSABUF lpCallerData, + LPWSABUF lpCalleeData, + LPQOS lpSQOS, + LPQOS lpGQOS, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPDUPLICATESOCKET)( + SOCKET s, + DWORD dwProcessId, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPENUMNETWORKEVENTS)( + SOCKET s, + WSAEVENT hEventObject, + LPWSANETWORKEVENTS lpNetworkEvents, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPEVENTSELECT)( + SOCKET s, + WSAEVENT hEventObject, + long lNetworkEvents, + LPINT lpErrno + ); + +typedef +BOOL +(WSPAPI * LPWSPGETOVERLAPPEDRESULT)( + SOCKET s, + LPWSAOVERLAPPED lpOverlapped, + LPDWORD lpcbTransfer, + BOOL fWait, + LPDWORD lpdwFlags, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPGETPEERNAME)( + SOCKET s, + struct sockaddr FAR * name, + LPINT namelen, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPGETSOCKNAME)( + SOCKET s, + struct sockaddr FAR * name, + LPINT namelen, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPGETSOCKOPT)( + SOCKET s, + int level, + int optname, + char FAR * optval, + LPINT optlen, + LPINT lpErrno + ); + +typedef +BOOL +(WSPAPI * LPWSPGETQOSBYNAME)( + SOCKET s, + LPWSABUF lpQOSName, + LPQOS lpQOS, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPIOCTL)( + SOCKET s, + DWORD dwIoControlCode, + LPVOID lpvInBuffer, + DWORD cbInBuffer, + LPVOID lpvOutBuffer, + DWORD cbOutBuffer, + LPDWORD lpcbBytesReturned, + LPWSAOVERLAPPED lpOverlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +SOCKET +(WSPAPI * LPWSPJOINLEAF)( + SOCKET s, + const struct sockaddr FAR * name, + int namelen, + LPWSABUF lpCallerData, + LPWSABUF lpCalleeData, + LPQOS lpSQOS, + LPQOS lpGQOS, + DWORD dwFlags, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPLISTEN)( + SOCKET s, + int backlog, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPRECV)( + SOCKET s, + LPWSABUF lpBuffers, + DWORD dwBufferCount, + LPDWORD lpNumberOfBytesRecvd, + LPDWORD lpFlags, + LPWSAOVERLAPPED lpOverlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPRECVDISCONNECT)( + SOCKET s, + LPWSABUF lpInboundDisconnectData, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPRECVFROM)( + SOCKET s, + LPWSABUF lpBuffers, + DWORD dwBufferCount, + LPDWORD lpNumberOfBytesRecvd, + LPDWORD lpFlags, + struct sockaddr FAR * lpFrom, + LPINT lpFromlen, + LPWSAOVERLAPPED lpOverlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSELECT)( + int nfds, + fd_set FAR * readfds, + fd_set FAR * writefds, + fd_set FAR * exceptfds, + const struct timeval FAR * timeout, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSEND)( + SOCKET s, + LPWSABUF lpBuffers, + DWORD dwBufferCount, + LPDWORD lpNumberOfBytesSent, + DWORD dwFlags, + LPWSAOVERLAPPED lpOverlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSENDDISCONNECT)( + SOCKET s, + LPWSABUF lpOutboundDisconnectData, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSENDTO)( + SOCKET s, + LPWSABUF lpBuffers, + DWORD dwBufferCount, + LPDWORD lpNumberOfBytesSent, + DWORD dwFlags, + const struct sockaddr FAR * lpTo, + int iTolen, + LPWSAOVERLAPPED lpOverlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSETSOCKOPT)( + SOCKET s, + int level, + int optname, + const char FAR * optval, + int optlen, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSPSHUTDOWN)( + SOCKET s, + int how, + LPINT lpErrno + ); + +typedef +SOCKET +(WSPAPI * LPWSPSOCKET)( + int af, + int type, + int protocol, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + GROUP g, + DWORD dwFlags, + LPINT lpErrno + ); + +typedef +INT +(WSPAPI * LPWSPSTRINGTOADDRESS)( + LPWSTR AddressString, + INT AddressFamily, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + LPSOCKADDR lpAddress, + LPINT lpAddressLength, + LPINT lpErrno + ); + +/* + * A service provider proc table. This structure is returned by value + * from the service provider's WSPStartup() entrypoint. + */ + +typedef struct _WSPPROC_TABLE { + + LPWSPACCEPT lpWSPAccept; + LPWSPADDRESSTOSTRING lpWSPAddressToString; + LPWSPASYNCSELECT lpWSPAsyncSelect; + LPWSPBIND lpWSPBind; + LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall; + LPWSPCLEANUP lpWSPCleanup; + LPWSPCLOSESOCKET lpWSPCloseSocket; + LPWSPCONNECT lpWSPConnect; + LPWSPDUPLICATESOCKET lpWSPDuplicateSocket; + LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents; + LPWSPEVENTSELECT lpWSPEventSelect; + LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult; + LPWSPGETPEERNAME lpWSPGetPeerName; + LPWSPGETSOCKNAME lpWSPGetSockName; + LPWSPGETSOCKOPT lpWSPGetSockOpt; + LPWSPGETQOSBYNAME lpWSPGetQOSByName; + LPWSPIOCTL lpWSPIoctl; + LPWSPJOINLEAF lpWSPJoinLeaf; + LPWSPLISTEN lpWSPListen; + LPWSPRECV lpWSPRecv; + LPWSPRECVDISCONNECT lpWSPRecvDisconnect; + LPWSPRECVFROM lpWSPRecvFrom; + LPWSPSELECT lpWSPSelect; + LPWSPSEND lpWSPSend; + LPWSPSENDDISCONNECT lpWSPSendDisconnect; + LPWSPSENDTO lpWSPSendTo; + LPWSPSETSOCKOPT lpWSPSetSockOpt; + LPWSPSHUTDOWN lpWSPShutdown; + LPWSPSOCKET lpWSPSocket; + LPWSPSTRINGTOADDRESS lpWSPStringToAddress; + +} WSPPROC_TABLE, FAR * LPWSPPROC_TABLE; + +/* + * Pointers to the individual entries in the upcall table. + */ + +typedef +BOOL +(WSPAPI * LPWPUCLOSEEVENT)( + WSAEVENT hEvent, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUCLOSESOCKETHANDLE)( + SOCKET s, + LPINT lpErrno + ); + +typedef +WSAEVENT +(WSPAPI * LPWPUCREATEEVENT)( + LPINT lpErrno + ); + +typedef +SOCKET +(WSPAPI * LPWPUCREATESOCKETHANDLE)( + DWORD dwCatalogEntryId, + DWORD dwContext, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUFDISSET)( + SOCKET s, + fd_set FAR * set + ); + +typedef +int +(WSPAPI * LPWPUGETPROVIDERPATH)( + LPGUID lpProviderId, + WCHAR FAR * lpszProviderDllPath, + LPINT lpProviderDllPathLen, + LPINT lpErrno + ); + +typedef +SOCKET +(WSPAPI * LPWPUMODIFYIFSHANDLE)( + DWORD dwCatalogEntryId, + SOCKET ProposedHandle, + LPINT lpErrno + ); + +typedef +BOOL +(WSPAPI * LPWPUPOSTMESSAGE)( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam + ); + +typedef +int +(WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)( + DWORD dwCatalogEntryId, + LPBLOCKINGCALLBACK FAR * lplpfnCallback, + LPDWORD lpdwContext, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)( + SOCKET s, + LPDWORD lpContext, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUQUEUEAPC)( + LPWSATHREADID lpThreadId, + LPWSAUSERAPC lpfnUserApc, + DWORD dwContext, + LPINT lpErrno + ); + +typedef +BOOL +(WSPAPI * LPWPURESETEVENT)( + WSAEVENT hEvent, + LPINT lpErrno + ); + +typedef +BOOL +(WSPAPI * LPWPUSETEVENT)( + WSAEVENT hEvent, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUOPENCURRENTTHREAD)( + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWPUCLOSETHREAD)( + LPWSATHREADID lpThreadId, + LPINT lpErrno + ); + +/* + * The upcall table. This structure is passed by value to the service + * provider's WSPStartup() entrypoint. + */ + +typedef struct _WSPUPCALLTABLE { + + LPWPUCLOSEEVENT lpWPUCloseEvent; + LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle; + LPWPUCREATEEVENT lpWPUCreateEvent; + LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle; + LPWPUFDISSET lpWPUFDIsSet; + LPWPUGETPROVIDERPATH lpWPUGetProviderPath; + LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle; + LPWPUPOSTMESSAGE lpWPUPostMessage; + LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback; + LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext; + LPWPUQUEUEAPC lpWPUQueueApc; + LPWPURESETEVENT lpWPUResetEvent; + LPWPUSETEVENT lpWPUSetEvent; + LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread; + LPWPUCLOSETHREAD lpWPUCloseThread; + +} WSPUPCALLTABLE, FAR * LPWSPUPCALLTABLE; + +/* + * WinSock 2 SPI socket function prototypes + */ + +int +WSPAPI +WSPStartup( + WORD wVersionRequested, + LPWSPDATA lpWSPData, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + WSPUPCALLTABLE UpcallTable, + LPWSPPROC_TABLE lpProcTable + ); + +typedef +int +(WSPAPI * LPWSPSTARTUP)( + WORD wVersionRequested, + LPWSPDATA lpWSPData, + LPWSAPROTOCOL_INFOW lpProtocolInfo, + WSPUPCALLTABLE UpcallTable, + LPWSPPROC_TABLE lpProcTable + ); + +/* + * Installation and configuration entrypoints. + */ + +int +WSPAPI +WSCEnumProtocols( + LPINT lpiProtocols, + LPWSAPROTOCOL_INFOW lpProtocolBuffer, + LPDWORD lpdwBufferLength, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSCENUMPROTOCOLS)( + LPINT lpiProtocols, + LPWSAPROTOCOL_INFOW lpProtocolBuffer, + LPDWORD lpdwBufferLength, + LPINT lpErrno + ); + +int +WSPAPI +WSCDeinstallProvider( + LPGUID lpProviderId, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSCDEINSTALLPROVIDER)( + LPGUID lpProviderId, + LPINT lpErrno + ); + +int +WSPAPI +WSCInstallProvider( + LPGUID lpProviderId, + const WCHAR FAR * lpszProviderDllPath, + const LPWSAPROTOCOL_INFOW lpProtocolInfoList, + DWORD dwNumberOfEntries, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSCINSTALLPROVIDER)( + LPGUID lpProviderId, + const WCHAR FAR * lpszProviderDllPath, + const LPWSAPROTOCOL_INFOW lpProtocolInfoList, + DWORD dwNumberOfEntries, + LPINT lpErrno + ); + +int +WSPAPI +WSCGetProviderPath( + LPGUID lpProviderId, + WCHAR FAR * lpszProviderDllPath, + LPINT lpProviderDllPathLen, + LPINT lpErrno + ); + +typedef +int +(WSPAPI * LPWSCGETPROVIDERPATH)( + LPGUID lpProviderId, + WCHAR FAR * lpszProviderDllPath, + LPINT lpProviderDllPathLen, + LPINT lpErrno + ); + +/* + * The following upcall function prototypes are only used by WinSock 2 DLL and + * should not be used by any service providers. + */ + +BOOL +WSPAPI +WPUCloseEvent( + WSAEVENT hEvent, + LPINT lpErrno + ); + +int +WSPAPI +WPUCloseSocketHandle( + SOCKET s, + LPINT lpErrno + ); + +WSAEVENT +WSPAPI +WPUCreateEvent( + LPINT lpErrno + ); + +SOCKET +WSPAPI +WPUCreateSocketHandle( + DWORD dwCatalogEntryId, + DWORD dwContext, + LPINT lpErrno + ); + +int +WSPAPI +WPUFDIsSet( + SOCKET s, + fd_set FAR * set + ); + +int +WSPAPI +WPUGetProviderPath( + LPGUID lpProviderId, + WCHAR FAR * lpszProviderDllPath, + LPINT lpProviderDllPathLen, + LPINT lpErrno + ); + +SOCKET +WSPAPI +WPUModifyIFSHandle( + DWORD dwCatalogEntryId, + SOCKET ProposedHandle, + LPINT lpErrno + ); + +BOOL +WSPAPI +WPUPostMessage( + HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam + ); + +int +WSPAPI +WPUQueryBlockingCallback( + DWORD dwCatalogEntryId, + LPBLOCKINGCALLBACK FAR * lplpfnCallback, + LPDWORD lpdwContext, + LPINT lpErrno + ); + +int +WSPAPI +WPUQuerySocketHandleContext( + SOCKET s, + LPDWORD lpContext, + LPINT lpErrno + ); + +int +WSPAPI +WPUQueueApc( + LPWSATHREADID lpThreadId, + LPWSAUSERAPC lpfnUserApc, + DWORD dwContext, + LPINT lpErrno + ); + +BOOL +WSPAPI +WPUResetEvent( + WSAEVENT hEvent, + LPINT lpErrno + ); + +BOOL +WSPAPI +WPUSetEvent( + WSAEVENT hEvent, + LPINT lpErrno + ); + +/* + * Installing and uninstalling name space providers. + */ + +INT +WSPAPI +WSCInstallNameSpace ( + LPWSTR lpszIdentifier, + LPWSTR lpszPathName, + DWORD dwNameSpace, + DWORD dwVersion, + LPGUID lpProviderId + ); + +typedef +INT +(WSPAPI * LPWSCINSTALLNAMESPACE)( + LPWSTR lpszIdentifier, + LPWSTR lpszPathName, + DWORD dwNameSpace, + DWORD dwVersion, + LPGUID lpProviderId + ); + +INT +WSPAPI +WSCUnInstallNameSpace ( + LPGUID lpProviderId + ); + +typedef +INT +(WSPAPI * LPWSCUNINSTALLNAMESPACE)( + LPGUID lpProviderId + ); + +INT +WSPAPI +WSCEnableNSProvider ( + LPGUID lpProviderId, + BOOL fEnable + ); + +typedef +INT +(WSPAPI * LPWSCENABLENSPROVIDER)( + LPGUID lpProviderId, + BOOL fEnable + ); + +/* + * Pointers to the individual entries in the namespace proc table. + */ + +typedef +INT +(WSAAPI * LPNSPCLEANUP)( + LPGUID lpProviderId + ); + +typedef +INT +(WSAAPI * LPNSPLOOKUPSERVICEBEGIN)( + LPGUID lpProviderId, + LPWSAQUERYSETW lpqsRestrictions, + LPWSASERVICECLASSINFOW lpServiceClassInfo, + DWORD dwControlFlags, + LPHANDLE lphLookup + ); + +typedef +INT +(WSAAPI * LPNSPLOOKUPSERVICENEXT)( + HANDLE hLookup, + DWORD dwControlFlags, + LPDWORD lpdwBufferLength, + LPWSAQUERYSETW lpqsResults + ); + +typedef +INT +(WSAAPI * LPNSPLOOKUPSERVICEEND)( + HANDLE hLookup + ); + +typedef +INT +(WSAAPI * LPNSPSETSERVICE)( + LPGUID lpProviderId, + LPWSASERVICECLASSINFOW lpServiceClassInfo, + LPWSAQUERYSETW lpqsRegInfo, + WSAESETSERVICEOP essOperation, + DWORD dwControlFlags + ); + +typedef +INT +(WSAAPI * LPNSPINSTALLSERVICECLASS)( + LPGUID lpProviderId, + LPWSASERVICECLASSINFOW lpServiceClassInfo + ); + +typedef +INT +(WSAAPI * LPNSPREMOVESERVICECLASS)( + LPGUID lpProviderId, + LPGUID lpServiceClassId + ); + +typedef +INT +(WSAAPI * LPNSPGETSERVICECLASSINFO)( + LPGUID lpProviderId, + LPDWORD lpdwBufSize, + LPWSASERVICECLASSINFOW lpServiceClassInfo + ); + +/* + * The name space service provider procedure table. + */ + +typedef struct _NSP_ROUTINE { + + /* Structure version information: */ + DWORD cbSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + + /* Procedure-pointer table: */ + + LPNSPCLEANUP NSPCleanup; + LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin; + LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext; + LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd; + LPNSPSETSERVICE NSPSetService; + LPNSPINSTALLSERVICECLASS NSPInstallServiceClass; + LPNSPREMOVESERVICECLASS NSPRemoveServiceClass; + LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo; + +} NSP_ROUTINE, FAR * LPNSP_ROUTINE; + +/* + * Startup procedures. + */ + +INT +WSAAPI +NSPStartup( + LPGUID lpProviderId, + LPNSP_ROUTINE lpnspRoutines + ); + +typedef +INT +(WSAAPI * LPNSPSTARTUP)( + LPGUID lpProviderId, + LPNSP_ROUTINE lpnspRoutines + ); + + +#ifdef __cplusplus +} +#endif + + +#include <poppack.h> + + +#endif /* _WINSOCK2SPI_ */ + |