341 lines
10 KiB
C
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
|