version 1.9.4.1, 2008/07/01 15:18:17
|
version 1.20, 2009/06/22 07:36:53
|
|
|
//%2006//////////////////////////////////////////////////////////////////////// |
//%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 |
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// copy of this software and associated documentation files (the "Software"), |
// EMC Corporation; Symantec Corporation; The Open Group. |
// to deal in the Software without restriction, including without limitation |
// |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// and/or sell copies of the Software, and to permit persons to whom the |
// of this software and associated documentation files (the "Software"), to |
// Software is furnished to do so, subject to the following conditions: |
// deal in the Software without restriction, including without limitation the |
// |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// The above copyright notice and this permission notice shall be included |
// sell copies of the Software, and to permit persons to whom the Software is |
// in all copies or substantial portions of the Software. |
// furnished to do so, subject to the following conditions: |
// |
// |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// 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. |
|
// | // |
//============================================================================= |
////////////////////////////////////////////////////////////////////////// |
| |
| |
/////////////////////////////////////////////////////////////////////////////// | /////////////////////////////////////////////////////////////////////////////// |
|
|
#include "InteropProvider.h" | #include "InteropProvider.h" |
#include "InteropProviderUtils.h" | #include "InteropProviderUtils.h" |
#include "InteropConstants.h" | #include "InteropConstants.h" |
#include "Guid.h" |
|
| |
#include <Pegasus/Common/StatisticalData.h> | #include <Pegasus/Common/StatisticalData.h> |
|
#include <Pegasus/General/Guid.h> |
| |
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
|
|
profileDescriptions.append("Instance Manipulation"); | profileDescriptions.append("Instance Manipulation"); |
| |
ConfigManager* configManager = ConfigManager::getInstance(); | ConfigManager* configManager = ConfigManager::getInstance(); |
if (String::equal(configManager->getCurrentValue( |
if (ConfigManager::parseBooleanValue( |
"enableAssociationTraversal"), "true")) |
configManager->getCurrentValue("enableAssociationTraversal"))) |
{ | { |
profiles.append(6); | profiles.append(6); |
profileDescriptions.append("Association Traversal"); | profileDescriptions.append("Association Traversal"); |
|
|
profiles.append(8); | profiles.append(8); |
profileDescriptions.append("Qualifier Declaration"); | profileDescriptions.append("Qualifier Declaration"); |
| |
if (String::equal(configManager->getCurrentValue( |
if (ConfigManager::parseBooleanValue( |
"enableIndicationService"), "true")) |
configManager->getCurrentValue("enableIndicationService"))) |
{ | { |
profiles.append(9); | profiles.append(9); |
profileDescriptions.append("Indications"); | profileDescriptions.append("Indications"); |
|
|
PEGASUS_CLASSNAME_PG_CIMXMLCOMMUNICATIONMECHANISM.getString()); | PEGASUS_CLASSNAME_PG_CIMXMLCOMMUNICATIONMECHANISM.getString()); |
| |
// Name Property | // Name Property |
|
String nameProperty(STRLIT_ARGS("PEGASUSCOMM")); |
|
nameProperty.append(namespaceType); |
|
nameProperty.append(Char16('+')); |
|
nameProperty.append(IPAddress); |
|
|
setPropertyValue(instance, CIMXMLCOMMMECH_PROPERTY_NAME, | setPropertyValue(instance, CIMXMLCOMMMECH_PROPERTY_NAME, |
(String("PEGASUSCOMM") + namespaceType)); |
nameProperty); |
| |
// CommunicationMechanism Property - Force to 2. | // CommunicationMechanism Property - Force to 2. |
setPropertyValue(instance, CIMXMLCOMMMECH_PROPERTY_COMMUNICATIONMECHANISM, | setPropertyValue(instance, CIMXMLCOMMMECH_PROPERTY_COMMUNICATIONMECHANISM, |
|
|
| |
// AdvertiseTypes property | // AdvertiseTypes property |
Array<Uint16> advertiseTypes; | Array<Uint16> advertiseTypes; |
ConfigManager* configManager = ConfigManager::getInstance(); |
if (enableSLP) |
if (String::equal(configManager->getCurrentValue("slp"), "true")) |
|
{ | { |
advertiseTypes.append(3); // Advertised via SLP | advertiseTypes.append(3); // Advertised via SLP |
} | } |
|
|
"InteropProvider::enumCIMXMLCommunicationMechanismInstances"); | "InteropProvider::enumCIMXMLCommunicationMechanismInstances"); |
| |
ConfigManager* configManager = ConfigManager::getInstance(); | ConfigManager* configManager = ConfigManager::getInstance(); |
Boolean enableHttpConnection = String::equal( |
Boolean enableHttpConnection = ConfigManager::parseBooleanValue( |
configManager->getCurrentValue("enableHttpConnection"), "true"); |
configManager->getCurrentValue("enableHttpConnection")); |
Boolean enableHttpsConnection = String::equal( |
Boolean enableHttpsConnection = ConfigManager::parseBooleanValue( |
configManager->getCurrentValue("enableHttpsConnection"), "true"); |
configManager->getCurrentValue("enableHttpsConnection")); |
| |
Array<CIMInstance> instances; | Array<CIMInstance> instances; |
Uint32 namespaceAccessProtocol; | Uint32 namespaceAccessProtocol; |
|
|
PEGASUS_NAMESPACENAME_INTEROP, | PEGASUS_NAMESPACENAME_INTEROP, |
PEGASUS_CLASSNAME_PG_CIMXMLCOMMUNICATIONMECHANISM, false, true, false); | PEGASUS_CLASSNAME_PG_CIMXMLCOMMUNICATIONMECHANISM, false, true, false); |
| |
|
Array<String> ips; |
|
#ifdef PEGASUS_ENABLE_IPV6 |
|
ips = System::getInterfaceAddrs(); |
|
#endif |
if (enableHttpConnection) | if (enableHttpConnection) |
{ | { |
// Build the CommunicationMechanism instance for the HTTP protocol | // Build the CommunicationMechanism instance for the HTTP protocol |
namespaceAccessProtocol = 2; | namespaceAccessProtocol = 2; |
namespaceType = "http"; | namespaceType = "http"; |
String httpPort = configManager->getCurrentValue("httpPort"); |
|
if (httpPort == String::EMPTY) |
|
{ |
|
Uint32 portNumberHttp = System::lookupPort( |
|
WBEM_HTTP_SERVICE_NAME, WBEM_DEFAULT_HTTP_PORT); |
|
char buffer[32]; |
|
sprintf(buffer, "%u", portNumberHttp); |
|
httpPort.assign(buffer); |
|
} |
|
CIMInstance instance; | CIMInstance instance; |
Array<String> ips; |
|
#ifdef PEGASUS_ENABLE_IPV6 |
|
ips = System::getInterfaceAddrs(); |
|
for (Uint32 i = 0; i < ips.size() ; ++i) | for (Uint32 i = 0; i < ips.size() ; ++i) |
{ | { |
String addr = ips[i]; | String addr = ips[i]; |
|
|
commMechClass); | commMechClass); |
instances.append(instance); | instances.append(instance); |
} | } |
#endif |
|
// If System::getInterfaceAddrs() fails add ip4 addr here. | // If System::getInterfaceAddrs() fails add ip4 addr here. |
if (!ips.size()) | if (!ips.size()) |
{ | { |
|
|
// Build the CommunicationMechanism instance for the HTTPS protocol | // Build the CommunicationMechanism instance for the HTTPS protocol |
namespaceAccessProtocol = 3; | namespaceAccessProtocol = 3; |
namespaceType = "https"; | namespaceType = "https"; |
String httpsPort = configManager->getCurrentValue("httpsPort"); |
|
if (httpsPort == String::EMPTY) |
|
{ |
|
Uint32 portNumberHttps = System::lookupPort( |
|
WBEM_HTTPS_SERVICE_NAME, WBEM_DEFAULT_HTTPS_PORT); |
|
char buffer[32]; |
|
sprintf(buffer, "%u", portNumberHttps); |
|
httpsPort.assign(buffer); |
|
} |
|
CIMInstance instance; | CIMInstance instance; |
Array<String> ips; |
|
#ifdef PEGASUS_ENABLE_IPV6 |
|
ips = System::getInterfaceAddrs(); |
|
for (Uint32 i = 0; i < ips.size() ; ++i) | for (Uint32 i = 0; i < ips.size() ; ++i) |
{ | { |
String addr = ips[i]; | String addr = ips[i]; |
|
|
commMechClass); | commMechClass); |
instances.append(instance); | instances.append(instance); |
} | } |
#endif |
|
// If System::getInterfaceAddrs() fails add ip4 addr here. | // If System::getInterfaceAddrs() fails add ip4 addr here. |
if (!ips.size()) | if (!ips.size()) |
{ | { |
|
|
bool found = false; | bool found = false; |
Array<CIMInstance> tmpInstances = repository->enumerateInstancesForClass( | Array<CIMInstance> tmpInstances = repository->enumerateInstancesForClass( |
PEGASUS_NAMESPACENAME_INTEROP, | PEGASUS_NAMESPACENAME_INTEROP, |
PEGASUS_CLASSNAME_PG_OBJECTMANAGER, false, false, false, |
PEGASUS_CLASSNAME_PG_OBJECTMANAGER, false, false, |
CIMPropertyList()); | CIMPropertyList()); |
Uint32 numInstances = tmpInstances.size(); | Uint32 numInstances = tmpInstances.size(); |
if(numInstances == 1) | if(numInstances == 1) |
|
|
// | // |
CIMClass omClass; | CIMClass omClass; |
instance = buildInstanceSkeleton(PEGASUS_NAMESPACENAME_INTEROP, | instance = buildInstanceSkeleton(PEGASUS_NAMESPACENAME_INTEROP, |
PEGASUS_CLASSNAME_PG_OBJECTMANAGER, omClass); |
PEGASUS_CLASSNAME_PG_OBJECTMANAGER, false, omClass); |
| |
// Set the common key properties | // Set the common key properties |
setCommonKeys(instance); | setCommonKeys(instance); |
|
|
// write instance to the repository | // write instance to the repository |
CIMObjectPath instancePath = repository->createInstance( | CIMObjectPath instancePath = repository->createInstance( |
PEGASUS_NAMESPACENAME_INTEROP, instance); | PEGASUS_NAMESPACENAME_INTEROP, instance); |
|
// Get an updated copy of the instance that was saved |
|
instance = repository->getInstance( |
|
PEGASUS_NAMESPACENAME_INTEROP, instancePath); |
instance.setPath(instancePath); | instance.setPath(instancePath); |
} | } |
| |
|
|
CIMClass targetClass; | CIMClass targetClass; |
CIMInstance instanceskel = buildInstanceSkeleton( | CIMInstance instanceskel = buildInstanceSkeleton( |
PEGASUS_NAMESPACENAME_INTEROP, | PEGASUS_NAMESPACENAME_INTEROP, |
PEGASUS_CLASSNAME_PG_COMMMECHANISMFORMANAGER, targetClass); |
PEGASUS_CLASSNAME_PG_COMMMECHANISMFORMANAGER, true, targetClass); |
for (Uint32 i = 0, n = commInstances.size(); i < n; ++i) | for (Uint32 i = 0, n = commInstances.size(); i < n; ++i) |
{ | { |
CIMInstance instance = instanceskel.clone(); | CIMInstance instance = instanceskel.clone(); |