# HG changeset patch # User Sebastien Jodogne # Date 1609953238 -3600 # Node ID 21499c1347857f2f7be7a60eccc8851af53e0b5f # Parent 1a96ab7b6877138d04589161ef143ccd51bab57f upgrade to year 2021 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleAccount.cpp --- a/Plugin/GoogleAccount.cpp Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleAccount.cpp Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleAccount.h --- a/Plugin/GoogleAccount.h Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleAccount.h Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleConfiguration.cpp --- a/Plugin/GoogleConfiguration.cpp Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleConfiguration.cpp Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleConfiguration.h --- a/Plugin/GoogleConfiguration.h Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleConfiguration.h Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleUpdater.cpp --- a/Plugin/GoogleUpdater.cpp Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleUpdater.cpp Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/GoogleUpdater.h --- a/Plugin/GoogleUpdater.h Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/GoogleUpdater.h Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Plugin/Plugin.cpp --- a/Plugin/Plugin.cpp Thu Dec 17 10:02:04 2020 +0100 +++ b/Plugin/Plugin.cpp Wed Jan 06 18:13:58 2021 +0100 @@ -1,6 +1,6 @@ /** * Google Cloud Platform credentials for DICOMweb and Orthanc - * Copyright (C) 2019-2020 Osimis S.A., Belgium + * Copyright (C) 2019-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/AutoGeneratedCode.cmake --- a/Resources/Orthanc/CMake/AutoGeneratedCode.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/AutoGeneratedCode.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/Compiler.cmake --- a/Resources/Orthanc/CMake/Compiler.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/Compiler.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/DownloadOrthancFramework.cmake --- a/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License @@ -118,6 +118,10 @@ set(ORTHANC_FRAMEWORK_MD5 "19fcb7c21876af86546baa048a22c6c0") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.8.0") set(ORTHANC_FRAMEWORK_MD5 "f8ec7554ef5d23ea4ce474b1e8214de9") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.8.1") + set(ORTHANC_FRAMEWORK_MD5 "db094f96399cbe8b9bbdbce34884c220") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.8.2") + set(ORTHANC_FRAMEWORK_MD5 "8bfa10e66c9931e74111be0bfb1f4548") # Below this point are development snapshots that were used to # release some plugin, before an official release of the Orthanc @@ -129,6 +133,15 @@ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "ae0e3fd609df") # DICOMweb 1.1 (framework pre-1.6.0) set(ORTHANC_FRAMEWORK_MD5 "7e09e9b530a2f527854f0b782d7e0645") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "82652c5fc04f") + # Stone Web viewer 1.0 (framework pre-1.8.1) + set(ORTHANC_FRAMEWORK_MD5 "d77331d68917e66a3f4f9b807bbdab7f") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "4a3ba4bf4ba7") + # PostgreSQL 3.3 (framework pre-1.8.2) + set(ORTHANC_FRAMEWORK_MD5 "2d82bddf06f9cfe82095495cb3b8abde") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "23ad1b9c7800") + # For "Toolbox::ReadJson()" and "Toolbox::Write{...}Json()" (pre-1.9.0) + set(ORTHANC_FRAMEWORK_MD5 "9af92080e57c60dd288eba46ce606c00") endif() endif() endif() @@ -524,6 +537,16 @@ include_directories(${DCMTK_INCLUDE_DIRS}) link_libraries(${DCMTK_LIBRARIES}) endif() + + # Optional component - OpenSSL + if (ENABLE_SSL) + include(FindOpenSSL) + if (NOT ${OPENSSL_FOUND}) + message(FATAL_ERROR "Unable to find OpenSSL") + endif() + include_directories(${OPENSSL_INCLUDE_DIR}) + link_libraries(${OPENSSL_LIBRARIES}) + endif() endif() # Look for Orthanc framework shared library diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/DownloadPackage.cmake --- a/Resources/Orthanc/CMake/DownloadPackage.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/DownloadPackage.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/LibCurlConfiguration.cmake --- a/Resources/Orthanc/CMake/LibCurlConfiguration.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/LibCurlConfiguration.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/CMake/OpenSslConfiguration.cmake --- a/Resources/Orthanc/CMake/OpenSslConfiguration.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/CMake/OpenSslConfiguration.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 Osimis S.A., Belgium # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp --- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Wed Jan 06 18:13:58 2021 +0100 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2020 Osimis S.A., Belgium + * Copyright (C) 2017-2021 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 @@ -24,9 +24,33 @@ #include #include #include + + #include +#include #include +#if !defined(JSONCPP_VERSION_MAJOR) || !defined(JSONCPP_VERSION_MINOR) +# error Cannot access the version of JsonCpp +#endif + + +/** + * We use deprecated "Json::Reader", "Json::StyledWriter" and + * "Json::FastWriter" if JsonCpp < 1.7.0. This choice is rather + * arbitrary, but if Json >= 1.9.0, gcc generates explicit deprecation + * warnings (clang was warning in earlier versions). For reference, + * these classes seem to have been deprecated since JsonCpp 1.4.0 (on + * February 2015) by the following changeset: + * https://github.com/open-source-parsers/jsoncpp/commit/8df98f6112890d6272734975dd6d70cf8999bb22 + **/ +#if (JSONCPP_VERSION_MAJOR >= 2 || \ + (JSONCPP_VERSION_MAJOR == 1 && JSONCPP_VERSION_MINOR >= 8)) +# define JSONCPP_USE_DEPRECATED 0 +#else +# define JSONCPP_USE_DEPRECATED 1 +#endif + #if !ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 2, 0) static const OrthancPluginErrorCode OrthancPluginErrorCode_NullPointer = OrthancPluginErrorCode_Plugin; @@ -202,10 +226,7 @@ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); } - const char* tmp = reinterpret_cast(buffer_.data); - - Json::Reader reader; - if (!reader.parse(tmp, tmp + buffer_.size, target)) + if (!ReadJson(target, buffer_.data, buffer_.size)) { LogError("Cannot convert some memory buffer to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); @@ -292,12 +313,75 @@ } + bool ReadJson(Json::Value& target, + const std::string& source) + { + return ReadJson(target, source.empty() ? NULL : source.c_str(), source.size()); + } + + + bool ReadJson(Json::Value& target, + const void* buffer, + size_t size) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::Reader reader; + return reader.parse(reinterpret_cast(buffer), + reinterpret_cast(buffer) + size, target); +#else + Json::CharReaderBuilder builder; + const std::unique_ptr reader(builder.newCharReader()); + assert(reader.get() != NULL); + JSONCPP_STRING err; + if (reader->parse(reinterpret_cast(buffer), + reinterpret_cast(buffer) + size, &target, &err)) + { + return true; + } + else + { + LogError("Cannot parse JSON: " + err); + return false; + } +#endif + } + + + void WriteFastJson(std::string& target, + const Json::Value& source) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::FastWriter writer; + target = writer.write(source); +#else + Json::StreamWriterBuilder builder; + builder.settings_["indentation"] = ""; + target = Json::writeString(builder, source); +#endif + } + + + void WriteStyledJson(std::string& target, + const Json::Value& source) + { +#if JSONCPP_USE_DEPRECATED == 1 + Json::StyledWriter writer; + target = writer.write(source); +#else + Json::StreamWriterBuilder builder; + builder.settings_["indentation"] = " "; + target = Json::writeString(builder, source); +#endif + } + + bool MemoryBuffer::RestApiPost(const std::string& uri, const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPost(uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPost(uri, s, applyPlugins); } @@ -305,8 +389,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPut(uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPut(uri, s, applyPlugins); } @@ -315,8 +400,8 @@ { Clear(); - Json::FastWriter writer; - std::string s = writer.write(tags); + std::string s; + WriteFastJson(s, tags); Check(OrthancPluginCreateDicom(GetGlobalContext(), &buffer_, s.c_str(), NULL, flags)); } @@ -327,8 +412,8 @@ { Clear(); - Json::FastWriter writer; - std::string s = writer.write(tags); + std::string s; + WriteFastJson(s, tags); Check(OrthancPluginCreateDicom(GetGlobalContext(), &buffer_, s.c_str(), pixelData.GetObject(), flags)); } @@ -390,8 +475,7 @@ ORTHANC_PLUGINS_THROW_EXCEPTION(InternalError); } - Json::Reader reader; - if (!reader.parse(str_, target)) + if (!ReadJson(target, str_)) { LogError("Cannot convert some memory buffer to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); @@ -1190,19 +1274,16 @@ #endif /* HAS_ORTHANC_PLUGIN_FIND_MATCHER == 1 */ void AnswerJson(const Json::Value& value, - OrthancPluginRestOutput* output - ) + OrthancPluginRestOutput* output) { - Json::StyledWriter writer; - std::string bodyString = writer.write(value); - + std::string bodyString; + WriteStyledJson(bodyString, value); OrthancPluginAnswerBuffer(GetGlobalContext(), output, bodyString.c_str(), bodyString.size(), "application/json"); } void AnswerString(const std::string& answer, const char* mimeType, - OrthancPluginRestOutput* output - ) + OrthancPluginRestOutput* output) { OrthancPluginAnswerBuffer(GetGlobalContext(), output, answer.c_str(), answer.size(), mimeType); } @@ -1324,8 +1405,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPost(result, uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPost(result, uri, s, applyPlugins); } @@ -1357,8 +1439,9 @@ const Json::Value& body, bool applyPlugins) { - Json::FastWriter writer; - return RestApiPut(result, uri, writer.write(body), applyPlugins); + std::string s; + WriteFastJson(s, body); + return RestApiPut(result, uri, s, applyPlugins); } @@ -2020,8 +2103,7 @@ } else { - Json::FastWriter writer; - content_ = writer.write(content); + WriteFastJson(content_, content); } } @@ -2041,8 +2123,7 @@ } else { - Json::FastWriter writer; - serialized_ = writer.write(serialized); + WriteFastJson(serialized_, serialized); hasSerialized_ = true; } } @@ -2902,8 +2983,7 @@ std::string body; Execute(answerHeaders, body); - Json::Reader reader; - if (!reader.parse(body, answerBody)) + if (!ReadJson(answerBody, body)) { LogError("Cannot convert HTTP answer body to JSON"); ORTHANC_PLUGINS_THROW_EXCEPTION(BadFileFormat); diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h --- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Wed Jan 06 18:13:58 2021 +0100 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2020 Osimis S.A., Belgium + * Copyright (C) 2017-2021 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 @@ -476,6 +476,19 @@ #endif + bool ReadJson(Json::Value& target, + const std::string& source); + + bool ReadJson(Json::Value& target, + const void* buffer, + size_t size); + + void WriteFastJson(std::string& target, + const Json::Value& source); + + void WriteStyledJson(std::string& target, + const Json::Value& source); + bool RestApiGet(Json::Value& result, const std::string& uri, bool applyPlugins); diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/Plugins/OrthancPluginException.h --- a/Resources/Orthanc/Plugins/OrthancPluginException.h Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginException.h Wed Jan 06 18:13:58 2021 +0100 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2020 Osimis S.A., Belgium + * Copyright (C) 2017-2021 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 diff -r 1a96ab7b6877 -r 21499c134785 Resources/Orthanc/Plugins/OrthancPluginsExports.cmake --- a/Resources/Orthanc/Plugins/OrthancPluginsExports.cmake Thu Dec 17 10:02:04 2020 +0100 +++ b/Resources/Orthanc/Plugins/OrthancPluginsExports.cmake Wed Jan 06 18:13:58 2021 +0100 @@ -1,7 +1,7 @@ # Orthanc - A Lightweight, RESTful DICOM Store # Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics # Department, University Hospital of Liege, Belgium -# Copyright (C) 2017-2020 Osimis S.A., Belgium +# Copyright (C) 2017-2021 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