windows-nt/Source/XPSP1/NT/net/homenet/alg/alg_icq/socket.h

253 lines
7.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998, Microsoft Corporation
Module Name:
socket.h
Abstract:
This module contains declarations for socket-management.
The routines declared here operate asynchronously on sockets
associated with an I/O completion port. They are also integrated
with the component-reference object, which may optionally be used
by callers to control the number of outstanding entries into a component's
address-space. (See 'COMPREF.H'.)
Author:
Abolade Gbadegesin (aboladeg) 2-Mar-1998
Revision History:
Abolade Gbadegesin (aboladeg) 23-May-1999
Added support for stream sockets.
--*/
#ifndef _NATHLP_SOCKET_H_
#define _NATHLP_SOCKET_H_
#define INET_NTOA(x) inet_ntoa(*(struct in_addr*)&(x))
//
// BOOLEAN
// NhIsFatalSocketError(
// ULONG Error
// );
//
// Determines whether a request may be reissued on a socket,
// given the error-code from the previous issuance of the request.
// This macro is arranged to branch on the most common error-codes first.
//
#define \
NhIsFatalSocketError( \
_Error \
) \
((_Error) != ERROR_OPERATION_ABORTED && \
((_Error) == WSAEDISCON || \
(_Error) == WSAECONNRESET || \
(_Error) == WSAETIMEDOUT || \
(_Error) == WSAENETDOWN || \
(_Error) == WSAENOTSOCK || \
(_Error) == WSAESHUTDOWN || \
(_Error) == WSAECONNABORTED))
typedef class _CNhSock : public virtual GENERIC_NODE
{
public:
_CNhSock();
_CNhSock(SOCKET iSocket);
~_CNhSock();
void ComponentCleanUpRoutine(void);
virtual void StopSync(void);
virtual PCHAR GetObjectName() { return ObjectNamep;}
SOCKET GetSock() { return Socket;};
VOID SetSock(SOCKET inSock) { Socket = inSock;};
ULONG
NhAcceptStreamSocket(
PCOMPONENT_SYNC Component,
class _CNhSock * AcceptedSocketp OPTIONAL,
PNH_BUFFER Bufferp OPTIONAL,
PNH_COMPLETION_ROUTINE AcceptCompletionRoutine,
PVOID Context,
PVOID Context2
);
ULONG
NhConnectStreamSocket(
PCOMPONENT_SYNC Component,
ULONG Address,
USHORT Port,
PNH_BUFFER Bufferp OPTIONAL,
PNH_COMPLETION_ROUTINE ConnectCompletionRoutine,
PNH_COMPLETION_ROUTINE CloseNotificationRoutine OPTIONAL,
PVOID Context,
PVOID Context2
);
ULONG
NhCreateDatagramSocket(
ULONG Address,
USHORT Port,
OUT SOCKET* Socketp
);
ULONG
NhCreateStreamSocket(
ULONG Address OPTIONAL, // may be INADDR_NONE
USHORT Port OPTIONAL,
OUT SOCKET* Socketp
);
#define NhDeleteDatagramSocket(s) NhDeleteSocket(s)
#define NhDeleteStreamSocket(s) NhDeleteSocket(s)
VOID
NhDeleteSocket(
SOCKET Socket
);
VOID NhDeleteSocket() \
{if (this->Socket != INVALID_SOCKET) {closesocket(this->Socket);};}
ULONG
NhNotifyOnCloseStreamSocket(
PCOMPONENT_SYNC Component,
PNH_BUFFER Bufferp OPTIONAL,
PNH_COMPLETION_ROUTINE CloseNotificationRoutine,
PVOID Context,
PVOID Context2
);
VOID
NhQueryAcceptEndpoints(
PUCHAR AcceptBuffer,
PULONG LocalAddress OPTIONAL,
PUSHORT LocalPort OPTIONAL,
PULONG RemoteAddress OPTIONAL,
PUSHORT RemotePort OPTIONAL
);
ULONG
NhQueryAddressSocket();
ULONG
NhQueryLocalEndpointSocket(
PULONG Address OPTIONAL,
PUSHORT Port OPTIONAL
);
USHORT
NhQueryPortSocket();
ULONG
NhQueryRemoteEndpointSocket(
PULONG Address OPTIONAL,
PUSHORT Port OPTIONAL
);
ULONG
NhReadDatagramSocket(
PCOMPONENT_SYNC Component,
PNH_BUFFER Bufferp OPTIONAL,
PNH_COMPLETION_ROUTINE CompletionRoutine,
PVOID Context,
PVOID Context2
);
ULONG
NhReadStreamSocket(
PCOMPONENT_SYNC Component,
PNH_BUFFER Bufferp OPTIONAL,
ULONG Length,
ULONG Offset,
PNH_COMPLETION_ROUTINE CompletionRoutine,
PVOID Context,
PVOID Context2
);
ULONG
NhWriteDatagramSocket(
PCOMPONENT_SYNC Component,
ULONG Address,
USHORT Port,
PNH_BUFFER Bufferp,
ULONG Length,
PNH_COMPLETION_ROUTINE CompletionRoutine,
PVOID Context,
PVOID Context2
);
ULONG
NhWriteStreamSocket(
PCOMPONENT_SYNC Component,
PNH_BUFFER Bufferp,
ULONG Length,
ULONG Offset,
PNH_COMPLETION_ROUTINE CompletionRoutine,
PVOID Context,
PVOID Context2
);
static VOID NTAPI
NhpConnectOrCloseCallbackRoutine(
PVOID Context,
BOOLEAN WaitCompleted
);
static VOID NTAPI
NhpCloseNotificationCallbackRoutine(
PVOID Context,
BOOLEAN WaitCompleted
);
static VOID WINAPI
NhpIoCompletionRoutine(
ULONG ErrorCode,
ULONG BytesTransferred,
LPOVERLAPPED Overlapped
);
static VOID APIENTRY
NhpIoWorkerRoutine(
PVOID Context
);
protected:
SOCKET Socket;
static const PCHAR ObjectNamep;
// For Shared Sockets we should have ShareCounter
} CNhSock, *PCNhSock;
//
// Utility functions
//
ULONG InterfaceForDestination(ULONG DestIp);
#endif // _NATHLP_SOCKET_H_