# HG changeset patch # User Alain Mazy # Date 1699904224 -3600 # Node ID c1b0f3c4e1f5cb02fe0fbb1e51c5c1421e8ac015 # Parent 7d2ba3ece4eeefc4b45307aa36879904adb8eb5c sync Orthanc code diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 MySQL/CMakeLists.txt --- a/MySQL/CMakeLists.txt Mon Aug 14 10:16:53 2023 +0200 +++ b/MySQL/CMakeLists.txt Mon Nov 13 20:37:04 2023 +0100 @@ -130,6 +130,9 @@ add_dependencies(FrameworkForPlugins AutogeneratedTarget) +DefineSourceBasenameForTarget(OrthancMySQLIndex) +DefineSourceBasenameForTarget(OrthancMySQLStorage) + target_link_libraries(OrthancMySQLIndex FrameworkForPlugins) target_link_libraries(OrthancMySQLStorage FrameworkForPlugins) diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Odbc/CMakeLists.txt --- a/Odbc/CMakeLists.txt Mon Aug 14 10:16:53 2023 +0200 +++ b/Odbc/CMakeLists.txt Mon Nov 13 20:37:04 2023 +0100 @@ -150,6 +150,9 @@ COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=1 ) +DefineSourceBasenameForTarget(OrthancOdbcIndex) +DefineSourceBasenameForTarget(OrthancOdbcStorage) + install( TARGETS OrthancOdbcIndex OrthancOdbcStorage RUNTIME DESTINATION lib # Destination for Windows @@ -174,3 +177,5 @@ set_target_properties(UnitTests PROPERTIES COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=0 ) + +DefineSourceBasenameForTarget(UnitTests) \ No newline at end of file diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 PostgreSQL/CMakeLists.txt --- a/PostgreSQL/CMakeLists.txt Mon Aug 14 10:16:53 2023 +0200 +++ b/PostgreSQL/CMakeLists.txt Mon Nov 13 20:37:04 2023 +0100 @@ -155,6 +155,10 @@ COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=1 ) +DefineSourceBasenameForTarget(OrthancPostgreSQLIndex) +DefineSourceBasenameForTarget(OrthancPostgreSQLStorage) + + install( TARGETS OrthancPostgreSQLIndex OrthancPostgreSQLStorage RUNTIME DESTINATION lib # Destination for Windows @@ -178,3 +182,5 @@ set_target_properties(UnitTests PROPERTIES COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=0 ) + +DefineSourceBasenameForTarget(UnitTests) diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/CMake/Compiler.cmake --- a/Resources/Orthanc/CMake/Compiler.cmake Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/CMake/Compiler.cmake Mon Nov 13 20:37:04 2023 +0100 @@ -263,3 +263,24 @@ # preceding batches. https://cmake.org/Bug/view.php?id=14874 set(CMAKE_CXX_ARCHIVE_APPEND " q ") endif() + + +# This function defines macro "__ORTHANC_FILE__" as a replacement to +# macro "__FILE__", as the latter leaks the full path of the source +# files in the binaries +# https://stackoverflow.com/questions/8487986/file-macro-shows-full-path +# https://twitter.com/wget42/status/1676877802375634944?s=20 +function(DefineSourceBasenameForTarget targetname) + # Microsoft Visual Studio is extremely slow if using + # "set_property()", we only enable this feature for gcc and clang + if (CMAKE_COMPILER_IS_GNUCXX OR + CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + get_target_property(source_files "${targetname}" SOURCES) + foreach(sourcefile ${source_files}) + get_filename_component(basename "${sourcefile}" NAME) + set_property( + SOURCE "${sourcefile}" APPEND + PROPERTY COMPILE_DEFINITIONS "__ORTHANC_FILE__=\"${basename}\"") + endforeach() + endif() +endfunction() diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/CMake/DownloadOrthancFramework.cmake --- a/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/CMake/DownloadOrthancFramework.cmake Mon Nov 13 20:37:04 2023 +0100 @@ -153,9 +153,11 @@ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.11.2") set(ORTHANC_FRAMEWORK_MD5 "ede3de356493a8868545f8cb4b8bc8b5") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.11.3") - set(ORTHANC_FRAMEWORK_MD5 "5c1b11009d782f248739919db6bf7f7a") + set(ORTHANC_FRAMEWORK_MD5 "f941c0f5771db7616e7b7961026a60e2") elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.0") set(ORTHANC_FRAMEWORK_MD5 "d32a0cde03b6eb603d8dd2b33d38bf1b") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.12.1") + set(ORTHANC_FRAMEWORK_MD5 "8a435140efc8ff4a01d8242f092f21de") # Below this point are development snapshots that were used to # release some plugin, before an official release of the Orthanc @@ -179,6 +181,9 @@ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "b2e08d83e21d") # WSI 1.1 (framework pre-1.10.0), to remove "-std=c++11" set(ORTHANC_FRAMEWORK_MD5 "2eaa073cbb4b44ffba199ad93393b2b1") + elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "daf4807631c5") + # DICOMweb 1.15 (framework pre-1.12.2) + set(ORTHANC_FRAMEWORK_MD5 "c644aff2817306b3207c98c92e43f35f") endif() endif() endif() @@ -266,7 +271,7 @@ else() message("Forking the Orthanc source repository using Mercurial") execute_process( - COMMAND ${ORTHANC_FRAMEWORK_HG} clone "https://hg.orthanc-server.com/orthanc/" + COMMAND ${ORTHANC_FRAMEWORK_HG} clone "https://orthanc.uclouvain.be/hg/orthanc/" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE Failure ) diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/CMake/DownloadPackage.cmake --- a/Resources/Orthanc/CMake/DownloadPackage.cmake Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/CMake/DownloadPackage.cmake Mon Nov 13 20:37:04 2023 +0100 @@ -101,19 +101,26 @@ message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON") endif() - if ("${MD5}" STREQUAL "no-check") - message(WARNING "Not checking the MD5 of: ${Url}") - file(DOWNLOAD "${Url}" "${TMP_PATH}" - SHOW_PROGRESS TIMEOUT 300 INACTIVITY_TIMEOUT 60 - STATUS Failure) - else() - file(DOWNLOAD "${Url}" "${TMP_PATH}" - SHOW_PROGRESS TIMEOUT 300 INACTIVITY_TIMEOUT 60 - EXPECTED_MD5 "${MD5}" STATUS Failure) - endif() + foreach (retry RANGE 1 5) # Retries 5 times + if ("${MD5}" STREQUAL "no-check") + message(WARNING "Not checking the MD5 of: ${Url}") + file(DOWNLOAD "${Url}" "${TMP_PATH}" + SHOW_PROGRESS TIMEOUT 30 INACTIVITY_TIMEOUT 10 + STATUS Failure) + else() + file(DOWNLOAD "${Url}" "${TMP_PATH}" + SHOW_PROGRESS TIMEOUT 30 INACTIVITY_TIMEOUT 10 + EXPECTED_MD5 "${MD5}" STATUS Failure) + endif() - list(GET Failure 0 Status) + list(GET Failure 0 Status) + if (Status EQUAL 0) + break() # Successful download + endif() + endforeach() + if (NOT Status EQUAL 0) + file(REMOVE ${TMP_PATH}) message(FATAL_ERROR "Cannot download file: ${Url}") endif() diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/Databases/ISqlLookupFormatter.cpp --- a/Resources/Orthanc/Databases/ISqlLookupFormatter.cpp Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/Databases/ISqlLookupFormatter.cpp Mon Nov 13 20:37:04 2023 +0100 @@ -32,15 +32,16 @@ #if ORTHANC_BUILDING_SERVER_LIBRARY == 1 # include "../../../OrthancFramework/Sources/OrthancException.h" +# include "../../../OrthancFramework/Sources/Toolbox.h" #else # include +# include #endif #include "DatabaseConstraint.h" #include #include -#include namespace Orthanc @@ -303,14 +304,11 @@ } } - static bool FormatComparisonExperimental(std::string& target, - ISqlLookupFormatter& formatter, - const DatabaseConstraint& constraint, - //size_t index, - bool escapeBrackets) + static bool FormatComparison2(std::string& target, + ISqlLookupFormatter& formatter, + const DatabaseConstraint& constraint, + bool escapeBrackets) { - //std::string tag = "t" + boost::lexical_cast(index); - std::string comparison; std::string tagFilter = ("tagGroup = " + boost::lexical_cast(constraint.GetTag().GetGroup()) + " AND tagElement = " + boost::lexical_cast(constraint.GetTag().GetElement())); @@ -635,7 +633,7 @@ { std::string comparison; - if (FormatComparisonExperimental(comparison, formatter, lookup[i], escapeBrackets)) + if (FormatComparison2(comparison, formatter, lookup[i], escapeBrackets)) { if (!comparison.empty()) { diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp --- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.cpp Mon Nov 13 20:37:04 2023 +0100 @@ -79,6 +79,10 @@ } } + void ResetGlobalContext() + { + globalContext_ = NULL; + } bool HasGlobalContext() { @@ -1670,15 +1674,16 @@ return true; } +#ifdef _MSC_VER +#define ORTHANC_SCANF sscanf_s +#else +#define ORTHANC_SCANF sscanf +#endif + // Parse the version - int aa, bb, cc; - if ( -#ifdef _MSC_VER - sscanf_s -#else - sscanf -#endif - (version, "%4d.%4d.%4d", &aa, &bb, &cc) != 3 || + int aa, bb, cc = 0; + if ((ORTHANC_SCANF(version, "%4d.%4d.%4d", &aa, &bb, &cc) != 3 && + ORTHANC_SCANF(version, "%4d.%4d", &aa, &bb) != 2) || aa < 0 || bb < 0 || cc < 0) @@ -3752,6 +3757,27 @@ #endif +#if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 1) + DicomInstance* DicomInstance::Load(const std::string& instanceId, + OrthancPluginLoadDicomInstanceMode mode) + { + OrthancPluginDicomInstance* instance = OrthancPluginLoadDicomInstance( + GetGlobalContext(), instanceId.c_str(), mode); + + if (instance == NULL) + { + ORTHANC_PLUGINS_THROW_EXCEPTION(Plugin); + } + else + { + boost::movelib::unique_ptr result(new DicomInstance(instance)); + result->toFree_ = true; + return result.release(); + } + } +#endif + + #if HAS_ORTHANC_PLUGIN_WEBDAV == 1 static std::vector WebDavConvertPath(uint32_t pathSize, const char* const* pathItems) diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h --- a/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h Mon Nov 13 20:37:04 2023 +0100 @@ -137,6 +137,8 @@ void SetGlobalContext(OrthancPluginContext* context); + void ResetGlobalContext(); + bool HasGlobalContext(); OrthancPluginContext* GetGlobalContext(); @@ -1264,6 +1266,11 @@ ~DicomInstance(); + const OrthancPluginDicomInstance* GetObject() const + { + return instance_; + } + std::string GetRemoteAet() const; const void* GetBuffer() const @@ -1318,6 +1325,11 @@ size_t size, const std::string& transferSyntax); #endif + +#if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 1) + static DicomInstance* Load(const std::string& instanceId, + OrthancPluginLoadDicomInstanceMode mode); +#endif }; // helper method to convert Http headers from the plugin SDK to a std::map diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 Resources/SyncOrthancFolder.py --- a/Resources/SyncOrthancFolder.py Mon Aug 14 10:16:53 2023 +0200 +++ b/Resources/SyncOrthancFolder.py Mon Nov 13 20:37:04 2023 +0100 @@ -19,7 +19,7 @@ PLUGIN_SDK_VERSION_OLD = [ '0.9.5', '1.4.0', '1.5.2', '1.5.4' ] PLUGIN_SDK_VERSION_NEW = [ '1.9.2', '1.12.0' ] HAS_PROTOCOL_BUFFERS = [ '1.12.0' ] -REPOSITORY = 'https://hg.orthanc-server.com/orthanc/raw-file' +REPOSITORY = 'https://orthanc.uclouvain.be/hg/orthanc/raw-file' FILES = [ ('default', 'OrthancFramework/Resources/CMake/AutoGeneratedCode.cmake', 'CMake'), diff -r 7d2ba3ece4ee -r c1b0f3c4e1f5 SQLite/CMakeLists.txt --- a/SQLite/CMakeLists.txt Mon Aug 14 10:16:53 2023 +0200 +++ b/SQLite/CMakeLists.txt Mon Nov 13 20:37:04 2023 +0100 @@ -97,6 +97,8 @@ COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=1 ) +DefineSourceBasenameForTarget(OrthancSQLiteIndex) + install( TARGETS OrthancSQLiteIndex # OrthancSQLiteStorage TODO RUNTIME DESTINATION lib # Destination for Windows @@ -117,3 +119,5 @@ set_target_properties(UnitTests PROPERTIES COMPILE_FLAGS -DORTHANC_ENABLE_LOGGING_PLUGIN=0 ) + +DefineSourceBasenameForTarget(UnitTests) \ No newline at end of file