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.
199 lines
6.1 KiB
199 lines
6.1 KiB
/*==========================================================================
|
|
*
|
|
* Copyright (C) 1998-2000 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: CommandData.h
|
|
* Content: Declaration of class representing a command
|
|
*
|
|
*
|
|
* History:
|
|
* Date By Reason
|
|
* ==== == ======
|
|
* 04/07/99 jtk Derived from SPData.h
|
|
***************************************************************************/
|
|
|
|
#ifndef __COMMAND_DATA_H__
|
|
#define __COMMAND_DATA_H__
|
|
|
|
#undef DPF_SUBCOMP
|
|
#define DPF_SUBCOMP DN_SUBCOMP_MODEM
|
|
|
|
|
|
//**********************************************************************
|
|
// Constant definitions
|
|
//**********************************************************************
|
|
|
|
typedef enum
|
|
{
|
|
COMMAND_STATE_UNKNOWN, // unknown state
|
|
COMMAND_STATE_PENDING, // command waiting to be processed
|
|
COMMAND_STATE_INPROGRESS, // command is executing
|
|
COMMAND_STATE_INPROGRESS_CANNOT_CANCEL, // command is executing, can't be cancelled
|
|
COMMAND_STATE_CANCELLING, // command is already being cancelled
|
|
} COMMAND_STATE;
|
|
|
|
typedef enum
|
|
{
|
|
COMMAND_TYPE_UNKNOWN, // unknown command
|
|
COMMAND_TYPE_CONNECT, // connect command
|
|
COMMAND_TYPE_LISTEN, // listen command
|
|
COMMAND_TYPE_ENUM_QUERY, // enum command
|
|
COMMAND_TYPE_SEND, // data send command (enum, enum query, send)
|
|
} COMMAND_TYPE;
|
|
|
|
#define NULL_DESCRIPTOR 0
|
|
|
|
//**********************************************************************
|
|
// Macro definitions
|
|
//**********************************************************************
|
|
|
|
//**********************************************************************
|
|
// Structure definitions
|
|
//**********************************************************************
|
|
|
|
//
|
|
// forward class and structure references
|
|
//
|
|
class CModemEndpoint;
|
|
|
|
//**********************************************************************
|
|
// Variable definitions
|
|
//**********************************************************************
|
|
|
|
//**********************************************************************
|
|
// Function prototypes
|
|
//**********************************************************************
|
|
|
|
//**********************************************************************
|
|
// Class definitions
|
|
//**********************************************************************
|
|
|
|
//
|
|
// class for command data
|
|
//
|
|
class CModemCommandData
|
|
{
|
|
public:
|
|
void Lock( void ) { DNEnterCriticalSection( &m_Lock ); }
|
|
void Unlock( void ) { DNLeaveCriticalSection( &m_Lock ); }
|
|
|
|
DWORD GetDescriptor( void ) const { return m_dwDescriptor; }
|
|
void SetDescriptor( void )
|
|
{
|
|
m_dwDescriptor = m_dwNextDescriptor;
|
|
m_dwNextDescriptor++;
|
|
if ( m_dwNextDescriptor == NULL_DESCRIPTOR )
|
|
{
|
|
m_dwNextDescriptor++;
|
|
}
|
|
|
|
SetState( COMMAND_STATE_UNKNOWN );
|
|
}
|
|
|
|
COMMAND_STATE GetState( void ) const { return m_State; }
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::SetState"
|
|
void SetState( const COMMAND_STATE State )
|
|
{
|
|
DNASSERT( ( ( m_State == COMMAND_STATE_UNKNOWN ) || ( State == COMMAND_STATE_UNKNOWN ) ) ||
|
|
( ( m_State == COMMAND_STATE_PENDING ) && ( State == COMMAND_STATE_INPROGRESS ) ) ||
|
|
( ( m_State == COMMAND_STATE_PENDING ) && ( State == COMMAND_STATE_INPROGRESS_CANNOT_CANCEL ) ) ||
|
|
( ( m_State == COMMAND_STATE_PENDING ) && ( State == COMMAND_STATE_CANCELLING ) ) ||
|
|
( ( m_State == COMMAND_STATE_INPROGRESS ) && ( State == COMMAND_STATE_CANCELLING ) ) );
|
|
m_State = State;
|
|
}
|
|
|
|
COMMAND_TYPE GetType( void ) const { return m_Type; }
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::SetType"
|
|
void SetType( const COMMAND_TYPE Type )
|
|
{
|
|
DNASSERT( ( m_Type == COMMAND_TYPE_UNKNOWN ) || ( Type == COMMAND_TYPE_UNKNOWN ) );
|
|
m_Type = Type;
|
|
}
|
|
|
|
CModemEndpoint *GetEndpoint( void ) { return m_pEndpoint; }
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::SetEndpoint"
|
|
void SetEndpoint( CModemEndpoint *const pEndpoint )
|
|
{
|
|
DNASSERT( ( m_pEndpoint == NULL ) || ( pEndpoint == NULL ) );
|
|
m_pEndpoint = pEndpoint;
|
|
}
|
|
|
|
void *GetUserContext( void ){ return m_pUserContext; }
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::SetUserContext"
|
|
void SetUserContext( void *const pUserContext )
|
|
{
|
|
DNASSERT( ( m_pUserContext == NULL ) || ( pUserContext == NULL ) );
|
|
m_pUserContext = pUserContext;
|
|
}
|
|
|
|
void AddToActiveCommandList( CBilink *const pLinkage ) { m_CommandListLinkage.InsertAfter( pLinkage ); }
|
|
void RemoveFromActiveCommandList( void ) { m_CommandListLinkage.RemoveFromList(); }
|
|
|
|
void Reset( void );
|
|
|
|
//
|
|
// pool functions
|
|
//
|
|
static BOOL PoolAllocFunction( void* pvItem, void* pvContext );
|
|
static void PoolInitFunction( void* pvItem, void* pvContext );
|
|
static void PoolReleaseFunction( void* pvItem );
|
|
static void PoolDeallocFunction( void* pvItem );
|
|
|
|
void ReturnSelfToPool( void );
|
|
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::AddRef"
|
|
void AddRef( void )
|
|
{
|
|
DPFX(DPFPREP, 8, "AddRef CModemCommandData (%p), refcount = %d", this, m_iRefCount + 1);
|
|
|
|
DNASSERT( m_iRefCount != 0 );
|
|
DNInterlockedIncrement( &m_iRefCount );
|
|
}
|
|
#undef DPF_MODNAME
|
|
#define DPF_MODNAME "CModemCommandData::DecRef"
|
|
void DecRef( void )
|
|
{
|
|
DPFX(DPFPREP, 8, "DecRef CModemCommandData (%p), refcount = %d", this, m_iRefCount - 1);
|
|
|
|
DNASSERT( m_iRefCount != 0 );
|
|
if ( DNInterlockedDecrement( &m_iRefCount ) == 0 )
|
|
{
|
|
ReturnSelfToPool();
|
|
}
|
|
}
|
|
|
|
protected:
|
|
|
|
private:
|
|
#ifndef DPNBUILD_ONLYONETHREAD
|
|
DNCRITICAL_SECTION m_Lock;
|
|
#endif // !DPNBUILD_ONLYONETHREAD
|
|
CBilink m_CommandListLinkage;
|
|
|
|
volatile DWORD m_dwDescriptor;
|
|
volatile DWORD m_dwNextDescriptor;
|
|
volatile COMMAND_STATE m_State;
|
|
COMMAND_TYPE m_Type;
|
|
CModemEndpoint* m_pEndpoint;
|
|
void* m_pUserContext;
|
|
volatile LONG m_iRefCount;
|
|
|
|
//
|
|
// prevent unwarranted copies
|
|
//
|
|
CModemCommandData( const CModemCommandData & );
|
|
CModemCommandData& operator=( const CModemCommandData & );
|
|
};
|
|
|
|
#undef DPF_MODNAME
|
|
|
|
#endif // __COMMAND_DATA_H__
|