Mercurial > hg > orthanc-wsi
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]