[med-svn] [Git][med-team/orthanc-gdcm][master] 4 commits: New upstream version 1.5
Sebastien Jodogne (@jodogne-guest)
gitlab at salsa.debian.org
Wed Mar 23 21:23:56 GMT 2022
Sebastien Jodogne pushed to branch master at Debian Med / orthanc-gdcm
Commits:
f8d28397 by jodogne-guest at 2022-03-23T22:15:20+01:00
New upstream version 1.5
- - - - -
ca20f58f by jodogne-guest at 2022-03-23T22:15:21+01:00
Update upstream source from tag 'upstream/1.5'
Update to upstream version '1.5'
with Debian dir 56b1d949fe0c01a247a98c1040383832006b0c3e
- - - - -
566fbe40 by jodogne-guest at 2022-03-23T22:17:09+01:00
building 1.5-1
- - - - -
e0764c80 by jodogne-guest at 2022-03-23T22:23:11+01:00
Upload to unstable
- - - - -
19 changed files:
- .hg_archival.txt
- CMakeLists.txt
- NEWS
- Plugin/Plugin.cpp
- Resources/CMake/GdcmConfiguration.cmake
- Resources/Orthanc/CMake/AutoGeneratedCode.cmake
- Resources/Orthanc/CMake/Compiler.cmake
- Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
- Resources/Orthanc/CMake/DownloadPackage.cmake
- Resources/Orthanc/LinuxStandardBaseToolchain.cmake
- Resources/Orthanc/MinGW-W64-Toolchain32.cmake
- Resources/Orthanc/MinGW-W64-Toolchain64.cmake
- Resources/Orthanc/MinGWToolchain.cmake
- Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
- Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
- Resources/Orthanc/Plugins/OrthancPluginException.h
- Resources/Orthanc/Plugins/OrthancPluginsExports.cmake
- debian/changelog
- debian/copyright
Changes:
=====================================
.hg_archival.txt
=====================================
@@ -1,6 +1,6 @@
repo: 108d34b53bb89b998dbe89c3bb031241991f13c7
-node: ef39b0c16e121aa11887e7f3967f849b9dbfa56f
-branch: OrthancGdcm-1.4
+node: d5d420f52a3cd33b707b183ac414f95b5351ba98
+branch: OrthancGdcm-1.5
latesttag: null
-latesttagdistance: 52
-changessincelatesttag: 56
+latesttagdistance: 58
+changessincelatesttag: 62
=====================================
CMakeLists.txt
=====================================
@@ -21,13 +21,13 @@ cmake_minimum_required(VERSION 2.8)
project(OrthancGdcm)
-SET(PLUGIN_VERSION "1.4" CACHE STRING "Version of the plugin")
+SET(PLUGIN_VERSION "1.5" CACHE STRING "Version of the plugin")
if (PLUGIN_VERSION STREQUAL "mainline")
set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "mainline")
set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg")
else()
- set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.9.4")
+ set(ORTHANC_FRAMEWORK_DEFAULT_VERSION "1.10.1")
set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web")
endif()
=====================================
NEWS
=====================================
@@ -2,6 +2,14 @@ Pending changes in the mainline
===============================
+Version 1.5 (2022-03-23)
+========================
+
+* Take the configuration option "RestrictTransferSyntaxes" into
+ account not only for decoding, but also for transcoding
+* Upgrade to GDCM 3.0.10 for static builds
+
+
Version 1.4 (2021-07-06)
========================
=====================================
Plugin/Plugin.cpp
=====================================
@@ -30,12 +30,19 @@
#include <gdcmFileExplicitFilter.h>
#include <gdcmImageChangePhotometricInterpretation.h>
#include <gdcmImageChangeTransferSyntax.h>
+#include <gdcmImageHelper.h>
#include <gdcmImageReader.h>
#include <gdcmImageWriter.h>
#include <gdcmTagKeywords.h>
#include <gdcmUIDGenerator.h>
#include <gdcmVersion.h>
-#include <gdcmImageHelper.h>
+
+#define GDCM_VERSION_IS_ABOVE(major, minor, revision) \
+ (GDCM_MAJOR_VERSION > major || \
+ (GDCM_MAJOR_VERSION == major && \
+ (GDCM_MINOR_VERSION > minor || \
+ (GDCM_MINOR_VERSION == minor && \
+ GDCM_BUILD_VERSION >= revision))))
static OrthancPlugins::GdcmDecoderCache cache_;
@@ -111,6 +118,20 @@ static bool IsTransferSyntaxEnabled(const void* dicom,
}
}
+static bool IsTransferSyntaxEnabled(const std::string& transferSyntax)
+{
+ if (!restrictTransferSyntaxes_)
+ {
+ return true;
+ }
+
+ if (enabledTransferSyntaxes_.find(transferSyntax) != enabledTransferSyntaxes_.end())
+ {
+ return true;
+ }
+
+ return false;
+}
static OrthancPluginErrorCode DecodeImageCallback(OrthancPluginImage** target,
const void* dicom,
@@ -270,6 +291,24 @@ OrthancPluginErrorCode TranscoderCallback(
{
try
{
+ std::string sourceTransferSyntax;
+ ExtractTransferSyntax(sourceTransferSyntax, buffer, size);
+
+ bool pluginShouldHandleTranscoding = false;
+ for (uint32_t i = 0; i < countSyntaxes; i++)
+ {
+ if (IsTransferSyntaxEnabled(sourceTransferSyntax) || IsTransferSyntaxEnabled(allowedSyntaxes[i]))
+ {
+ pluginShouldHandleTranscoding = true;
+ }
+ }
+
+ if (!pluginShouldHandleTranscoding)
+ {
+ return OrthancPluginErrorCode_Plugin; // not really an error but only way to tell Orthanc that the plugin did not handle transcoding
+ }
+
+
std::unique_ptr<Orthanc::Semaphore::Locker> locker;
if (hasThrottling_)
@@ -346,19 +385,21 @@ OrthancPluginErrorCode TranscoderCallback(
// https://groups.google.com/g/orthanc-users/c/xIwrkFRceuE/m/jwxy50djAQAJ
throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, "Cannot transcode 1bpp DICOM images");
}
-
+
+#if !GDCM_VERSION_IS_ABOVE(3, 0, 9)
if (reader.GetImage().GetPixelFormat().GetBitsStored() == 16u &&
syntax == gdcm::TransferSyntax::JPEGExtendedProcess2_4)
{
/**
* This is a temporary workaround for issue #513 in GDCM
- * (will be fixed in GDCM 3.0.9):
+ * that was fixed in GDCM 3.0.9:
* https://sourceforge.net/p/gdcm/bugs/513/
* https://groups.google.com/g/orthanc-users/c/xt9hwpj6mlQ
**/
throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented,
"Transcoding 16bpp images to 1.2.840.10008.1.2.4.51 might lead to a crash in GDCM");
}
+#endif
gdcm::ImageChangeTransferSyntax change;
change.SetTransferSyntax(syntax);
=====================================
Resources/CMake/GdcmConfiguration.cmake
=====================================
@@ -22,8 +22,8 @@ if (STATIC_BUILD OR NOT USE_SYSTEM_GDCM)
set(GDCM_URL "http://orthanc.osimis.io/ThirdPartyDownloads/gdcm-2.8.9.tar.gz")
set(GDCM_MD5 "aeb00e0cb5375d454010a72e2e0f6154")
else()
- set(GDCM_URL "http://orthanc.osimis.io/ThirdPartyDownloads/gdcm-3.0.8.tar.gz")
- set(GDCM_MD5 "29e0e60b04183e3eb9c18ad093156b2c")
+ set(GDCM_URL "http://orthanc.osimis.io/ThirdPartyDownloads/gdcm-3.0.10.tar.gz")
+ set(GDCM_MD5 "28c70d02c2005a8c9d2a5847c8ba3c00")
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
=====================================
Resources/Orthanc/CMake/AutoGeneratedCode.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/CMake/Compiler.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/CMake/DownloadOrthancFramework.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
@@ -71,7 +72,10 @@ if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
if (NOT ORTHANC_FRAMEWORK_MAJOR MATCHES "^[0-9]+$" OR
NOT ORTHANC_FRAMEWORK_MINOR MATCHES "^[0-9]+$" OR
NOT ORTHANC_FRAMEWORK_REVISION MATCHES "^[0-9]+$")
- message("Bad version of the Orthanc framework: ${ORTHANC_FRAMEWORK_VERSION}")
+ message("Bad version of the Orthanc framework, assuming a pre-release: ${ORTHANC_FRAMEWORK_VERSION}")
+ set(ORTHANC_FRAMEWORK_MAJOR 999)
+ set(ORTHANC_FRAMEWORK_MINOR 999)
+ set(ORTHANC_FRAMEWORK_REVISION 999)
endif()
if (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.3.1")
@@ -132,6 +136,16 @@ if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
set(ORTHANC_FRAMEWORK_MD5 "9b86e6f00e03278293cd15643cc0233f")
elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.9.4")
set(ORTHANC_FRAMEWORK_MD5 "6d5ca4a73ac7d42445041ca79de1624d")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.9.5")
+ set(ORTHANC_FRAMEWORK_MD5 "10fc64de1254a095e5d3ed3931f0cfbb")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.9.6")
+ set(ORTHANC_FRAMEWORK_MD5 "4b5d05683d747c29b2860ad79d11e62e")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.9.7")
+ set(ORTHANC_FRAMEWORK_MD5 "c912bbb860d640d3ae3003b5c9698205")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.10.0")
+ set(ORTHANC_FRAMEWORK_MD5 "8610c82d9153f22e929f2110f8f60279")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.10.1")
+ set(ORTHANC_FRAMEWORK_MD5 "caf667fc5ea452b3d0c2f70bfd02599c")
# Below this point are development snapshots that were used to
# release some plugin, before an official release of the Orthanc
@@ -152,6 +166,9 @@ if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "23ad1b9c7800")
# For "Toolbox::ReadJson()" and "Toolbox::Write{...}Json()" (pre-1.9.0)
set(ORTHANC_FRAMEWORK_MD5 "9af92080e57c60dd288eba46ce606c00")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "b2e08d83e21d")
+ # WSI 1.1 (framework pre-1.10.0), to remove "-std=c++11"
+ set(ORTHANC_FRAMEWORK_MD5 "2eaa073cbb4b44ffba199ad93393b2b1")
endif()
endif()
endif()
@@ -494,35 +511,6 @@ if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "system")
message(FATAL_ERROR "Please install the libjsoncpp-dev package")
endif()
- # Switch to the C++11 standard if the version of JsonCpp is 1.y.z
- # (same as variable JSONCPP_CXX11 in the source code of Orthanc)
- if (EXISTS ${JSONCPP_INCLUDE_DIR}/json/version.h)
- file(STRINGS
- "${JSONCPP_INCLUDE_DIR}/json/version.h"
- JSONCPP_VERSION_MAJOR1 REGEX
- ".*define JSONCPP_VERSION_MAJOR.*")
-
- if (NOT JSONCPP_VERSION_MAJOR1)
- message(FATAL_ERROR "Unable to extract the major version of JsonCpp")
- endif()
-
- string(REGEX REPLACE
- ".*JSONCPP_VERSION_MAJOR.*([0-9]+)$" "\\1"
- JSONCPP_VERSION_MAJOR ${JSONCPP_VERSION_MAJOR1})
- message("JsonCpp major version: ${JSONCPP_VERSION_MAJOR}")
-
- if (JSONCPP_VERSION_MAJOR GREATER 0)
- message("Switching to C++11 standard, as version of JsonCpp is >= 1.0.0")
- if (CMAKE_COMPILER_IS_GNUCXX)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
- elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- endif()
- endif()
- else()
- message("Unable to detect the major version of JsonCpp, assuming < 1.0.0")
- endif()
-
# Look for Orthanc framework shared library
include(CheckCXXSymbolExists)
=====================================
Resources/Orthanc/CMake/DownloadPackage.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/LinuxStandardBaseToolchain.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/MinGW-W64-Toolchain32.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/MinGW-W64-Toolchain64.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/MinGWToolchain.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
=====================================
Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp
=====================================
@@ -2,7 +2,8 @@
* Orthanc - A Lightweight, RESTful DICOM Store
* Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
* Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2021 Osimis S.A., Belgium
+ * Copyright (C) 2017-2022 Osimis S.A., Belgium
+ * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -510,6 +511,22 @@ namespace OrthancPlugins
}
+ void OrthancString::ToJsonWithoutComments(Json::Value& target) const
+ {
+ if (str_ == NULL)
+ {
+ LogError("Cannot convert an empty memory buffer to JSON");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
+ if (!ReadJsonWithoutComments(target, str_))
+ {
+ LogError("Cannot convert some memory buffer to JSON");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat);
+ }
+ }
+
+
void MemoryBuffer::DicomToJson(Json::Value& target,
OrthancPluginDicomToJsonFormat format,
OrthancPluginDicomToJsonFlags flags,
@@ -539,6 +556,13 @@ namespace OrthancPlugins
const std::string& password)
{
Clear();
+
+ if (body.size() > 0xffffffffu)
+ {
+ LogError("Cannot handle body size > 4GB");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
return CheckHttp(OrthancPluginHttpPost(GetGlobalContext(), &buffer_, url.c_str(),
body.c_str(), body.size(),
username.empty() ? NULL : username.c_str(),
@@ -552,6 +576,13 @@ namespace OrthancPlugins
const std::string& password)
{
Clear();
+
+ if (body.size() > 0xffffffffu)
+ {
+ LogError("Cannot handle body size > 4GB");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
return CheckHttp(OrthancPluginHttpPut(GetGlobalContext(), &buffer_, url.c_str(),
body.empty() ? NULL : body.c_str(),
body.size(),
@@ -630,7 +661,7 @@ namespace OrthancPlugins
ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
}
- str.ToJson(configuration_);
+ str.ToJsonWithoutComments(configuration_);
if (configuration_.type() != Json::objectValue)
{
@@ -1892,6 +1923,12 @@ namespace OrthancPlugins
ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(OrthancPluginErrorCode_ParameterOutOfRange);
}
+ if (body.size() > 0xffffffffu)
+ {
+ LogError("Cannot handle body size > 4GB");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
OrthancPlugins::MemoryBuffer answer;
uint16_t status;
OrthancPluginErrorCode code = OrthancPluginCallPeerApi
@@ -1920,6 +1957,12 @@ namespace OrthancPlugins
ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(OrthancPluginErrorCode_ParameterOutOfRange);
}
+ if (body.size() > 0xffffffffu)
+ {
+ LogError("Cannot handle body size > 4GB");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
OrthancPlugins::MemoryBuffer answer;
uint16_t status;
OrthancPluginErrorCode code = OrthancPluginCallPeerApi
@@ -2483,7 +2526,7 @@ namespace OrthancPlugins
}
catch (...)
{
- return OrthancPluginErrorCode_InternalError;
+ return OrthancPluginErrorCode_Plugin;
}
}
}
@@ -2569,8 +2612,8 @@ namespace OrthancPlugins
void HttpClient::ClearCredentials()
{
- username_.empty();
- password_.empty();
+ username_.clear();
+ password_.clear();
}
@@ -2883,6 +2926,12 @@ namespace OrthancPlugins
MemoryBuffer answerBodyBuffer, answerHeadersBuffer;
+ if (body.size() > 0xffffffffu)
+ {
+ LogError("Cannot handle body size > 4GB");
+ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError);
+ }
+
OrthancPluginErrorCode error = OrthancPluginHttpClient(
GetGlobalContext(),
*answerBodyBuffer,
@@ -3499,4 +3548,238 @@ namespace OrthancPlugins
}
}
#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static std::vector<std::string> WebDavConvertPath(uint32_t pathSize,
+ const char* const* pathItems)
+ {
+ std::vector<std::string> result(pathSize);
+
+ for (uint32_t i = 0; i < pathSize; i++)
+ {
+ result[i] = pathItems[i];
+ }
+
+ return result;
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavIsExistingFolder(uint8_t* isExisting,
+ uint32_t pathSize,
+ const char* const* pathItems,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ *isExisting = (that.IsExistingFolder(WebDavConvertPath(pathSize, pathItems)) ? 1 : 0);
+ return OrthancPluginErrorCode_Success;
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_Plugin;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavListFolder(uint8_t* isExisting,
+ OrthancPluginWebDavCollection* collection,
+ OrthancPluginWebDavAddFile addFile,
+ OrthancPluginWebDavAddFolder addFolder,
+ uint32_t pathSize,
+ const char* const* pathItems,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ std::list<IWebDavCollection::FileInfo> files;
+ std::list<IWebDavCollection::FolderInfo> subfolders;
+
+ if (!that.ListFolder(files, subfolders, WebDavConvertPath(pathSize, pathItems)))
+ {
+ *isExisting = 0;
+ }
+ else
+ {
+ *isExisting = 1;
+
+ for (std::list<IWebDavCollection::FileInfo>::const_iterator
+ it = files.begin(); it != files.end(); ++it)
+ {
+ OrthancPluginErrorCode code = addFile(
+ collection, it->GetName().c_str(), it->GetContentSize(),
+ it->GetMimeType().c_str(), it->GetDateTime().c_str());
+
+ if (code != OrthancPluginErrorCode_Success)
+ {
+ return code;
+ }
+ }
+
+ for (std::list<IWebDavCollection::FolderInfo>::const_iterator it =
+ subfolders.begin(); it != subfolders.end(); ++it)
+ {
+ OrthancPluginErrorCode code = addFolder(
+ collection, it->GetName().c_str(), it->GetDateTime().c_str());
+
+ if (code != OrthancPluginErrorCode_Success)
+ {
+ return code;
+ }
+ }
+ }
+
+ return OrthancPluginErrorCode_Success;
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_Plugin;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavRetrieveFile(OrthancPluginWebDavCollection* collection,
+ OrthancPluginWebDavRetrieveFile retrieveFile,
+ uint32_t pathSize,
+ const char* const* pathItems,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ std::string content, mime, dateTime;
+
+ if (that.GetFile(content, mime, dateTime, WebDavConvertPath(pathSize, pathItems)))
+ {
+ return retrieveFile(collection, content.empty() ? NULL : content.c_str(),
+ content.size(), mime.c_str(), dateTime.c_str());
+ }
+ else
+ {
+ // Inexisting file
+ return OrthancPluginErrorCode_Success;
+ }
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_InternalError;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavStoreFileCallback(uint8_t* isReadOnly, /* out */
+ uint32_t pathSize,
+ const char* const* pathItems,
+ const void* data,
+ uint64_t size,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ *isReadOnly = (that.StoreFile(WebDavConvertPath(pathSize, pathItems), data, size) ? 1 : 0);
+ return OrthancPluginErrorCode_Success;
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_InternalError;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavCreateFolderCallback(uint8_t* isReadOnly, /* out */
+ uint32_t pathSize,
+ const char* const* pathItems,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ *isReadOnly = (that.CreateFolder(WebDavConvertPath(pathSize, pathItems)) ? 1 : 0);
+ return OrthancPluginErrorCode_Success;
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_InternalError;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ static OrthancPluginErrorCode WebDavDeleteItemCallback(uint8_t* isReadOnly, /* out */
+ uint32_t pathSize,
+ const char* const* pathItems,
+ void* payload)
+ {
+ IWebDavCollection& that = *reinterpret_cast<IWebDavCollection*>(payload);
+
+ try
+ {
+ *isReadOnly = (that.DeleteItem(WebDavConvertPath(pathSize, pathItems)) ? 1 : 0);
+ return OrthancPluginErrorCode_Success;
+ }
+ catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e)
+ {
+ return static_cast<OrthancPluginErrorCode>(e.GetErrorCode());
+ }
+ catch (...)
+ {
+ return OrthancPluginErrorCode_InternalError;
+ }
+ }
+#endif
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ void IWebDavCollection::Register(const std::string& uri,
+ IWebDavCollection& collection)
+ {
+ OrthancPluginErrorCode code = OrthancPluginRegisterWebDavCollection(
+ GetGlobalContext(), uri.c_str(), WebDavIsExistingFolder, WebDavListFolder, WebDavRetrieveFile,
+ WebDavStoreFileCallback, WebDavCreateFolderCallback, WebDavDeleteItemCallback, &collection);
+
+ if (code != OrthancPluginErrorCode_Success)
+ {
+ ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(code);
+ }
+ }
+#endif
}
=====================================
Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h
=====================================
@@ -2,7 +2,8 @@
* Orthanc - A Lightweight, RESTful DICOM Store
* Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
* Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2021 Osimis S.A., Belgium
+ * Copyright (C) 2017-2022 Osimis S.A., Belgium
+ * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -114,6 +115,12 @@
# define HAS_ORTHANC_PLUGIN_STORAGE_COMMITMENT_SCP 0
#endif
+#if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 10, 1)
+# define HAS_ORTHANC_PLUGIN_WEBDAV 1
+#else
+# define HAS_ORTHANC_PLUGIN_WEBDAV 0
+#endif
+
namespace OrthancPlugins
@@ -299,7 +306,9 @@ namespace OrthancPlugins
void ToString(std::string& target) const;
void ToJson(Json::Value& target) const;
- };
+
+ void ToJsonWithoutComments(Json::Value& target) const;
+};
class OrthancConfiguration : public boost::noncopyable
@@ -1245,4 +1254,107 @@ namespace OrthancPlugins
const std::string& transferSyntax);
#endif
};
+
+
+
+#if HAS_ORTHANC_PLUGIN_WEBDAV == 1
+ class IWebDavCollection : public boost::noncopyable
+ {
+ public:
+ class FileInfo
+ {
+ private:
+ std::string name_;
+ uint64_t contentSize_;
+ std::string mime_;
+ std::string dateTime_;
+
+ public:
+ FileInfo(const std::string& name,
+ uint64_t contentSize,
+ const std::string& dateTime) :
+ name_(name),
+ contentSize_(contentSize),
+ dateTime_(dateTime)
+ {
+ }
+
+ const std::string& GetName() const
+ {
+ return name_;
+ }
+
+ uint64_t GetContentSize() const
+ {
+ return contentSize_;
+ }
+
+ void SetMimeType(const std::string& mime)
+ {
+ mime_ = mime;
+ }
+
+ const std::string& GetMimeType() const
+ {
+ return mime_;
+ }
+
+ const std::string& GetDateTime() const
+ {
+ return dateTime_;
+ }
+ };
+
+ class FolderInfo
+ {
+ private:
+ std::string name_;
+ std::string dateTime_;
+
+ public:
+ FolderInfo(const std::string& name,
+ const std::string& dateTime) :
+ name_(name),
+ dateTime_(dateTime)
+ {
+ }
+
+ const std::string& GetName() const
+ {
+ return name_;
+ }
+
+ const std::string& GetDateTime() const
+ {
+ return dateTime_;
+ }
+ };
+
+ virtual ~IWebDavCollection()
+ {
+ }
+
+ virtual bool IsExistingFolder(const std::vector<std::string>& path) = 0;
+
+ virtual bool ListFolder(std::list<FileInfo>& files,
+ std::list<FolderInfo>& subfolders,
+ const std::vector<std::string>& path) = 0;
+
+ virtual bool GetFile(std::string& content /* out */,
+ std::string& mime /* out */,
+ std::string& dateTime /* out */,
+ const std::vector<std::string>& path) = 0;
+
+ virtual bool StoreFile(const std::vector<std::string>& path,
+ const void* data,
+ size_t size) = 0;
+
+ virtual bool CreateFolder(const std::vector<std::string>& path) = 0;
+
+ virtual bool DeleteItem(const std::vector<std::string>& path) = 0;
+
+ static void Register(const std::string& uri,
+ IWebDavCollection& collection);
+ };
+#endif
}
=====================================
Resources/Orthanc/Plugins/OrthancPluginException.h
=====================================
@@ -2,7 +2,8 @@
* Orthanc - A Lightweight, RESTful DICOM Store
* Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
* Department, University Hospital of Liege, Belgium
- * Copyright (C) 2017-2021 Osimis S.A., Belgium
+ * Copyright (C) 2017-2022 Osimis S.A., Belgium
+ * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
=====================================
Resources/Orthanc/Plugins/OrthancPluginsExports.cmake
=====================================
@@ -1,7 +1,8 @@
# Orthanc - A Lightweight, RESTful DICOM Store
# Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
# Department, University Hospital of Liege, Belgium
-# Copyright (C) 2017-2021 Osimis S.A., Belgium
+# Copyright (C) 2017-2022 Osimis S.A., Belgium
+# Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+orthanc-gdcm (1.5-1) unstable; urgency=medium
+
+ * New upstream version
+
+ -- Sebastien Jodogne <s.jodogne at gmail.com> Wed, 23 Mar 2022 22:15:27 +0100
+
orthanc-gdcm (1.4-3) unstable; urgency=medium
* Replace explicit restart of Orthanc by orthanc-restart-trigger
=====================================
debian/copyright
=====================================
@@ -4,7 +4,7 @@ Upstream-Contact: Sebastien Jodogne <s.jodogne at gmail.com>
Source: https://hg.orthanc-server.com/orthanc-gdcm/
Files: *
-Copyright: 2012-2016 Sebastien Jodogne <s.jodogne at gmail.com>, University Hospital of Liege (Belgium), and 2017-2020 Osimis S.A. (Belgium)
+Copyright: 2012-2016 Sebastien Jodogne <s.jodogne at gmail.com>, University Hospital of Liege (Belgium), and 2017-2022 Osimis S.A. (Belgium), and 2021-2022 UCLouvain (Belgium)
License: GPL-3+
View it on GitLab: https://salsa.debian.org/med-team/orthanc-gdcm/-/compare/e6bc675f3357d7551a995b6ceef134fdbc533f24...e0764c80398f38c43149550290d60cc360656bd0
--
View it on GitLab: https://salsa.debian.org/med-team/orthanc-gdcm/-/compare/e6bc675f3357d7551a995b6ceef134fdbc533f24...e0764c80398f38c43149550290d60cc360656bd0
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20220323/8ffa2a64/attachment-0001.htm>
More information about the debian-med-commit
mailing list