//%LICENSE//////////////////////////////////////////////////////////////// // // Licensed to The Open Group (TOG) under one or more contributor license // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with // this work for additional information regarding copyright ownership. // Each contributor licenses this file to you under the OpenPegasus Open // Source License; you may not use this file except in compliance with the // License. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of 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. // ////////////////////////////////////////////////////////////////////////// #ifndef InteropProvider_h #define InteropProvider_h /////////////////////////////////////////////////////////////////////////////// // Interop Provider /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include \ PEGASUS_NAMESPACE_BEGIN /** * The InteropProvider services the Interop classes of the DMTF CIM Schema * in the root/PG_InterOp namespace (as well as some related cross-namespace * associations in other namespaces). Through this implementation, combined * with the SLP provider and one or more vendor-supplied SMI providers, the * Pegasus WBEM Server is able to provide a fully-functional implementation of * the SMI-S Server profile (currently, version 1.1.0). * * The following is a list of the association and instance classes supported * by this provider in the root/PG_InterOp namespace: * * PG_CIMXMLCommunicationMechanism (CIM_CIMXMLCommunicationMechanism) * PG_CommMechanismForManager (CIM_CommMechanismForManager) * PG_ComputerSystem (CIM_ComputerSystem) * PG_ElementConformsToProfile (CIM_ElementConformsToProfile) * PG_ElementSoftwareIdentity (CIM_ElementSoftwareIdentity) * PG_HostedAccessPoint (CIM_HostedAccessPoint) * PG_HostedObjectManager (CIM_HostedService) * PG_InstalledSoftwareIdentity (CIM_InstalledSoftwareIdentity) * PG_Namespace (CIM_Namespace) * PG_NamespaceInManager (CIM_NamespaceInManager) * PG_ObjectManager (CIM_ObjectManager) * PG_ReferencedProfile (CIM_ReferencedProfile) * PG_RegisteredProfile (CIM_RegisteredProfile) * PG_RegisteredSubProfile (CIM_RegisteredSubProfile) * PG_SoftwareIdentity (CIM_SoftwareIdentity) * PG_SubProfileRequiredProfile (CIM_SubProfileRequiresProfile) * */ typedef Array CIMNameArray; typedef Array CIMNamespaceArray; class PEGASUS_INTEROPPROVIDER_LINKAGE InteropProvider : public CIMInstanceProvider, public CIMAssociationProvider, public CIMMethodProvider { public: InteropProvider( CIMRepository* repository, ProviderRegistrationManager* provRegManager); virtual ~InteropProvider() { PEG_METHOD_ENTER(TRC_CONTROLPROVIDER, "InteropProvider::~InteropProvider"); PEG_METHOD_EXIT(); } // Note: The initialize() and terminate() methods are not called for // Control Providers. void initialize(CIMOMHandle& handle) { } void terminate() { } virtual void createInstance( const OperationContext & context, const CIMObjectPath & instanceReference, const CIMInstance& myInstance, ObjectPathResponseHandler & handler); virtual void deleteInstance( const OperationContext & context, const CIMObjectPath& instanceName, ResponseHandler & handler); virtual void getInstance( const OperationContext & context, const CIMObjectPath& instanceName, const Boolean includeQualifiers, const Boolean includeClassOrigin, const CIMPropertyList& propertyList, InstanceResponseHandler & handler); void modifyInstance( const OperationContext & context, const CIMObjectPath & instanceReference, const CIMInstance& modifiedIns, const Boolean includeQualifiers, const CIMPropertyList& propertyList, ResponseHandler & handler); virtual void enumerateInstances( const OperationContext & context, const CIMObjectPath & ref, const Boolean includeQualifiers, const Boolean includeClassOrigin, const CIMPropertyList& propertyList, InstanceResponseHandler & handler); virtual void enumerateInstanceNames( const OperationContext & context, const CIMObjectPath & classReference, ObjectPathResponseHandler & handler); // CIMAssociationProvider interface virtual void associators( const OperationContext & context, const CIMObjectPath & objectName, const CIMName & associationClass, const CIMName & resultClass, const String & role, const String & resultRole, const Boolean includeQualifiers, const Boolean includeClassOrigin, const CIMPropertyList & propertyList, ObjectResponseHandler & handler); virtual void associatorNames( const OperationContext & context, const CIMObjectPath & objectName, const CIMName & associationClass, const CIMName & resultClass, const String & role, const String & resultRole, ObjectPathResponseHandler & handler); virtual void references( const OperationContext & context, const CIMObjectPath & objectName, const CIMName & resultClass, const String & role, const Boolean includeQualifiers, const Boolean includeClassOrigin, const CIMPropertyList & propertyList, ObjectResponseHandler & handler); virtual void referenceNames( const OperationContext & context, const CIMObjectPath & objectName, const CIMName & resultClass, const String & role, ObjectPathResponseHandler & handler); // CIMMethodProvider interface virtual void invokeMethod( const OperationContext & context, const CIMObjectPath & objectReference, const CIMName & methodName, const Array & inParameters, MethodResultResponseHandler & handler); private: void initProvider(); CIMInstance buildInstanceSkeleton( const CIMNamespaceName & nameSpace, const CIMName& className, Boolean includeQualifiers, CIMClass& returnedClass); CIMInstance buildCIMXMLCommunicationMechanismInstance( const String& namespaceType, const Uint16& accessProtocol, const String& IPAddress, const CIMClass & commMechClass); Array enumCIMXMLCommunicationMechanismInstances(); Array enumHostedAccessPointInstances(); CIMInstance getObjectManagerInstance(); CIMInstance getComputerSystemInstance(); CIMInstance getHostedObjectManagerInstance(); Array enumNamespaceInstances(); CIMInstance buildNamespaceInstance(const String & nameSpace); CIMInstance getNameSpaceInstance(const CIMObjectPath & ref); CIMObjectPath createNamespace(const CIMInstance & namespaceInstance); void deleteNamespace(const CIMObjectPath & instanceName); CIMObjectPath createProviderProfileCapabilityInstance( const CIMInstance & profileInstance, const OperationContext & context); void deleteProviderProfileCapabilityInstance( const CIMObjectPath & instanceName, const OperationContext & context); Array enumNamespaceInManagerInstances(); Array enumCommMechanismForManagerInstances(); void modifyObjectManagerInstance(const OperationContext & context, const CIMObjectPath & instanceReference, const CIMInstance& modifiedIns, const Boolean includeQualifiers, const CIMPropertyList& propertyList); 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 enumRegisteredProfileInstances(); Array enumRegisteredSubProfileInstances(); Array enumReferencedProfileInstances(); Array getProfilesForVersion( Array& subprofs, Uint16 regOrg, Uint32 majorVer, Uint32 minorVer, Uint32 updateVer); Array enumElementConformsToProfileInstances( const OperationContext & opContext, const CIMNamespaceName & opNamespace); Array enumElementConformsToProfileRPRPInstances( const OperationContext & opContext, const CIMNamespaceName & opNamespace); Array enumSubProfileRequiresProfileInstances(); Array enumSoftwareIdentityInstances(); Array enumElementSoftwareIdentityInstances(); Array enumInstalledSoftwareIdentityInstances(); Array enumDefaultSoftwareIdentityInstances(); CIMInstance getSoftwareIdentityInstance( const CIMObjectPath &ref); Array enumProviderProfileCapabilityInstances( Boolean checkProviders = true, Boolean includeQualifiers = false, Boolean includeClassOrigin = false, const CIMPropertyList &propertyList = CIMPropertyList()); #ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT Array enumElementCapabilityInstances( const OperationContext & opContext); Array enumHostedIndicationServiceInstances( const OperationContext & opContext); Array 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 getProfileInstances( const CIMName & profileType, const Array & defaultSniaProfiles); Array getDMTFProfileInstances( const CIMName & profileType); // The following are internal equivalents of the operations // allowing the operations to call one another internally within // the provider. Array localEnumerateInstances( const OperationContext & context, const CIMObjectPath & ref, const CIMPropertyList& propertyList=CIMPropertyList()); Array localReferences( const OperationContext & context, const CIMObjectPath & objectName, const CIMName & resultClass, String & originRole, String & targetRole, const CIMPropertyList & propertyList=CIMPropertyList(), const CIMName & targetClass=CIMName()); CIMInstance localGetInstance( const OperationContext & context, const CIMObjectPath & instanceName, const CIMPropertyList & propertyList); // This function fetches the other side of the reference. Array getReferencedInstances( const Array &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 CIMOMHandle cimomHandle; CIMRepository * repository; ProviderRegistrationManager *providerRegistrationManager; String objectManagerName; String hostName; CIMClass profileCapabilitiesClass; CIMClass softwareIdentityClass; Array providerClassifications; Mutex interopMut; bool providerInitialized; AtomicInt updateProfileCache; // Registration info to cache Array profileIds; Array conformingElements; Array elementNamespaces; Boolean enableSLP; String httpPort; String httpsPort; }; PEGASUS_NAMESPACE_END #endif // InteropProvider_h