windows-nt/Source/XPSP1/NT/termsrv/remdsk/rds/t120/h/invoklst.h
2020-09-26 16:20:57 +08:00

341 lines
10 KiB
C++

/*
* invoklst.h
*
* Copyright (c) 1995 by DataBeam Corporation, Lexington, KY
*
* Abstract:
* This is the interface file for the class CInvokeSpecifierListContainer.
* This class manages the data associated with an Application Invoke
* Request or Indication. This includes a list of applications to be
* invoked. The CInvokeSpecifierListContainer data container utilizes a
* CSessKeyContainer container to buffer part of the data associated with each
* application invoke specifier. Each application invoke specifier also
* includes a capability ID whose data is buffered internally by the
* using a CCapIDContainer container. The list of application
* invoke specifiers is maintained internally by the class through the use
* of a Rogue Wave list container.
*
* Caveats:
* None.
*
* Author:
* blp/jbo
*/
#ifndef _APPLICATION_INVOKE_SPECIFIER_LIST_
#define _APPLICATION_INVOKE_SPECIFIER_LIST_
#include "capid.h"
#include "sesskey.h"
#include "arost.h"
/*
* This is the internal structure used to hold the data associated with each
* invoke specifier.
*/
typedef struct
{
CSessKeyContainer *session_key;
CAppCapItemList ExpectedCapItemList;
MCSChannelType startup_channel_type;
BOOL must_be_invoked;
}
INVOKE_SPECIFIER;
/*
* These are the typedefs for the Rogue Wave list which is used to hold the
* invoke specifier info structures.
*/
class CInvokeSpecifierList : public CList
{
DEFINE_CLIST(CInvokeSpecifierList, INVOKE_SPECIFIER*)
};
/*
* Class definition:
*/
class CInvokeSpecifierListContainer : public CRefCount
{
public:
CInvokeSpecifierListContainer(UINT cProtEntities, PGCCAppProtocolEntity *, PGCCError);
CInvokeSpecifierListContainer(PApplicationProtocolEntityList, PGCCError);
~CInvokeSpecifierListContainer(void);
UINT LockApplicationInvokeSpecifierList(void);
void UnLockApplicationInvokeSpecifierList(void);
UINT GetApplicationInvokeSpecifierList(USHORT *pcProtEntities, LPBYTE memory);
UINT GetApplicationInvokeSpecifierList(ULONG *pcProtEntities, LPBYTE pMemory)
{
USHORT c;
UINT nRet = GetApplicationInvokeSpecifierList(&c, pMemory);
*pcProtEntities = c;
return nRet;
}
GCCError GetApplicationInvokeSpecifierListPDU(PApplicationProtocolEntityList *);
void FreeApplicationInvokeSpecifierListPDU(void);
protected:
CInvokeSpecifierList m_InvokeSpecifierList;
UINT m_cbDataSize;
PApplicationProtocolEntityList m_pAPEListPDU;
BOOL m_fValidAPEListPDU;
private:
GCCError SaveAPICapabilities(INVOKE_SPECIFIER *, UINT cCaps, PGCCApplicationCapability *);
GCCError SavePDUCapabilities(INVOKE_SPECIFIER *, PSetOfExpectedCapabilities);
UINT GetApplicationCapability(APP_CAP_ITEM *, PGCCApplicationCapability, LPBYTE memory);
GCCError ConvertInvokeSpecifierInfoToPDU(INVOKE_SPECIFIER *, PApplicationProtocolEntityList);
GCCError ConvertExpectedCapabilityDataToPDU(APP_CAP_ITEM *, PSetOfExpectedCapabilities);
};
/*
* Comments explaining the public and private class member functions
*/
/*
* CInvokeSpecifierListContainer (
* USHORT number_of_protocol_entities,
* PGCCAppProtocolEntity * app_protocol_entity_list,
* PGCCError return_value);
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This is a constructor for the CInvokeSpecifierListContainer class.
* This constructor is used to create an CInvokeSpecifierListContainer
* object from a list of "API" application protocol entities.
*
* Formal Parameters:
* number_of_protocol_entities (i) The number of "APE"s in the list.
* app_protocol_entity_list (i) The list of API "APE"s.
* return_value (o) Error return value.
*
* Return Value:
* GCC_NO_ERROR - Function completed successfully.
* GCC_ALLOCATION_FAILURE - A resource allocation error occurred.
* GCC_BAD_SESSION_KEY - An APE contained an invalid session key.
* GCC_BAD_CAPABILITY_ID - An API contained an invalid capability ID.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* CInvokeSpecifierListContainer (
* PApplicationProtocolEntityList app_protocol_entity_list,
* PGCCError return_value);
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This is a constructor for the CInvokeSpecifierListContainer class.
* This constructor is used to create an CInvokeSpecifierListContainer
* object from a "PDU" ApplicationProtocolEntityList.
*
* Formal Parameters:
* app_protocol_entity_list (i) The list of PDU "APE"s.
* return_value (o) Error return value.
*
* Return Value:
* GCC_NO_ERROR - Function completed successfully.
* GCC_ALLOCATION_FAILURE - A resource allocation error occurred.
* GCC_BAD_SESSION_KEY - An APE contained an invalid session key.
* GCC_BAD_CAPABILITY_ID - An API contained an invalid capability ID.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* ~CInvokeSpecifierListContainer ();
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This is the destructor for the CInvokeSpecifierListContainer class.
* It is responsible for freeing any memory allocated to hold the
* invoke data.
*
* Formal Parameters:
* None.
*
* Return Value:
* None.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* UINT LockApplicationInvokeSpecifierList ();
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This routine is used to "lock" the "API" data for this object. This
* results in the lock count for this object being incremented. When the
* lock count transitions from 0 to 1, a calculation is made to determine
* how much memory will be needed to hold any "API" data which will
* be referenced by, but not held in, the list of GCCAppProtocolEntity
* structures which is filled in on a call to GetApplicationInvoke-
* SpecifierList. This is the value returned by this routine in order to
* allow the calling object to allocate that amount of memory in
* preparation for the call to GetApplicationInvokeSpecifierList.
*
* Formal Parameters:
* None.
*
* Return Value:
* The amount of memory which will be needed to hold "API" data
* which is a list of GCCAppProtocolEntity structures.
*
* Side Effects:
* The internal lock count is incremented.
*
* Caveats:
* The internal lock count is used in conjuction with an internal "free"
* flag as a mechanism for ensuring that this object remains in existance
* until all interested parties are through with it. The object remains
* valid (unless explicity deleted) until the lock count is zero and the
* "free" flag is set through a call to FreeApplicationInvokeSpecifierList.
* This allows other objects to lock this object and be sure that it
* remains valid until they call UnLock which will decrement the internal
* lock count. A typical usage scenerio for this object would be: An
* CInvokeSpecifierListContainer object is constructed and then passed off
* to any interested parties through a function call. On return from the
* function call, the FreeApplicationInvokeSpecifierList call is made which
* will set the internal "free" flag. If no other parties have locked the
* object with a Lock call, then the CInvokeSpecifierListContainer object
* will automatically delete itself when the FreeApplicationInvoke-
* SpecifierList call is made. If, however, any number of other parties
* has locked the object, it will remain in existence until each of them
* has unlocked the object through a call to UnLock.
*/
/*
* UINT GetApplicationInvokeSpecifierList (
* PUShort number_of_protocol_entities,
* LPSTR memory);
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This routine is used to retrieve the application invoke specifier list
* from the CInvokeSpecifierListContainer object in the "API" form of a
* list of PGCCAppProtocolEntity structures.
*
* Formal Parameters:
* number_of_protocol_entities (o) The number of APEs in the list.
* memory (o) The memory used to hold the
* APE data.
*
* Return Value:
* The amount of memory which will be needed to hold "API" data
* which is a list of GCCAppProtocolEntity structures.
*
* Side Effects:
* None.
*
* Caveats:
* None.
*/
/*
* void UnLockApplicationInvokeSpecifierList ();
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This routine is used to "unlock" the "API" data for this object. This
* results in the lock count for this object being decremented. When the
* lock count transitions from 1 to 0, a check is made to determine
* whether the object has been freed through a call to
* FreeApplicationInvokeSpecifierList. If so, the object will
* automatically delete itself.
*
* Formal Parameters:
* None.
*
* Return Value:
* None.
*
* Side Effects:
* The internal lock count is decremented.
*
* Caveats:
* None.
*/
/*
* GCCError GetApplicationInvokeSpecifierListPDU (
* PApplicationProtocolEntityList * protocol_entity_list);
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This routine is used to retrieve the object key data from the
* CInvokeSpecifierListContainer object in the "PDU" form of a list of
* PApplicationProtocolEntityList structures.
*
* Formal Parameters:
* protocol_entity_list (o) The list of structures to fill in.
*
* Return Value:
* GCC_NO_ERROR - No error.
* GCC_ALLOCATION_FAILURE - A resource allocation error occurred.
*
* Side Effects:
* The first time this routine is called, data is allocated internally to
* hold the PDU form.
*
* Caveats:
* None.
*/
/*
* void FreeApplicationInvokeSpecifierListPDU ();
*
* Public member function of CInvokeSpecifierListContainer.
*
* Function Description:
* This routine is used to "free" the "PDU" data allocated for this object
* which is held internally.
*
* Formal Parameters:
* None.
*
* Return Value:
* None.
*
* Side Effects:
* The internal flag is set to indicate that the PDU form of data no
* longer is valid for this object.
*
* Caveats:
* None.
*/
#endif