00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _PROVIDER_H_
00019 #define _PROVIDER_H_
00020
00021 #ifndef _PSDK_BLD
00022 #include <nt.h>
00023 #include <ntrtl.h>
00024 #include <nturtl.h>
00025 #endif
00026
00027 #include <ws2spi.h>
00028 #include <mswsock.h>
00029 #include <ws2tcpip.h>
00030 #include <mstcpip.h>
00031
00032 #ifndef _PSDK_BLD
00033 #include <lspcommon.h>
00034 #else
00035 #include "..\common\lspcommon.h"
00036 #endif
00037
00038
00039
00040
00041
00042
00043
00044 typedef struct _SOCKET_CONTEXT
00045 {
00046 SOCKET Socket;
00047 PROVIDER *Provider;
00048
00049 SOCKADDR_STORAGE ProxiedAddress;
00050 SOCKADDR_STORAGE OriginalAddress;
00051
00052 int AddressLength;
00053
00054 BOOL Proxied;
00055
00056 LIST_ENTRY Link;
00057
00058 } SOCKET_CONTEXT;
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 void
00073 FreeLspProviders(
00074 PROVIDER *lspProvider,
00075 int lspProviderCount,
00076 int *lpErrno
00077 );
00078
00079 void
00080 FindDestinationAddress(
00081 SOCKET_CONTEXT *context,
00082 const SOCKADDR *destAddr,
00083 int destLen,
00084 SOCKADDR **proxyAddr,
00085 int *proxyLen
00086 );
00087
00088
00089 int WSPAPI
00090 WSPCloseSocket(
00091 SOCKET s,
00092 LPINT lpErrno
00093 );
00094
00095 int WSPAPI
00096 WSPConnect(
00097 SOCKET s,
00098 const struct sockaddr FAR * name,
00099 int namelen,
00100 LPWSABUF lpCallerData,
00101 LPWSABUF lpCalleeData,
00102 LPQOS lpSQOS,
00103 LPQOS lpGQOS,
00104 LPINT lpErrno
00105 );
00106
00107 int WSPAPI
00108 WSPGetPeerName(
00109 SOCKET s,
00110 struct sockaddr FAR * name,
00111 LPINT namelen,
00112 LPINT lpErrno
00113 );
00114
00115 int WSPAPI
00116 WSPIoctl(
00117 SOCKET s,
00118 DWORD dwIoControlCode,
00119 LPVOID lpvInBuffer,
00120 DWORD cbInBuffer,
00121 LPVOID lpvOutBuffer,
00122 DWORD cbOutBuffer,
00123 LPDWORD lpcbBytesReturned,
00124 LPWSAOVERLAPPED lpOverlapped,
00125 LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00126 LPWSATHREADID lpThreadId,
00127 LPINT lpErrno
00128 );
00129
00130 SOCKET WSPAPI
00131 WSPSocket(
00132 int af,
00133 int type,
00134 int protocol,
00135 LPWSAPROTOCOL_INFOW lpProtocolInfo,
00136 GROUP g,
00137 DWORD dwFlags,
00138 LPINT lpErrno
00139 );
00140
00141
00142
00143
00144
00145
00146
00147
00148 SOCKET_CONTEXT *
00149 FindSocketContext(
00150 SOCKET s,
00151 BOOL Remove = FALSE
00152 );
00153
00154
00155 SOCKET_CONTEXT *
00156 CreateSocketContext(
00157 PROVIDER *Provider,
00158 SOCKET Socket,
00159 int *lpErrno
00160 );
00161
00162
00163 void
00164 FreeSocketContext(
00165 PROVIDER *Provider,
00166 SOCKET_CONTEXT *Context
00167 );
00168
00169
00170 void
00171 FreeSocketContextList(
00172 PROVIDER *Provider
00173 );
00174
00175
00176
00177
00178
00179
00180
00181 BOOL PASCAL FAR
00182 ExtConnectEx(
00183 IN SOCKET s,
00184 IN const struct sockaddr FAR *name,
00185 IN int namelen,
00186 IN PVOID lpSendBuffer OPTIONAL,
00187 IN DWORD dwSendDataLength,
00188 OUT LPDWORD lpdwBytesSent,
00189 IN LPOVERLAPPED lpOverlapped
00190 );
00191
00192
00193
00194
00195
00196
00197
00198 extern CRITICAL_SECTION gCriticalSection;
00199 extern INT gLayerCount;
00200 extern PROVIDER *gLayerInfo;
00201 extern WSPUPCALLTABLE gMainUpCallTable;
00202 extern GUID gProviderGuid;
00203
00204 #endif