version 1.18, 2003/08/22 14:49:49
|
version 1.35, 2007/03/16 17:16:54
|
|
|
//%///////////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// The Open Group, Tivoli Systems |
// 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 | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com) |
|
// |
|
// Modified By: Carol Ann Krug Graves, Hewlett-Packard Company |
|
// (carolann_graves@hp.com) |
|
// : Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
|
|
#include <iostream> | #include <iostream> |
#include <Pegasus/Handler/CIMHandler.h> | #include <Pegasus/Handler/CIMHandler.h> |
#include <Pegasus/Repository/CIMRepository.h> | #include <Pegasus/Repository/CIMRepository.h> |
|
#include <Pegasus/Common/Tracer.h> |
| |
#include "snmpIndicationHandler.h" | #include "snmpIndicationHandler.h" |
| |
#ifdef HPUX_EMANATE | #ifdef HPUX_EMANATE |
#include "snmpDeliverTrap_emanate.h" | #include "snmpDeliverTrap_emanate.h" |
|
#elif defined (PEGASUS_USE_NET_SNMP) |
|
# include "snmpDeliverTrap_netsnmp.h" |
#else | #else |
#include "snmpDeliverTrap_stub.h" | #include "snmpDeliverTrap_stub.h" |
#endif | #endif |
| |
// l10n |
|
#include <Pegasus/Common/MessageLoader.h> | #include <Pegasus/Common/MessageLoader.h> |
| |
|
PEGASUS_USING_STD; |
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
PEGASUS_USING_STD; |
snmpIndicationHandler::snmpIndicationHandler() |
|
{ |
|
PEG_METHOD_ENTER (TRC_IND_HANDLER, |
|
"snmpIndicationHandler::snmpIndicationHandler"); |
|
|
|
#ifdef HPUX_EMANATE |
|
_snmpTrapSender = new snmpDeliverTrap_emanate(); |
|
#elif defined (PEGASUS_USE_NET_SNMP) |
|
_snmpTrapSender = new snmpDeliverTrap_netsnmp(); |
|
#else |
|
_snmpTrapSender = new snmpDeliverTrap_stub(); |
|
#endif |
|
|
|
PEG_METHOD_EXIT(); |
|
} |
| |
void snmpIndicationHandler::initialize(CIMRepository* repository) | void snmpIndicationHandler::initialize(CIMRepository* repository) |
{ | { |
|
PEG_METHOD_ENTER (TRC_IND_HANDLER, |
|
"snmpIndicationHandler::initialize"); |
|
|
_repository = repository; | _repository = repository; |
|
|
|
_snmpTrapSender->initialize(); |
|
|
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
void snmpIndicationHandler::terminate() |
|
{ |
|
PEG_METHOD_ENTER(TRC_IND_HANDLER, |
|
"snmpIndicationHandler::terminate"); |
|
|
|
_snmpTrapSender->terminate(); |
|
|
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
snmpIndicationHandler::~snmpIndicationHandler() |
|
{ |
|
PEG_METHOD_ENTER(TRC_IND_HANDLER, |
|
"snmpIndicationHandler::~snmpIndicationHandler"); |
|
|
|
delete _snmpTrapSender; |
|
|
|
PEG_METHOD_EXIT(); |
} | } |
| |
// l10n - note: ignoring indication language | // l10n - note: ignoring indication language |
void snmpIndicationHandler::handleIndication( | void snmpIndicationHandler::handleIndication( |
const OperationContext& context, | const OperationContext& context, |
|
const String nameSpace, |
|
CIMInstance& indication, |
CIMInstance& handler, | CIMInstance& handler, |
CIMInstance& indication, String nameSpace, |
CIMInstance& subscription, |
ContentLanguages & contentLanguages) |
ContentLanguageList & contentLanguages) |
{ | { |
Array<String> propOIDs; | Array<String> propOIDs; |
Array<String> propTYPEs; | Array<String> propTYPEs; |
|
|
String mapstr1; | String mapstr1; |
String mapstr2; | String mapstr2; |
| |
|
PEG_METHOD_ENTER(TRC_IND_HANDLER, |
|
"snmpIndicationHandler::handleIndication"); |
|
|
|
try |
|
{ |
CIMClass indicationClass = _repository->getClass( | CIMClass indicationClass = _repository->getClass( |
nameSpace, indication.getClassName(), false); |
nameSpace, indication.getClassName(), false, true, |
|
false, CIMPropertyList()); |
| |
Uint32 propertyCount = indication.getPropertyCount(); | Uint32 propertyCount = indication.getPropertyCount(); |
| |
|
|
{ | { |
CIMProperty trapProp = indicationClass.getProperty(propPos); | CIMProperty trapProp = indicationClass.getProperty(propPos); |
| |
qualifierPos = trapProp.findQualifier(CIMName ("MappingStrings")); |
qualifierPos = |
|
trapProp.findQualifier(CIMName("MappingStrings")); |
if (qualifierPos != PEG_NOT_FOUND) | if (qualifierPos != PEG_NOT_FOUND) |
{ | { |
trapQualifier = trapProp.getQualifier(qualifierPos); | trapQualifier = trapProp.getQualifier(qualifierPos); |
|
|
{ | { |
if (mapstr1.subString(0, 8) == "OID.IETF") | if (mapstr1.subString(0, 8) == "OID.IETF") |
{ | { |
mapstr1 = mapstr1.subString(mapstr1.find("SNMP.")+5); |
mapstr1 = mapstr1.subString( |
|
mapstr1.find("SNMP.") + 5); |
if (mapstr1.find("|") != PEG_NOT_FOUND) | if (mapstr1.find("|") != PEG_NOT_FOUND) |
{ | { |
mapstr2.clear(); | mapstr2.clear(); |
|
|
propValue = prop.getValue().toString(); | propValue = prop.getValue().toString(); |
propVALUEs.append(propValue); | propVALUEs.append(propValue); |
| |
mapstr2 = mapstr1.subString(mapstr1.find("|")+2); |
mapstr2 = mapstr1.subString( |
mapstr2 = mapstr2.subString(0, mapstr2.size()-1); |
mapstr1.find("|") + 2); |
|
mapstr2 = mapstr2.subString( |
|
0, mapstr2.size() - 1); |
propTYPEs.append(mapstr2); | propTYPEs.append(mapstr2); |
} | } |
} | } |
|
|
// trap destination and SNMP type are defined in handlerInstance | // trap destination and SNMP type are defined in handlerInstance |
// and passing this instance as it is to deliverTrap() call | // and passing this instance as it is to deliverTrap() call |
| |
#ifdef HPUX_EMANATE |
|
snmpDeliverTrap_emanate emanateTrap; |
|
#else |
|
snmpDeliverTrap_stub emanateTrap; |
|
#endif |
|
|
|
Uint32 targetHostPos = handler.findProperty(CIMName ("TargetHost")); | Uint32 targetHostPos = handler.findProperty(CIMName ("TargetHost")); |
Uint32 targetHostFormatPos = handler.findProperty(CIMName ("TargetHostFormat")); |
Uint32 targetHostFormatPos = |
Uint32 otherTargetHostFormatPos = handler.findProperty(CIMName ( |
handler.findProperty(CIMName("TargetHostFormat")); |
"OtherTargetHostFormat")); |
Uint32 otherTargetHostFormatPos = |
|
handler.findProperty(CIMName("OtherTargetHostFormat")); |
Uint32 portNumberPos = handler.findProperty(CIMName ("PortNumber")); | Uint32 portNumberPos = handler.findProperty(CIMName ("PortNumber")); |
Uint32 snmpVersionPos = handler.findProperty(CIMName ("SNMPVersion")); | Uint32 snmpVersionPos = handler.findProperty(CIMName ("SNMPVersion")); |
Uint32 securityNamePos = handler.findProperty(CIMName ("SNMPSecurityName")); |
Uint32 securityNamePos = |
|
handler.findProperty(CIMName("SNMPSecurityName")); |
Uint32 engineIDPos = handler.findProperty(CIMName ("SNMPEngineID")); | Uint32 engineIDPos = handler.findProperty(CIMName ("SNMPEngineID")); |
| |
if ((targetHostPos != PEG_NOT_FOUND) && | if ((targetHostPos != PEG_NOT_FOUND) && |
(targetHostFormatPos != PEG_NOT_FOUND) && | (targetHostFormatPos != PEG_NOT_FOUND) && |
(snmpVersionPos != PEG_NOT_FOUND) && |
(snmpVersionPos != PEG_NOT_FOUND)) |
(indicationClass.findQualifier(CIMName ("MappingStrings")) != |
|
PEG_NOT_FOUND)) |
|
{ | { |
// properties from the handler instance | // properties from the handler instance |
String targetHost, otherTargetHostFormat; |
String targetHost; |
String securityName, engineID; |
String otherTargetHostFormat = String(); |
Uint16 targetHostFormat, snmpVersion; |
String securityName = String(); |
|
String engineID = String(); |
|
Uint16 targetHostFormat = 0; |
|
Uint16 snmpVersion = 0; |
Uint32 portNumber; | Uint32 portNumber; |
| |
String trapOid; | String trapOid; |
// | // |
// Get snmpTrapOid from context | // Get snmpTrapOid from context |
// | // |
try |
if (context.contains(SnmpTrapOidContainer::NAME)) |
{ | { |
SnmpTrapOidContainer trapContainer = context.get |
SnmpTrapOidContainer trapContainer = |
(SnmpTrapOidContainer::NAME); |
context.get(SnmpTrapOidContainer::NAME); |
| |
trapOid = trapContainer.getSnmpTrapOid(); | trapOid = trapContainer.getSnmpTrapOid(); |
} | } |
catch (Exception& e) |
else |
{ | { |
// get trapOid from indication Class | // get trapOid from indication Class |
| |
Uint32 pos = indicationClass.findQualifier(CIMName ("MappingStrings")); |
Uint32 pos = |
|
indicationClass.findQualifier(CIMName("MappingStrings")); |
if (pos != PEG_NOT_FOUND) | if (pos != PEG_NOT_FOUND) |
{ | { |
trapOid = indicationClass.getQualifier(pos).getValue().toString(); |
trapOid = |
|
indicationClass.getQualifier(pos).getValue().toString(); |
| |
trapOid = trapOid.subString(11, PEG_NOT_FOUND); | trapOid = trapOid.subString(11, PEG_NOT_FOUND); |
| |
|
|
} | } |
else | else |
{ | { |
// l10n |
PEG_TRACE_STRING(TRC_IND_HANDLER, Tracer::LEVEL4, |
// throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "Invalid MappingStrings Value"); |
"Invalid MappingStrings Value " + trapOid); |
|
PEG_METHOD_EXIT(); |
throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED, | throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED, |
MessageLoaderParms("Handler.snmpIndicationHandler.snmpIndicationHandler.INVALID_MS_VALUE", |
MessageLoaderParms( |
|
"Handler.snmpIndicationHandler." |
|
"snmpIndicationHandler.INVALID_MS_VALUE", |
"Invalid MappingStrings Value")); | "Invalid MappingStrings Value")); |
} | } |
} | } |
else | else |
{ | { |
//L10N_ TODO DONE |
PEG_TRACE_CSTRING(TRC_IND_HANDLER, Tracer::LEVEL4, |
//throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "Qualifier MappingStrings can not be found"); |
"Qualifier MappingStrings can not be found."); |
MessageLoaderParms parms("Handler.snmpIndicationHandler.snmpIndicationHandler.QUALIFIER_MAPPINGS_NOT_FOUND", |
PEG_METHOD_EXIT(); |
|
MessageLoaderParms parms( |
|
"Handler.snmpIndicationHandler.snmpIndicationHandler." |
|
"QUALIFIER_MAPPINGS_NOT_FOUND", |
"Qualifier MappingStrings can not be found"); | "Qualifier MappingStrings can not be found"); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
} | } |
} | } |
| |
handler.getProperty(targetHostPos).getValue().get(targetHost); | handler.getProperty(targetHostPos).getValue().get(targetHost); |
handler.getProperty(targetHostFormatPos).getValue().get(targetHostFormat); |
handler.getProperty(targetHostFormatPos).getValue().get( |
handler.getProperty(otherTargetHostFormatPos).getValue().get |
targetHostFormat); |
(otherTargetHostFormat); |
if (otherTargetHostFormatPos != PEG_NOT_FOUND) |
|
{ |
|
handler.getProperty(otherTargetHostFormatPos).getValue().get( |
|
otherTargetHostFormat); |
|
} |
|
if (portNumberPos != PEG_NOT_FOUND) |
|
{ |
handler.getProperty(portNumberPos).getValue().get(portNumber); | handler.getProperty(portNumberPos).getValue().get(portNumber); |
|
} |
|
else |
|
{ |
|
// default port |
|
portNumber = SNMP_TRAP_DEFAULT_PORT; |
|
} |
|
|
handler.getProperty(snmpVersionPos).getValue().get(snmpVersion); | handler.getProperty(snmpVersionPos).getValue().get(snmpVersion); |
handler.getProperty(securityNamePos).getValue().get(securityName); |
if (securityNamePos != PEG_NOT_FOUND) |
|
{ |
|
handler.getProperty(securityNamePos).getValue().get( |
|
securityName); |
|
} |
|
if (engineIDPos != PEG_NOT_FOUND) |
|
{ |
handler.getProperty(engineIDPos).getValue().get(engineID); | handler.getProperty(engineIDPos).getValue().get(engineID); |
|
} |
| |
emanateTrap.deliverTrap( |
_snmpTrapSender->deliverTrap( |
trapOid, | trapOid, |
securityName, | securityName, |
targetHost, | targetHost, |
|
|
} | } |
else | else |
{ | { |
// l10n |
PEG_TRACE_CSTRING(TRC_IND_HANDLER, Tracer::LEVEL4, |
|
"Invalid IndicationHandlerSNMPMapper instance."); |
|
PEG_METHOD_EXIT(); |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms( |
|
"Handler.snmpIndicationHandler.snmpIndicationHandler." |
|
"INVALID_SNMP_INSTANCE", |
|
"Invalid IndicationHandlerSNMPMapper instance")); |
|
} |
|
} |
|
catch (CIMException& c) |
|
{ |
|
PEG_TRACE_STRING(TRC_IND_HANDLER, Tracer::LEVEL4, c.getMessage()); |
|
PEG_METHOD_EXIT(); |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, c.getMessage()); |
|
} |
|
catch (Exception& e) |
|
{ |
|
PEG_TRACE_STRING(TRC_IND_HANDLER, Tracer::LEVEL4, e.getMessage()); |
|
PEG_METHOD_EXIT(); |
| |
// throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, e.getMessage()); |
// "Invalid IndicationHandlerSNMPMapper instance"); |
} |
|
catch (...) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_IND_HANDLER, Tracer::LEVEL4, |
|
"Failed to deliver trap."); |
|
PEG_METHOD_EXIT(); |
| |
throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms( |
MessageLoaderParms("Handler.snmpIndicationHandler.snmpIndicationHandler.INVALID_SNMP_INSTANCE", |
"Handler.snmpIndicationHandler.snmpIndicationHandler." |
"Invalid IndicationHandlerSNMPMapper instance")); |
"FAILED_TO_DELIVER_TRAP", |
|
"Failed to deliver trap.")); |
} | } |
|
|
|
PEG_METHOD_EXIT(); |
} | } |
| |
// This is the dynamic entry point into this dynamic module. The name of |
PEGASUS_NAMESPACE_END |
// this handler is "snmpIndicationHandler" which is appended to "PegasusCreateHandler_" |
|
// to form a symbol name. This function is called by the HandlerTable |
PEGASUS_USING_PEGASUS; |
// to load this handler. |
|
|
// This is the entry point into this dynamic module. |
| |
extern "C" PEGASUS_EXPORT CIMHandler* |
extern "C" PEGASUS_EXPORT CIMHandler* PegasusCreateHandler( |
PegasusCreateHandler_snmpIndicationHandler() { |
const String& handlerName) |
|
{ |
|
if (handlerName == "snmpIndicationHandler") |
|
{ |
return new snmpIndicationHandler; | return new snmpIndicationHandler; |
} | } |
| |
PEGASUS_NAMESPACE_END |
return 0; |
|
} |