Bugfix: object not marked as modified when platform name or agent version changes
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Feb 2005 14:34:37 +0000 (14:34 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 3 Feb 2005 14:34:37 +0000 (14:34 +0000)
ChangeLog
TODO
src/server/core/node.cpp

index 9c6100b..505578a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -15,6 +15,8 @@
 - Fixed bug with StartupDelay parameter handling in core agent
 - Fixed communication problems on FreeBSD
 - Bug #0000003 fixed
+- Bug fixed: objects was not marked as modified when platform name or agent
+  version changes
 
 
 *
diff --git a/TODO b/TODO
index 411ce96..277c3c5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -49,11 +49,6 @@ SERVER:
 - Network service autodiscovery
 - New attribute: disable status/configuration poll
 - Override Net.IP.Forward
-- Looks like object not marked as modified when platform name or agent
-  version changes
-- Bug: after server restart, all empty key and ack_key fields in EPP contains
-  strings of one space character instead of empty string, which cause
-  very interesting effects with alarms autoacknowlegement
 - NxAdm -- status, stop server
 - NxDbMgr -- backup before db recover
 - Replace mutex with r/w lock for session list access
index 6102c26..9e94cfe 100644 (file)
@@ -749,6 +749,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
    DWORD dwOldFlags = m_dwFlags;
    AgentConnection *pAgentConn;
    INTERFACE_LIST *pIfList;
+   char szBuffer[4096];
    BOOL bHasChanges = FALSE;
 
    PollerLock();
@@ -759,10 +760,16 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
    // Check node's capabilities
    SendPollerMsg(dwRqId, _T("Checking node's capabilities...\r\n"));
    if (SnmpGet(m_iSNMPVersion, m_dwIpAddr, m_szCommunityString, ".1.3.6.1.2.1.1.2.0", NULL, 0,
-               m_szObjectId, MAX_OID_LEN * 4, FALSE, FALSE) == SNMP_ERR_SUCCESS)
+               m_szObjectId, 4096, FALSE, FALSE) == SNMP_ERR_SUCCESS)
    {
       DWORD dwNodeFlags, dwNodeType;
 
+      if (strcmp(m_szObjectId, szBuffer))
+      {
+         strncpy(m_szObjectId, szBuffer, MAX_OID_LEN * 4);
+         bHasChanges = TRUE;
+      }
+
       m_dwFlags |= NF_IS_SNMP;
       m_iSnmpAgentFails = 0;
       SendPollerMsg(dwRqId, _T("   SNMP agent is active\r\n"));
@@ -774,6 +781,7 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
          m_dwFlags |= dwNodeFlags;
          m_dwNodeType = dwNodeType;
          SendPollerMsg(dwRqId, _T("   Node type has been changed to %d\r\n"), m_dwNodeType);
+         bHasChanges = TRUE;
       }
 
       CheckOSPFSupport();
@@ -796,8 +804,20 @@ void Node::ConfigurationPoll(ClientSession *pSession, DWORD dwRqId)
       m_iNativeAgentFails = 0;
       
       Lock();
-      pAgentConn->GetParameter("Agent.Version", MAX_AGENT_VERSION_LEN, m_szAgentVersion);
-      pAgentConn->GetParameter("System.PlatformName", MAX_PLATFORM_NAME_LEN, m_szPlatformName);
+      
+      pAgentConn->GetParameter("Agent.Version", MAX_AGENT_VERSION_LEN, szBuffer);
+      if (strcmp(m_szAgentVersion, szBuffer))
+      {
+         strcpy(m_szAgentVersion, szBuffer);
+         bHasChanges = TRUE;
+      }
+
+      pAgentConn->GetParameter("System.PlatformName", MAX_PLATFORM_NAME_LEN, szBuffer);
+      if (strcmp(m_szAgentVersion, szBuffer))
+      {
+         strcpy(m_szPlatformName, szBuffer);
+         bHasChanges = TRUE;
+      }
 
       safe_free(m_pParamList);
       pAgentConn->GetSupportedParameters(&m_dwNumParams, &m_pParamList);