164 lines
3.4 KiB
C
164 lines
3.4 KiB
C
/**********************************************************************/
|
||
/** Microsoft Windows NT **/
|
||
/** Copyright(c) Microsoft Corp., 1994 **/
|
||
/**********************************************************************/
|
||
|
||
/*
|
||
cpsock.h
|
||
|
||
This module contains the communication package prototypes and
|
||
the implementation for TCP sockets.
|
||
|
||
FILE HISTORY:
|
||
Johnl 08-Aug-1994 Created.
|
||
|
||
*/
|
||
|
||
#ifndef _CPSOCK_H_
|
||
#define _CPSOCK_H_
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
//
|
||
// This is the function callback that is called when the connect thread has
|
||
// accepted a new connection
|
||
//
|
||
|
||
typedef
|
||
VOID
|
||
(*PFN_ON_CONNECT)(
|
||
SOCKET sNew,
|
||
SOCKADDR_IN * psockaddr
|
||
);
|
||
|
||
//
|
||
// Contains Connection Package socket information
|
||
//
|
||
|
||
typedef struct _CP_INFO
|
||
{
|
||
//
|
||
// Function to be called when a new connection comes in
|
||
//
|
||
|
||
PFN_ON_CONNECT pfnOnConnect;
|
||
|
||
//
|
||
// Addressing information
|
||
//
|
||
|
||
SOCKADDR_IN sockaddr;
|
||
|
||
//
|
||
// Thread handle of connect thread. Used to synchronize shutdown
|
||
//
|
||
|
||
HANDLE hConnectThread;
|
||
|
||
//
|
||
// Critical section that should be taken when modifying any of the
|
||
// following members
|
||
//
|
||
|
||
CRITICAL_SECTION InfoCriticalSection;
|
||
|
||
//
|
||
// Tells connect thread to terminate itself
|
||
//
|
||
|
||
BOOL fShutDown;
|
||
|
||
//
|
||
// Socket the connect thread listens on for incoming connections
|
||
//
|
||
|
||
SOCKET ListenSocket;
|
||
|
||
} CP_INFO, *PCP_INFO;
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// Communication Package function pointers
|
||
//
|
||
////////////////////////////////////////////////////////////////////////////
|
||
|
||
typedef
|
||
BOOL
|
||
(*PFN_CPINITIALIZE)(
|
||
PCP_INFO * ppInfo,
|
||
PFN_ON_CONNECT pfnOnConnect,
|
||
BYTE * LocalAddress,
|
||
u_short port,
|
||
DWORD reserved
|
||
);
|
||
|
||
typedef
|
||
INT
|
||
(*PFN_CPCREATELISTENSOCKET)(
|
||
PCP_INFO pcpInfo
|
||
);
|
||
|
||
typedef
|
||
BOOL
|
||
(*PFN_CPSTARTCONNECTTHREAD)(
|
||
PCP_INFO pcpInfo
|
||
);
|
||
|
||
typedef
|
||
BOOL
|
||
(*PFN_CPSTOPCONNECTTHREAD)(
|
||
PCP_INFO pcpInfo
|
||
);
|
||
|
||
//
|
||
// Forcefully closes a socket
|
||
//
|
||
|
||
INT ResetSocket( SOCKET s );
|
||
|
||
//
|
||
// Serialization for access to the CP_INFO data (used primarily during
|
||
// shutdown)
|
||
//
|
||
|
||
#define LockCPInfo(pcpInfo) EnterCriticalSection( &(pcpInfo)->InfoCriticalSection )
|
||
#define UnlockCPInfo(pcpInfo) LeaveCriticalSection( &(pcpInfo)->InfoCriticalSection )
|
||
|
||
|
||
|
||
//
|
||
// For now, we'll only support TCP sockets
|
||
//
|
||
|
||
#define CPInitialize TcpInitialize
|
||
#define CPCreateListenSocket TcpCreateListenSocket
|
||
#define CPStartConnectThread TcpStartConnectThread
|
||
#define CPStopConnectThread TcpStopConnectThread
|
||
|
||
////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// TCP Sockets Communication Package prototypes
|
||
//
|
||
////////////////////////////////////////////////////////////////////////////
|
||
|
||
dllexp
|
||
BOOL TcpInitialize( PCP_INFO * ppInfo,
|
||
PFN_ON_CONNECT pfnOnConnect,
|
||
BYTE * LocalAddress,
|
||
u_short port,
|
||
DWORD reserved );
|
||
|
||
dllexp INT TcpCreateListenSocket( PCP_INFO pcpInfo );
|
||
dllexp BOOL TcpStartConnectThread( PCP_INFO pcpInfo );
|
||
dllexp BOOL TcpStopConnectThread( PCP_INFO pcpInfo );
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif //!_CPSOCK_H_
|
||
|