(file) Return to snmpDeliverTrap_netsnmp.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Handler / snmpIndicationHandler

Diff for /pegasus/src/Pegasus/Handler/snmpIndicationHandler/snmpDeliverTrap_netsnmp.cpp between version 1.2 and 1.16.10.1

version 1.2, 2005/12/08 00:06:34 version 1.16.10.1, 2008/07/01 15:18:26
Line 1 
Line 1 
 //%2005////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
Line 8 
Line 8 
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 // EMC Corporation; VERITAS Software Corporation; The Open Group. // 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
Line 27 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Yi Zhou, Hewlett-Packard Company (Yi.Zhou@hp.com)  
 //  
 // Modified By:  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include <Pegasus/Common/Packer.h> #include <Pegasus/Common/Packer.h>
Line 39 
Line 37 
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
   void snmpDeliverTrap_netsnmp::initialize()
   {
       PEG_METHOD_ENTER(TRC_IND_HANDLER, "snmpDeliverTrap_netsnmp::initialize");
   
       // Defined default MIB modules (in net-snmp-config.h) do not need to be
       // loaded and loading them can cause some stderr;
       // use environment variable MIBS to override the default MIB modules.
       // If there is no MIBS environment variable, add it in.
       char* envVar;
       envVar = getenv("MIBS");
   
       if (envVar == NULL)
       {
           putenv("MIBS=");
       }
   
       // Initialize the mib reader
       netsnmp_set_mib_directory("");
       init_mib();
   
       // Initializes the SNMP library
       init_snmp("snmpIndicationHandler");
   
       // windows32 specific initialization (is a NOOP on unix)
       SOCK_STARTUP;
   
       PEG_METHOD_EXIT();
   }
   
   void snmpDeliverTrap_netsnmp::terminate()
   {
       PEG_METHOD_ENTER(TRC_IND_HANDLER, "snmpDeliverTrap_netsnmp::terminate");
   
       // Shuts down the application, and appropriate clean up
       snmp_shutdown("snmpIndicationHandler");
   
       SOCK_CLEANUP;
   
       PEG_METHOD_EXIT();
   }
   
 void snmpDeliverTrap_netsnmp::deliverTrap( void snmpDeliverTrap_netsnmp::deliverTrap(
         const String& trapOid,         const String& trapOid,
         const String& securityName,         const String& securityName,
Line 53 
Line 92 
         const Array<String>& vbValues)         const Array<String>& vbValues)
 { {
  
     PEG_METHOD_ENTER (TRC_IND_HANDLER,      PEG_METHOD_ENTER(TRC_IND_HANDLER, "snmpDeliverTrap_netsnmp::deliverTrap");
         "snmpDeliverTrap_netsnmp::deliverTrap");  
  
     void *sessionHandle;     void *sessionHandle;
     struct snmp_session snmpSession, *sessionPtr;      struct snmp_session* sessionPtr;
  
     struct snmp_pdu *snmpPdu;     struct snmp_pdu *snmpPdu;
  
     // Creates a SNMP session     // Creates a SNMP session
     _createSession(targetHost, portNumber, securityName, snmpSession,      _createSession(targetHost, targetHostFormat, portNumber, securityName,
                    sessionHandle, sessionPtr);                    sessionHandle, sessionPtr);
  
     try     try
Line 74 
Line 112 
         _destroySession(sessionHandle);         _destroySession(sessionHandle);
  
         PEG_METHOD_EXIT ();         PEG_METHOD_EXIT ();
   
         throw;         throw;
     }     }
  
Line 85 
Line 122 
     }     }
     catch (Exception& e)     catch (Exception& e)
     {     {
         PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,  
                           e.getMessage ());  
   
         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,
                       Logger::WARNING,                       Logger::WARNING,
                       _MSG_PACK_CIM_PROPERTY_TO_PDU_FAILED_KEY,                       _MSG_PACK_CIM_PROPERTY_TO_PDU_FAILED_KEY,
Line 96 
Line 130 
     }     }
     catch (...)     catch (...)
     {     {
         PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
                           "Snmp Indication Handler failed to pack a CIM "                           "Snmp Indication Handler failed to pack a CIM "
                           "Property into the SNMP PDU: Unknown exception.");                           "Property into the SNMP PDU: Unknown exception.");
     }     }
Line 121 
Line 155 
         PEG_METHOD_EXIT ();         PEG_METHOD_EXIT ();
  
         throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,         throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
             MessageLoaderParms(_MSG_SESSION_SEND_FAILED_KEY,              MessageLoaderParms(_MSG_SESSION_SEND_FAILED_KEY, exceptionStr));
                                exceptionStr));  
     }     }
  
     _destroySession(sessionHandle);     _destroySession(sessionHandle);
  
     PEG_METHOD_EXIT ();     PEG_METHOD_EXIT ();
   
 } }
  
 // Creates a SNMP session // Creates a SNMP session
 void snmpDeliverTrap_netsnmp::_createSession( void snmpDeliverTrap_netsnmp::_createSession(
     const String & targetHost,     const String & targetHost,
       Uint16 targetHostFormat,
     Uint32 portNumber,     Uint32 portNumber,
     const String & securityName,     const String & securityName,
     snmp_session & snmpSession,  
     void *&sessionHandle,     void *&sessionHandle,
     snmp_session *&sessionPtr)     snmp_session *&sessionPtr)
 { {
Line 147 
Line 179 
     char *errStr;     char *errStr;
     String exceptionStr;     String exceptionStr;
  
     // Defined default MIB modules (in net-snmp-config.h) do not need to be      struct snmp_session snmpSession;
     // loaded and loading them can cause some stderr;  
     // use environment variable MIBS to override the default MIB modules.  
     // If there is no MIBS environment variable, add it in.  
   
     char *envVar;  
     envVar = getenv("MIBS");  
  
     if (envVar == NULL)  
     {     {
         putenv("MIBS=");          AutoMutex autoMut(_sessionInitMutex);
     }  
   
     // Initialize the mib reader  
     netsnmp_set_mib_directory("");  
     init_mib();  
   
     // Initializes the SNMP library  
     init_snmp("snmpIndicationHandler");  
   
     // Prepares a struct snmp_session that will be used for a set of  
     // SNMP transactions  
     snmp_sess_init(&snmpSession);     snmp_sess_init(&snmpSession);
  
     // windows32 specific initialization (is a NOOP on unix)  
     SOCK_STARTUP;  
   
     CString targetHostCStr = targetHost.getCString();     CString targetHostCStr = targetHost.getCString();
  
     // peername has format: targetHost:portNumber     // peername has format: targetHost:portNumber
     snmpSession.peername = (char *)malloc((size_t)(strlen(targetHostCStr)+          snmpSession.peername =
                                           1+32));              (char*)malloc((size_t)(strlen(targetHostCStr) + 1 + 32));
     sprintf(snmpSession.peername, "%s:%u", (const char*)targetHostCStr,  
           if (targetHostFormat == _IPV6_ADDRESS)
           {
               sprintf(snmpSession.peername, "udp6:[%s]:%u",
                   (const char*)targetHostCStr,
             portNumber);             portNumber);
           }
           else
           {
               sprintf(snmpSession.peername, "%s:%u",
                   (const char*)targetHostCStr,
                   portNumber);
           }
   
     sessionHandle = snmp_sess_open(&snmpSession);     sessionHandle = snmp_sess_open(&snmpSession);
       }
  
     if (sessionHandle == NULL)     if (sessionHandle == NULL)
     {     {
         exceptionStr = _MSG_SESSION_OPEN_FAILED;         exceptionStr = _MSG_SESSION_OPEN_FAILED;
  
         // Get library, system errno         // Get library, system errno
         snmp_sess_error(&snmpSession, &libErr, &sysErr, &errStr);          snmp_error(&snmpSession, &libErr, &sysErr, &errStr);
  
         exceptionStr.append(errStr);         exceptionStr.append(errStr);
  
         free(errStr);         free(errStr);
  
         SOCK_CLEANUP;  
   
         PEG_METHOD_EXIT ();         PEG_METHOD_EXIT ();
  
         throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,         throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
             MessageLoaderParms(_MSG_SESSION_OPEN_FAILED_KEY,              MessageLoaderParms(_MSG_SESSION_OPEN_FAILED_KEY, exceptionStr));
                                exceptionStr));  
   
     }     }
  
     try     try
Line 219 
Line 239 
  
             free(errStr);             free(errStr);
  
             throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,              throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
                 MessageLoaderParms(_MSG_GET_SESSION_POINTER_FAILED_KEY,                  _MSG_GET_SESSION_POINTER_FAILED_KEY,
                                    exceptionStr));                                    exceptionStr));
         }         }
  
Line 235 
Line 255 
             communityName = securityName;             communityName = securityName;
         }         }
  
         if (snmpSession.peername)  
         {  
             free(snmpSession.peername);             free(snmpSession.peername);
         }  
  
         if (sessionPtr->community)  
         {  
             free(sessionPtr->community);             free(sessionPtr->community);
         }  
  
         CString communityNameCStr = communityName.getCString();         CString communityNameCStr = communityName.getCString();
         size_t communityNameLen = strlen(communityNameCStr);         size_t communityNameLen = strlen(communityNameCStr);
Line 274 
Line 288 
  
     snmp_sess_close(sessionHandle);     snmp_sess_close(sessionHandle);
  
     SOCK_CLEANUP;  
   
     PEG_METHOD_EXIT ();     PEG_METHOD_EXIT ();
 } }
  
Line 286 
Line 298 
     snmp_session *&sessionPtr,     snmp_session *&sessionPtr,
     snmp_pdu *& snmpPdu)     snmp_pdu *& snmpPdu)
 { {
       PEG_METHOD_ENTER(TRC_IND_HANDLER, "snmpDeliverTrap_netsnmp::_createPdu");
     PEG_METHOD_ENTER (TRC_IND_HANDLER,  
         "snmpDeliverTrap_netsnmp::_createPdu");  
  
     oid _SYSTEM_UP_TIME_OID [] = {1,3,6,1,2,1,1,3,0};     oid _SYSTEM_UP_TIME_OID [] = {1,3,6,1,2,1,1,3,0};
     oid _SNMPTRAP_OID [] = {1,3,6,1,6,3,1,1,4,1,0};     oid _SNMPTRAP_OID [] = {1,3,6,1,6,3,1,1,4,1,0};
Line 309 
Line 319 
             if (!snmpPdu)             if (!snmpPdu)
             {             {
                 PEG_METHOD_EXIT ();                 PEG_METHOD_EXIT ();
   
                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
                     MessageLoaderParms(_MSG_PDU_CREATE_FAILED_KEY,                      MessageLoaderParms(
                           _MSG_PDU_CREATE_FAILED_KEY,
                                        _MSG_PDU_CREATE_FAILED));                                        _MSG_PDU_CREATE_FAILED));
             }             }
  
Line 329 
Line 339 
             }             }
             catch (CIMException& e)             catch (CIMException& e)
             {             {
                 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,                  Logger::put_l(
                                   e.getMessage ());                      Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                 Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,  
                               Logger::WARNING,  
                               _MSG_PACK_TRAP_INFO_INTO_PDU_FAILED_KEY,                               _MSG_PACK_TRAP_INFO_INTO_PDU_FAILED_KEY,
                               _MSG_PACK_TRAP_INFO_INTO_PDU_FAILED,                               _MSG_PACK_TRAP_INFO_INTO_PDU_FAILED,
                               e.getMessage());                               e.getMessage());
Line 353 
Line 361 
                 PEG_METHOD_EXIT ();                 PEG_METHOD_EXIT ();
  
                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
                     MessageLoaderParms(_MSG_PDU_CREATE_FAILED_KEY,                      MessageLoaderParms(
                           _MSG_PDU_CREATE_FAILED_KEY,
                                        _MSG_PDU_CREATE_FAILED));                                        _MSG_PDU_CREATE_FAILED));
             }             }
  
Line 362 
Line 371 
             sprintf(sysUpTime, "%ld", get_uptime());             sprintf(sysUpTime, "%ld", get_uptime());
  
             Sint32 retCode;             Sint32 retCode;
             retCode = snmp_add_var(snmpPdu, _SYSTEM_UP_TIME_OID,              retCode = snmp_add_var(
                                    OID_LENGTH(_SYSTEM_UP_TIME_OID), 't',                  snmpPdu,
                   _SYSTEM_UP_TIME_OID,
                   OID_LENGTH(_SYSTEM_UP_TIME_OID),
                   't',
                                    sysUpTime);                                    sysUpTime);
  
   
             // Failed to add sysUpTime to the pdu             // Failed to add sysUpTime to the pdu
             if (retCode != 0)             if (retCode != 0)
             {             {
                 String errMsg = snmp_api_errstring(retCode);                 String errMsg = snmp_api_errstring(retCode);
  
                 PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,                  Logger::put_l(
                                  "Failed to add sysUpTime to pdu: " +                      Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                                  errMsg);  
                 Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,  
                               Logger::WARNING,  
                               _MSG_ADD_SYSUPTIME_TO_PDU_FAILED_KEY,                               _MSG_ADD_SYSUPTIME_TO_PDU_FAILED_KEY,
                               _MSG_ADD_SYSUPTIME_TO_PDU_FAILED,                               _MSG_ADD_SYSUPTIME_TO_PDU_FAILED,
                               errMsg);                               errMsg);
             }             }
  
             // Add snmp trap to the PDU             // Add snmp trap to the PDU
             retCode = snmp_add_var(snmpPdu, _SNMPTRAP_OID, OID_LENGTH(              retCode = snmp_add_var(
                                    _SNMPTRAP_OID), 'o', trapOid.getCString());                  snmpPdu,
                   _SNMPTRAP_OID,
                   OID_LENGTH(_SNMPTRAP_OID),
                   'o',
                   trapOid.getCString());
  
             // Failed to add snmp trap to the pdu             // Failed to add snmp trap to the pdu
             if (retCode != 0)             if (retCode != 0)
             {             {
                 String errMsg = snmp_api_errstring(retCode);                 String errMsg = snmp_api_errstring(retCode);
  
                 PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,                  Logger::put_l(
                                  "Failed to add snmp trap to pdu: " +                      Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                                  errMsg);  
                 Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,  
                               Logger::WARNING,  
                               _MSG_ADD_SNMP_TRAP_TO_PDU_FAILED_KEY,                               _MSG_ADD_SNMP_TRAP_TO_PDU_FAILED_KEY,
                               _MSG_ADD_SNMP_TRAP_TO_PDU_FAILED,                               _MSG_ADD_SNMP_TRAP_TO_PDU_FAILED,
                               errMsg);                               errMsg);
Line 408 
Line 417 
             PEG_METHOD_EXIT ();             PEG_METHOD_EXIT ();
  
             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,
                 MessageLoaderParms(_MSG_VERSION_NOT_SUPPORTED_KEY,                  MessageLoaderParms(
                       _MSG_VERSION_NOT_SUPPORTED_KEY,
                                    _MSG_VERSION_NOT_SUPPORTED));                                    _MSG_VERSION_NOT_SUPPORTED));
             break;  
         }         }
     }     }
  
Line 443 
Line 452 
     CString trapOidCStr = trapOid.getCString();     CString trapOidCStr = trapOid.getCString();
  
     char * trapOidCopy = strdup(trapOidCStr);     char * trapOidCopy = strdup(trapOidCStr);
       char* numericEntOid = (char*) malloc(strlen(trapOidCStr));
   
       try
       {
  
 #if !defined(PEGASUS_PLATFORM_WIN32_IX86_MSVC)  #if !defined(PEGASUS_OS_TYPE_WINDOWS) && !defined(PEGASUS_OS_ZOS)
     char *last;     char *last;
     for (const char* p = strtok_r(trapOidCopy, ".", &last); p;     for (const char* p = strtok_r(trapOidCopy, ".", &last); p;
          p=strtok_r(NULL, ".", &last))          p=strtok_r(NULL, ".", &last))
Line 460 
Line 473 
  
     enterpriseOidLength = MAX_OID_LEN;     enterpriseOidLength = MAX_OID_LEN;
  
     char * numericEntOid = (char *) malloc(strlen(trapOidCStr));  
     if (Contains(standard_traps, trapOid))     if (Contains(standard_traps, trapOid))
     {     {
         //         //
Line 517 
Line 529 
             strcat(numericEntOid, oidSubIdentifiers[i]);             strcat(numericEntOid, oidSubIdentifiers[i]);
         }         }
  
         if (oidSubIdentifiers[oidSubIdentifiers.size()-2] != "0")              if (strcmp(oidSubIdentifiers[oidSubIdentifiers.size()-2], "0") != 0)
         {         {
             strcat(numericEntOid, ".");             strcat(numericEntOid, ".");
             strcat(numericEntOid,             strcat(numericEntOid,
Line 545 
Line 557 
            enterpriseOidLength * sizeof(oid));            enterpriseOidLength * sizeof(oid));
  
     snmpPdu->enterprise_length = enterpriseOidLength;     snmpPdu->enterprise_length = enterpriseOidLength;
       }
       catch (...)
       {
           free(trapOidCopy);
           free(numericEntOid);
   
           PEG_METHOD_EXIT();
           throw;
       }
  
     free(trapOidCopy);     free(trapOidCopy);
     free(numericEntOid);     free(numericEntOid);


Legend:
Removed from v.1.2  
changed lines
  Added in v.1.16.10.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2