changeset 123:e8fe7c9a7d6c

sync
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 05 Jan 2018 10:15:08 +0100
parents 7bfcc8f04ef7
children 24bd36849c56
files Applications/ApplicationToolbox.cpp Applications/CMakeLists.txt Applications/Dicomizer.cpp Framework/Inputs/OpenSlideLibrary.cpp Framework/Inputs/OpenSlideLibrary.h Resources/Orthanc/Core/SharedLibrary.cpp Resources/Orthanc/Core/SharedLibrary.h Resources/Orthanc/OrthancServer/PrecompiledHeadersServer.h Resources/Orthanc/Plugins/Engine/SharedLibrary.cpp Resources/Orthanc/Plugins/Engine/SharedLibrary.h Resources/SyncOrthancFolder.py
diffstat 10 files changed, 228 insertions(+), 238 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/ApplicationToolbox.cpp	Thu Jan 04 20:04:41 2018 +0100
+++ b/Applications/ApplicationToolbox.cpp	Fri Jan 05 10:15:08 2018 +0100
@@ -22,11 +22,12 @@
 #include "ApplicationToolbox.h"
 
 #include "../Framework/Inputs/OpenSlideLibrary.h"
+#include "../Resources/Orthanc/Core/DicomParsing/FromDcmtkBridge.h"
 #include "../Resources/Orthanc/Core/HttpClient.h"
 #include "../Resources/Orthanc/Core/Logging.h"
 #include "../Resources/Orthanc/Core/MultiThreading/BagOfTasksProcessor.h"
+#include "../Resources/Orthanc/Core/OrthancException.h"
 #include "../Resources/Orthanc/Core/SystemToolbox.h"
-#include "../Resources/Orthanc/Core/DicomParsing/FromDcmtkBridge.h"
 
 #include <boost/filesystem.hpp>
 #include <boost/lexical_cast.hpp>
--- a/Applications/CMakeLists.txt	Thu Jan 04 20:04:41 2018 +0100
+++ b/Applications/CMakeLists.txt	Fri Jan 05 10:15:08 2018 +0100
@@ -104,7 +104,6 @@
   -DORTHANC_ENABLE_LUA=0        # For FromDcmtkBridge
   -DORTHANC_ENABLE_MD5=0
   -DORTHANC_ENABLE_PKCS11=0
-  -DORTHANC_ENABLE_PLUGINS=1    # To enable class Orthanc::SharedLibrary
   -DORTHANC_ENABLE_PNG=1
   -DORTHANC_ENABLE_PUGIXML=0
   -DORTHANC_MAXIMUM_TAG_LENGTH=256
@@ -198,12 +197,12 @@
   ${ORTHANC_ROOT}/Core/Logging.cpp
   ${ORTHANC_ROOT}/Core/MultiThreading/BagOfTasksProcessor.cpp
   ${ORTHANC_ROOT}/Core/MultiThreading/SharedMessageQueue.cpp
+  ${ORTHANC_ROOT}/Core/SharedLibrary.cpp
   ${ORTHANC_ROOT}/Core/SystemToolbox.cpp
   ${ORTHANC_ROOT}/Core/TemporaryFile.cpp
   ${ORTHANC_ROOT}/Core/Toolbox.cpp
   ${ORTHANC_ROOT}/Core/WebServiceParameters.cpp
 
-  ${ORTHANC_ROOT}/Plugins/Engine/SharedLibrary.cpp
   ${ORTHANC_ROOT}/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp
   ${ORTHANC_ROOT}/Plugins/Samples/Common/DicomDatasetReader.cpp
   ${ORTHANC_ROOT}/Plugins/Samples/Common/DicomPath.cpp
--- a/Applications/Dicomizer.cpp	Thu Jan 04 20:04:41 2018 +0100
+++ b/Applications/Dicomizer.cpp	Fri Jan 05 10:15:08 2018 +0100
@@ -32,11 +32,12 @@
 #include "../Framework/Outputs/DicomPyramidWriter.h"
 #include "../Framework/Outputs/TruncatedPyramidWriter.h"
 
+#include "../Resources/Orthanc/Core/DicomParsing/FromDcmtkBridge.h"
 #include "../Resources/Orthanc/Core/HttpClient.h"
 #include "../Resources/Orthanc/Core/Logging.h"
 #include "../Resources/Orthanc/Core/MultiThreading/BagOfTasksProcessor.h"
+#include "../Resources/Orthanc/Core/OrthancException.h"
 #include "../Resources/Orthanc/Core/SystemToolbox.h"
-#include "../Resources/Orthanc/Core/DicomParsing/FromDcmtkBridge.h"
 
 #include "ApplicationToolbox.h"
 
--- a/Framework/Inputs/OpenSlideLibrary.cpp	Thu Jan 04 20:04:41 2018 +0100
+++ b/Framework/Inputs/OpenSlideLibrary.cpp	Fri Jan 05 10:15:08 2018 +0100
@@ -24,6 +24,7 @@
 
 #include "../../Resources/Orthanc/Core/Logging.h"
 #include "../../Resources/Orthanc/Core/Images/Image.h"
+#include "../../Resources/Orthanc/Core/OrthancException.h"
 
 namespace OrthancWSI
 {
--- a/Framework/Inputs/OpenSlideLibrary.h	Thu Jan 04 20:04:41 2018 +0100
+++ b/Framework/Inputs/OpenSlideLibrary.h	Fri Jan 05 10:15:08 2018 +0100
@@ -21,8 +21,8 @@
 
 #pragma once
 
-#include "../../Resources/Orthanc/Plugins/Engine/SharedLibrary.h"
 #include "../../Resources/Orthanc/Core/Images/ImageAccessor.h"
+#include "../../Resources/Orthanc/Core/SharedLibrary.h"
 
 #include <vector>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Orthanc/Core/SharedLibrary.cpp	Fri Jan 05 10:15:08 2018 +0100
@@ -0,0 +1,136 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * 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 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * 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, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#include "PrecompiledHeaders.h"
+#include "SharedLibrary.h"
+
+#include "Logging.h"
+#include "OrthancException.h"
+
+#include <boost/filesystem.hpp>
+
+#if defined(_WIN32)
+#include <windows.h>
+#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+#include <dlfcn.h>
+#else
+#error Support your platform here
+#endif
+
+namespace Orthanc
+{
+  SharedLibrary::SharedLibrary(const std::string& path) : 
+    path_(path), 
+    handle_(NULL)
+  {
+#if defined(_WIN32)
+    handle_ = ::LoadLibraryA(path_.c_str());
+    if (handle_ == NULL)
+    {
+      LOG(ERROR) << "LoadLibrary(" << path_ << ") failed: Error " << ::GetLastError();
+      throw OrthancException(ErrorCode_SharedLibrary);
+    }
+
+#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+    handle_ = ::dlopen(path_.c_str(), RTLD_NOW);
+    if (handle_ == NULL) 
+    {
+      std::string explanation;
+      const char *tmp = ::dlerror();
+      if (tmp)
+      {
+        explanation = ": Error " + std::string(tmp);
+      }
+
+      LOG(ERROR) << "dlopen(" << path_ << ") failed" << explanation;
+      throw OrthancException(ErrorCode_SharedLibrary);
+    }
+
+#else
+#error Support your platform here
+#endif   
+  }
+
+  SharedLibrary::~SharedLibrary()
+  {
+    if (handle_)
+    {
+#if defined(_WIN32)
+      ::FreeLibrary((HMODULE)handle_);
+#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+      ::dlclose(handle_);
+#else
+#error Support your platform here
+#endif
+    }
+  }
+
+
+  SharedLibrary::FunctionPointer SharedLibrary::GetFunctionInternal(const std::string& name)
+  {
+    if (!handle_)
+    {
+      throw OrthancException(ErrorCode_InternalError);
+    }
+
+#if defined(_WIN32)
+    return ::GetProcAddress((HMODULE)handle_, name.c_str());
+#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+    return ::dlsym(handle_, name.c_str());
+#else
+#error Support your platform here
+#endif
+  }
+
+
+  SharedLibrary::FunctionPointer SharedLibrary::GetFunction(const std::string& name)
+  {
+    SharedLibrary::FunctionPointer result = GetFunctionInternal(name);
+  
+    if (result == NULL)
+    {
+      LOG(ERROR) << "Shared library does not expose function \"" << name << "\"";
+      throw OrthancException(ErrorCode_SharedLibrary);
+    }
+    else
+    {
+      return result;
+    }
+  }
+
+
+  bool SharedLibrary::HasFunction(const std::string& name)
+  {
+    return GetFunctionInternal(name) != NULL;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Orthanc/Core/SharedLibrary.h	Fri Jan 05 10:15:08 2018 +0100
@@ -0,0 +1,82 @@
+/**
+ * Orthanc - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
+ * Department, University Hospital of Liege, Belgium
+ * Copyright (C) 2017-2018 Osimis S.A., Belgium
+ *
+ * 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 3 of the
+ * License, or (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders of this
+ * program give permission to link the code of its release with the
+ * OpenSSL project's "OpenSSL" library (or with modified versions of it
+ * that use the same license as the "OpenSSL" library), and distribute
+ * the linked executables. You must obey the GNU General Public License
+ * in all respects for all of the code used other than "OpenSSL". If you
+ * modify file(s) with this exception, you may extend this exception to
+ * your version of the file(s), but you are not obligated to do so. If
+ * you do not wish to do so, delete this exception statement from your
+ * version. If you delete this exception statement from all source files
+ * in the program, then also delete it here.
+ * 
+ * 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, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#pragma once
+
+#if !defined(ORTHANC_SANDBOXED)
+#  error The macro ORTHANC_SANDBOXED must be defined
+#endif
+
+#if ORTHANC_SANDBOXED == 1
+#  error The namespace SystemToolbox cannot be used in sandboxed environments
+#endif
+
+#if defined(_WIN32)
+#include <windows.h>
+#endif
+
+#include <string>
+#include <boost/noncopyable.hpp>
+
+namespace Orthanc
+{
+  class SharedLibrary : public boost::noncopyable
+  {
+  public:
+#if defined(_WIN32)
+    typedef FARPROC FunctionPointer;
+#else
+    typedef void* FunctionPointer;
+#endif
+
+  private:
+    std::string path_;
+    void *handle_;
+
+    FunctionPointer GetFunctionInternal(const std::string& name);
+
+  public:
+    explicit SharedLibrary(const std::string& path);
+
+    ~SharedLibrary();
+
+    const std::string& GetPath() const
+    {
+      return path_;
+    }
+
+    bool HasFunction(const std::string& name);
+
+    FunctionPointer GetFunction(const std::string& name);
+  };
+}
--- a/Resources/Orthanc/Plugins/Engine/SharedLibrary.cpp	Thu Jan 04 20:04:41 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * 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 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * 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, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../../OrthancServer/PrecompiledHeadersServer.h"
-#include "SharedLibrary.h"
-
-#if ORTHANC_ENABLE_PLUGINS != 1
-#error The plugin support is disabled
-#endif
-
-
-#include "../../Core/Logging.h"
-#include "../../Core/Toolbox.h"
-
-#include <boost/filesystem.hpp>
-
-#if defined(_WIN32)
-#include <windows.h>
-#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
-#include <dlfcn.h>
-#else
-#error Support your platform here
-#endif
-
-namespace Orthanc
-{
-  SharedLibrary::SharedLibrary(const std::string& path) : 
-    path_(path), 
-    handle_(NULL)
-  {
-#if defined(_WIN32)
-    handle_ = ::LoadLibraryA(path_.c_str());
-    if (handle_ == NULL)
-    {
-      LOG(ERROR) << "LoadLibrary(" << path_ << ") failed: Error " << ::GetLastError();
-      throw OrthancException(ErrorCode_SharedLibrary);
-    }
-
-#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
-    handle_ = ::dlopen(path_.c_str(), RTLD_NOW);
-    if (handle_ == NULL) 
-    {
-      std::string explanation;
-      const char *tmp = ::dlerror();
-      if (tmp)
-      {
-        explanation = ": Error " + std::string(tmp);
-      }
-
-      LOG(ERROR) << "dlopen(" << path_ << ") failed" << explanation;
-      throw OrthancException(ErrorCode_SharedLibrary);
-    }
-
-#else
-#error Support your platform here
-#endif   
-  }
-
-  SharedLibrary::~SharedLibrary()
-  {
-    if (handle_)
-    {
-#if defined(_WIN32)
-      ::FreeLibrary((HMODULE)handle_);
-#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
-      ::dlclose(handle_);
-#else
-#error Support your platform here
-#endif
-    }
-  }
-
-
-  SharedLibrary::FunctionPointer SharedLibrary::GetFunctionInternal(const std::string& name)
-  {
-    if (!handle_)
-    {
-      throw OrthancException(ErrorCode_InternalError);
-    }
-
-#if defined(_WIN32)
-    return ::GetProcAddress((HMODULE)handle_, name.c_str());
-#elif defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD_kernel__) || defined(__FreeBSD__) || defined(__OpenBSD__)
-    return ::dlsym(handle_, name.c_str());
-#else
-#error Support your platform here
-#endif
-  }
-
-
-  SharedLibrary::FunctionPointer SharedLibrary::GetFunction(const std::string& name)
-  {
-    SharedLibrary::FunctionPointer result = GetFunctionInternal(name);
-  
-    if (result == NULL)
-    {
-      LOG(ERROR) << "Shared library does not expose function \"" << name << "\"";
-      throw OrthancException(ErrorCode_SharedLibrary);
-    }
-    else
-    {
-      return result;
-    }
-  }
-
-
-  bool SharedLibrary::HasFunction(const std::string& name)
-  {
-    return GetFunctionInternal(name) != NULL;
-  }
-}
--- a/Resources/Orthanc/Plugins/Engine/SharedLibrary.h	Thu Jan 04 20:04:41 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/**
- * Orthanc - A Lightweight, RESTful DICOM Store
- * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
- * Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2018 Osimis S.A., Belgium
- *
- * 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 3 of the
- * License, or (at your option) any later version.
- *
- * In addition, as a special exception, the copyright holders of this
- * program give permission to link the code of its release with the
- * OpenSSL project's "OpenSSL" library (or with modified versions of it
- * that use the same license as the "OpenSSL" library), and distribute
- * the linked executables. You must obey the GNU General Public License
- * in all respects for all of the code used other than "OpenSSL". If you
- * modify file(s) with this exception, you may extend this exception to
- * your version of the file(s), but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from your
- * version. If you delete this exception statement from all source files
- * in the program, then also delete it here.
- * 
- * 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, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#pragma once
-
-#if ORTHANC_ENABLE_PLUGINS == 1
-
-#include "../../Core/OrthancException.h"
-
-#include <boost/noncopyable.hpp>
-
-#if defined(_WIN32)
-#include <windows.h>
-#endif
-
-namespace Orthanc
-{
-  class SharedLibrary : public boost::noncopyable
-  {
-  public:
-#if defined(_WIN32)
-    typedef FARPROC FunctionPointer;
-#else
-    typedef void* FunctionPointer;
-#endif
-
-  private:
-    std::string path_;
-    void *handle_;
-
-    FunctionPointer GetFunctionInternal(const std::string& name);
-
-  public:
-    explicit SharedLibrary(const std::string& path);
-
-    ~SharedLibrary();
-
-    const std::string& GetPath() const
-    {
-      return path_;
-    }
-
-    bool HasFunction(const std::string& name);
-
-    FunctionPointer GetFunction(const std::string& name);
-  };
-}
-
-#endif
--- a/Resources/SyncOrthancFolder.py	Thu Jan 04 20:04:41 2018 +0100
+++ b/Resources/SyncOrthancFolder.py	Fri Jan 05 10:15:08 2018 +0100
@@ -71,6 +71,8 @@
     'Core/OrthancException.h',
     'Core/PrecompiledHeaders.cpp',
     'Core/PrecompiledHeaders.h',
+    'Core/SharedLibrary.cpp',
+    'Core/SharedLibrary.h',
     'Core/SystemToolbox.cpp',
     'Core/SystemToolbox.h',
     'Core/TemporaryFile.cpp',
@@ -79,8 +81,6 @@
     'Core/Toolbox.h',
     'Core/WebServiceParameters.cpp',
     'Core/WebServiceParameters.h',
-    'Plugins/Engine/SharedLibrary.cpp',
-    'Plugins/Engine/SharedLibrary.h',
     'Plugins/Samples/Common/DicomDatasetReader.cpp',
     'Plugins/Samples/Common/DicomDatasetReader.h',
     'Plugins/Samples/Common/DicomPath.cpp',
@@ -118,10 +118,10 @@
     'Resources/CMake/VisualStudioPrecompiledHeaders.cmake',
     'Resources/CMake/ZlibConfiguration.cmake',
     'Resources/EmbedResources.py',
+    'Resources/LinuxStandardBaseToolchain.cmake',
     'Resources/MinGW-W64-Toolchain32.cmake',
     'Resources/MinGW-W64-Toolchain64.cmake',
     'Resources/MinGWToolchain.cmake',
-    'Resources/LinuxStandardBaseToolchain.cmake',
     'Resources/Patches/boost-1.65.1-linux-standard-base.patch',
     'Resources/Patches/curl-7.57.0-cmake.patch',
     'Resources/Patches/dcmtk-3.6.0-dulparse-vulnerability.patch',
@@ -149,16 +149,6 @@
 ]
 
 
-# Create an empty "Resources/Orthanc/OrthancServer/PrecompiledHeadersServer.h" file
-try:
-    os.makedirs(os.path.join(TARGET, 'OrthancServer'))
-except:
-    pass
-
-with open(os.path.join(TARGET, 'OrthancServer', 'PrecompiledHeadersServer.h'), 'w') as f:
-    f.write('')
-
-
 def Download(x):
     branch = x[0]
     source = x[1]