CRC32-related changes
authorAlex Kirhenshtein <alk@netxms.org>
Mon, 24 Jan 2005 19:42:19 +0000 (19:42 +0000)
committerAlex Kirhenshtein <alk@netxms.org>
Mon, 24 Jan 2005 19:42:19 +0000 (19:42 +0000)
File.Hash.CRC32(*) implemented in unix agent

include/nms_util.h
src/agent/core/nxagentd.cpp
src/agent/core/sysinfo.cpp

index 6db8298..643e2f0 100644 (file)
@@ -199,11 +199,12 @@ extern "C"
    void LIBNETXMS_EXPORTABLE TranslateStr(TCHAR *pszString, TCHAR *pszSubStr, TCHAR *pszReplace);
    TCHAR LIBNETXMS_EXPORTABLE *GetCleanFileName(TCHAR *pszFileName);
    
-   DWORD LIBNETXMS_EXPORTABLE CalculateCRC32(const unsigned char *data, DWORD nbytes);
+   DWORD LIBNETXMS_EXPORTABLE CalculateCRC32(const unsigned char *pData, DWORD dwSize, DWORD dwCRC);
    void LIBNETXMS_EXPORTABLE CalculateMD5Hash(const unsigned char *data, int nbytes, unsigned char *hash);
    void LIBNETXMS_EXPORTABLE CalculateSHA1Hash(unsigned char *data, int nbytes, unsigned char *hash);
    BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(TCHAR *pszFileName, BYTE *pHash);
    BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(TCHAR *pszFileName, BYTE *pHash);
+   BOOL LIBNETXMS_EXPORTABLE CalculateFileCRC32(TCHAR *pszFileName, DWORD *pResult);
 
    DWORD LIBNETXMS_EXPORTABLE IcmpPing(DWORD dwAddr, int iNumRetries, DWORD dwTimeout, DWORD *pdwRTT);
 
index a466209..f87eeb1 100644 (file)
@@ -259,6 +259,7 @@ void OnSignal(int iSignal)
                        ConditionSet(m_hCondShutdown);
                        break;
                case SIGSEGV:
+                       abort();
                        exit(5);
                        break;
                default:
index bbdb843..0292213 100644 (file)
@@ -158,7 +158,7 @@ LONG H_SHA1Hash(char *cmd, char *arg, char *value)
    if (!CalculateFileSHA1Hash(szFileName, hash))
       return SYSINFO_RC_UNSUPPORTED;
 
-   // Convert MD5 hash to text form
+   // Convert SHA1 hash to text form
    for(i = 0; i < SHA1_DIGEST_SIZE; i++)
       sprintf(&szHashText[i << 1], "%02x", hash[i]);
 
@@ -173,7 +173,20 @@ LONG H_SHA1Hash(char *cmd, char *arg, char *value)
 
 LONG H_CRC32(char *cmd, char *arg, char *value)
 {
-   return SYSINFO_RC_UNSUPPORTED;
+   char szFileName[MAX_PATH], szHashText[sizeof(DWORD) * 2 + 1];
+   DWORD dwCRC32;
+   DWORD i;
+
+   if (!NxGetParameterArg(cmd, 1, szFileName, MAX_PATH))
+      return SYSINFO_RC_UNSUPPORTED;
+
+   if (!CalculateFileCRC32(szFileName, &dwCRC32))
+      return SYSINFO_RC_UNSUPPORTED;
+
+       sprintf(szHashText, "%08x", dwCRC32);
+
+   ret_string(value, szHashText);
+   return SYSINFO_RC_SUCCESS;
 }