|
|
/*
* capid.h * * Copyright (c) 1995 by DataBeam Corporation, Lexington, KY * * Abstract: * This is the interface file for the class CCapIDContainer. A * CCapIDContainer object is used to maintain information about * a particular capability of an application. A capability identifier can * be either a standard type or a non-standard type. When the type is * standard, the identifier is stored internally as an integer value. When * the type is non-standard, an CObjectKeyContainer container object is used * internally to buffer the necessary data. In this case the identifier * data may exist as an Object ID which is a series of non-negative * integers or an H221 non-standard ID which is an octet string of no fewer * than four octets and no more than 255 octets. * * Caveats: * None. * * Author: * jbo */ #ifndef _CAPABILITY_IDENTIFIER_DATA_
#define _CAPABILITY_IDENTIFIER_DATA_
#include "objkey.h"
/*
* This is the typedef for the structure used to hold the capability identifier * data internally. */ typedef struct { GCCCapabilityIDType capability_id_type;
union { USHORT standard_capability; CObjectKeyContainer *non_standard_capability; } u; } CAP_ID_STRUCT;
/*
* Class definition: */ class CCapIDContainer : public CRefCount { public:
CCapIDContainer(PGCCCapabilityID, PGCCError); CCapIDContainer(PCapabilityID, PGCCError); CCapIDContainer(CCapIDContainer *, PGCCError);
~CCapIDContainer(void);
UINT LockCapabilityIdentifierData(void); void UnLockCapabilityIdentifierData(void);
UINT GetGCCCapabilityIDData(PGCCCapabilityID, LPBYTE memory); GCCError GetCapabilityIdentifierDataPDU(PCapabilityID); void FreeCapabilityIdentifierDataPDU(void);
friend BOOL operator== (const CCapIDContainer&, const CCapIDContainer&);
protected:
CAP_ID_STRUCT m_InternalCapID; UINT m_cbDataSize;
CapabilityID m_CapIDPDU; BOOL m_fValidCapIDPDU; };
/*
* Comments explaining the public and protected class member functions */
/*
* CCapIDContainer ( PGCCCapabilityID capability_id, * PGCCError return_value); * * Public member function of CCapIDContainer. * * Function Description: * This is the constructor for the CCapIDContainer class which * takes as input the "API" version of capability ID data, GCCCapabilityID. * * Formal Parameters: * capability_id (i) The capability ID data to store. * return_value (o) The output parameter used to indicate errors. * * Return Value: * GCC_NO_ERROR - No error. * GCC_ALLOCATION_FAILURE - Error creating an object using the * "new" operator. * GCC_BAD_CAPABILITY_ID - An invalid capability ID passed in. * * Side Effects: * None. * * Caveats: * None. */
/*
* CCapIDContainer ( PCapabilityID capability_id, * PGCCError return_value); * * Public member function of CCapIDContainer. * * Function Description: * This is the constructor for the CCapIDContainer class which * takes as input the "PDU" version of capability ID data, CapabilityID. * * Formal Parameters: * capability_id (i) The capability ID data to store. * return_value (o) The output parameter used to indicate errors. * * Return Value: * GCC_NO_ERROR - No error. * GCC_ALLOCATION_FAILURE - Error creating an object using the * "new" operator. * GCC_BAD_CAPABILITY_ID - An invalid capability ID passed in. * * Side Effects: * None. * * Caveats: * None. */ /*
* CCapIDContainer(CCapIDContainer *capability_id, * PGCCError return_value); * * Public member function of CCapIDContainer. * * Function Description: * This is the copy constructor for the CCapIDContainer class * which takes as input another CCapIDContainer object. * * Formal Parameters: * capability_id (i) The CCapIDContainer object to copy. * return_value (o) The output parameter used to indicate errors. * * Return Value: * GCC_NO_ERROR - No error. * GCC_ALLOCATION_FAILURE - Error creating an object using the * "new" operator. * GCC_BAD_CAPABILITY_ID - An invalid CCapIDContainer * passed in. * * Side Effects: * None. * * Caveats: * None. */
/*
* ~CapabilityIdentifierData(); * * Public member function of CCapIDContainer. * * Function Description: * This is the destructor for the CCapIDContainer class. It is * used to clean up any memory allocated during the life of this object. * * Formal Parameters: * None. * * Return Value: * None. * * Side Effects: * None. * * Caveats: * None. */
/*
* UINT LockCapabilityIdentifierData (); * * Public member function of CCapIDContainer. * * 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 GCCCapabilityID structure * which is filled in on a call to GetGCCCapabilityIDData. 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 * GetGCCCapabilityIDData. * * Formal Parameters: * None. * * Return Value: * The amount of memory, if any, which will be needed to hold "API" data * which is referenced by, but not held in, the GCCCapabilityID structure * provided as an output parameter to the GetGCCCapabilityIDData call. * * 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 FreeCapabilityIdentifierData. 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: A * CCapIDContainer object is constructed and then passed off to * any interested parties through a function call. On return from the * function call, the FreeCapabilityIdentifierData call is made which will * set the internal "free" flag. If no other parties have locked the * object with a Lock call, then the CCapIDContainer object will * automatically delete itself when the FreeCapabilityIdentifierData 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 GetGCCCapabilityIdentifierData ( * PGCCCapabilityID capability_id, * LPSTR memory); * * Public member function of CCapIDContainer. * * Function Description: * This routine is used to retrieve the capability ID data from the * CCapIDContainer object in the "API" form of a GCCCapabilityID. * * Formal Parameters: * capability_id (o) The GCCCapabilityID structure to fill in. * memory (o) The memory used to hold any data referenced by, * but not held in, the output structure. * * Return Value: * The amount of data, if any, written into the bulk memory block provided. * * Side Effects: * None. * * Caveats: * None. */
/*
* void UnLockCapabilityIdentifierData (); * * Public member function of CCapIDContainer. * * 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 * FreeCapabilityIdentifierData. If so, the object will automatically * delete itself. * * Formal Parameters: * None. * * Return Value: * None. * * Side Effects: * The internal lock count is decremented. * * Caveats: * It is the responsibility of any party which locks a * CCapIDContainer object by calling Lock to also unlock the * object with a call to UnLock. If the party calling UnLock did not * construct the CCapIDContainer object, it should assume the * object to be invalid thereafter. */
/*
* GCCError GetCapabilityIdentifierDataPDU ( * PCapabilityID capability_id); * * Public member function of CCapIDContainer. * * Function Description: * This routine is used to retrieve the capability ID data from the * CCapIDContainer object in the "PDU" form of a CapabilityID. * * Formal Parameters: * capability_id (o) The CapabilityID structure to fill in. * * Return Value: * GCC_NO_ERROR - No error. * GCC_ALLOCATION_FAILURE - Error creating an object using the * "new" operator. * GCC_BAD_OBJECT_KEY - One of the internal pointers has * been corrupted. * * Side Effects: * None. * * Caveats: * None. */
/*
* void FreeCapabilityIdentifierDataPDU (); * * Public member function of CCapIDContainer. * * Function Description: * This routine is used to "free" the "PDU" data allocated for this object * which is held internally in a CapabilityID structure. * * Formal Parameters: * None. * * Return Value: * None. * * Side Effects: * The internal "free" flag is set. * * Caveats: * This object should be assumed invalid after a call to * FreeCapabilityIdentifierDataPDU has been made. */
/*
* friend BOOL operator== ( * const CCapIDContainer& capability_id_1, * const CCapIDContainer& capability_id_2); * * Public member function of CCapIDContainer. * * Function Description: * This routine is used to compare two CCapIDContainer objects * to determine whether or not they are equal in value. * * Formal Parameters: * capability_id_1 (i) The first CCapIDContainer object * to compare. * capability_id_2 (i) The other CCapIDContainer object * to compare. * * Return Value: * TRUE - The two objects are equal in value. * FALSE - The two objects are not equal in value. * * Side Effects: * None. * * Caveats: * None. */
#endif
|