version 1.1.2.1, 2001/10/12 17:33:08
|
version 1.11, 2002/07/31 22:05:08
|
|
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001 BMC Software, Hewlett Packard, IBM, The Open Group, |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
// Tivoli Systems |
// The Open Group, Tivoli Systems |
// | // |
// 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) | // Author: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com) |
// | // |
// Modified By: |
// Modified By: Carol Ann Krug Graves, Hewlett-Packard Company |
|
// (carolann_graves@hp.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include <iostream> |
|
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
|
#include <Pegasus/Common/PegasusVersion.h> |
|
|
|
#include <iostream> |
#include <Pegasus/Handler/CIMHandler.h> | #include <Pegasus/Handler/CIMHandler.h> |
#include <Pegasus/Repository/CIMRepository.h> | #include <Pegasus/Repository/CIMRepository.h> |
| |
|
|
DDD(cout << _SNMPINDICATIONHANDLER << "initialize()" << endl;) | DDD(cout << _SNMPINDICATIONHANDLER << "initialize()" << endl;) |
} | } |
| |
void snmpIndicationHandler::handleIndication(CIMInstance& handlerInstance, |
void snmpIndicationHandler::handleIndication(CIMInstance& handler, |
CIMInstance& indicationInstance, |
CIMInstance& indication, String nameSpace) |
String nameSpace) |
|
{ | { |
String enterprise, trapOid, destination, trapType; |
|
|
|
Array<String> propOIDs; | Array<String> propOIDs; |
Array<String> propTYPEs; | Array<String> propTYPEs; |
Array<String> propVALUEs; | Array<String> propVALUEs; |
| |
String propName; |
CIMProperty prop; |
|
CIMQualifier trapQualifier; |
| |
Uint32 propPos; |
|
Uint32 qualifierPos; | Uint32 qualifierPos; |
Uint32 typePos; |
|
CIMValue propValue; |
String propValue; |
CIMProperty trapProp; |
|
CIMQualifier trapQualifier; |
String mapstr1; |
|
String mapstr2; |
| |
CIMClass indicationClass = _repository->getClass( | CIMClass indicationClass = _repository->getClass( |
nameSpace, |
nameSpace, indication.getClassName(), false); |
indicationInstance.getClassName(), |
|
false); |
|
| |
//filling the array with enterprise first |
for (Uint32 i=0; i<indication.getPropertyCount();i++) |
propPos = indicationClass.findProperty("enterprise"); |
|
if (propPos != PEG_NOT_FOUND) |
|
{ | { |
trapProp = indicationClass.getProperty(propPos); |
prop = indication.getProperty(i); |
qualifierPos = trapProp.findQualifier("OID"); |
|
trapQualifier = trapProp.getQualifier(qualifierPos); |
|
enterprise = trapQualifier.getValue().toString(); |
|
| |
int i; |
if (!prop.isUninitialized()) |
for (i=0; i<indicationInstance.getPropertyCount();i++) |
{ |
|
String propName = prop.getName(); |
|
Uint32 propPos = indicationClass.findProperty(propName); |
|
if (propPos != PEG_NOT_FOUND) |
{ | { |
propValue = indicationInstance.getProperty(i).getValue(); |
CIMProperty trapProp = indicationClass.getProperty(propPos); |
| |
if (!propValue.isNull()) |
qualifierPos = trapProp.findQualifier("MappingStrings"); |
|
if (qualifierPos != PEG_NOT_FOUND) |
{ | { |
propName = indicationInstance.getProperty(i).getName(); |
trapQualifier = trapProp.getQualifier(qualifierPos); |
propPos = indicationClass.findProperty(propName); |
|
trapProp = indicationClass.getProperty(propPos); |
mapstr1.clear(); |
|
mapstr1 = trapQualifier.getValue().toString(); |
| |
if (trapProp.existsQualifier("OID")) |
if ((mapstr1.find("OID.IETF") != PEG_NOT_FOUND) && |
|
(mapstr1.find("DataType.IETF") != PEG_NOT_FOUND)) |
{ | { |
if (propName == "trapOid") |
if (mapstr1.subString(0, 8) == "OID.IETF") |
{ | { |
trapOid = propValue.toString(); |
mapstr1 = mapstr1.subString(mapstr1.find("SNMP.")+5); |
} |
if (mapstr1.find("|") != PEG_NOT_FOUND) |
else |
|
{ | { |
qualifierPos = trapProp.findQualifier("OID"); |
mapstr2.clear(); |
trapQualifier = trapProp.getQualifier(qualifierPos); |
mapstr2 = mapstr1.subString(0, |
propOIDs.append(trapQualifier.getValue().toString()); |
mapstr1.find("DataType.IETF")-1); |
propVALUEs.append(propValue.toString()); |
propOIDs.append(mapstr2); |
if (trapProp.existsQualifier("SNMPTYPE")) |
|
{ |
propValue.clear(); |
typePos = trapProp.findQualifier("SNMPTYPE"); |
propValue = prop.getValue().toString(); |
trapQualifier = trapProp.getQualifier(typePos); |
propVALUEs.append(propValue); |
propTYPEs.append(trapQualifier.getValue().toString()); |
|
|
mapstr2 = mapstr1.subString(mapstr1.find("|")+2); |
|
mapstr2 = mapstr2.subString(0, mapstr2.size()-1); |
|
propTYPEs.append(mapstr2); |
|
} |
|
} |
} | } |
else |
|
propTYPEs.append(TypeToString(trapProp.getType())); |
|
} | } |
} | } |
} | } |
} | } |
|
|
destination = handlerInstance.getProperty( |
|
handlerInstance.findProperty("destination")).getValue().toString(); |
|
|
|
trapType = handlerInstance.getProperty( |
|
handlerInstance.findProperty("trapType")).getValue().toString(); |
|
| |
// Collected complete data in arrays and ready to send the trap. | // Collected complete data in arrays and ready to send the trap. |
// 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 | #ifdef HPUX_EMANATE |
snmpDeliverTrap_emanate emanateTrap; | snmpDeliverTrap_emanate emanateTrap; |
#else | #else |
snmpDeliverTrap_stub emanateTrap; | snmpDeliverTrap_stub emanateTrap; |
#endif | #endif |
| |
cout << "Trap to deliver " << endl; |
if ((handler.findProperty("TrapDestination") != PEG_NOT_FOUND) && |
|
(handler.findProperty("SNMPVersion") != PEG_NOT_FOUND) && |
|
(indicationClass.findQualifier("MappingStrings") != PEG_NOT_FOUND)) |
|
{ |
|
String community, trapType, destination; // from handler instance |
|
String trapOid; // from indication Class |
|
|
|
trapOid = indicationClass.getQualifier( |
|
indicationClass.findQualifier("MappingStrings")).getValue().toString(); |
|
|
|
trapOid = trapOid.subString(trapOid.find("OID.IETF | SNMP.")+16); |
| |
emanateTrap.deliverTrap(trapOid, |
community = handler.getProperty( |
enterprise, |
handler.findProperty("SNMPCommunityName")).getValue().toString(); |
|
|
|
destination = handler.getProperty( |
|
handler.findProperty("TrapDestination")).getValue().toString(); |
|
|
|
trapType = handler.getProperty( |
|
handler.findProperty("SNMPVersion")).getValue().toString(); |
|
|
|
emanateTrap.deliverTrap( |
|
trapOid, |
|
community, |
destination, | destination, |
trapType, | trapType, |
propOIDs, | propOIDs, |
propTYPEs, | propTYPEs, |
propVALUEs); | propVALUEs); |
|
|
cout << "Trap Delivered " << endl; |
|
} | } |
else | else |
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, |
cout << "Invalid Indication" << endl; |
"Indication is without enterprise OID"); |
|
} | } |
| |
// This is the dynamic entry point into this dynamic module. The name of | // This is the dynamic entry point into this dynamic module. The name of |