added uuid class; code rerfactoring
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 7 Jul 2015 11:42:09 +0000 (14:42 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 7 Jul 2015 11:42:09 +0000 (14:42 +0300)
37 files changed:
include/nms_cscp.h
include/nxconfig.h
include/nxcpapi.h
include/nxdbapi.h
include/uuid.h
src/agent/core/datacoll.cpp
src/agent/core/dcsnmp.cpp
src/agent/core/nxagentd.h
src/db/libnxdb/session.cpp
src/db/libnxdb/util.cpp
src/libnetxms/config.cpp
src/libnetxms/message.cpp
src/libnetxms/uuid.cpp
src/server/core/agent.cpp
src/server/core/agent_policy.cpp
src/server/core/bizsvcroot.cpp
src/server/core/dcst.cpp
src/server/core/entirenet.cpp
src/server/core/epp.cpp
src/server/core/events.cpp
src/server/core/netmap.cpp
src/server/core/netobj.cpp
src/server/core/node.cpp
src/server/core/nxsl_classes.cpp
src/server/core/objects.cpp
src/server/core/session.cpp
src/server/core/template.cpp
src/server/core/uniroot.cpp
src/server/core/userdb_objects.cpp
src/server/include/nms_events.h
src/server/include/nms_objects.h
src/server/include/nms_users.h
src/server/include/nxsrvapi.h
src/server/libnxsrv/apinfo.cpp
src/server/tools/nxap/nxap.cpp
tests/test-libnetxms/nxcp.cpp
tests/test-libnetxms/test-libnetxms.cpp

index f8486f3..0426d2a 100644 (file)
@@ -108,6 +108,11 @@ typedef struct
       } string;
       struct
       {
+         UINT32 length;
+         BYTE value[1]; // actual size depends on length value
+      } binary;
+      struct
+      {
          union
          {
             UINT32 v4;
@@ -127,6 +132,7 @@ typedef struct
 #define df_uint64   data.uint64
 #define df_real     data.real
 #define df_string   data.string
+#define df_binary   data.binary
 #define df_inetaddr data.inetaddr
 
 /**
index ba90100..e5f8402 100644 (file)
@@ -78,7 +78,7 @@ public:
        INT64 getSubEntryValueAsInt64(const TCHAR *name, int index = 0, INT64 defaultValue = 0);
        UINT64 getSubEntryValueAsUInt64(const TCHAR *name, int index = 0, UINT64 defaultValue = 0);
        bool getSubEntryValueAsBoolean(const TCHAR *name, int index = 0, bool defaultValue = false);
-       bool getSubEntryValueAsUUID(const TCHAR *name, uuid_t uuid, int index = 0);
+       uuid getSubEntryValueAsUUID(const TCHAR *name, int index = 0);
 
    const TCHAR *getAttribute(const TCHAR *name) { return m_attributes.get(name); }
        INT32 getAttributeAsInt(const TCHAR *name, INT32 defaultValue = 0);
index 24d4c29..2d67160 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <nms_util.h>
 #include <nms_threads.h>
+#include <uuid.h>
 
 #ifdef _WIN32
 #include <wincrypt.h>
@@ -99,7 +100,8 @@ public:
    void setField(UINT32 fieldId, const TCHAR *value) { if (value != NULL) set(fieldId, NXCP_DT_STRING, value); }
    void setField(UINT32 fieldId, const TCHAR *value, size_t maxLen) { if (value != NULL) set(fieldId, NXCP_DT_STRING, value, false, maxLen); }
    void setField(UINT32 fieldId, BYTE *value, size_t size) { set(fieldId, NXCP_DT_BINARY, value, false, size); }
-   void setField(UINT32 fieldId, const InetAddress &value) { set(fieldId, NXCP_DT_INETADDR, (void *)&value); }
+   void setField(UINT32 fieldId, const InetAddress& value) { set(fieldId, NXCP_DT_INETADDR, &value); }
+   void setField(UINT32 fieldId, const uuid& value) { set(fieldId, NXCP_DT_BINARY, value.getValue(), false, UUID_LENGTH); }
 #ifdef UNICODE
    void setFieldFromMBString(UINT32 fieldId, const char *value);
 #else
@@ -127,6 +129,7 @@ public:
        char *getFieldAsUtf8String(UINT32 fieldId, char *buffer = NULL, size_t bufferSize = 0);
    UINT32 getFieldAsBinary(UINT32 fieldId, BYTE *buffer, size_t bufferSize);
    InetAddress getFieldAsInetAddress(UINT32 fieldId);
+   uuid getFieldAsGUID(UINT32 fieldId);
 
    void deleteAllFields();
 
index eb35617..be97983 100644 (file)
@@ -130,6 +130,7 @@ void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, UINT32
 void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, INT64 value);
 void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, UINT64 value);
 void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, double value);
+void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, const uuid& value);
 bool LIBNXDB_EXPORTABLE DBExecute(DB_STATEMENT hStmt);
 bool LIBNXDB_EXPORTABLE DBExecuteEx(DB_STATEMENT hStmt, TCHAR *errorText);
 DB_RESULT LIBNXDB_EXPORTABLE DBSelectPrepared(DB_STATEMENT hStmt);
@@ -160,8 +161,7 @@ bool LIBNXDB_EXPORTABLE DBGetFieldByteArray(DB_RESULT hResult, int iRow, int iCo
                                             int *pnArray, int nSize, int nDefault);
 bool LIBNXDB_EXPORTABLE DBGetFieldByteArray2(DB_RESULT hResult, int iRow, int iColumn,
                                              BYTE *data, int nSize, int nDefault);
-bool LIBNXDB_EXPORTABLE DBGetFieldGUID(DB_RESULT hResult, int iRow,
-                                        int iColumn, uuid_t guid);
+uuid LIBNXDB_EXPORTABLE DBGetFieldGUID(DB_RESULT hResult, int iRow, int iColumn);
 
 DB_ASYNC_RESULT LIBNXDB_EXPORTABLE DBAsyncSelect(DB_HANDLE hConn, const TCHAR *szQuery);
 DB_ASYNC_RESULT LIBNXDB_EXPORTABLE DBAsyncSelectEx(DB_HANDLE hConn, const TCHAR *szQuery, TCHAR *errorText);
@@ -213,7 +213,7 @@ void LIBNXDB_EXPORTABLE DBSetDebugPrintCallback(void (*cb)(int, const TCHAR *, v
 ObjectArray<PoolConnectionInfo> LIBNXDB_EXPORTABLE *DBConnectionPoolGetConnectionList();
 
 bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, UINT32 id);
-bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, const uuid_t id);
+bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, const uuid& id);
 bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, const TCHAR *id);
 
 #endif   /* _nxsrvapi_h_ */
index 576ad00..0f267ec 100644 (file)
@@ -16,7 +16,7 @@
 
 #if !HAVE_UUID_T
 #undef uuid_t
-typedef unsigned char uuid_t[16];
+typedef unsigned char uuid_t[UUID_LENGTH];
 #endif
 
 /* UUID Variant definitions */
@@ -28,8 +28,55 @@ typedef unsigned char uuid_t[16];
 void LIBNETXMS_EXPORTABLE uuid_clear(uuid_t uu);
 int LIBNETXMS_EXPORTABLE uuid_compare(const uuid_t uu1, const uuid_t uu2);
 void LIBNETXMS_EXPORTABLE uuid_generate(uuid_t out);
-int LIBNETXMS_EXPORTABLE uuid_is_null(const uuid_t uu);
+bool LIBNETXMS_EXPORTABLE uuid_is_null(const uuid_t uu);
 int LIBNETXMS_EXPORTABLE uuid_parse(const TCHAR *in, uuid_t uu);
 TCHAR LIBNETXMS_EXPORTABLE *uuid_to_string(const uuid_t uu, TCHAR *out);
 
+#ifdef __cplusplus
+
+/**
+ * Wrapper class for UUID
+ * Lower case used to avoid conflict with UUID struct defined in Windows headers
+ */
+class LIBNETXMS_EXPORTABLE uuid
+{
+private:
+   uuid_t m_value;
+
+public:
+   uuid() { uuid_clear(m_value); }
+   uuid(const uuid_t v) { memcpy(m_value, v, UUID_LENGTH); }
+
+   int compare(const uuid& u) const { return uuid_compare(m_value, u.m_value); }
+   const uuid_t& getValue() const { return m_value; }
+   bool isNull() const { return uuid_is_null(m_value); }
+   TCHAR *toString(TCHAR *buffer) const { return uuid_to_string(m_value, buffer); }
+   String toString() const { TCHAR buffer[64]; return String(uuid_to_string(m_value, buffer)); }
+
+   /**
+    * Generate new UUID
+    */
+   static uuid generate() 
+   { 
+      uuid_t u;
+      uuid_generate(u);
+      return uuid(u);
+   }
+
+   /**
+    * Parse string into UUID. Returns NULL UUID on error.
+    */
+   static uuid parse(const TCHAR *s)
+   {
+      uuid_t u;
+      if (uuid_parse(s, u) != 0)
+         return NULL_UUID;
+      return uuid(u);
+   }
+
+   static const uuid NULL_UUID;
+};
+
+#endif
+
 #endif
index 06d32a3..8adbc37 100644 (file)
@@ -26,7 +26,7 @@
  * Externals
  */
 void UpdateSnmpTarget(SNMPTarget *target);
-bool GetSnmpValue(const uuid_t& target, UINT16 port, const TCHAR *oid, TCHAR *value, int interpretRawValue);
+bool GetSnmpValue(const uuid& target, UINT16 port, const TCHAR *oid, TCHAR *value, int interpretRawValue);
 
 /**
  * Database schema version
@@ -52,7 +52,7 @@ private:
    BYTE m_origin;
    UINT16 m_snmpPort;
    BYTE m_snmpRawValueType;
-       uuid_t m_snmpTargetGuid;
+       uuid m_snmpTargetGuid;
    time_t m_lastPollTime;
 
 public:
@@ -66,7 +66,7 @@ public:
    const TCHAR *getName() const { return m_name; }
    int getType() const { return (int)m_type; }
    int getOrigin() const { return (int)m_origin; }
-   const uuid_t& getSnmpTargetGuid() const { return m_snmpTargetGuid; }
+   const uuid& getSnmpTargetGuid() const { return m_snmpTargetGuid; }
    UINT16 getSnmpPort() const { return m_snmpPort; }
    int getSnmpRawValueType() const { return (int)m_snmpRawValueType; }
    UINT32 getPollingInterval() { return (UINT32)m_pollingInterval; }
@@ -97,8 +97,7 @@ DataCollectionItem::DataCollectionItem(UINT64 serverId, NXCPMessage *msg, UINT32
    m_name = msg->getFieldAsString(baseId + 3);
    m_pollingInterval = msg->getFieldAsInt32(baseId + 4);
    m_lastPollTime = msg->getFieldAsTime(baseId + 5);
-   memset(m_snmpTargetGuid, 0, UUID_LENGTH);
-   msg->getFieldAsBinary(baseId + 6, m_snmpTargetGuid, UUID_LENGTH);
+   m_snmpTargetGuid = msg->getFieldAsGUID(baseId + 6);
    m_snmpPort = msg->getFieldAsUInt16(baseId + 7);
    m_snmpRawValueType = (BYTE)msg->getFieldAsUInt16(baseId + 8);
 }
@@ -115,9 +114,8 @@ DataCollectionItem::DataCollectionItem(DB_RESULT hResult, int row)
    m_name = DBGetField(hResult, row, 4, NULL, 0);
    m_pollingInterval = DBGetFieldULong(hResult, row, 5);
    m_lastPollTime = (time_t)DBGetFieldULong(hResult, row, 6);
-   memset(m_snmpTargetGuid, 0, UUID_LENGTH);
    m_snmpPort = DBGetFieldULong(hResult, row, 7);
-   DBGetFieldGUID(hResult, row, 8, m_snmpTargetGuid);
+   m_snmpTargetGuid = DBGetFieldGUID(hResult, row, 8);
    m_snmpRawValueType = (BYTE)DBGetFieldULong(hResult, row, 9);
 }
 
@@ -133,7 +131,7 @@ DataCollectionItem::DataCollectionItem(DB_RESULT hResult, int row)
    m_name = _tcsdup(item->m_name);
    m_pollingInterval = item->m_pollingInterval;
    m_lastPollTime = item->m_lastPollTime;
-   memcpy(m_snmpTargetGuid, item->m_snmpTargetGuid, UUID_LENGTH);
+   m_snmpTargetGuid = item->m_snmpTargetGuid;
    m_snmpPort = item->m_snmpPort;
    m_snmpRawValueType = item->m_snmpRawValueType;
  }
@@ -154,7 +152,7 @@ void DataCollectionItem::updateAndSave(const DataCollectionItem *item)
 {
    //if at leas one of fields changed - set all fields and save to DB
    if ((m_type != item->m_type) || (m_origin != item->m_origin) || _tcscmp(m_name, item->m_name) ||
-       (m_pollingInterval != item->m_pollingInterval) || uuid_compare(m_snmpTargetGuid, item->m_snmpTargetGuid) ||
+       (m_pollingInterval != item->m_pollingInterval) || m_snmpTargetGuid.compare(item->m_snmpTargetGuid) ||
        (m_snmpPort != item->m_snmpPort) || (m_snmpRawValueType != item->m_snmpRawValueType) || (m_lastPollTime < item->m_lastPollTime))
    {
       m_type = item->m_type;
@@ -163,7 +161,7 @@ void DataCollectionItem::updateAndSave(const DataCollectionItem *item)
       m_pollingInterval = item->m_pollingInterval;
       if (m_lastPollTime < item->m_lastPollTime)
          m_lastPollTime = item->m_lastPollTime;
-      memcpy(m_snmpTargetGuid, item->m_snmpTargetGuid, UUID_LENGTH);
+      m_snmpTargetGuid = item->m_snmpTargetGuid;
       m_snmpPort = item->m_snmpPort;
       m_snmpRawValueType = item->m_snmpRawValueType;
       saveToDatabase(false);
@@ -198,14 +196,13 @@ void DataCollectionItem::saveToDatabase(bool newObject)
        if (hStmt == NULL)
                return;
 
-   TCHAR buffer[64];
        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, (LONG)m_type);
        DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, (LONG)m_origin);
        DBBind(hStmt, 3, DB_SQLTYPE_VARCHAR, m_name, DB_BIND_STATIC);
        DBBind(hStmt, 4, DB_SQLTYPE_INTEGER, (LONG)m_pollingInterval);
        DBBind(hStmt, 5, DB_SQLTYPE_INTEGER, (LONG)m_lastPollTime);
        DBBind(hStmt, 6, DB_SQLTYPE_INTEGER, (LONG)m_snmpPort);
-   DBBind(hStmt, 7, DB_SQLTYPE_VARCHAR, uuid_to_string(m_snmpTargetGuid, buffer), DB_BIND_STATIC);
+   DBBind(hStmt, 7, DB_SQLTYPE_VARCHAR, m_snmpTargetGuid);
        DBBind(hStmt, 8, DB_SQLTYPE_INTEGER, (LONG)m_snmpRawValueType);
        DBBind(hStmt, 9, DB_SQLTYPE_BIGINT, m_serverId);
        DBBind(hStmt, 10, DB_SQLTYPE_INTEGER, (LONG)m_id);
@@ -255,7 +252,7 @@ private:
    time_t m_timestamp;
    int m_origin;
    int m_type;
-   uuid_t m_snmpNode;
+   uuid m_snmpNode;
    union
    {
       TCHAR *item;
@@ -271,7 +268,7 @@ public:
       m_timestamp = time(NULL);
       m_origin = dci->getOrigin();
       m_type = DCO_TYPE_ITEM;
-      memcpy(m_snmpNode, dci->getSnmpTargetGuid(), UUID_LENGTH);
+      m_snmpNode = dci->getSnmpTargetGuid();
       m_value.item = _tcsdup(value);
    }
 
@@ -282,7 +279,7 @@ public:
       m_timestamp = time(NULL);
       m_origin = dci->getOrigin();
       m_type = DCO_TYPE_LIST;
-      memcpy(m_snmpNode, dci->getSnmpTargetGuid(), UUID_LENGTH);
+      m_snmpNode = dci->getSnmpTargetGuid();
       m_value.list = value;
    }
 
@@ -293,7 +290,7 @@ public:
       m_timestamp = time(NULL);
       m_origin = dci->getOrigin();
       m_type = DCO_TYPE_TABLE;
-      memcpy(m_snmpNode, dci->getSnmpTargetGuid(), UUID_LENGTH);
+      m_snmpNode = dci->getSnmpTargetGuid();
       m_value.table = value;
    }
 
@@ -308,7 +305,7 @@ public:
       m_timestamp = (time_t)DBGetFieldInt64(hResult, row, 5);
       m_origin = DBGetFieldLong(hResult, row, 3);
       m_type = DBGetFieldLong(hResult, row, 2);
-      DBGetFieldGUID(hResult, row, 4, m_snmpNode);
+      m_snmpNode = DBGetFieldGUID(hResult, row, 4);
       switch(m_type)
       {
          case DCO_TYPE_ITEM:
@@ -384,8 +381,7 @@ void DataElement::saveToDatabase()
    DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, (LONG)m_dciId);
    DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, (LONG)m_type);
    DBBind(hStmt, 4, DB_SQLTYPE_INTEGER, (LONG)m_origin);
-   TCHAR buffer[64];
-   DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, uuid_to_string(m_snmpNode, buffer), DB_BIND_STATIC);
+   DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, m_snmpNode);
    DBBind(hStmt, 6, DB_SQLTYPE_INTEGER, (LONG)m_timestamp);
    switch(m_type)
    {
@@ -423,7 +419,7 @@ bool DataElement::sendToServer(bool reconcillation)
    msg.setField(VID_DCI_ID, m_dciId);
    msg.setField(VID_DCI_SOURCE_TYPE, (INT16)m_origin);
    msg.setField(VID_DCOBJECT_TYPE, (INT16)m_type);
-   msg.setField(VID_NODE_ID, m_snmpNode, UUID_LENGTH);
+   msg.setField(VID_NODE_ID, m_snmpNode);
    msg.setFieldFromTime(VID_TIMESTAMP, m_timestamp);
    msg.setField(VID_RECONCILLATION, (INT16)(reconcillation ? 1 : 0));
    switch(m_type)
index 3db0ecf..921fb1f 100644 (file)
@@ -33,7 +33,7 @@ static MUTEX s_snmpTargetsLock = MutexCreate();
  */
 SNMPTarget::SNMPTarget(UINT64 serverId, NXCPMessage *msg, UINT32 baseId)
 {
-   msg->getFieldAsBinary(baseId, m_guid, UUID_LENGTH);
+   m_guid = msg->getFieldAsGUID(baseId);
    m_serverId = serverId;
    m_ipAddress = msg->getFieldAsInetAddress(baseId + 1);
    m_snmpVersion = (BYTE)msg->getFieldAsInt16(baseId + 2);
@@ -53,7 +53,7 @@ SNMPTarget::SNMPTarget(UINT64 serverId, NXCPMessage *msg, UINT32 baseId)
  */
 SNMPTarget::SNMPTarget(DB_RESULT hResult, int row)
 {
-   DBGetFieldGUID(hResult, row, 0, m_guid);
+   m_guid = DBGetFieldGUID(hResult, row, 0);
    m_serverId = DBGetFieldUInt64(hResult, row, 1);
    m_ipAddress = DBGetFieldInetAddr(hResult, row, 2);
    m_snmpVersion = (BYTE)DBGetFieldLong(hResult, row, 3);
@@ -107,8 +107,7 @@ bool SNMPTarget::saveToDatabase()
    DBBind(hStmt, 8, DB_SQLTYPE_VARCHAR, m_authPassword, DB_BIND_STATIC);
    DBBind(hStmt, 9, DB_SQLTYPE_VARCHAR, m_encPassword, DB_BIND_STATIC);
 #endif
-   TCHAR guidText[64];
-   DBBind(hStmt, 10, DB_SQLTYPE_VARCHAR, uuid_to_string(m_guid, guidText), DB_BIND_STATIC);
+   DBBind(hStmt, 10, DB_SQLTYPE_VARCHAR, m_guid);
 
    bool success = DBExecute(hStmt);
    DBFreeStatement(hStmt);
@@ -138,7 +137,7 @@ SNMP_Transport *SNMPTarget::getTransport(UINT16 port)
 void UpdateSnmpTarget(SNMPTarget *target)
 {
    MutexLock(s_snmpTargetsLock);
-   s_snmpTargets.set(target->getGuid(), target);
+   s_snmpTargets.set(target->getGuid().getValue(), target);
    target->saveToDatabase();
    MutexUnlock(s_snmpTargetsLock);
 }
@@ -146,12 +145,12 @@ void UpdateSnmpTarget(SNMPTarget *target)
 /**
  * Get value from SNMP node
  */
-bool GetSnmpValue(const uuid_t& target, UINT16 port, const TCHAR *oid, TCHAR *value, int interpretRawValue)
+bool GetSnmpValue(const uuid& target, UINT16 port, const TCHAR *oid, TCHAR *value, int interpretRawValue)
 {
    bool success = false;
 
    MutexLock(s_snmpTargetsLock);
-   SNMPTarget *t = s_snmpTargets.get(target);
+   SNMPTarget *t = s_snmpTargets.get(target.getValue());
    if (t != NULL)
    {
       SNMP_Transport *snmp = t->getTransport(port);
@@ -202,7 +201,7 @@ bool GetSnmpValue(const uuid_t& target, UINT16 port, const TCHAR *oid, TCHAR *va
    else
    {
       TCHAR buffer[64];
-      DebugPrintf(INVALID_INDEX, 6, _T("SNMP target with guid %s not found"), uuid_to_string(target, buffer));
+      DebugPrintf(INVALID_INDEX, 6, _T("SNMP target with guid %s not found"), target.toString(buffer));
    }
    MutexUnlock(s_snmpTargetsLock);
    
index 29abf37..969a530 100644 (file)
@@ -443,7 +443,7 @@ public:
 class SNMPTarget
 {
 private:
-   uuid_t m_guid;
+   uuid m_guid;
    UINT64 m_serverId;
    InetAddress m_ipAddress;
    UINT16 m_port;
@@ -460,7 +460,7 @@ public:
    SNMPTarget(DB_RESULT hResult, int row);
    ~SNMPTarget();
 
-   const uuid_t& getGuid() const { return m_guid; }
+   const uuid& getGuid() const { return m_guid; }
    SNMP_Transport *getTransport(UINT16 port);
 
    bool saveToDatabase();
index 38278a8..fd3184e 100644 (file)
@@ -725,30 +725,11 @@ bool LIBNXDB_EXPORTABLE DBGetFieldByteArray2(DB_RESULT hResult, int iRow, int iC
 /**
  * Get field's value as GUID
  */
-bool LIBNXDB_EXPORTABLE DBGetFieldGUID(DB_RESULT hResult, int iRow, int iColumn, uuid_t guid)
+uuid LIBNXDB_EXPORTABLE DBGetFieldGUID(DB_RESULT hResult, int iRow, int iColumn)
 {
-   TCHAR *pszVal, szBuffer[256];
-   bool bResult;
-
-   pszVal = DBGetField(hResult, iRow, iColumn, szBuffer, 256);
-   if (pszVal != NULL)
-   {
-      if (uuid_parse(pszVal, guid) == 0)
-      {
-         bResult = true;
-      }
-      else
-      {
-         uuid_clear(guid);
-         bResult = false;
-      }
-   }
-   else
-   {
-      uuid_clear(guid);
-      bResult = false;
-   }
-   return bResult;
+   TCHAR buffer[256];
+   TCHAR *value = DBGetField(hResult, iRow, iColumn, buffer, 256);
+   return (value == NULL) ? uuid::NULL_UUID : uuid::parse(value);
 }
 
 /**
@@ -1313,6 +1294,15 @@ void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, double
 }
 
 /**
+ * Bind UUID parameter
+ */
+void LIBNXDB_EXPORTABLE DBBind(DB_STATEMENT hStmt, int pos, int sqlType, const uuid& value)
+{
+   TCHAR buffer[64];
+   DBBind(hStmt, pos, sqlType, DB_CTYPE_STRING, value.toString(buffer), DB_BIND_TRANSIENT);
+}
+
+/**
  * Execute prepared statement (non-SELECT)
  */
 bool LIBNXDB_EXPORTABLE DBExecuteEx(DB_STATEMENT hStmt, TCHAR *errorText)
index e7f28de..9d896a0 100644 (file)
@@ -51,7 +51,7 @@ bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table,
 /**
  * Check if given record exists in database
  */
-bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, const uuid_t id)
+bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table, const TCHAR *idColumn, const uuid& id)
 {
        bool exist = false;
 
@@ -61,9 +61,7 @@ bool LIBNXDB_EXPORTABLE IsDatabaseRecordExist(DB_HANDLE hdb, const TCHAR *table,
        DB_STATEMENT hStmt = DBPrepare(hdb, query);
        if (hStmt != NULL)
        {
-      TCHAR guidText[64];
-      uuid_to_string(id, guidText);
-               DBBind(hStmt, 1, DB_SQLTYPE_VARCHAR, guidText, DB_BIND_STATIC);
+               DBBind(hStmt, 1, DB_SQLTYPE_VARCHAR, id);
                DB_RESULT hResult = DBSelectPrepared(hStmt);
                if (hResult != NULL)
                {
index 3c7afce..d6a6425 100644 (file)
@@ -459,16 +459,16 @@ bool ConfigEntry::getSubEntryValueAsBoolean(const TCHAR *name, int index, bool d
 /**
  * Get sub-entry value as UUID
  */
-bool ConfigEntry::getSubEntryValueAsUUID(const TCHAR *name, uuid_t uuid, int index)
+uuid ConfigEntry::getSubEntryValueAsUUID(const TCHAR *name, int index)
 {
    const TCHAR *value = getSubEntryValue(name, index);
    if (value != NULL)
    {
-      return uuid_parse(value, uuid) == 0;
+      return uuid::parse(value);
    }
    else
    {
-      return false;
+      return uuid::NULL_UUID;
    }
 }
 
index 6ca1268..93c0b04 100644 (file)
@@ -299,9 +299,9 @@ void *NXCPMessage::set(UINT32 fieldId, BYTE type, const void *value, bool isSign
          break;
       case NXCP_DT_BINARY:
          entry = CreateMessageField(12 + size);
-         entry->data.df_string.length = (UINT32)size;
-         if ((entry->data.df_string.length > 0) && (value != NULL))
-            memcpy(entry->data.df_string.value, value, entry->data.df_string.length);
+         entry->data.df_binary.length = (UINT32)size;
+         if ((entry->data.df_binary.length > 0) && (value != NULL))
+            memcpy(entry->data.df_binary.value, value, entry->data.df_binary.length);
          break;
       case NXCP_DT_INETADDR:
          entry = CreateMessageField(32);
@@ -698,6 +698,29 @@ BYTE *NXCPMessage::getBinaryFieldPtr(UINT32 fieldId, size_t *size)
 }
 
 /**
+ * Get field as GUID
+ * Returns NULL GUID on error
+ */
+uuid NXCPMessage::getFieldAsGUID(UINT32 fieldId)
+{
+   NXCP_MESSAGE_FIELD *f = find(fieldId);
+   if (f == NULL)
+      return uuid::NULL_UUID;
+
+   if ((f->type == NXCP_DT_BINARY) && (f->df_binary.length == UUID_LENGTH))
+   {
+      return uuid(f->df_binary.value);
+   }
+   else if (f->type == NXCP_DT_STRING)
+   {
+      TCHAR buffer[64] = _T("");
+      getFieldAsString(fieldId, buffer, 64);
+      return uuid::parse(buffer);
+   }
+   return uuid::NULL_UUID;
+}
+
+/**
  * Build protocol message ready to be send over the wire
  */
 NXCP_MESSAGE *NXCPMessage::createMessage()
index c22ed16..9e5ec8a 100644 (file)
 #define rand()   random()
 #endif
 
+/**
+ * NULL GUID
+ */
+const uuid uuid::NULL_UUID = uuid();
+
 /*
  * Offset between 15-Oct-1582 and 1-Jan-70
  */
@@ -166,17 +171,17 @@ int LIBNETXMS_EXPORTABLE uuid_compare(const uuid_t uu1, const uuid_t uu2)
 
 /**
  * isnull.c --- Check whether or not the UUID is null
- * Returns 1 if the uuid is the NULL uuid
+ * Returns true if the uuid is the NULL uuid
  */
-int LIBNETXMS_EXPORTABLE uuid_is_null(const uuid_t uu)
+bool LIBNETXMS_EXPORTABLE uuid_is_null(const uuid_t uu)
 {
        const unsigned char *cp;
        int i;
 
        for (i=0, cp = uu; i < 16; i++)
                if (*cp++)
-                       return 0;
-       return 1;
+                       return false;
+       return true;
 }
 
 /**
index b799446..e4aae0c 100644 (file)
@@ -500,13 +500,12 @@ UINT32 AgentConnectionEx::processCollectedData(NXCPMessage *msg)
 
    if (origin == DS_SNMP_AGENT)
    {
-      uuid_t nodeId;
-      msg->getFieldAsBinary(VID_NODE_ID, nodeId, UUID_LENGTH);
+      uuid nodeId = msg->getFieldAsGUID(VID_NODE_ID);
       Node *snmpNode = (Node *)FindObjectByGUID(nodeId, OBJECT_NODE);
       if (snmpNode == NULL)
       {
          TCHAR buffer[64];
-         DbgPrintf(5, _T("AgentConnectionEx::processCollectedData: cannot find SNMP node with GUID %s"), uuid_to_string(nodeId, buffer));
+         DbgPrintf(5, _T("AgentConnectionEx::processCollectedData: cannot find SNMP node with GUID %s"), nodeId.toString(buffer));
          return ERR_INTERNAL_ERROR;
       }
       node = snmpNode;
index c6d2864..63771bb 100644 (file)
@@ -230,18 +230,16 @@ UINT32 AgentPolicy::modifyFromMessageInternal(NXCPMessage *pRequest)
 bool AgentPolicy::createDeploymentMessage(NXCPMessage *msg)
 {
        msg->setField(VID_POLICY_TYPE, (WORD)m_policyType);
-       msg->setField(VID_GUID, m_guid, UUID_LENGTH);
+       msg->setField(VID_GUID, m_guid);
        return true;
 }
 
-
-//
-// Create uninstall message
-//
-
+/**
+ * Create uninstall message
+ */
 bool AgentPolicy::createUninstallMessage(NXCPMessage *msg)
 {
        msg->setField(VID_POLICY_TYPE, (WORD)m_policyType);
-       msg->setField(VID_GUID, m_guid, UUID_LENGTH);
+       msg->setField(VID_GUID, m_guid);
        return true;
 }
index e09a927..d517408 100644 (file)
@@ -1,6 +1,6 @@
 /* 
 ** NetXMS - Network Management System
-** Copyright (C) 2003-2010 Victor Kirhenshtein
+** Copyright (C) 2003-2015 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
 
 #include "nxcore.h"
 
-
-//
-// Business service tree root class default constructor
-//
-
+/**
+ * Business service tree root class default constructor
+ */
 BusinessServiceRoot::BusinessServiceRoot() : ServiceContainer()
 {
        m_id = BUILTIN_OID_BUSINESSSERVICEROOT;
        _tcscpy(m_name, _T("Business Services"));
-       uuid_generate(m_guid);
+   m_guid = uuid::generate();
        m_iStatus = STATUS_NORMAL;
 }
 
-
-//
-// Business service root class destructor
-//
-
+/**
+ * Business service root class destructor
+ */
 BusinessServiceRoot::~BusinessServiceRoot()
 {
 }
 
-
-//
-// Save object to database
-//
-
+/**
+ * Save object to database
+ */
 BOOL BusinessServiceRoot::saveToDatabase(DB_HANDLE hdb)
 {
    TCHAR szQuery[1024];
index 0abea2a..2961ed6 100644 (file)
@@ -168,7 +168,7 @@ SummaryTableColumn::SummaryTableColumn(TCHAR *configStr)
 SummaryTable::SummaryTable(NXCPMessage *msg)
 {
    m_id = 0;
-   uuid_generate(m_guid);
+   m_guid = uuid::generate();
    m_title[0] = 0;
    m_menuPath[0] = 0;
    m_flags = msg->getFieldAsUInt32(VID_FLAGS);
@@ -198,7 +198,7 @@ SummaryTable::SummaryTable(INT32 id, DB_RESULT hResult)
 
    DBGetField(hResult, 0, 0, m_title, MAX_DB_STRING);
    m_flags = DBGetFieldULong(hResult, 0, 1);
-   DBGetFieldGUID(hResult, 0, 2, m_guid);
+   m_guid = DBGetFieldGUID(hResult, 0, 2);
    DBGetField(hResult, 0, 3, m_menuPath, MAX_DB_STRING);
 
    m_aggregationFunction = DCI_AGG_LAST;
@@ -356,7 +356,7 @@ void SummaryTable::createExportRecord(String &xml)
    xml.append(_T("\t\t<table id=\""));
    xml.append(m_id);
    xml.append(_T("\">\n\t\t\t<guid>"));
-   xml.append(uuid_to_string(m_guid, buffer));
+   xml.append(m_guid.toString(buffer));
    xml.append(_T("</guid>\n\t\t\t<title>"));
    xml.appendPreallocated(EscapeStringForXML(m_title, -1));
    xml.append(_T("</title>\n\t\t\t<flags>"));
index 213934b..37dfc7b 100644 (file)
@@ -28,7 +28,7 @@ Network::Network() : NetObj()
 {
    m_id = BUILTIN_OID_NETWORK;
    _tcscpy(m_name, _T("Entire Network"));
-       uuid_generate(m_guid);
+   m_guid = uuid::generate();
 }
 
 /**
index 2bedf83..c6691e0 100644 (file)
@@ -28,7 +28,7 @@
 EPRule::EPRule(UINT32 id)
 {
    m_id = id;
-   uuid_generate(m_guid);
+   m_guid = uuid::generate();
    m_dwFlags = 0;
    m_dwNumSources = 0;
    m_pdwSourceList = NULL;
@@ -54,7 +54,7 @@ EPRule::EPRule(UINT32 id)
 EPRule::EPRule(ConfigEntry *config)
 {
    m_id = 0;
-   config->getSubEntryValueAsUUID(_T("guid"), m_guid);
+   m_guid = config->getSubEntryValueAsUUID(_T("guid"));
    m_dwFlags = config->getSubEntryValueAsUInt(_T("flags"));
    m_dwNumSources = 0;
    m_pdwSourceList = NULL;
@@ -117,7 +117,7 @@ EPRule::EPRule(ConfigEntry *config)
 EPRule::EPRule(DB_RESULT hResult, int row)
 {
    m_id = DBGetFieldULong(hResult, row, 0);
-   DBGetFieldGUID(hResult, row, 1, m_guid);
+   m_guid = DBGetFieldGUID(hResult, row, 1);
    m_dwFlags = DBGetFieldULong(hResult, row, 2);
    m_pszComment = DBGetField(hResult, row, 3, NULL, 0);
        DBGetField(hResult, row, 4, m_szAlarmMessage, MAX_EVENT_MSG_LENGTH);
@@ -159,7 +159,7 @@ EPRule::EPRule(NXCPMessage *msg)
 
    m_dwFlags = msg->getFieldAsUInt32(VID_FLAGS);
    m_id = msg->getFieldAsUInt32(VID_RULE_ID);
-   msg->getFieldAsBinary(VID_GUID, m_guid, UUID_LENGTH);
+   m_guid = msg->getFieldAsGUID(VID_GUID);
    m_pszComment = msg->getFieldAsString(VID_COMMENTS);
 
    m_dwNumActions = msg->getFieldAsUInt32(VID_NUM_ACTIONS);
@@ -254,8 +254,6 @@ void EPRule::createNXMPRecord(String &str)
       NetObj *object = FindObjectById(m_pdwSourceList[i]);
       if (object != NULL)
       {
-         uuid_t guid;
-         object->getGuid(guid);
          TCHAR guidText[128];
          str.appendFormattedString(_T("\t\t\t\t<source id=\"%d\">\n")
                                 _T("\t\t\t\t\t<name>%s</name>\n")
@@ -264,7 +262,7 @@ void EPRule::createNXMPRecord(String &str)
                                 _T("\t\t\t\t</source>\n"),
                                 object->getId(),
                                 (const TCHAR *)EscapeStringForXML2(object->getName()),
-                                uuid_to_string(guid, guidText), object->getObjectClass());
+                                object->getGuid().toString(guidText), object->getObjectClass());
       }
    }
 
@@ -650,7 +648,7 @@ void EPRule::saveToDB(DB_HANDLE hdb)
                        _T("alarm_severity,alarm_key,script,alarm_timeout,alarm_timeout_event,")
                                                          _T("situation_id,situation_instance) ")
                        _T("VALUES (%d,'%s',%d,%s,%s,%d,%s,%s,%d,%d,%d,%s)"),
-              m_id, uuid_to_string(m_guid, guidText),m_dwFlags, (const TCHAR *)DBPrepareString(hdb, m_pszComment),
+              m_id, m_guid.toString(guidText), m_dwFlags, (const TCHAR *)DBPrepareString(hdb, m_pszComment),
                                  (const TCHAR *)DBPrepareString(hdb, m_szAlarmMessage), m_iAlarmSeverity,
                   (const TCHAR *)DBPrepareString(hdb, m_szAlarmKey),
                   (const TCHAR *)DBPrepareString(hdb, m_pszScript), m_dwAlarmTimeout, m_dwAlarmTimeoutEvent,
@@ -705,7 +703,7 @@ void EPRule::createMessage(NXCPMessage *msg)
 {
    msg->setField(VID_FLAGS, m_dwFlags);
    msg->setField(VID_RULE_ID, m_id);
-   msg->setField(VID_GUID, m_guid, UUID_LENGTH);
+   msg->setField(VID_GUID, m_guid);
    msg->setField(VID_ALARM_SEVERITY, (WORD)m_iAlarmSeverity);
    msg->setField(VID_ALARM_KEY, m_szAlarmKey);
    msg->setField(VID_ALARM_MESSAGE, m_szAlarmMessage);
@@ -904,12 +902,12 @@ bool EventPolicy::isActionInUse(UINT32 dwActionId)
 /**
  * Export rule
  */
-void EventPolicy::exportRule(String &str, uuid_t guid)
+void EventPolicy::exportRule(String& str, const uuid& guid)
 {
    readLock();
    for(UINT32 i = 0; i < m_dwNumRules; i++)
    {
-      if (!uuid_compare(guid, m_ppRuleList[i]->getGuid()))
+      if (!guid.compare(m_ppRuleList[i]->getGuid()))
       {
          m_ppRuleList[i]->createNXMPRecord(str);
          break;
@@ -929,7 +927,7 @@ void EventPolicy::importRule(EPRule *rule)
    bool newRule = true;
    for(UINT32 i = 0; i < m_dwNumRules; i++)
    {
-      if (!uuid_compare(rule->getGuid(), m_ppRuleList[i]->getGuid()))
+      if (!rule->getGuid().compare(m_ppRuleList[i]->getGuid()))
       {
          delete m_ppRuleList[i];
          m_ppRuleList[i] = rule;
index c9e3792..7aaa326 100644 (file)
@@ -279,8 +279,7 @@ TCHAR *Event::expandText(Event *event, UINT32 sourceObject, const TCHAR *textTem
                case 'g':   // Source object's GUID
                   dwSize += 36;
                   pText = (TCHAR *)realloc(pText, dwSize * sizeof(TCHAR));
-                                               pObject->getGuid(guid);
-                                               uuid_to_string(guid, &pText[dwPos]);
+                  pObject->getGuid().toString(&pText[dwPos]);
                   dwPos = (UINT32)_tcslen(pText);
                   break;
                case 'i':   // Source object identifier in form 0xhhhhhhhh
index 935e29d..52a5c7b 100644 (file)
@@ -48,7 +48,6 @@ NetworkMap::NetworkMap() : NetObj()
        m_discoveryRadius = -1;
        m_flags = MF_SHOW_STATUS_ICON;
        m_layout = MAP_LAYOUT_MANUAL;
-       uuid_clear(m_background);
        m_iStatus = STATUS_NORMAL;
        m_backgroundLatitude = 0;
        m_backgroundLongitude = 0;
@@ -73,7 +72,6 @@ NetworkMap::NetworkMap(int type, UINT32 seed) : NetObj()
        m_discoveryRadius = -1;
        m_flags = MF_SHOW_STATUS_ICON;
    m_layout = (type == NETMAP_USER_DEFINED) ? MAP_LAYOUT_MANUAL : MAP_LAYOUT_SPRING;
-       uuid_clear(m_background);
        m_iStatus = STATUS_NORMAL;
        m_backgroundLatitude = 0;
        m_backgroundLongitude = 0;
@@ -235,7 +233,7 @@ void NetworkMap::calculateCompoundStatus(BOOL bForcedRecalc)
  */
 BOOL NetworkMap::saveToDatabase(DB_HANDLE hdb)
 {
-       TCHAR query[1024], temp[64];
+       TCHAR query[1024];
 
        lockProperties();
 
@@ -258,7 +256,7 @@ BOOL NetworkMap::saveToDatabase(DB_HANDLE hdb)
        DBBind(hStmt, 2, DB_SQLTYPE_INTEGER, (LONG)m_layout);
        DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, m_seedObject);
        DBBind(hStmt, 4, DB_SQLTYPE_INTEGER, (LONG)m_discoveryRadius);
-       DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, uuid_to_string(m_background, temp), DB_BIND_STATIC);
+       DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, m_background);
        DBBind(hStmt, 6, DB_SQLTYPE_DOUBLE, m_backgroundLatitude);
        DBBind(hStmt, 7, DB_SQLTYPE_DOUBLE, m_backgroundLongitude);
        DBBind(hStmt, 8, DB_SQLTYPE_INTEGER, (LONG)m_backgroundZoom);
@@ -373,7 +371,7 @@ BOOL NetworkMap::loadFromDatabase(UINT32 dwId)
                m_layout = DBGetFieldLong(hResult, 0, 1);
                m_seedObject = DBGetFieldULong(hResult, 0, 2);
                m_discoveryRadius = DBGetFieldLong(hResult, 0, 3);
-               DBGetFieldGUID(hResult, 0, 4, m_background);
+               m_background = DBGetFieldGUID(hResult, 0, 4);
                m_backgroundLatitude = DBGetFieldDouble(hResult, 0, 5);
                m_backgroundLongitude = DBGetFieldDouble(hResult, 0, 6);
                m_backgroundZoom = (int)DBGetFieldLong(hResult, 0, 7);
@@ -481,7 +479,7 @@ void NetworkMap::fillMessageInternal(NXCPMessage *msg)
        msg->setField(VID_FLAGS, m_flags);
        msg->setField(VID_SEED_OBJECT, m_seedObject);
        msg->setField(VID_DISCOVERY_RADIUS, (UINT32)m_discoveryRadius);
-       msg->setField(VID_BACKGROUND, m_background, UUID_LENGTH);
+       msg->setField(VID_BACKGROUND, m_background);
        msg->setField(VID_BACKGROUND_LATITUDE, m_backgroundLatitude);
        msg->setField(VID_BACKGROUND_LONGITUDE, m_backgroundLongitude);
        msg->setField(VID_BACKGROUND_ZOOM, (WORD)m_backgroundZoom);
@@ -538,7 +536,7 @@ UINT32 NetworkMap::modifyFromMessageInternal(NXCPMessage *request)
 
        if (request->isFieldExist(VID_BACKGROUND))
        {
-               request->getFieldAsBinary(VID_BACKGROUND, m_background, UUID_LENGTH);
+               m_background = request->getFieldAsGUID(VID_BACKGROUND);
                m_backgroundLatitude = request->getFieldAsDouble(VID_BACKGROUND_LATITUDE);
                m_backgroundLongitude = request->getFieldAsDouble(VID_BACKGROUND_LONGITUDE);
                m_backgroundZoom = (int)request->getFieldAsUInt16(VID_BACKGROUND_ZOOM);
index 8dbc4ba..30380c2 100644 (file)
@@ -62,7 +62,6 @@ NetObj::NetObj()
       m_iStatusTranslation[i] = i + 1;
       m_iStatusThresholds[i] = 80 - i * 20;
    }
-       uuid_clear(m_image);
        m_submapId = 0;
    m_moduleData = NULL;
    m_postalAddress = new PostalAddress();
@@ -212,8 +211,8 @@ bool NetObj::loadCommonProperties()
                                        m_geoLocation = GeoLocation();
                                }
 
-                               DBGetFieldGUID(hResult, 0, 19, m_guid);
-                               DBGetFieldGUID(hResult, 0, 20, m_image);
+                               m_guid = DBGetFieldGUID(hResult, 0, 19);
+                               m_image = DBGetFieldGUID(hResult, 0, 20);
                                m_submapId = DBGetFieldULong(hResult, 0, 21);
 
             TCHAR country[64], city[64], streetAddress[256], postcode[32];
@@ -332,7 +331,7 @@ bool NetObj::saveCommonProperties(DB_HANDLE hdb)
        if (hStmt == NULL)
                return FALSE;
 
-   TCHAR szTranslation[16], szThresholds[16], lat[32], lon[32], guid[64], image[64];
+   TCHAR szTranslation[16], szThresholds[16], lat[32], lon[32];
    for(int i = 0, j = 0; i < 4; i++, j += 2)
    {
       _sntprintf(&szTranslation[j], 16 - j, _T("%02X"), (BYTE)m_iStatusTranslation[i]);
@@ -360,8 +359,8 @@ bool NetObj::saveCommonProperties(DB_HANDLE hdb)
        DBBind(hStmt, 17, DB_SQLTYPE_VARCHAR, lon, DB_BIND_STATIC);
        DBBind(hStmt, 18, DB_SQLTYPE_INTEGER, (LONG)m_geoLocation.getAccuracy());
        DBBind(hStmt, 19, DB_SQLTYPE_INTEGER, (UINT32)m_geoLocation.getTimestamp());
-       DBBind(hStmt, 20, DB_SQLTYPE_VARCHAR, uuid_to_string(m_guid, guid), DB_BIND_STATIC);
-       DBBind(hStmt, 21, DB_SQLTYPE_VARCHAR, uuid_to_string(m_image, image), DB_BIND_STATIC);
+       DBBind(hStmt, 20, DB_SQLTYPE_VARCHAR, m_guid);
+       DBBind(hStmt, 21, DB_SQLTYPE_VARCHAR, m_image);
        DBBind(hStmt, 22, DB_SQLTYPE_INTEGER, m_submapId);
        DBBind(hStmt, 23, DB_SQLTYPE_VARCHAR, m_postalAddress->getCountry(), DB_BIND_STATIC);
        DBBind(hStmt, 24, DB_SQLTYPE_VARCHAR, m_postalAddress->getCity(), DB_BIND_STATIC);
@@ -916,7 +915,7 @@ void NetObj::fillMessageInternal(NXCPMessage *pMsg)
 {
    pMsg->setField(VID_OBJECT_CLASS, (WORD)getObjectClass());
    pMsg->setField(VID_OBJECT_ID, m_id);
-       pMsg->setField(VID_GUID, m_guid, UUID_LENGTH);
+       pMsg->setField(VID_GUID, m_guid);
    pMsg->setField(VID_OBJECT_NAME, m_name);
    pMsg->setField(VID_OBJECT_STATUS, (WORD)m_iStatus);
    pMsg->setField(VID_IS_DELETED, (WORD)(m_isDeleted ? 1 : 0));
@@ -937,7 +936,7 @@ void NetObj::fillMessageInternal(NXCPMessage *pMsg)
    pMsg->setField(VID_STATUS_THRESHOLD_3, (WORD)m_iStatusThresholds[2]);
    pMsg->setField(VID_STATUS_THRESHOLD_4, (WORD)m_iStatusThresholds[3]);
    pMsg->setField(VID_COMMENTS, CHECK_NULL_EX(m_pszComments));
-       pMsg->setField(VID_IMAGE, m_image, UUID_LENGTH);
+       pMsg->setField(VID_IMAGE, m_image);
        pMsg->setField(VID_SUBMAP_ID, m_submapId);
        pMsg->setField(VID_NUM_TRUSTED_NODES, m_dwNumTrustedNodes);
        if (m_dwNumTrustedNodes > 0)
@@ -1069,7 +1068,7 @@ UINT32 NetObj::modifyFromMessageInternal(NXCPMessage *pRequest)
 
        // Change image
        if (pRequest->isFieldExist(VID_IMAGE))
-               pRequest->getFieldAsBinary(VID_IMAGE, m_image, UUID_LENGTH);
+               m_image = pRequest->getFieldAsGUID(VID_IMAGE);
 
    // Change object's ACL
    if (pRequest->isFieldExist(VID_ACL_SIZE))
index 5df19ed..b8cd0bf 100644 (file)
@@ -1683,8 +1683,7 @@ void Node::checkAgentPolicyBinding(AgentConnection *conn)
                // Check for unbound but installed policies
                for(int i = 0; i < ap->size(); i++)
                {
-                       uuid_t guid;
-                       ap->getGuid(i, guid);
+                       uuid guid = ap->getGuid(i);
                        NetObj *object = FindObjectByGUID(guid, -1);
                        if ((object != NULL) && (!object->isChild(m_id)))
                        {
@@ -1702,14 +1701,11 @@ void Node::checkAgentPolicyBinding(AgentConnection *conn)
                {
                        if (IsAgentPolicyObject(m_pParentList[i]))
                        {
-                               uuid_t guid1, guid2;
-                               int j;
-
-                               m_pParentList[i]->getGuid(guid1);
+                               const uuid& guid = m_pParentList[i]->getGuid();
+            int j;
                                for(j = 0; j < ap->size(); j++)
                                {
-                                       ap->getGuid(j, guid2);
-                                       if (!uuid_compare(guid1, guid2))
+                                       if (!ap->getGuid(j).compare(guid))
                                                break;
                                }
                                if (j == ap->size())
@@ -6869,7 +6865,7 @@ void Node::collectProxyInfo(ProxyInfo *info)
          info->msg->setField(info->fieldId++, dco->getName());
          info->msg->setField(info->fieldId++, (INT32)dco->getPollingInterval());
          info->msg->setFieldFromTime(info->fieldId++, dco->getLastPollTime());
-         info->msg->setField(info->fieldId++, m_guid, UUID_LENGTH);
+         info->msg->setField(info->fieldId++, m_guid);
          info->msg->setField(info->fieldId++, dco->getSnmpPort());
          if (dco->getType() == DCO_TYPE_ITEM)
             info->msg->setField(info->fieldId++, ((DCItem *)dco)->getSnmpRawValueType());
@@ -6885,7 +6881,7 @@ void Node::collectProxyInfo(ProxyInfo *info)
 
    if (isTarget)
    {
-      info->msg->setField(info->nodeInfoFieldId++, m_guid, UUID_LENGTH);
+      info->msg->setField(info->nodeInfoFieldId++, m_guid);
       info->msg->setField(info->nodeInfoFieldId++, m_ipAddress);
       info->msg->setField(info->nodeInfoFieldId++, m_snmpVersion);
       info->msg->setField(info->nodeInfoFieldId++, m_snmpPort);
index 6c62672..57d2ae3 100644 (file)
@@ -141,10 +141,8 @@ NXSL_Value *NXSL_NetObjClass::getAttr(NXSL_Object *pObject, const TCHAR *pszAttr
    }
    else if (!_tcscmp(pszAttr, _T("guid")))
    {
-               uuid_t guid;
-               object->getGuid(guid);
-               TCHAR buffer[128];
-               pValue = new NXSL_Value(uuid_to_string(guid, buffer));
+               TCHAR buffer[64];
+      pValue = new NXSL_Value(object->getGuid().toString(buffer));
    }
    else if (!_tcscmp(pszAttr, _T("status")))
    {
@@ -227,10 +225,8 @@ NXSL_Value *NXSL_ZoneClass::getAttr(NXSL_Object *pObject, const TCHAR *pszAttr)
    }
    else if (!_tcscmp(pszAttr, _T("guid")))
    {
-               uuid_t guid;
-               zone->getGuid(guid);
-               TCHAR buffer[128];
-               pValue = new NXSL_Value(uuid_to_string(guid, buffer));
+               TCHAR buffer[64];
+      pValue = new NXSL_Value(zone->getGuid().toString(buffer));
    }
    else if (!_tcscmp(pszAttr, _T("icmpProxy")))
    {
@@ -397,10 +393,8 @@ NXSL_Value *NXSL_NodeClass::getAttr(NXSL_Object *pObject, const TCHAR *pszAttr)
    }
    else if (!_tcscmp(pszAttr, _T("guid")))
    {
-               uuid_t guid;
-               pNode->getGuid(guid);
-               TCHAR buffer[128];
-               pValue = new NXSL_Value(uuid_to_string(guid, buffer));
+               TCHAR buffer[64];
+      pValue = new NXSL_Value(pNode->getGuid().toString(buffer));
    }
    else if (!_tcscmp(pszAttr, _T("id")))
    {
@@ -588,10 +582,8 @@ NXSL_Value *NXSL_InterfaceClass::getAttr(NXSL_Object *pObject, const TCHAR *pszA
    }
    else if (!_tcscmp(pszAttr, _T("guid")))
    {
-               uuid_t guid;
-               iface->getGuid(guid);
-               TCHAR buffer[128];
-               pValue = new NXSL_Value(uuid_to_string(guid, buffer));
+               TCHAR buffer[64];
+      pValue = new NXSL_Value(iface->getGuid().toString(buffer));
    }
    else if (!_tcscmp(pszAttr, _T("id")))
    {
index eeefa5d..afe7ac2 100644 (file)
@@ -935,17 +935,15 @@ NetObj NXCORE_EXPORTABLE *FindObjectByName(const TCHAR *name, int objClass)
  */
 static bool ObjectGuidComparator(NetObj *object, void *data)
 {
-       uuid_t temp;
-       object->getGuid(temp);
-       return !object->isDeleted() && !uuid_compare((BYTE *)data, temp);
+   return !object->isDeleted() && !object->getGuid().compare(*((const uuid *)data));
 }
 
 /**
  * Find object by GUID
  */
-NetObj NXCORE_EXPORTABLE *FindObjectByGUID(uuid_t guid, int objClass)
+NetObj NXCORE_EXPORTABLE *FindObjectByGUID(const uuid& guid, int objClass)
 {
-       NetObj *object = g_idxObjectById.find(ObjectGuidComparator, guid);
+       NetObj *object = g_idxObjectById.find(ObjectGuidComparator, (void *)&guid);
        return (object != NULL) ? (((objClass == -1) || (objClass == object->getObjectClass())) ? object : NULL) : NULL;
 }
 
index 72c4b0e..fc6fe83 100644 (file)
@@ -12275,7 +12275,6 @@ void ClientSession::listLibraryImages(NXCPMessage *request)
        TCHAR category[MAX_DB_STRING];
        TCHAR query[MAX_DB_STRING * 2];
        TCHAR buffer[MAX_DB_STRING];
-       uuid_t guid;
        UINT32 rcc = RCC_SUCCESS;
 
        msg.setId(request->getId());
@@ -12307,8 +12306,8 @@ void ClientSession::listLibraryImages(NXCPMessage *request)
                UINT32 varId = VID_IMAGE_LIST_BASE;
                for (int i = 0; i < count; i++)
                {
-                       DBGetFieldGUID(result, i, 0, guid);     // guid
-                       msg.setField(varId++, guid, UUID_LENGTH);
+                       uuid guid = DBGetFieldGUID(result, i, 0);       // guid
+                       msg.setField(varId++, guid);
 
                        DBGetField(result, i, 1, buffer, MAX_DB_STRING);        // image name
                        msg.setField(varId++, buffer);
@@ -13178,9 +13177,8 @@ void ClientSession::getSummaryTables(UINT32 rqId)
          msg.setField(varId++, DBGetField(hResult, i, 2, buffer, 256));
          msg.setField(varId++, (UINT32)DBGetFieldLong(hResult, i, 3));
 
-         uuid_t guid;
-         DBGetFieldGUID(hResult, i, 4, guid);
-         msg.setField(varId++, guid, UUID_LENGTH);
+         uuid guid = DBGetFieldGUID(hResult, i, 4);
+         msg.setField(varId++, guid);
 
          varId += 5;
       }
@@ -13237,9 +13235,8 @@ void ClientSession::getSummaryTableDetails(NXCPMessage *request)
                   msg.setField(VID_COLUMNS, tmp);
                   free(tmp);
                }
-               uuid_t guid;
-               DBGetFieldGUID(hResult, 0, 5, guid);
-               msg.setField(VID_GUID, guid, UUID_LENGTH);
+               uuid guid = DBGetFieldGUID(hResult, 0, 5);
+               msg.setField(VID_GUID, guid);
             }
             else
             {
index 6b0661e..73c8b26 100644 (file)
@@ -1031,7 +1031,7 @@ void Template::createNXMPRecord(String &str)
 {
    TCHAR guid[48];
    str.appendFormattedString(_T("\t\t<template id=\"%d\">\n\t\t\t<guid>%s</guid>\n\t\t\t<name>%s</name>\n\t\t\t<flags>%d</flags>\n"),
-                              m_id, uuid_to_string(m_guid, guid), (const TCHAR *)EscapeStringForXML2(m_name), m_flags);
+                             m_id, m_guid.toString(guid), (const TCHAR *)EscapeStringForXML2(m_name), m_flags);
 
    // Path in groups
    StringList path;
index 9c662a2..335ce59 100644 (file)
@@ -1,6 +1,6 @@
 /* 
 ** NetXMS - Network Management System
-** Copyright (C) 2003-2013 Victor Kirhenshtein
+** Copyright (C) 2003-2015 Victor Kirhenshtein
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
 /**
  * Constructor
  */
-UniversalRoot::UniversalRoot()
-              :NetObj()
+UniversalRoot::UniversalRoot() : NetObj()
 {
-       uuid_generate(m_guid);
+   m_guid = uuid::generate();
 }
 
 /**
index bdf29df..b261b4c 100644 (file)
@@ -73,7 +73,7 @@ UserDatabaseObject::UserDatabaseObject(DB_RESULT hResult, int row)
        m_systemRights = DBGetFieldUInt64(hResult, row, 2);
        m_flags = DBGetFieldULong(hResult, row, 3);
        DBGetField(hResult, row, 4, m_description, MAX_USER_DESCR);
-       DBGetFieldGUID(hResult, row, 5, m_guid);
+       m_guid = DBGetFieldGUID(hResult, row, 5);
        m_userDn = DBGetField(hResult, row, 6, NULL, 0);
 }
 
@@ -82,7 +82,13 @@ UserDatabaseObject::UserDatabaseObject(DB_RESULT hResult, int row)
  */
 UserDatabaseObject::UserDatabaseObject()
 {
+   m_id = 0;
+   m_guid = uuid::generate();
+   m_name[0] = 0;
    m_userDn = NULL;
+       m_systemRights = 0;
+       m_description[0] = 0;
+       m_flags = 0;
 }
 
 /**
@@ -91,7 +97,7 @@ UserDatabaseObject::UserDatabaseObject()
 UserDatabaseObject::UserDatabaseObject(UINT32 id, const TCHAR *name)
 {
        m_id = id;
-       uuid_generate(m_guid);
+   m_guid = uuid::generate();
        nx_strncpy(m_name, name, MAX_USER_NAME);
        m_systemRights = 0;
        m_description[0] = 0;
@@ -133,7 +139,7 @@ void UserDatabaseObject::fillMessage(NXCPMessage *msg)
    msg->setField(VID_USER_FLAGS, (WORD)m_flags);
    msg->setField(VID_USER_SYS_RIGHTS, m_systemRights);
    msg->setField(VID_USER_DESCRIPTION, m_description);
-   msg->setField(VID_GUID, m_guid, UUID_LENGTH);
+   msg->setField(VID_GUID, m_guid);
    m_attributes.fillMessage(msg, VID_NUM_CUSTOM_ATTRIBUTES, VID_CUSTOM_ATTRIBUTES_BASE);
 }
 
@@ -395,7 +401,7 @@ User::User(DB_RESULT hResult, int row) : UserDatabaseObject(hResult, row)
 /**
  * Constructor for user object - create default superuser
  */
-User::User()
+User::User() : UserDatabaseObject()
 {
        m_id = 0;
        _tcscpy(m_name, _T("admin"));
@@ -406,7 +412,6 @@ User::User()
        CalculatePasswordHash(_T("netxms"), PWD_HASH_SHA256, &m_password);
        m_graceLogins = MAX_GRACE_LOGINS;
        m_authMethod = AUTH_NETXMS_PASSWORD;
-       uuid_generate(m_guid);
        m_certMappingMethod = USER_MAP_CERT_BY_CN;
        m_certMappingData = NULL;
        m_authFailures = 0;
@@ -450,7 +455,7 @@ User::~User()
  */
 bool User::saveToDatabase(DB_HANDLE hdb)
 {
-       TCHAR password[128], guidText[64];
+       TCHAR password[128];
 
    // Clear modification flag
    m_flags &= ~UF_MODIFIED;
@@ -495,7 +500,7 @@ bool User::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, m_fullName, DB_BIND_STATIC);
    DBBind(hStmt, 6, DB_SQLTYPE_VARCHAR, m_description, DB_BIND_STATIC);
    DBBind(hStmt, 7, DB_SQLTYPE_INTEGER, m_graceLogins);
-   DBBind(hStmt, 8, DB_SQLTYPE_VARCHAR, uuid_to_string(m_guid, guidText), DB_BIND_STATIC);
+   DBBind(hStmt, 8, DB_SQLTYPE_VARCHAR, m_guid);
    DBBind(hStmt, 9, DB_SQLTYPE_INTEGER, m_authMethod);
    DBBind(hStmt, 10, DB_SQLTYPE_INTEGER, m_certMappingMethod);
    DBBind(hStmt, 11, DB_SQLTYPE_VARCHAR, m_certMappingData, DB_BIND_STATIC);
@@ -736,7 +741,6 @@ Group::Group() : UserDatabaseObject()
        m_flags = UF_MODIFIED;
        m_systemRights = 0;
        _tcscpy(m_description, _T("Built-in everyone group"));
-       uuid_generate(m_guid);
        m_memberCount = 0;
        m_members = NULL;
 }
@@ -763,8 +767,6 @@ Group::~Group()
  */
 bool Group::saveToDatabase(DB_HANDLE hdb)
 {
-       TCHAR guidText[64];
-
    // Clear modification flag
    m_flags &= ~UF_MODIFIED;
 
@@ -784,7 +786,7 @@ bool Group::saveToDatabase(DB_HANDLE hdb)
    DBBind(hStmt, 2, DB_SQLTYPE_BIGINT, m_systemRights);
    DBBind(hStmt, 3, DB_SQLTYPE_INTEGER, m_flags);
    DBBind(hStmt, 4, DB_SQLTYPE_VARCHAR, m_description, DB_BIND_STATIC);
-   DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, uuid_to_string(m_guid, guidText), DB_BIND_STATIC);
+   DBBind(hStmt, 5, DB_SQLTYPE_VARCHAR, m_guid);
    DBBind(hStmt, 6, DB_SQLTYPE_TEXT, m_userDn, DB_BIND_STATIC);
    DBBind(hStmt, 7, DB_SQLTYPE_INTEGER, m_id);
 
index 10160f1..961299f 100644 (file)
@@ -120,7 +120,7 @@ class EPRule
 {
 private:
    UINT32 m_id;
-   uuid_t m_guid;
+   uuid m_guid;
    UINT32 m_dwFlags;
    UINT32 m_dwNumSources;
    UINT32 *m_pdwSourceList;
@@ -156,8 +156,8 @@ public:
    EPRule(ConfigEntry *config);
    ~EPRule();
 
-   UINT32 getId() { return m_id; }
-   BYTE *getGuid() { return m_guid; }
+   UINT32 getId() const { return m_id; }
+   const uuid& getGuid() const { return m_guid; }
    void setId(UINT32 dwNewId) { m_id = dwNewId; }
    bool loadFromDB();
        void saveToDB(DB_HANDLE hdb);
@@ -193,7 +193,7 @@ public:
    void processEvent(Event *pEvent);
    void sendToClient(ClientSession *pSession, UINT32 dwRqId);
    void replacePolicy(UINT32 dwNumRules, EPRule **ppRuleList);
-   void exportRule(String &str, uuid_t guid);
+   void exportRule(String& str, const uuid& guid);
    void importRule(EPRule *rule);
 
    bool isActionInUse(UINT32 dwActionId);
index 72133c7..aabcc2f 100644 (file)
@@ -363,7 +363,7 @@ class NXCORE_EXPORTABLE SummaryTable
 {
 private:
    INT32 m_id;
-   uuid_t m_guid;
+   uuid m_guid;
    TCHAR m_title[MAX_DB_STRING];
    UINT32 m_flags;
    ObjectArray<SummaryTableColumn> *m_columns;
@@ -407,7 +407,7 @@ private:
 
 protected:
    UINT32 m_id;
-       uuid_t m_guid;
+       uuid m_guid;
    UINT32 m_dwTimeStamp;       // Last change time stamp
    UINT32 m_dwRefCount;        // Number of references. Object can be destroyed only when this counter is zero
    TCHAR m_name[MAX_OBJECT_NAME];
@@ -424,7 +424,7 @@ protected:
    bool m_isDeleted;
    bool m_isHidden;
        bool m_isSystem;
-       uuid_t m_image;
+       uuid m_image;
    MUTEX m_mutexProperties;         // Object data access mutex
    MUTEX m_mutexRefCount;     // Reference counter access mutex
    RWLOCK m_rwlockParentList; // Lock for parent list
@@ -496,14 +496,14 @@ public:
    NetObj();
    virtual ~NetObj();
 
-   virtual int getObjectClass() { return OBJECT_GENERIC; }
+   virtual int getObjectClass() const { return OBJECT_GENERIC; }
 
-   UINT32 getId() { return m_id; }
-   const TCHAR *getName() { return m_name; }
-   int Status() { return m_iStatus; }
+   UINT32 getId() const { return m_id; }
+   const TCHAR *getName() const { return m_name; }
+   int Status() const { return m_iStatus; }
    int getPropagatedStatus();
-   UINT32 getTimeStamp() { return m_dwTimeStamp; }
-       void getGuid(uuid_t out) { memcpy(out, m_guid, UUID_LENGTH); }
+   UINT32 getTimeStamp() const { return m_dwTimeStamp; }
+       const uuid& getGuid() const { return m_guid; }
        const TCHAR *getComments() { return CHECK_NULL_EX(m_pszComments); }
    PostalAddress *getPostalAddress() { return m_postalAddress; }
    void setPostalAddress(PostalAddress * addr) { delete m_postalAddress; m_postalAddress = addr; markAsModified();}
@@ -541,7 +541,7 @@ public:
    virtual BOOL loadFromDatabase(UINT32 dwId);
 
    void setId(UINT32 dwId) { m_id = dwId; setModified(); }
-       void generateGuid() { uuid_generate(m_guid); }
+   void generateGuid() { m_guid = uuid::generate(); }
    void setName(const TCHAR *pszName) { nx_strncpy(m_name, pszName, MAX_OBJECT_NAME); setModified(); }
    void resetStatus() { m_iStatus = STATUS_UNKNOWN; setModified(); }
    void setComments(TCHAR *text);      /* text must be dynamically allocated */
@@ -669,7 +669,7 @@ public:
        Template(ConfigEntry *config);
    virtual ~Template();
 
-   virtual int getObjectClass() { return OBJECT_TEMPLATE; }
+   virtual int getObjectClass() const { return OBJECT_TEMPLATE; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -765,7 +765,7 @@ public:
    Interface(const TCHAR *name, const TCHAR *descr, UINT32 index, const InetAddressList& addrList, UINT32 ifType, UINT32 zoneId);
    virtual ~Interface();
 
-   virtual int getObjectClass() { return OBJECT_INTERFACE; }
+   virtual int getObjectClass() const { return OBJECT_INTERFACE; }
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual BOOL loadFromDatabase(UINT32 dwId);
@@ -864,7 +864,7 @@ public:
                   Node *pHostNode = NULL, UINT32 dwPollerNode = 0);
    virtual ~NetworkService();
 
-   virtual int getObjectClass() { return OBJECT_NETWORKSERVICE; }
+   virtual int getObjectClass() const { return OBJECT_NETWORKSERVICE; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -895,7 +895,7 @@ public:
    VPNConnector(bool hidden);
    virtual ~VPNConnector();
 
-   virtual int getObjectClass() { return OBJECT_VPNCONNECTOR; }
+   virtual int getObjectClass() const { return OBJECT_VPNCONNECTOR; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -903,7 +903,7 @@ public:
 
    bool isLocalAddr(const InetAddress& addr);
    bool isRemoteAddr(const InetAddress& addr);
-   UINT32 getPeerGatewayId() { return m_dwPeerGateway; }
+   UINT32 getPeerGatewayId() const { return m_dwPeerGateway; }
    InetAddress getPeerGatewayAddr();
 };
 
@@ -983,7 +983,7 @@ public:
    MobileDevice(const TCHAR *name, const TCHAR *deviceId);
    virtual ~MobileDevice();
 
-   virtual int getObjectClass() { return OBJECT_MOBILEDEVICE; }
+   virtual int getObjectClass() const { return OBJECT_MOBILEDEVICE; }
 
    virtual BOOL loadFromDatabase(UINT32 dwId);
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -1026,7 +1026,7 @@ public:
    AccessPoint(const TCHAR *name, UINT32 index, const BYTE *macAddr);
    virtual ~AccessPoint();
 
-   virtual int getObjectClass() { return OBJECT_ACCESSPOINT; }
+   virtual int getObjectClass() const { return OBJECT_ACCESSPOINT; }
 
    virtual BOOL loadFromDatabase(UINT32 dwId);
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -1072,7 +1072,7 @@ public:
    Cluster(const TCHAR *pszName, UINT32 zoneId);
        virtual ~Cluster();
 
-   virtual int getObjectClass() { return OBJECT_CLUSTER; }
+   virtual int getObjectClass() const { return OBJECT_CLUSTER; }
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
    virtual BOOL loadFromDatabase(UINT32 dwId);
@@ -1251,7 +1251,7 @@ public:
    Node(const InetAddress& addr, UINT32 dwFlags, UINT32 agentProxy, UINT32 snmpProxy, UINT32 dwZone);
    virtual ~Node();
 
-   virtual int getObjectClass() { return OBJECT_NODE; }
+   virtual int getObjectClass() const { return OBJECT_NODE; }
        UINT32 getIcmpProxy() { return m_icmpProxy; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -1594,7 +1594,7 @@ public:
    Subnet(const InetAddress& addr, UINT32 dwZone, bool bSyntheticMask);
    virtual ~Subnet();
 
-   virtual int getObjectClass() { return OBJECT_SUBNET; }
+   virtual int getObjectClass() const { return OBJECT_SUBNET; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1640,7 +1640,7 @@ public:
    ServiceRoot();
    virtual ~ServiceRoot();
 
-   virtual int getObjectClass() { return OBJECT_SERVICEROOT; }
+   virtual int getObjectClass() const { return OBJECT_SERVICEROOT; }
 
        virtual bool showThresholdSummary();
 };
@@ -1654,7 +1654,7 @@ public:
    TemplateRoot();
    virtual ~TemplateRoot();
 
-   virtual int getObjectClass() { return OBJECT_TEMPLATEROOT; }
+   virtual int getObjectClass() const { return OBJECT_TEMPLATEROOT; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 };
 
@@ -1681,7 +1681,7 @@ public:
    Container(const TCHAR *pszName, UINT32 dwCategory);
    virtual ~Container();
 
-   virtual int getObjectClass() { return OBJECT_CONTAINER; }
+   virtual int getObjectClass() const { return OBJECT_CONTAINER; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1713,7 +1713,7 @@ public:
    TemplateGroup(const TCHAR *pszName) : Container(pszName, 0) { m_iStatus = STATUS_NORMAL; }
    virtual ~TemplateGroup() { }
 
-   virtual int getObjectClass() { return OBJECT_TEMPLATEGROUP; }
+   virtual int getObjectClass() const { return OBJECT_TEMPLATEGROUP; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
        virtual bool showThresholdSummary();
@@ -1735,7 +1735,7 @@ public:
    Rack(const TCHAR *name, int height);
    virtual ~Rack();
 
-   virtual int getObjectClass() { return OBJECT_RACK; }
+   virtual int getObjectClass() const { return OBJECT_RACK; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1764,7 +1764,7 @@ public:
    Zone(UINT32 zoneId, const TCHAR *name);
    virtual ~Zone();
 
-   virtual int getObjectClass() { return OBJECT_ZONE; }
+   virtual int getObjectClass() const { return OBJECT_ZONE; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1806,7 +1806,7 @@ public:
    Network();
    virtual ~Network();
 
-   virtual int getObjectClass() { return OBJECT_NETWORK; }
+   virtual int getObjectClass() const { return OBJECT_NETWORK; }
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
 
        virtual bool showThresholdSummary();
@@ -1843,7 +1843,7 @@ public:
    Condition(bool hidden);
    virtual ~Condition();
 
-   virtual int getObjectClass() { return OBJECT_CONDITION; }
+   virtual int getObjectClass() const { return OBJECT_CONDITION; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1881,7 +1881,7 @@ public:
    AgentPolicy(int type);
    AgentPolicy(const TCHAR *name, int type);
 
-   virtual int getObjectClass() { return OBJECT_AGENTPOLICY; }
+   virtual int getObjectClass() const { return OBJECT_AGENTPOLICY; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1910,7 +1910,7 @@ public:
    AgentPolicyConfig(const TCHAR *name);
    virtual ~AgentPolicyConfig();
 
-   virtual int getObjectClass() { return OBJECT_AGENTPOLICY_CONFIG; }
+   virtual int getObjectClass() const { return OBJECT_AGENTPOLICY_CONFIG; }
 
    virtual BOOL saveToDatabase(DB_HANDLE hdb);
    virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -1930,7 +1930,7 @@ public:
    PolicyGroup(const TCHAR *pszName) : Container(pszName, 0) { }
    virtual ~PolicyGroup() { }
 
-   virtual int getObjectClass() { return OBJECT_POLICYGROUP; }
+   virtual int getObjectClass() const { return OBJECT_POLICYGROUP; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
        virtual bool showThresholdSummary();
@@ -1945,7 +1945,7 @@ public:
    PolicyRoot();
    virtual ~PolicyRoot();
 
-   virtual int getObjectClass() { return OBJECT_POLICYROOT; }
+   virtual int getObjectClass() const { return OBJECT_POLICYROOT; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 };
 
@@ -1958,7 +1958,7 @@ public:
    NetworkMapRoot();
    virtual ~NetworkMapRoot();
 
-   virtual int getObjectClass() { return OBJECT_NETWORKMAPROOT; }
+   virtual int getObjectClass() const { return OBJECT_NETWORKMAPROOT; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 };
 
@@ -1972,7 +1972,7 @@ public:
    NetworkMapGroup(const TCHAR *pszName) : Container(pszName, 0) { }
    virtual ~NetworkMapGroup() { }
 
-   virtual int getObjectClass() { return OBJECT_NETWORKMAPGROUP; }
+   virtual int getObjectClass() const { return OBJECT_NETWORKMAPGROUP; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
        virtual bool showThresholdSummary();
@@ -1992,7 +1992,7 @@ protected:
        int m_backgroundColor;
        int m_defaultLinkColor;
        int m_defaultLinkRouting;
-       uuid_t m_background;
+       uuid m_background;
        double m_backgroundLatitude;
        double m_backgroundLongitude;
        int m_backgroundZoom;
@@ -2016,7 +2016,7 @@ public:
        NetworkMap(int type, UINT32 seed);
    virtual ~NetworkMap();
 
-   virtual int getObjectClass() { return OBJECT_NETWORKMAP; }
+   virtual int getObjectClass() const { return OBJECT_NETWORKMAP; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -2042,7 +2042,7 @@ public:
    DashboardRoot();
    virtual ~DashboardRoot();
 
-   virtual int getObjectClass() { return OBJECT_DASHBOARDROOT; }
+   virtual int getObjectClass() const { return OBJECT_DASHBOARDROOT; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 };
 
@@ -2078,7 +2078,7 @@ public:
    Dashboard(const TCHAR *name);
    virtual ~Dashboard();
 
-   virtual int getObjectClass() { return OBJECT_DASHBOARD; }
+   virtual int getObjectClass() const { return OBJECT_DASHBOARD; }
    virtual void calculateCompoundStatus(BOOL bForcedRecalc = FALSE);
 
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -2126,7 +2126,7 @@ public:
 
        static void init();
 
-       virtual int getObjectClass() { return OBJECT_SLMCHECK; }
+       virtual int getObjectClass() const { return OBJECT_SLMCHECK; }
 
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -2200,7 +2200,7 @@ public:
        BusinessServiceRoot();
        virtual ~BusinessServiceRoot();
 
-       virtual int getObjectClass() { return OBJECT_BUSINESSSERVICEROOT; }
+       virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICEROOT; }
 
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
    void LoadFromDB();
@@ -2230,7 +2230,7 @@ public:
        BusinessService(const TCHAR *name);
        virtual ~BusinessService();
 
-       virtual int getObjectClass() { return OBJECT_BUSINESSSERVICE; }
+       virtual int getObjectClass() const { return OBJECT_BUSINESSSERVICE; }
 
        virtual BOOL loadFromDatabase(UINT32 dwId);
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
@@ -2264,7 +2264,7 @@ public:
        NodeLink(const TCHAR *name, UINT32 nodeId);
        virtual ~NodeLink();
 
-       virtual int getObjectClass() { return OBJECT_NODELINK; }
+       virtual int getObjectClass() const { return OBJECT_NODELINK; }
 
        virtual BOOL saveToDatabase(DB_HANDLE hdb);
        virtual bool deleteFromDatabase(DB_HANDLE hdb);
@@ -2324,7 +2324,7 @@ NetObj NXCORE_EXPORTABLE *MacDbFind(const BYTE *macAddr);
 
 NetObj NXCORE_EXPORTABLE *FindObjectById(UINT32 dwId, int objClass = -1);
 NetObj NXCORE_EXPORTABLE *FindObjectByName(const TCHAR *name, int objClass);
-NetObj NXCORE_EXPORTABLE *FindObjectByGUID(uuid_t guid, int objClass);
+NetObj NXCORE_EXPORTABLE *FindObjectByGUID(const uuid& guid, int objClass);
 const TCHAR NXCORE_EXPORTABLE *GetObjectName(DWORD id, const TCHAR *defaultName);
 Template NXCORE_EXPORTABLE *FindTemplateByName(const TCHAR *pszName);
 Node NXCORE_EXPORTABLE *FindNodeByIP(UINT32 zoneId, const InetAddress& ipAddr);
index df26dbd..1fbbc42 100644 (file)
@@ -151,7 +151,7 @@ class NXCORE_EXPORTABLE UserDatabaseObject
 {
 protected:
        UINT32 m_id;
-   uuid_t m_guid;
+   uuid m_guid;
        TCHAR m_name[MAX_USER_NAME];
        TCHAR m_description[MAX_USER_DESCR];
        UINT64 m_systemRights;
@@ -179,7 +179,7 @@ public:
        const TCHAR *getDescription() { return m_description; }
        UINT64 getSystemRights() { return m_systemRights; }
        UINT32 getFlags() { return m_flags; }
-       TCHAR *getGuidAsText(TCHAR *buffer) { return uuid_to_string(m_guid, buffer); }
+   TCHAR *getGuidAsText(TCHAR *buffer) { return m_guid.toString(buffer); }
    const TCHAR *getDn() { return m_userDn; }
 
        bool isDeleted() { return (m_flags & UF_DELETED) ? true : false; }
index b6696f8..2c9b88b 100644 (file)
@@ -367,7 +367,7 @@ public:
        ~AgentPolicyInfo();
 
        int size() { return m_size; }
-       bool getGuid(int index, uuid_t guid);
+       uuid getGuid(int index);
        int getType(int index) { return ((index >= 0) && (index < m_size)) ? m_typeList[index] : -1; }
        const TCHAR *getServer(int index) { return ((index >= 0) && (index < m_size)) ? m_serverList[index] : NULL; }
 };
index 9de6911..cab7d94 100644 (file)
 
 #include "libnxsrv.h"
 
-
-//
-// Constructor
-//
-
+/**
+ * Constructor
+ */
 AgentPolicyInfo::AgentPolicyInfo(NXCPMessage *msg)
 {
        m_size = msg->getFieldAsUInt32(VID_NUM_ELEMENTS);
@@ -52,11 +50,9 @@ AgentPolicyInfo::AgentPolicyInfo(NXCPMessage *msg)
        }
 }
 
-
-//
-// Destructor
-//
-
+/**
+ * Destructor
+ */
 AgentPolicyInfo::~AgentPolicyInfo()
 {
        for(int i = 0; i < m_size; i++)
@@ -66,20 +62,17 @@ AgentPolicyInfo::~AgentPolicyInfo()
        safe_free(m_guidList);
 }
 
-
-//
-// Get GUID
-//
-
-bool AgentPolicyInfo::getGuid(int index, uuid_t guid)
+/**
+ * Get GUID
+ */
+uuid AgentPolicyInfo::getGuid(int index)
 {
        if ((index >= 0) && (index < m_size))
        {
-               memcpy(guid, &m_guidList[index * UUID_LENGTH], UUID_LENGTH);
-               return true;
+               return uuid(&m_guidList[index * UUID_LENGTH]);
        }
        else
        {
-               return false;
+      return uuid::NULL_UUID;
        }
 }
index 8bf4ffe..61991f4 100644 (file)
 #include <netdb.h>
 #endif
 
-
-//
-// Get policy list
-//
-
+/**
+ * Get policy list
+ */
 static int GetPolicyInventory(AgentConnection &conn)
 {
        AgentPolicyInfo *ap;
        UINT32 rcc = conn.getPolicyInventory(&ap);
        if (rcc == ERR_SUCCESS)
        {
-               TCHAR buffer[64];
-               uuid_t guid;
-
                _tprintf(_T("GUID                                 Type Server\n")
                         _T("----------------------------------------------------------\n"));
                for(int i = 0; i < ap->size(); i++)
                {
-                       ap->getGuid(i, guid);
-                       _tprintf(_T("%-16s %-4d %s\n"), uuid_to_string(guid, buffer), ap->getType(i), ap->getServer(i));
+                  TCHAR buffer[64];
+                       _tprintf(_T("%-16s %-4d %s\n"), ap->getGuid(i).toString(buffer), ap->getType(i), ap->getServer(i));
                }
                delete ap;
        }
index 7a0db2d..2ec9d42 100644 (file)
@@ -36,3 +36,29 @@ void TestMsgWaitQueue()
 
    EndTest();
 }
+
+/**
+ * Test message class
+ */
+void TestMessageClass()
+{
+   StartTest(_T("NXCPMessage class"));
+
+   NXCPMessage msg;
+
+   uuid guid = uuid::generate();
+   msg.setField(1, guid);
+   uuid guid2 = msg.getFieldAsGUID(1);
+   AssertTrue(guid.compare(guid2) == 0);
+
+   msg.setField(1, (UINT16)1234);
+   AssertTrue(msg.getFieldAsUInt16(1) == 1234);
+
+   msg.setField(1, (UINT32)1234);
+   AssertTrue(msg.getFieldAsUInt32(1) == 1234);
+
+   msg.setField(1, (UINT64)1234);
+   AssertTrue(msg.getFieldAsUInt64(1) == 1234);
+
+   EndTest();
+}
index b88ff0e..fb39d39 100644 (file)
@@ -4,6 +4,7 @@
 #include <testtools.h>
 
 void TestMsgWaitQueue();
+void TestMessageClass();
 
 static char mbText[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
 static WCHAR wcText[] = L"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
@@ -395,6 +396,7 @@ int main(int argc, char *argv[])
    TestStringConversion();
    TestStringMap();
    TestStringSet();
+   TestMessageClass();
    TestMsgWaitQueue();
    TestInetAddress();
    TestItoa();