Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

286 lines
7.5 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name :
conninfo.hxx
Abstract:
This module declares Communication Package Information
class TS_CONNECTION_INFO.
Main Goal of this module is to provide transport independent
connection management code.
Author:
Murali R. Krishnan ( MuraliK ) 27-Sept-1994
Revision History:
MuraliK 07-March-1995 Moved to Internet Services Common DLL,
from Gopher Service module.
--*/
# ifndef _CONNINFO_HXX_
# define _CONNINFO_HXX_
/************************************************************
* Include Headers
************************************************************/
# include <nt.h>
# include <ntrtl.h>
# include <nturtl.h>
# include <windows.h>
# include <windows.h>
# include <winsock.h>
# include <xportcon.hxx>
# include "dbgutil.h"
/************************************************************
* Type Definitions
************************************************************/
//
// Default time to wait for thread synchronization
//
# define CP_CONNECTION_THREAD_TIMEOUT ( 20000) // seconds
/*++
class TS_CONNECTION_INFO_BASE
Description:
Defines a class for encapsulating communication information
for communicating using TCP/IP or similar protocol and a separate
thread for accepting and dispatching connections.
A separate thread waits on the established socket for client requests.
On receiving a client request, it invokes the call back
function supplied when creating this object.
--*/
class TS_CONNECTION_INFO_BASE {
protected:
CRITICAL_SECTION m_csLock; // to modify data and smoothly shut down.
SOCKET m_listenSocket; // socket used for listening requests
//
// Function to be called when a new connection is established.
//
PFN_CONNECT_CALLBACK m_pfnConnect;
INT ResetSocket( IN SOCKET s);
public:
TS_CONNECTION_INFO_BASE( IN PFN_CONNECT_CALLBACK pfnConnect = NULL);
virtual ~TS_CONNECTION_INFO_BASE( VOID);
//
// CreateListenSocket()
// o Creates a socket for listening to the connections
// lpLocalAddress pointer to local address structure (sin_addr)
// lenLocalAddress length of hte local address structure.
// socketType type of the socket to be created.
// socketProtocol the protocol used for the socket connection.
// nBackLog Max length for queue of pending connections
//
// Returns NO_ERROR on success and error codes on failure.
//
DWORD CreateListenSocket(
IN LPSOCKADDR lpLocalAddress,
IN int lenLocalAddress,
IN int socketType,
IN int socketProtocol,
IN DWORD nBackLog);
SOCKET QueryListenSocket( VOID) const { return ( m_listenSocket); }
DWORD CloseListenSocket( VOID);
//
// StartConnectionPump()
// o Creates and starts the connection thread.
// This thread loops around waiting for connections to listenSocket.
//
virtual BOOL StartConnectionPump( IN PFN_CONNECT_CALLBACK pfnConnect,
IN ATQ_COMPLETION pfnConnectEx,
IN ATQ_COMPLETION pfnIOCompletion,
IN DWORD cbAcceptExReceiveBuffer,
IN const CHAR * pszRegParamKey
)
= 0;
//
// StopConnectionPump()
// o Stops the connection thread and syncs it with the current thread.
//
virtual BOOL StopConnectionPump( VOID) = 0;
VOID Lock( VOID)
{ EnterCriticalSection( &m_csLock); }
VOID UnLock( VOID)
{ LeaveCriticalSection( &m_csLock); }
# if DBG
VOID Print( VOID) const;
# endif // DBG
}; // class TS_CONNECTION_INFO_BASE
typedef TS_CONNECTION_INFO_BASE * PTS_CONNECTION_INFO_BASE;
/*++
class TS_CONNECTION_INFO
Description:
Defines a class for encapsulating communication information
for communicating using TCP/IP or similar protocol and a separate
thread for accepting and dispatching connections.
A separate thread waits on the established socket for client requests.
On receiving a client request, it invokes the call back
function supplied when creating this object.
--*/
class TS_CONNECTION_INFO : public TS_CONNECTION_INFO_BASE
{
private:
HANDLE m_hConnectionThread; // Thread that loops for connections
BOOL m_fShutDown; // Flag indicating shut down mode
public:
TS_CONNECTION_INFO( IN PFN_CONNECT_CALLBACK pfnConnect = NULL);
virtual ~TS_CONNECTION_INFO( VOID);
//
// StartConnectionPump()
// o Creates and starts the connection thread.
// This thread loops around waiting for connections to listenSocket.
//
virtual BOOL StartConnectionPump( IN PFN_CONNECT_CALLBACK pfnConnect,
IN ATQ_COMPLETION pfnConnectEx,
IN ATQ_COMPLETION pfnIOCompletion,
IN DWORD cbAcceptExReceiveBuffer,
IN const CHAR * pszRegParamKey
);
//
// ConnectionLoop
// o The thread is made to loop waiting for connections
// and call the connection callback function on new connections
//
DWORD ConnectionLoop( VOID);
//
// StopConnectionThread()
// o Stops the connection thread and syncs it with the current thread.
//
virtual BOOL StopConnectionPump( VOID);
# if DBG
VOID Print( VOID) const;
# endif // DBG
}; // class TS_CONNECTION_INFO
typedef TS_CONNECTION_INFO * PTS_CONNECTION_INFO;
/*++
class TS_ACCEPTEX_CONNECTION_INFO
Description:
Defines a class for encapsulating communication information
for communicating using TCP/IP or similar protocol and a separate
thread for accepting and dispatching connections.
A pool of sockets wait on the Atq completion port waiting for a
connection to come in.
On receiving a client request, it invokes the call back
function supplied when creating this object.
--*/
class TS_ACCEPTEX_CONNECTION_INFO : public TS_CONNECTION_INFO_BASE {
protected:
public:
TS_ACCEPTEX_CONNECTION_INFO( IN PFN_CONNECT_CALLBACK pfnConnect = NULL);
virtual ~TS_ACCEPTEX_CONNECTION_INFO( VOID);
//
// StartConnectionPump()
// o Creates and starts the connection thread.
// This thread loops around waiting for connections to listenSocket.
//
virtual BOOL StartConnectionPump( IN PFN_CONNECT_CALLBACK pfnConnect,
IN ATQ_COMPLETION pfnConnectEx,
IN ATQ_COMPLETION pfnIOCompletion,
IN DWORD cbAcceptExReceiveBuffer,
IN const CHAR * pszRegParamKey
);
//
// StopConnectionPump()
// o Stops the connection thread and syncs it with the current thread.
//
virtual BOOL StopConnectionPump( VOID);
# if DBG
VOID Print( VOID) const;
# endif // DBG
}; // class TS_ACCEPTEX_CONNECTION_INFO
# endif // _CONNINFO_HXX_
/************************ End of File ***********************/