Fixed some bugs in node creation
authorVictor Kirhenshtein <victor@netxms.org>
Sat, 16 Oct 2004 15:35:30 +0000 (15:35 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Sat, 16 Oct 2004 15:35:30 +0000 (15:35 +0000)
ChangeLog
sql/setup.in
src/console/win32/CreateNodeDlg.cpp
src/server/core/objects.cpp
src/server/core/session.cpp

index 1610546..c3e7a7e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,7 @@
 - Added internal statistics collection for average data collector queue length
   and average database writer queue length
 - All IP addresses now stored in database as text
+- Added external event sender (nxevent)
 
 
 *
index 21ac424..a2005a6 100644 (file)
@@ -44,6 +44,8 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('DeleteEmptySubnets','1',1,1);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('EnableSNMPTraps','1',1,1);
+INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
+       VALUES ('SMSDriver','<none>',1,1);
 
 
 /*
index a7a6ffa..1182456 100644 (file)
@@ -49,8 +49,23 @@ END_MESSAGE_MAP()
 
 void CCreateNodeDlg::OnOK() 
 {
-   m_wndIPAddr.GetAddress(m_dwIpAddr);
-       CCreateObjectDlg::OnOK();
+   int iNumBytes;
+
+   iNumBytes = m_wndIPAddr.GetAddress(m_dwIpAddr);
+   if ((iNumBytes != 0) && (iNumBytes != 4))
+   {
+      MessageBox(_T("Invalid IP address"), _T("Warning"), MB_OK | MB_ICONEXCLAMATION);
+   }
+   else
+   {
+      if (iNumBytes == 0)
+         m_dwIpAddr = 0;
+      if ((m_pParentObject == NULL) && (m_dwIpAddr == 0))
+         MessageBox(_T("Node without IP address and parent container object cannot be created"),
+                    _T("Warning"), MB_OK | MB_ICONEXCLAMATION);
+      else
+             CCreateObjectDlg::OnOK();
+   }
 }
 
 
index cdf16df..c784d1b 100644 (file)
@@ -307,12 +307,14 @@ DWORD GetObjectNetmask(NetObj *pObject)
 
 void NetObjDelete(NetObj *pObject)
 {
-   char szQuery[256];
+   char szQuery[256], szIpAddr[16], szNetMask[16];
 
    // Write object to deleted objects table
-   sprintf(szQuery, "INSERT INTO deleted_objects (object_id,object_class,name,ip_addr,ip_netmask) VALUES (%ld,%ld,'%s',%ld,%ld)",
-           pObject->Id(), pObject->Type(), pObject->Name(), pObject->IpAddr(),
-           GetObjectNetmask(pObject));
+   snprintf(szQuery, 256, "INSERT INTO deleted_objects (object_id,object_class,name,"
+                          "ip_addr,ip_netmask) VALUES (%ld,%ld,'%s','%s','%s')",
+           pObject->Id(), pObject->Type(), pObject->Name(), 
+           IpToStr(pObject->IpAddr(), szIpAddr),
+           IpToStr(GetObjectNetmask(pObject), szNetMask));
    DBQuery(g_hCoreDB, szQuery);
 
    // Delete object from index by ID
index c2f8e6a..e85c4ea 100644 (file)
@@ -2227,11 +2227,14 @@ void ClientSession::CreateObject(CSCPMessage *pRequest)
 
    // Find parent object
    pParent = FindObjectById(pRequest->GetVariableLong(VID_PARENT_ID));
-   if ((pParent == NULL) && (iClass == OBJECT_NODE))
+   if (iClass == OBJECT_NODE)
    {
       dwIpAddr = pRequest->GetVariableLong(VID_IP_ADDRESS);
-      pParent = FindSubnetForNode(dwIpAddr);
-      bParentAlwaysValid = TRUE;
+      if ((pParent == NULL) && (dwIpAddr != 0))
+      {
+         pParent = FindSubnetForNode(dwIpAddr);
+         bParentAlwaysValid = TRUE;
+      }
    }
    if ((pParent != NULL) || (iClass == OBJECT_NODE))
    {
@@ -2277,8 +2280,11 @@ void ClientSession::CreateObject(CSCPMessage *pRequest)
                // If creation was successful do binding
                if (pObject != NULL)
                {
-                  pParent->AddChild(pObject);
-                  pObject->AddParent(pParent);
+                  if (pParent != NULL)    // parent can be NULL for nodes
+                  {
+                     pParent->AddChild(pObject);
+                     pObject->AddParent(pParent);
+                  }
                   msg.SetVariable(VID_RCC, RCC_SUCCESS);
                   msg.SetVariable(VID_OBJECT_ID, pObject->Id());
                }