- DLxxx functions moved to libnetxms
authorVictor Kirhenshtein <victor@netxms.org>
Wed, 4 Aug 2004 08:39:40 +0000 (08:39 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Wed, 4 Aug 2004 08:39:40 +0000 (08:39 +0000)
- GetSystemErrorText function moved to libnetxms
- Added function CalculateFileSHA1Hash

.gitattributes
include/nms_util.h
src/libnetxms/dload.cpp [new file with mode: 0644]
src/libnetxms/hash.cpp
src/libnetxms/libnetxms.dsp
src/libnetxms/tools.cpp

index 5347617..57838c7 100644 (file)
@@ -202,6 +202,7 @@ src/console/win32starter/nxcstart.rc -text
 src/console/win32starter/resource.h -text
 src/libnetxms/Makefile.am -text
 src/libnetxms/config.cpp -text
+src/libnetxms/dload.cpp -text
 src/libnetxms/getopt.c -text
 src/libnetxms/hash.cpp -text
 src/libnetxms/icmp.cpp -text
index 4fce25c..d5c3bcc 100644 (file)
@@ -153,10 +153,19 @@ extern "C"
    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(char *pszFileName, BYTE *pHash);
+   BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(char *pszFileName, BYTE *pHash);
 
    DWORD LIBNETXMS_EXPORTABLE IcmpPing(DWORD dwAddr, int iNumRetries, DWORD dwTimeout, DWORD *pdwRTT);
 
    DWORD LIBNETXMS_EXPORTABLE NxLoadConfig(char *pszFileName, NX_CFG_TEMPLATE *pTemplateList, BOOL bPrint);
+
+   HMODULE LIBNETXMS_EXPORTABLE DLOpen(char *szLibName, char *pszErrorText);
+   void LIBNETXMS_EXPORTABLE DLClose(HMODULE hModule);
+   void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, char *szSymbol, char *pszErrorText);
+
+#ifdef _WIN32
+   char LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, char *pszBuffer, int iBufSize);
+#endif
 }
 
 #endif   /* _nms_util_h_ */
diff --git a/src/libnetxms/dload.cpp b/src/libnetxms/dload.cpp
new file mode 100644 (file)
index 0000000..b92ec1d
--- /dev/null
@@ -0,0 +1,80 @@
+/* 
+** NetXMS - Network Management System
+** Utility Library
+** Copyright (C) 2003, 2004 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
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** $module: dload.cpp
+**
+**/
+
+#include "libnetxms.h"
+
+
+//
+// Load DLL/shared library
+//
+
+HMODULE LIBNETXMS_EXPORTABLE DLOpen(char *szLibName, char *pszErrorText)
+{
+   HMODULE hModule;
+
+#ifdef _WIN32
+   hModule = LoadLibrary(szLibName);
+   if (hModule == NULL)
+      GetSystemErrorText(GetLastError(), pszErrorText, 255);
+#else    /* _WIN32 */
+   hModule = dlopen(szLibName, RTLD_NOW | RTLD_GLOBAL);
+   if (hModule == NULL)
+      strncpy(pszErrorText, dlerror(), 255);
+#endif
+   return hModule;
+}
+
+
+//
+// Unload DLL/shared library
+//
+
+void LIBNETXMS_EXPORTABLE DLClose(HMODULE hModule)
+{
+#ifdef _WIN32
+   FreeLibrary(hModule);
+#else    /* _WIN32 */
+   dlclose(hModule);
+#endif
+}
+
+
+//
+// Get symbol address from library
+//
+
+void LIBNETXMS_EXPORTABLE *DLGetSymbolAddr(HMODULE hModule, char *szSymbol, char *pszErrorText)
+{
+   void *pAddr;
+
+#ifdef _WIN32
+   pAddr = GetProcAddress(hModule, szSymbol);
+   if (pAddr == NULL)
+      GetSystemErrorText(GetLastError(), pszErrorText, 255);
+#else    /* _WIN32 */
+   pAddr = dlsym(hModule, szSymbol);
+   if (pAddr == NULL)
+      strncpy(pszErrorText, dlerror(), 255);
+#endif
+   return pAddr;
+}
index 2346b8f..fc46133 100644 (file)
@@ -182,3 +182,36 @@ BOOL LIBNETXMS_EXPORTABLE CalculateFileMD5Hash(char *pszFileName, BYTE *pHash)
    }
    return bSuccess;
 }
+
+
+//
+// Calculate SHA1 hash for given file
+//
+
+BOOL LIBNETXMS_EXPORTABLE CalculateFileSHA1Hash(char *pszFileName, BYTE *pHash)
+{
+   int fd, iSize;
+   SHA1_CTX context;
+   char szBuffer[FILE_BLOCK_SIZE];
+   BOOL bSuccess = FALSE;
+
+   fd = open(pszFileName, O_RDONLY | O_BINARY);
+   if (fd != -1)
+   {
+      SHA1Init(&context);
+      while(1)
+      {
+         iSize = read(fd, szBuffer, FILE_BLOCK_SIZE);
+         if (iSize <= 0)
+            break;
+         SHA1Update(&context, (BYTE *)szBuffer, iSize);
+      }
+      close(fd);
+      if (iSize == 0)
+      {
+         SHA1Final(pHash, &context);
+         bSuccess = TRUE;
+      }
+   }
+   return bSuccess;
+}
index 6659f6e..e003213 100644 (file)
@@ -101,6 +101,10 @@ SOURCE=.\config.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=.\dload.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=.\getopt.c
 # End Source File
 # Begin Source File
index 48e9196..42d0a31 100644 (file)
@@ -381,3 +381,35 @@ char LIBNETXMS_EXPORTABLE *ExtractWord(char *line, char *buffer)
    *bptr=0;
    return ptr;
 }
+
+
+//
+// Get system error string by call to FormatMessage
+// (Windows only)
+//
+
+#ifdef _WIN32
+
+char LIBNETXMS_EXPORTABLE *GetSystemErrorText(DWORD dwError, char *pszBuffer, int iBufSize)
+{
+   char *msgBuf;
+
+   if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
+                     FORMAT_MESSAGE_FROM_SYSTEM | 
+                     FORMAT_MESSAGE_IGNORE_INSERTS,
+                     NULL, dwError,
+                     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+                     (LPSTR)&msgBuf, 0, NULL) > 0)
+   {
+      msgBuf[strcspn(msgBuf, "\r\n")] = 0;
+      strncpy(pszBuffer, msgBuf, iBufSize);
+      LocalFree(msgBuf);
+   }
+   else
+   {
+      sprintf(pszBuffer, "MSG 0x%08X - Unable to find message text", dwError);
+   }
+   return pszBuffer;
+}
+
+#endif