|
|
/*++
Copyright (C) Microsoft Corporation, 1996 - 1999
Module Name:
wstrans.hxx
Abstract:
Common definitions shared between modules supporting protocols based on winsock.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 3/28/1996 Bits 'n pieces
--*/
#ifndef __WSTRANS_HXX
#define __WSTRANS_HXX
const UINT MILLISECONDS_BEFORE_PEEK = DEBUG_MIN(1,10000);
struct WS_TRANS_INFO { SHORT AddressFamily; SHORT SocketType; SHORT Protocol; SHORT SockAddrSize; BOOLEAN fNetbios; BOOLEAN fCheckShutdowns; BOOLEAN fSetNoDelay; BOOLEAN fSetKeepAlive; BOOLEAN fSetRecvBuffer; BOOLEAN fSetSendBuffer; };
struct FIREWALL_INFO { DWORD NumAddresses; DWORD Addresses[1]; };
extern BOOL fWinsockLoaded; extern FIREWALL_INFO *pFirewallTable;
// Indexed by PROTOCOL_ID.
extern const WS_TRANS_INFO WsTransportTable[]; extern const DWORD cWsTransportTable;
// WS_ function prototypes.
extern RPC_STATUS RPC_ENTRY WS_Close( IN RPC_TRANSPORT_CONNECTION, IN BOOL );
extern RPC_STATUS RPC_ENTRY WS_SyncSend( IN RPC_TRANSPORT_CONNECTION Connection, IN UINT BufferLength, IN BUFFER Buffer, IN BOOL fDisableShutdownCheck, IN BOOL fDisableCancelCheck, ULONG Timeout );
extern RPC_STATUS RPC_ENTRY WS_SyncRecv( IN RPC_TRANSPORT_CONNECTION Connection, OUT BUFFER *pBuffer, IN OUT PUINT pBufferLength, IN DWORD dwTimeout );
extern VOID WS_SubmitAccept( IN BASE_ADDRESS * );
extern RPC_STATUS WS_NewConnection( IN PADDRESS, OUT PCONNECTION * );
extern BOOL WS_ProtectListeningSocket( IN SOCKET sock, IN BOOL newValue );
extern BOOL IsUserModeSocket(SOCKET s, RPC_STATUS *pStatus);
RPC_STATUS HttpSendIdentifyResponse( IN SOCKET Socket );
RPC_STATUS WS_Bind(IN SOCKET sock, IN OUT WS_SOCKADDR *pListenAddr, IN BOOL IpProtocol, IN DWORD EndpointFlags);
class TCPResolverHint { public: void GetResolverHint ( OUT BOOL *fIPv4Hint, OUT WS_SOCKADDR *sa );
void SetResolverHint ( IN BOOL fIPv4Hint, IN WS_SOCKADDR *sa );
union { in6_addr IPv6Hint; DWORD IPv4Hint; } u; BOOL fIPv4HintValid; };
RPC_STATUS TCPOrHTTP_Open( IN WS_CONNECTION *Connection, IN RPC_CHAR * NetworkAddress, IN USHORT Endpoint, IN UINT ConnTimeout, IN UINT SendBufferSize, IN UINT RecvBufferSize, IN OUT TCPResolverHint *ResolverHint, IN BOOL fHintInitialized, IN ULONG CallTimeout, IN BOOL fHTTP2Open, IN I_RpcProxyIsValidMachineFn IsValidMachineFn OPTIONAL );
RPC_STATUS WS_Initialize ( IN RPC_TRANSPORT_CONNECTION ThisConnection, IN RPC_CHAR *NetworkAddress, IN RPC_CHAR *NetworkOptions, IN BOOL fAsync );
RPC_STATUS WS_Open( IN PWS_CCONNECTION p, IN WS_SOCKADDR *psa, IN UINT ConnTimeout, IN UINT SendBufferSize, IN UINT RecvBufferSize, IN ULONG CallTimeout, IN BOOL fHTTP2Open );
RPC_STATUS TCP_ServerListenEx( IN RPC_TRANSPORT_ADDRESS ThisAddress, IN RPC_CHAR *NetworkAddress, IN OUT RPC_CHAR * *pEndpoint, IN UINT PendingQueueSize, IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN ULONG EndpointFlags, IN ULONG NICFlags, IN BOOL fHttp, OUT NETWORK_ADDRESS_VECTOR **ppAddressVector );
RPC_STATUS RPC_ENTRY WS_TurnOnOffKeepAlives ( IN RPC_TRANSPORT_CONNECTION ThisConnection, IN BOOL TurnOn, IN BOOL bProtectIO, IN KEEPALIVE_TIMEOUT_UNITS Units, IN OUT KEEPALIVE_TIMEOUT KATime, IN ULONG KAInterval = 5000 OPTIONAL );
void RPC_ENTRY WS_ServerAbortListen( IN RPC_TRANSPORT_ADDRESS Address );
RPC_STATUS WS_ConvertClientAddress ( IN const SOCKADDR *ClientAddress, IN ULONG ClientAddressType, OUT RPC_CHAR **pNetworkAddress );
RPC_STATUS RPC_ENTRY TCP_QueryClientAddress ( IN RPC_TRANSPORT_CONNECTION ThisConnection, OUT RPC_CHAR **pNetworkAddress );
RPC_STATUS RPC_ENTRY TCP_QueryLocalAddress ( IN RPC_TRANSPORT_CONNECTION ThisConnection, IN OUT void *Buffer, IN OUT unsigned long *BufferSize, OUT unsigned long *AddressFormat );
RPC_STATUS RPC_ENTRY TCP_QueryClientId( IN RPC_TRANSPORT_CONNECTION ThisConnection, OUT RPC_CLIENT_PROCESS_IDENTIFIER *ClientProcess );
RPC_STATUS RPC_ENTRY HTTP_Abort ( IN RPC_TRANSPORT_CONNECTION Connection );
const DWORD cTcpTimeoutFactor = 60 * 1000; // Default is TimeoutFactor * 6
inline ULONG ConvertRuntimeTimeoutToWSTimeout ( ULONG Timeout ) /*++
Routine Description:
Converts a timeout from the runtime time scale (RPC_C_BINDING_MIN_TIMEOUT to RPC_C_BINDING_MAX_TIMEOUT) to transport scale timeout (milliseconds)
Arguments:
Timeout - timeout in runtime scale
Return Value:
Timeout in transport scale. There is no failure
--*/ { ASSERT(((long)Timeout >= RPC_C_BINDING_MIN_TIMEOUT) && (Timeout <= RPC_C_BINDING_MAX_TIMEOUT));
return cTcpTimeoutFactor * (Timeout + 1); }
#endif // __WSTRANS_HXX
|