(file) Return to InteropProvider.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ControlProviders / InteropProvider

File: [Pegasus] / pegasus / src / Pegasus / ControlProviders / InteropProvider / InteropProvider.h (download)
Revision: 1.30, Fri Oct 17 11:47:16 2008 UTC (15 years, 8 months ago) by venkat.puvvada
Branch: MAIN
Changes since 1.29: +2 -0 lines
BUG#: 7997
TITLE: ServerProfileTests fail
DESCRIPTION: Cache the port info in InteropProvider instead of querying for information every time requests comes for CIM_CIMXMLCommuincationMechanism class.

//%2006////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
// IBM Corp.; EMC Corporation, The Open Group.
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
// EMC Corporation; VERITAS Software Corporation; The Open Group.
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
// EMC Corporation; Symantec Corporation; The Open Group.
//
// 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 <Pegasus/Common/Config.h>
#include <Pegasus/ControlProviders/InteropProvider/Linkage.h>

#include <Pegasus/Common/String.h>
#include <Pegasus/Common/System.h>
#include <Pegasus/Common/ArrayInternal.h>
#include <Pegasus/Common/CIMType.h>
#include <Pegasus/Common/CIMInstance.h>
#include <Pegasus/Common/CIMObjectPath.h>
#include <Pegasus/Common/InternalException.h>
#include <Pegasus/Common/CIMStatusCode.h>
#include <Pegasus/Common/Tracer.h>
#include <Pegasus/Config/ConfigManager.h>

#include <Pegasus/Repository/CIMRepository.h>
#include <Pegasus/Provider/CIMInstanceProvider.h>
#include <Pegasus/Provider/CIMAssociationProvider.h>
#include <Pegasus/Provider/CIMMethodProvider.h>

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<CIMName> CIMNameArray;
typedef Array<CIMNamespaceName> CIMNamespaceArray;

class PEGASUS_INTEROPPROVIDER_LINKAGE InteropProvider :
        public CIMInstanceProvider, 
        public CIMAssociationProvider,
        public CIMMethodProvider
{
public:

    InteropProvider(CIMRepository* repository);
    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<CIMParamValue> & inParameters,
        MethodResultResponseHandler & handler);

private:

    void initProvider();

    CIMInstance buildInstanceSkeleton(
        const CIMNamespaceName & nameSpace,
        const CIMName& className,
        CIMClass& returnedClass);

    CIMInstance buildCIMXMLCommunicationMechanismInstance(
        const String& namespaceType,
        const Uint16& accessProtocol,
        const String& IPAddress,
        const CIMClass & commMechClass);

    Array<CIMInstance> enumCIMXMLCommunicationMechanismInstances();

    Array<CIMInstance> enumHostedAccessPointInstances();

    CIMInstance getObjectManagerInstance();

    CIMInstance getComputerSystemInstance();

    CIMInstance getHostedObjectManagerInstance();

    Array<CIMInstance> enumNamespaceInstances();

    CIMInstance buildNamespaceInstance(const String & nameSpace);

    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<CIMInstance> enumNamespaceInManagerInstances();

    Array<CIMInstance> 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<CIMInstance> enumRegisteredProfileInstances();
    Array<CIMInstance> enumRegisteredSubProfileInstances();
    Array<CIMInstance> enumReferencedProfileInstances();
    Array<CIMInstance> getProfilesForVersion(
        Array<CIMInstance>& subprofs, 
        const String version);
    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();

    Array<CIMInstance> enumProviderProfileCapabilityInstances(
        Boolean checkProviders = true,
        Boolean localOnly = true,
        Boolean includeQualifiers = false,
        Boolean includeClassOrigin = false,
        const CIMPropertyList &propertyList = CIMPropertyList());

#ifdef PEGASUS_ENABLE_DMTF_INDICATION_PROFILE_SUPPORT
    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
    // allowing the operations to call one another internally within
    // the provider.
    Array<CIMInstance> localEnumerateInstances(
        const OperationContext & context,
        const CIMObjectPath & ref,
        const CIMPropertyList& propertyList=CIMPropertyList());

    Array<CIMInstance> 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);

    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;
    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;
};

PEGASUS_NAMESPACE_END

#endif // InteropProvider_h

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2