Pegasus Enhancement Proposal (PEP)
PEP #: 67
TITLE: Indication Consumer Registration
Version : 1.1
Created: 16 May 2003
Authors: Yi Zhou
State: Accepted
Version History:
| Version | Date | Author | Change Description |
|---|---|---|---|
| 1.0 | 16 May 2003 | Yi Zhou | Initial Submission |
| 1.1 | 12 August 2003 | Yi Zhou | Updated PEP to create a generic indication consumer interface that can be used by both the indication consumer provider and the indication consumer client as required by PEP#76. Updated Status |
Abstract: This PEP proposes to add indication consumer registration to Pegasus release 2.3 using the existing provider registration mechanism. This will give subscribers a way to register indication consumers with the CIM Server.
Indication subscribers must create CIM Listener modules on separate ports for each CIM/XML indication destination. Pegasus has support in the CIM Server to act as a sharable CIM Listener. However, a consumer registration scheme is necessary to take advantage of this feature.
This PEP proposes the addition of indication consumer registration that will use the existing provider registration mechanism. Allow indication subscriber to use the CIM Server as a CIM Listener into which an indication consumer may be registered. This will allow efficient lookup of an indication consumer when an indication is received and use the existing client (cimprovider) to disable, enable, unregister, and list registered indication consumers.
This proposal would require the following changes:
These classes are as follows:
// ==================================================================
// PG_CapabilitiesRegistration
// ==================================================================
[PG_CapabilitiesRegistration, Abstract,
Version ("2.1.0"), Description ("PG_CapabilitiesRegistration is the "
"abstract superclass for PG_ProviderCapabilities class and "
"PG_ConsumerCapabilities class.") ]
class PG_CapabilitiesRegistration : CIM_ManagedElement {
[Key, Propagated ("PG_Provider.ProviderModuleName"),
Description ("The scoping PG_ProviderModule name.") ]
string ProviderModuleName;
[Key, Propagated ("PG_Provider.Name"),
Description ("The scoping PG_Provider name.") ]
string ProviderName;
[Key, Description ("A value that uniquely identifies "
"this Capabilities instance within the set of Capabilities for "
"the designated Provider or consumer.") ]
string CapabilityID;
[Required, Description (
"ProviderType enumerates the kind of provider "
"capabilities defined for the associated Provider. "),
ArrayType ("Indexed"),
ValueMap { "2", "3", "4" , "5" , "6" },
Values {"Instance", "Association", "Indication" , "Method", "IndicationConsumer"}]
uint16 ProviderType[];
};
// ==================================================================
// PG_ProviderCapabilities
// ==================================================================
[Version ("2.1.0"), Description ("An instance of "
"ProviderCapabilities describes a set of PG_Provider "
"capabilities. ") ]
class PG_ProviderCapabilities : PG_CapabilitiesRegistration {
[Description (
"The ClassName describes the class for which the associated "
"Provider supplies instances, associations or indications "
"information.")]
string ClassName;
[Description ("Namespaces describes the namespaces that are "
"supported by the Provider for ClassName.")]
string Namespaces[];
[Description (
"SupportedProperties lists the properties supported "
"by this provider. If this array is empty, the provider "
"MUST support all of the properties defined in the class. "
"If the provider does not support all of the properties, "
"the properties supported MUST be included in the array. "
"The array entry format is "),
ModelCorrespondence {"PG_ProviderCapabilities.ClassName"} ]
string SupportedProperties[];
[Description (
"SupportedMethods lists the methods supported by this "
"provider. If this array is empty, the provider MUST "
"support all the methods defined in the class. "
"If the provider does not support all the methods, "
"the methods supported MUST be included in the array."
"The array entry format is "),
ModelCorrespondence {"PG_ProviderCapabilities.ClassName "} ]
string SupportedMethods [];
};
// ==================================================================
// PG_ConsumerCapabilities
// ==================================================================
[Version ("2.1.0"), Description ("An instance of "
"ConsumerCapabilities describes a set of PG_Provider "
"consumer capabilities. ") ]
class PG_ConsumerCapabilities : PG_CapabilitiesRegistration {
[Required, Description ("IndicationDestinations describes the "
"destinations for which indications will be delivered to "
"this consumer. An indication destination corresponds to the "
"path portion of the destination URL specified in a "
"CIM_IndicationHandlerCIMXML instance.")]
string IndicationDestinations[];
};
The interface is as follows: Boolean lookupIndicationConsumer(const String & destinationPath, CIMInstance & provider, CIMInstance & providerModule);
The interface is as follows: void handleExportIndicationRequest(AsyncOpNode *op, const Message *message) throw();
The class is as follows:
/**
This class defines the set of methods implemented by an indication consumer.
*/
class CIMIndicationConsumer
{
public:
CIMIndicationConsumer(void) { };
virtual ~CIMIndicationConsumer(void) { };
/**
@param contex contains security and locale information relevant for the lifetime
of this operation.
@param url
@param indicationInstance
*/
virtual void consumeIndication(
const OperationContext & context,
const String & url,
const CIMInstance& indicationInstance) = 0;
};
The class is as follows:
/**
This class defines the set of methods implemented by an indication consumer provider.
*/
class PEGASUS_PROVIDER_LINKAGE CIMIndicationConsumerProvider : public virtual CIMProvider
, public virtual CIMIndicationConsumer
{
public:
CIMIndicationConsumerProvider(void);
virtual ~CIMIndicationConsumerProvider(void);
};
| Action | Planned | Actual | Comment |
| PEP Submitted | 16 May 2003 | 16 May 2003 | |
| PEP Reviewed | 23 May 2003 | 20 May 2003 | |
| PEP Approved | 28 May 2003 | 6 June 2003 | |
| Code Committed | 15 August 2003 | 6 August 2003 |