version 1.16, 2005/06/06 15:58:22
|
version 1.43.10.2, 2013/09/13 10:52:37
|
|
|
//%2005//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// Source License; you may not use this file except in compliance with the |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// License. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// Permission is hereby granted, free of charge, to any person obtaining a |
// of this software and associated documentation files (the "Software"), to |
// copy of this software and associated documentation files (the "Software"), |
// deal in the Software without restriction, including without limitation the |
// to deal in the Software without restriction, including without limitation |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// sell copies of the Software, and to permit persons to whom the Software is |
// and/or sell copies of the Software, and to permit persons to whom the |
// furnished to do so, subject to the following conditions: |
// Software is furnished to do so, subject to the following conditions: |
// | // |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// The above copyright notice and this permission notice shall be included |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// in all copies or substantial portions of the Software. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
|
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
|
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
|
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
|
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
// | // |
//============================================================================== |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
|
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
// Author: Karl Schopmeyer (k.schopmeyer@opengrooup.org) |
////////////////////////////////////////////////////////////////////////// |
// |
|
// Modified By: |
|
// |
|
//%//////////////////////////////////////////////////////////////////////////// |
|
| |
| |
#ifndef InteropProvider_h | #ifndef InteropProvider_h |
|
|
#include <Pegasus/Repository/CIMRepository.h> | #include <Pegasus/Repository/CIMRepository.h> |
#include <Pegasus/Provider/CIMInstanceProvider.h> | #include <Pegasus/Provider/CIMInstanceProvider.h> |
#include <Pegasus/Provider/CIMAssociationProvider.h> | #include <Pegasus/Provider/CIMAssociationProvider.h> |
|
#include <Pegasus/Provider/CIMMethodProvider.h> |
|
#include <Pegasus/General/VersionUtil.h> |
|
|
|
#include \ |
|
<Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
/** | /** |
The InteropProvider provides information and manipulates the |
* The InteropProvider services the Interop classes of the DMTF CIM Schema |
following classes from the DMTF CIM_Interop schema: |
* in the root/PG_InterOp namespace (as well as some related cross-namespace |
CIM_Namespace - Creation and deletion of namespaces |
* associations in other namespaces). Through this implementation, combined |
Note: Effective Pegasus 2.4, it processes PG_Namespace |
* with the SLP provider and one or more vendor-supplied SMI providers, the |
__Namespace - Creation and deletion of namespaces (deprecated) |
* Pegasus WBEM Server is able to provide a fully-functional implementation of |
CIM_ObjectManager - Reports on the status of the object manager |
* the SMI-S Server profile (currently, version 1.1.0). |
CIM_ObjectManagerCommunicationMechanism - Reports on CIMOM communications |
* |
COM_CIMXMLCommunicationMechanism - Reports on CIMXML communications |
* The following is a list of the association and instance classes supported |
CIM_ProtocolAdapter |
* by this provider in the root/PG_InterOp namespace: |
|
* |
Associations |
* PG_CIMXMLCommunicationMechanism (CIM_CIMXMLCommunicationMechanism) |
NamespaceinManager |
* PG_CommMechanismForManager (CIM_CommMechanismForManager) |
|
* PG_ComputerSystem (CIM_ComputerSystem) |
creation and deletion of namespaces using the __namespace class |
* PG_ElementConformsToProfile (CIM_ElementConformsToProfile) |
Note however, that the DMTF specification model does not define a class for |
* PG_ElementSoftwareIdentity (CIM_ElementSoftwareIdentity) |
__namespace so that it is, a "false" class. We assume that it has the |
* PG_HostedAccessPoint (CIM_HostedAccessPoint) |
same characteristics as the CIM_namespace class defined in CIM 2.6. |
* PG_HostedObjectManager (CIM_HostedService) |
|
* PG_InstalledSoftwareIdentity (CIM_InstalledSoftwareIdentity) |
This provider implements the following functions: |
* PG_Namespace (CIM_Namespace) |
- createInstance ( adds a new namespace to the repository) |
* PG_NamespaceInManager (CIM_NamespaceInManager) |
- getInstance ( Gets one instance of any supported object) |
* PG_ObjectManager (CIM_ObjectManager) |
- modifyInstance ( Limited Support - selected fields in CIM_Namespace) |
* PG_ReferencedProfile (CIM_ReferencedProfile) |
- enumerateInstances ( Lists all namespaces of all supported classes) |
* PG_RegisteredProfile (CIM_RegisteredProfile) |
- enumerateInstanceNames ( Lists all namespace names of all supported classes ) |
* PG_RegisteredSubProfile (CIM_RegisteredSubProfile) |
- reference and associations |
* PG_SoftwareIdentity (CIM_SoftwareIdentity) |
TBD |
* PG_SubProfileRequiredProfile (CIM_SubProfileRequiresProfile) |
|
* |
*/ | */ |
| |
|
typedef Array<CIMName> CIMNameArray; |
|
typedef Array<CIMNamespaceName> CIMNamespaceArray; |
|
|
class PEGASUS_INTEROPPROVIDER_LINKAGE InteropProvider : | class PEGASUS_INTEROPPROVIDER_LINKAGE InteropProvider : |
public CIMInstanceProvider, public CIMAssociationProvider |
public CIMInstanceProvider, |
|
public CIMAssociationProvider, |
|
public CIMMethodProvider |
{ | { |
public: | public: |
| |
InteropProvider(CIMRepository* repository); |
InteropProvider( |
|
CIMRepository* repository, |
|
ProviderRegistrationManager* provRegManager); |
|
|
virtual ~InteropProvider() | virtual ~InteropProvider() |
{ | { |
PEG_METHOD_ENTER(TRC_CONTROLPROVIDER,"InteropProvider::~InteropProvider"); |
PEG_METHOD_ENTER(TRC_CONTROLPROVIDER, |
|
"InteropProvider::~InteropProvider"); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
} | } |
| |
|
// Note: The initialize() and terminate() methods are not called for |
|
// Control Providers. |
|
void initialize(CIMOMHandle& handle) { } |
|
void terminate() { } |
|
|
virtual void createInstance( | virtual void createInstance( |
const OperationContext & context, | const OperationContext & context, |
const CIMObjectPath & instanceReference, | const CIMObjectPath & instanceReference, |
|
|
const CIMObjectPath & classReference, | const CIMObjectPath & classReference, |
ObjectPathResponseHandler & handler); | ObjectPathResponseHandler & handler); |
| |
// Association Interfaces |
|
| |
// CIMAssociationProvider interface | // CIMAssociationProvider interface |
virtual void associators( | virtual void associators( |
|
|
const String & role, | const String & role, |
ObjectPathResponseHandler & handler); | ObjectPathResponseHandler & handler); |
| |
/** |
// CIMMethodProvider interface |
Standard initialization function for the provider. |
virtual void invokeMethod( |
*/ |
const OperationContext & context, |
void initialize(CIMOMHandle& cimomHandle) |
const CIMObjectPath & objectReference, |
{ |
const CIMName & methodName, |
} |
const Array<CIMParamValue> & inParameters, |
|
MethodResultResponseHandler & handler); |
void terminate(void) |
|
{ |
|
// delete self. this is necessary because the entry point for this object allocated it, and |
|
// the module is responsible for its memory management. |
|
delete this; |
|
} |
|
| |
private: | private: |
| |
|
void initProvider(); |
| |
CIMInstance _buildInstanceSkeleton( |
CIMInstance buildInstanceSkeleton( |
const CIMObjectPath & objectPath, |
const CIMNamespaceName & nameSpace, |
const CIMName& className, | const CIMName& className, |
|
Boolean includeQualifiers, |
CIMClass& returnedClass); | CIMClass& returnedClass); |
|
/* |
|
* CIM communication mechanism instance building starts with this function |
|
* and completed by buildCIMXMLCommunicationMechanismInstance |
|
*/ |
|
void _buildCommInstSkeleton( |
|
const Boolean isHttpsEnabled, |
|
const Array<String> &ips, |
|
const CIMClass &commMechClass, |
|
Array<CIMInstance> &instances ); |
| |
CIMObjectPath _buildObjectPath( |
CIMInstance buildCIMXMLCommunicationMechanismInstance( |
const CIMObjectPath& objectPath, |
const String& namespaceType, |
const CIMName& className, |
const Uint16& accessProtocol, |
const CIMInstance& instance); |
const String& IPAddress, |
CIMObjectPath _buildInstancePath( |
const CIMClass & commMechClass); |
const CIMObjectPath& objectPath, |
|
const CIMName& className, |
|
const CIMInstance& instance); |
|
| |
CIMClass _getClass(const CIMObjectPath& objectPath, |
Array<CIMInstance> enumCIMXMLCommunicationMechanismInstances(); |
const CIMName& className); |
|
| |
Array<CIMNamespaceName> _enumerateNameSpaces(); |
Array<CIMInstance> enumHostedAccessPointInstances( |
|
const OperationContext &opContext); |
| |
CIMInstance _buildInstancePGCIMXMLCommunicationMechanism( |
CIMInstance getObjectManagerInstance(); |
const CIMObjectPath& objectPath, |
|
const String& namespaceType, |
|
const Uint16& accessProtocol, |
|
const String& IPAddress); |
|
| |
Array<CIMInstance> _buildInstancesPGCIMXMLCommunicationMechanism( |
CIMInstance getComputerSystemInstance(const OperationContext &opContext); |
const CIMObjectPath& objectPath); |
|
| |
CIMInstance _getInstanceCIMObjectManager( |
CIMInstance getHostedObjectManagerInstance( |
const CIMObjectPath& objectPath, |
const OperationContext &opContext); |
const Boolean includeQualifiers, |
|
const Boolean includeClassOrigin, |
|
const CIMPropertyList& propertyList); |
|
| |
Array<CIMInstance> _getInstancesCIMNamespace( |
Array<CIMInstance> enumNamespaceInstances(); |
const CIMObjectPath& objectPath); |
|
| |
|
CIMInstance buildNamespaceInstance(const String & nameSpace); |
| |
CIMInstance _getInstanceCIMNamespace( |
CIMInstance getNameSpaceInstance(const CIMObjectPath & ref); |
const CIMObjectPath& objectPath); |
|
// |
CIMObjectPath createNamespace(const CIMInstance & namespaceInstance); |
CIMInstance _buildInstancePGNamespace( |
void deleteNamespace(const CIMObjectPath & instanceName); |
const CIMObjectPath& objectPath, |
|
CIMNamespaceName& nameSpace); |
|
| |
Array<CIMInstance> _buildInstancesNamespaceInManager( |
CIMObjectPath createProviderProfileCapabilityInstance( |
const CIMObjectPath& objectPath); |
const CIMInstance & profileInstance, |
|
const OperationContext & context); |
| |
Array<CIMInstance> _buildInstancesCommMechanismForManager( |
void deleteProviderProfileCapabilityInstance( |
const CIMObjectPath& objectPath); |
const CIMObjectPath & instanceName, |
|
const OperationContext & context); |
| |
|
Array<CIMInstance> enumNamespaceInManagerInstances(); |
| |
Boolean _getInstanceFromRepositoryCIMObjectManager( |
Array<CIMInstance> enumCommMechanismForManagerInstances(); |
const CIMObjectPath& objectPath, |
|
CIMInstance& rtnInstance, |
|
const Boolean includeQualifiers, |
|
const Boolean includeClassOrigin, |
|
const CIMPropertyList& propertyList); |
|
| |
void modifyObjectManagerInstance(const OperationContext & context, | void modifyObjectManagerInstance(const OperationContext & context, |
const CIMObjectPath & instanceReference, | const CIMObjectPath & instanceReference, |
const CIMInstance& modifiedIns, | const CIMInstance& modifiedIns, |
const Boolean includeQualifiers, | const Boolean includeQualifiers, |
const CIMPropertyList& propertyList, |
const CIMPropertyList& propertyList); |
ResponseHandler & handler); |
|
|
void extractSoftwareIdentityInfo( |
|
const CIMInstance & providerInstance, |
|
String & moduleName, |
|
String & providerName, |
|
String & version, |
|
String & vendor, |
|
Uint16 & majorVersion, |
|
Uint16 & minorVersion, |
|
Uint16 & revision, |
|
Uint16 & build, |
|
bool & extendedVersionSupplied, |
|
String & interfaceType, |
|
String & elementName, |
|
String & caption); |
|
|
|
Array<CIMInstance> enumRegisteredProfileInstances(); |
|
Array<CIMInstance> enumRegisteredSubProfileInstances(); |
|
Array<CIMInstance> enumReferencedProfileInstances(); |
|
Array<CIMInstance> getProfilesForVersion( |
|
Array<CIMInstance>& subprofs, |
|
Uint16 regOrg, |
|
Uint32 majorVer, |
|
Uint32 minorVer, |
|
Uint32 updateVer); |
|
Array<CIMInstance> enumElementConformsToProfileInstances( |
|
const OperationContext & opContext, |
|
const CIMNamespaceName & opNamespace); |
|
Array<CIMInstance> enumElementConformsToProfileRPRPInstances( |
|
const OperationContext & opContext, |
|
const CIMNamespaceName & opNamespace); |
|
Array<CIMInstance> enumSubProfileRequiresProfileInstances(); |
|
Array<CIMInstance> enumSoftwareIdentityInstances(); |
|
Array<CIMInstance> enumElementSoftwareIdentityInstances(); |
|
Array<CIMInstance> enumInstalledSoftwareIdentityInstances( |
|
const OperationContext &opContext); |
|
Array<CIMInstance> enumDefaultSoftwareIdentityInstances(); |
|
|
|
CIMInstance getSoftwareIdentityInstance( |
|
const CIMObjectPath &ref); |
|
|
|
Array<CIMInstance> enumProviderProfileCapabilityInstances( |
|
Boolean checkProviders = true, |
|
Boolean includeQualifiers = false, |
|
Boolean includeClassOrigin = false, |
|
const CIMPropertyList &propertyList = CIMPropertyList()); |
|
|
|
#ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT |
|
Array<CIMInstance> enumIndicationServiceInstances( |
|
const OperationContext &opContext); |
|
Array<CIMInstance> enumElementCapabilityInstances( |
|
const OperationContext & opContext); |
|
Array<CIMInstance> enumHostedIndicationServiceInstances( |
|
const OperationContext & opContext); |
|
Array<CIMInstance> enumServiceAffectsElementInstances( |
|
const OperationContext & opContext); |
|
CIMInstance buildAssociationInstance( |
|
const CIMName &className, |
|
const CIMName &propName1, |
|
const CIMObjectPath &objPath1, |
|
const CIMName &propName2, |
|
const CIMObjectPath &objPath2); |
|
#endif |
|
|
|
CIMInstance buildRegisteredProfile( |
|
const String & instanceId, |
|
const String & profileName, |
|
const String & profileVersion, |
|
Uint16 profileOrganization, |
|
const String & otherProfileOrganization, |
|
const CIMClass & profileClass); |
|
|
|
CIMInstance buildDependencyInstance( |
|
const String & antecedentId, |
|
const CIMName & antecedentClass, |
|
const String & dependentId, |
|
const CIMName & dependentClass, |
|
const CIMClass & dependencyClass); |
|
|
|
CIMInstance buildSoftwareIdentity( |
|
const String & module, |
|
const String & provider, |
|
const String & vendor, |
|
const String & version, |
|
Uint16 majorVersion, |
|
Uint16 minorVersion, |
|
Uint16 revisionNumber, |
|
Uint16 buildNumber, |
|
bool extendedVersionSupplied, |
|
const String & interfaceType, |
|
const String & elementName, |
|
const String & caption); |
|
|
|
Array<CIMInstance> getProfileInstances( |
|
const CIMName & profileType, |
|
const Array<String> & defaultSniaProfiles); |
|
|
|
Array<CIMInstance> getDMTFProfileInstances( |
|
const CIMName & profileType); |
| |
// The following are internal equivalents of the operations | // The following are internal equivalents of the operations |
// allowing the operations to call one another internally within | // allowing the operations to call one another internally within |
|
|
Array<CIMInstance> localEnumerateInstances( | Array<CIMInstance> localEnumerateInstances( |
const OperationContext & context, | const OperationContext & context, |
const CIMObjectPath & ref, | const CIMObjectPath & ref, |
const Boolean includeQualifiers, |
const CIMPropertyList& propertyList=CIMPropertyList()); |
const Boolean includeClassOrigin, |
|
const CIMPropertyList& propertyList); |
|
| |
Array<CIMObject> localReferences( |
Array<CIMInstance> localReferences( |
const OperationContext & context, | const OperationContext & context, |
const CIMObjectPath & objectName, | const CIMObjectPath & objectName, |
const CIMName & resultClass, | const CIMName & resultClass, |
const String & role, |
String & originRole, |
const Boolean includeQualifiers, |
String & targetRole, |
const Boolean includeClassOrigin, |
const CIMPropertyList & propertyList=CIMPropertyList(), |
const CIMPropertyList & propertyList); |
const CIMName & targetClass=CIMName()); |
| |
CIMInstance InteropProvider::localGetInstance( |
CIMInstance localGetInstance( |
const OperationContext & context, | const OperationContext & context, |
const CIMObjectPath & instanceName, | const CIMObjectPath & instanceName, |
const Boolean includeQualifiers, |
|
const Boolean includeClassOrigin, |
|
const CIMPropertyList & propertyList); | const CIMPropertyList & propertyList); |
|
|
|
// This function fetches the other side of the reference. |
|
Array<CIMInstance> getReferencedInstances( |
|
const Array<CIMInstance> &refs, |
|
const String &targetRole, |
|
const OperationContext & context, |
|
const CIMPropertyList & propertyList); |
|
|
|
void cacheProfileRegistrationInfo(); |
|
void verifyCachedInfo(); |
|
void initializeNamespaces(); |
|
|
|
bool validAssocClassForObject( |
|
const OperationContext & context, |
|
const CIMName & assocClass, const CIMObjectPath & objectName, |
|
const CIMNamespaceName & opNamespace, |
|
String & originProperty, String & targetProperty); |
|
|
|
#ifdef PEGASUS_ENABLE_SLP |
|
void sendUpdateRegMessageToSLPProvider( |
|
const OperationContext & context); |
|
#endif |
|
|
|
|
// Repository Instance variable | // Repository Instance variable |
// |
CIMOMHandle cimomHandle; |
CIMRepository* _repository; |
CIMRepository * repository; |
|
ProviderRegistrationManager *providerRegistrationManager; |
|
String objectManagerName; |
|
String hostName; |
|
CIMClass profileCapabilitiesClass; |
|
CIMClass softwareIdentityClass; |
|
Array<Uint16> providerClassifications; |
|
Mutex interopMut; |
|
bool providerInitialized; |
|
AtomicInt updateProfileCache; |
|
|
|
// Registration info to cache |
|
Array<String> profileIds; |
|
Array<CIMNameArray> conformingElements; |
|
Array<CIMNamespaceArray> elementNamespaces; |
|
|
|
Boolean enableSLP; |
|
String httpPort; |
|
String httpsPort; |
|
|
|
// Cached CIM_ObjectManager instance. |
|
CIMInstance _CIMObjectManagerInst; |
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |