mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
706 lines
11 KiB
706 lines
11 KiB
/*++
|
|
|
|
Copyright (c) 1992-1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
SockProc.h
|
|
|
|
Abstract:
|
|
|
|
This module contains prototypes for WinSock support routines.
|
|
|
|
Author:
|
|
|
|
David Treadwell (davidtr) 20-Feb-1992
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _SOCKPROC_
|
|
#define _SOCKPROC_
|
|
|
|
//
|
|
// SPI entrypoints.
|
|
//
|
|
|
|
SOCKET
|
|
WSPAPI
|
|
WSPAccept(
|
|
SOCKET s,
|
|
struct sockaddr FAR * addr,
|
|
LPINT addrlen,
|
|
LPCONDITIONPROC lpfnCondition,
|
|
DWORD dwCallbackData,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPAddressToString(
|
|
LPSOCKADDR lpsaAddress,
|
|
DWORD dwAddressLength,
|
|
LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
|
LPWSTR lpszAddressString,
|
|
LPDWORD lpdwAddressStringLength,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPAsyncSelect(
|
|
SOCKET s,
|
|
HWND hWnd,
|
|
unsigned int wMsg,
|
|
long lEvent,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPBind(
|
|
SOCKET s,
|
|
const struct sockaddr FAR * name,
|
|
int namelen,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPCancelBlockingCall(
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPCleanup(
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPCloseSocket(
|
|
SOCKET s,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPConnect(
|
|
SOCKET s,
|
|
const struct sockaddr FAR * name,
|
|
int namelen,
|
|
LPWSABUF lpCallerData,
|
|
LPWSABUF lpCalleeData,
|
|
LPQOS lpSQOS,
|
|
LPQOS lpGQOS,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPDuplicateSocket(
|
|
SOCKET s,
|
|
DWORD dwProcessId,
|
|
LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPEnumNetworkEvents(
|
|
SOCKET s,
|
|
WSAEVENT hEventObject,
|
|
LPWSANETWORKEVENTS lpNetworkEvents,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPEventSelect(
|
|
SOCKET s,
|
|
WSAEVENT hEventObject,
|
|
long lNetworkEvents,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPGetOverlappedResult(
|
|
SOCKET s,
|
|
LPWSAOVERLAPPED lpOverlapped,
|
|
LPDWORD lpcbTransfer,
|
|
BOOL fWait,
|
|
LPDWORD lpdwFlags,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPGetPeerName(
|
|
SOCKET s,
|
|
struct sockaddr FAR * name,
|
|
LPINT namelen,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPGetSockName(
|
|
SOCKET s,
|
|
struct sockaddr FAR * name,
|
|
LPINT namelen,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPGetSockOpt(
|
|
SOCKET s,
|
|
int level,
|
|
int optname,
|
|
char FAR * optval,
|
|
LPINT optlen,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
BOOL
|
|
WSPAPI
|
|
WSPGetQOSByName(
|
|
SOCKET s,
|
|
LPWSABUF lpQOSName,
|
|
LPQOS lpQOS,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPIoctl(
|
|
SOCKET s,
|
|
DWORD dwIoControlCode,
|
|
LPVOID lpvInBuffer,
|
|
DWORD cbInBuffer,
|
|
LPVOID lpvOutBuffer,
|
|
DWORD cbOutBuffer,
|
|
LPDWORD lpcbBytesReturned,
|
|
LPWSAOVERLAPPED lpOverlapped,
|
|
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
|
LPWSATHREADID lpThreadId,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
SOCKET
|
|
WSPAPI
|
|
WSPJoinLeaf(
|
|
SOCKET s,
|
|
const struct sockaddr FAR * name,
|
|
int namelen,
|
|
LPWSABUF lpCallerData,
|
|
LPWSABUF lpCalleeData,
|
|
LPQOS lpSQOS,
|
|
LPQOS lpGQOS,
|
|
DWORD dwFlags,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPListen(
|
|
SOCKET s,
|
|
int backlog,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPRecv(
|
|
SOCKET s,
|
|
LPWSABUF lpBuffers,
|
|
DWORD dwBufferCount,
|
|
LPDWORD lpNumberOfBytesRecvd,
|
|
LPDWORD lpFlags,
|
|
LPWSAOVERLAPPED lpOverlapped,
|
|
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
|
LPWSATHREADID lpThreadId,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPRecvDisconnect(
|
|
SOCKET s,
|
|
LPWSABUF lpInboundDisconnectData,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPRecvFrom(
|
|
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
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPSelect(
|
|
int nfds,
|
|
fd_set FAR * readfds,
|
|
fd_set FAR * writefds,
|
|
fd_set FAR * exceptfds,
|
|
const struct timeval FAR * timeout,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPSend(
|
|
SOCKET s,
|
|
LPWSABUF lpBuffers,
|
|
DWORD dwBufferCount,
|
|
LPDWORD lpNumberOfBytesSent,
|
|
DWORD dwFlags,
|
|
LPWSAOVERLAPPED lpOverlapped,
|
|
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
|
|
LPWSATHREADID lpThreadId,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPSendDisconnect(
|
|
SOCKET s,
|
|
LPWSABUF lpOutboundDisconnectData,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPSendTo(
|
|
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
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPSetSockOpt(
|
|
SOCKET s,
|
|
int level,
|
|
int optname,
|
|
const char FAR * optval,
|
|
int optlen,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPShutdown(
|
|
SOCKET s,
|
|
int how,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
SOCKET
|
|
WSPAPI
|
|
WSPSocket(
|
|
int af,
|
|
int type,
|
|
int protocol,
|
|
LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
|
GROUP g,
|
|
DWORD dwFlags,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
int
|
|
WSPAPI
|
|
WSPStringToAddress(
|
|
LPWSTR AddressString,
|
|
INT AddressFamily,
|
|
LPWSAPROTOCOL_INFOW lpProtocolInfo,
|
|
LPSOCKADDR lpAddress,
|
|
LPINT lpAddressLength,
|
|
LPINT lpErrno
|
|
);
|
|
|
|
|
|
//
|
|
// Reference/dereference routines for socket blocks.
|
|
//
|
|
|
|
VOID
|
|
SockDereferenceSocket (
|
|
IN PSOCKET_INFORMATION Socket
|
|
);
|
|
|
|
PSOCKET_INFORMATION
|
|
SockFindAndReferenceSocket (
|
|
IN SOCKET Handle,
|
|
IN BOOLEAN AttemptImport
|
|
);
|
|
|
|
PSOCKET_INFORMATION
|
|
SockGetHandleContext (
|
|
IN SOCKET Handle
|
|
);
|
|
|
|
VOID
|
|
SockReferenceSocket (
|
|
IN PSOCKET_INFORMATION Socket
|
|
);
|
|
|
|
BOOLEAN
|
|
SockIsSocketConnected (
|
|
IN PSOCKET_INFORMATION Socket
|
|
);
|
|
|
|
BOOLEAN
|
|
SockIsAddressConsistentWithConstrainedGroup(
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN GROUP Group,
|
|
IN PSOCKADDR SocketAddress,
|
|
IN INT SocketAddressLength
|
|
);
|
|
|
|
//
|
|
// Standard routine for blocking on a handle.
|
|
//
|
|
|
|
BOOL
|
|
SockWaitForSingleObject (
|
|
IN HANDLE Handle,
|
|
IN SOCKET SocketHandle,
|
|
IN DWORD BlockingHookUsage,
|
|
IN DWORD TimeoutUsage
|
|
);
|
|
|
|
//
|
|
// Standard I/O completion routine.
|
|
//
|
|
|
|
VOID
|
|
WINAPI
|
|
SockIoCompletion (
|
|
PVOID ApcContext,
|
|
PIO_STATUS_BLOCK IoStatusBlock,
|
|
DWORD Reserved
|
|
);
|
|
|
|
//
|
|
// Error translation routines.
|
|
//
|
|
|
|
int
|
|
SockNtStatusToSocketError (
|
|
IN NTSTATUS Status
|
|
);
|
|
|
|
//
|
|
// Routines for interacting with the asynchronous processing thread.
|
|
//
|
|
|
|
PWINSOCK_CONTEXT_BLOCK
|
|
SockAllocateContextBlock (
|
|
VOID
|
|
);
|
|
|
|
BOOLEAN
|
|
SockCheckAndInitAsyncThread (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
SockFreeContextBlock (
|
|
IN PWINSOCK_CONTEXT_BLOCK ContextBlock
|
|
);
|
|
|
|
VOID
|
|
SockQueueRequestToAsyncThread(
|
|
IN PWINSOCK_CONTEXT_BLOCK ContextBlock
|
|
);
|
|
|
|
VOID
|
|
SockProcessAsyncSelect (
|
|
SOCKET Handle,
|
|
DWORD SocketSerialNumber,
|
|
DWORD AsyncSelectSerialNumber
|
|
);
|
|
|
|
VOID
|
|
SockRemoveAsyncSelectRequests (
|
|
IN SOCKET Handle
|
|
);
|
|
|
|
VOID
|
|
SockTerminateAsyncThread (
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Routine to handle reenabling of async select events.
|
|
//
|
|
|
|
VOID
|
|
SockReenableAsyncSelectEvent (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN ULONG Event
|
|
);
|
|
|
|
//
|
|
// Routine called at every entrypoint of the winsock DLL.
|
|
//
|
|
|
|
int
|
|
SockEnterApi (
|
|
IN BOOLEAN MustBeStarted,
|
|
IN BOOLEAN BlockingIllegal,
|
|
IN BOOLEAN GetXByYCall
|
|
);
|
|
|
|
//
|
|
// Routines for interacting with helper DLLs.
|
|
//
|
|
|
|
VOID
|
|
SockFreeHelperDlls (
|
|
VOID
|
|
);
|
|
|
|
INT
|
|
SockGetTdiHandles (
|
|
IN PSOCKET_INFORMATION Socket
|
|
);
|
|
|
|
INT
|
|
SockGetTdiName (
|
|
IN PINT AddressFamily,
|
|
IN PINT SocketType,
|
|
IN PINT Protocol,
|
|
IN GROUP Group,
|
|
IN DWORD Flags,
|
|
OUT PUNICODE_STRING TransportDeviceName,
|
|
OUT PVOID *HelperDllSocketContext,
|
|
OUT PWINSOCK_HELPER_DLL_INFO *HelperDll,
|
|
OUT PDWORD NotificationEvents
|
|
);
|
|
|
|
BOOL
|
|
SockIsTripleInMapping (
|
|
IN PWINSOCK_MAPPING Mapping,
|
|
IN INT AddressFamily,
|
|
OUT PBOOLEAN AddressFamilyFound,
|
|
IN INT SocketType,
|
|
OUT PBOOLEAN SocketTypeFound,
|
|
IN INT Protocol,
|
|
OUT PBOOLEAN ProtocolFound,
|
|
OUT PBOOLEAN InvalidProtocolMatch
|
|
);
|
|
|
|
INT
|
|
SockLoadHelperDll (
|
|
IN PWSTR TransportName,
|
|
IN PWINSOCK_MAPPING Mapping,
|
|
OUT PWINSOCK_HELPER_DLL_INFO *HelperDll
|
|
);
|
|
|
|
INT
|
|
SockLoadTransportList (
|
|
OUT PTSTR *TransportList
|
|
);
|
|
|
|
INT
|
|
SockLoadTransportMapping (
|
|
IN PWSTR TransportName,
|
|
OUT PWINSOCK_MAPPING *Mapping
|
|
);
|
|
|
|
INT
|
|
SockNotifyHelperDll (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN DWORD Event
|
|
);
|
|
|
|
INT
|
|
SockSetHandleContext (
|
|
IN PSOCKET_INFORMATION Socket
|
|
);
|
|
|
|
INT
|
|
SockUpdateWindowSizes (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN BOOLEAN AlwaysUpdate
|
|
);
|
|
|
|
BOOL
|
|
SockDefaultValidateAddressForConstrainedGroup(
|
|
IN PSOCKADDR Sockaddr1,
|
|
IN PSOCKADDR Sockaddr2,
|
|
IN INT SockaddrLength
|
|
);
|
|
|
|
//
|
|
// Routines for building addresses.
|
|
//
|
|
|
|
VOID
|
|
SockBuildSockaddr (
|
|
OUT PSOCKADDR Sockaddr,
|
|
OUT PINT SockaddrLength,
|
|
IN PTRANSPORT_ADDRESS TdiAddress
|
|
);
|
|
|
|
VOID
|
|
SockBuildTdiAddress (
|
|
OUT PTRANSPORT_ADDRESS TdiAddress,
|
|
IN PSOCKADDR Sockaddr,
|
|
IN INT SockaddrLength
|
|
);
|
|
|
|
//
|
|
// The default blocking function we'll use.
|
|
//
|
|
|
|
BOOL
|
|
SockDefaultBlockingHook (
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// DLL initialization routines.
|
|
//
|
|
|
|
BOOL
|
|
SockInitialize (
|
|
IN PVOID DllHandle,
|
|
IN ULONG Reason,
|
|
IN PVOID Context OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
SockThreadInitialize(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Routine for getting and setting socket information from/to AFD.
|
|
//
|
|
|
|
INT
|
|
SockGetInformation (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN ULONG InformationType,
|
|
IN PVOID AdditionalInputInfo OPTIONAL,
|
|
IN ULONG AdditionalInputInfoLength,
|
|
IN OUT PBOOLEAN Boolean OPTIONAL,
|
|
IN OUT PULONG Ulong OPTIONAL,
|
|
IN OUT PLARGE_INTEGER LargeInteger OPTIONAL
|
|
);
|
|
|
|
INT
|
|
SockSetInformation (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN ULONG InformationType,
|
|
IN PBOOLEAN Boolean OPTIONAL,
|
|
IN PULONG Ulong OPTIONAL,
|
|
IN PLARGE_INTEGER LargeInteger OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
SockBuildProtocolInfoForSocket(
|
|
IN PSOCKET_INFORMATION Socket,
|
|
OUT LPWSAPROTOCOL_INFOW ProtocolInfo
|
|
);
|
|
|
|
//
|
|
// Routine for passing connect data and options to and from AFD.
|
|
//
|
|
|
|
INT
|
|
SockPassConnectData(
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN ULONG AfdIoctl,
|
|
IN PCHAR Buffer,
|
|
IN INT BufferLength,
|
|
OUT PINT OutBufferLength
|
|
);
|
|
|
|
//
|
|
// Core accept code.
|
|
//
|
|
|
|
INT
|
|
SockCoreAccept (
|
|
IN PSOCKET_INFORMATION ListenSocket,
|
|
IN PSOCKET_INFORMATION AcceptSocket
|
|
);
|
|
|
|
//
|
|
// Helper routines for WSPAsyncSelect and WSPEventSelect.
|
|
//
|
|
|
|
int
|
|
SockAsyncSelectHelper(
|
|
PSOCKET_INFORMATION Socket,
|
|
HWND hWnd,
|
|
unsigned int wMsg,
|
|
long lEvent
|
|
);
|
|
|
|
int
|
|
SockEventSelectHelper(
|
|
PSOCKET_INFORMATION Socket,
|
|
WSAEVENT hEventObject,
|
|
long lNetworkEvents
|
|
);
|
|
|
|
//
|
|
// Routine for handling async (nonblocking) connects.
|
|
//
|
|
|
|
DWORD
|
|
SockDoAsyncConnect (
|
|
IN PSOCK_ASYNC_CONNECT_CONTEXT ConnectContext
|
|
);
|
|
|
|
//
|
|
// Routine for cancelling I/O.
|
|
//
|
|
|
|
VOID
|
|
SockCancelIo(
|
|
IN SOCKET Socket
|
|
);
|
|
|
|
//
|
|
// Routine for passing connect/disconnect data to a socket.
|
|
//
|
|
|
|
INT
|
|
SockPassConnectData (
|
|
IN PSOCKET_INFORMATION Socket,
|
|
IN ULONG AfdIoctl,
|
|
IN PCHAR Buffer,
|
|
IN INT BufferLength,
|
|
OUT PINT OutBufferLength
|
|
);
|
|
|
|
#endif // ndef _SOCKPROC_
|
|
|