[med-svn] [Git][med-team/orthanc][upstream] New upstream version 1.5.6+dfsg
Sebastien Jodogne
gitlab at salsa.debian.org
Sat Mar 2 08:29:35 GMT 2019
Sebastien Jodogne pushed to branch upstream at Debian Med / orthanc
Commits:
cf3958ca by jodogne-guest at 2019-03-01T16:43:59Z
New upstream version 1.5.6+dfsg
- - - - -
14 changed files:
- .hg_archival.txt
- Core/DicomParsing/DicomWebJsonVisitor.cpp
- Core/RestApi/RestApiOutput.cpp
- NEWS
- OrthancExplorer/query-retrieve.js
- OrthancServer/ServerIndex.cpp
- Resources/CMake/BoostConfiguration.cmake
- Resources/CMake/BoostConfiguration.sh
- Resources/CMake/DcmtkConfiguration.cmake
- Resources/CMake/DcmtkConfigurationStatic-3.6.2.cmake
- Resources/CMake/DcmtkConfigurationStatic-3.6.4.cmake
- Resources/CMake/OrthancFrameworkParameters.cmake
- Resources/DownloadOrthancFramework.cmake
- UnitTestsSources/FromDcmtkTests.cpp
Changes:
=====================================
.hg_archival.txt
=====================================
@@ -1,6 +1,6 @@
repo: 3959d33612ccaadc0d4d707227fbed09ac35e5fe
-node: 010d5e6edabed784325c43ce81ec140a6a9ccf84
-branch: Orthanc-1.5.5
+node: 56d7f3d50c89c6c66c9932621a1ae05403e34ee1
+branch: Orthanc-1.5.6
latesttag: dcmtk-3.6.1
-latesttagdistance: 806
-changessincelatesttag: 923
+latesttagdistance: 817
+changessincelatesttag: 934
=====================================
Core/DicomParsing/DicomWebJsonVisitor.cpp
=====================================
@@ -324,16 +324,25 @@ namespace Orthanc
Json::Value DicomWebJsonVisitor::FormatDouble(double value)
{
- long long a = boost::math::llround<double>(value);
+ try
+ {
+ long long a = boost::math::llround<double>(value);
- double d = fabs(value - static_cast<double>(a));
+ double d = fabs(value - static_cast<double>(a));
- if (d <= std::numeric_limits<double>::epsilon() * 100.0)
- {
- return FormatInteger(a);
+ if (d <= std::numeric_limits<double>::epsilon() * 100.0)
+ {
+ return FormatInteger(a);
+ }
+ else
+ {
+ return Json::Value(value);
+ }
}
- else
+ catch (boost::math::rounding_error&)
{
+ // Can occur if "long long" is too small to receive this value
+ // (e.g. infinity)
return Json::Value(value);
}
}
=====================================
Core/RestApi/RestApiOutput.cpp
=====================================
@@ -128,9 +128,29 @@ namespace Orthanc
MimeType contentType)
{
CheckStatus();
- output_.SetContentType(contentType);
- output_.Answer(buffer, length);
- alreadySent_ = true;
+
+ if (convertJsonToXml_ &&
+ contentType == MimeType_Json)
+ {
+ Json::Value json;
+ Json::Reader reader;
+ if (reader.parse(reinterpret_cast<const char*>(buffer),
+ reinterpret_cast<const char*>(buffer) + length, json))
+ {
+ AnswerJson(json);
+ }
+ else
+ {
+ throw OrthancException(ErrorCode_BadFileFormat,
+ "The REST API tries and answers with an invalid JSON file");
+ }
+ }
+ else
+ {
+ output_.SetContentType(contentType);
+ output_.Answer(buffer, length);
+ alreadySent_ = true;
+ }
}
void RestApiOutput::Redirect(const std::string& path)
=====================================
NEWS
=====================================
@@ -2,6 +2,25 @@ Pending changes in the mainline
===============================
+Version 1.5.6 (2019-03-01)
+==========================
+
+Orthanc Explorer
+----------------
+
+* If performing a Query/Retrieve operation, the default value for the
+ tags is set to an empty string instead of '*', which allows to match
+ even if the tag is not present. This allows malformed DICOM files to
+ be matched, even though they lack required tags such as "PatientSex"
+
+Maintenance
+-----------
+
+* Enlarge the support of JSON-to-XML conversion in the REST API
+* Fix missing DB transactions in some write operations
+* Fix performance issue in DICOM protocol by disabling Nagle's algorithm
+
+
Version 1.5.5 (2019-02-25)
==========================
=====================================
OrthancExplorer/query-retrieve.js
=====================================
@@ -84,11 +84,11 @@ $('#qr-submit').live('click', function() {
query = {
'Level' : 'Study',
'Query' : {
- 'AccessionNumber' : '*',
- 'PatientBirthDate' : '*',
- 'PatientID' : '*',
- 'PatientName' : '*',
- 'PatientSex' : '*',
+ 'AccessionNumber' : '',
+ 'PatientBirthDate' : '',
+ 'PatientID' : '',
+ 'PatientName' : '',
+ 'PatientSex' : '',
'StudyDate' : $('#qr-date').val(),
'StudyDescription' : '*'
}
=====================================
OrthancServer/ServerIndex.cpp
=====================================
@@ -1935,13 +1935,19 @@ namespace Orthanc
void ServerIndex::DeleteChanges()
{
boost::mutex::scoped_lock lock(mutex_);
+
+ Transaction transaction(*this);
db_.ClearChanges();
+ transaction.Commit(0);
}
void ServerIndex::DeleteExportedResources()
{
boost::mutex::scoped_lock lock(mutex_);
+
+ Transaction transaction(*this);
db_.ClearExportedResources();
+ transaction.Commit(0);
}
@@ -2235,7 +2241,10 @@ namespace Orthanc
const std::string& value)
{
boost::mutex::scoped_lock lock(mutex_);
+
+ Transaction transaction(*this);
db_.SetGlobalProperty(property, value);
+ transaction.Commit(0);
}
=====================================
Resources/CMake/BoostConfiguration.cmake
=====================================
@@ -55,8 +55,8 @@ if (BOOST_STATIC)
set(BOOST_NAME boost_1_69_0)
set(BOOST_VERSION 1.69.0)
- set(BOOST_BCP_SUFFIX bcpdigest-1.5.5)
- set(BOOST_MD5 "a5d027d6668b69ccee707c4ceaf2496e")
+ set(BOOST_BCP_SUFFIX bcpdigest-1.5.6)
+ set(BOOST_MD5 "579bccc0ea4d1a261c1d0c5e27446c3d")
set(BOOST_URL "http://orthanc.osimis.io/ThirdPartyDownloads/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz")
set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME})
=====================================
Resources/CMake/BoostConfiguration.sh
=====================================
@@ -24,7 +24,7 @@ set -u
## - Orthanc >= 1.5.5: Boost 1.69.0
BOOST_VERSION=1_69_0
-ORTHANC_VERSION=1.5.5
+ORTHANC_VERSION=1.5.6
rm -rf /tmp/boost_${BOOST_VERSION}
rm -rf /tmp/bcp/boost_${BOOST_VERSION}
@@ -35,7 +35,7 @@ tar xfz ./boost_${BOOST_VERSION}.tar.gz
echo "Generating the subset..."
mkdir -p /tmp/bcp/boost_${BOOST_VERSION}
-bcp --boost=/tmp/boost_${BOOST_VERSION} thread system locale date_time filesystem math/special_functions algorithm uuid atomic iostreams program_options numeric/ublas geometry polygon signals2 /tmp/bcp/boost_${BOOST_VERSION}
+bcp --boost=/tmp/boost_${BOOST_VERSION} thread system locale date_time filesystem math/special_functions algorithm uuid atomic iostreams program_options numeric/ublas geometry polygon signals2 chrono /tmp/bcp/boost_${BOOST_VERSION}
echo "Removing documentation..."
rm -rf /tmp/bcp/boost_${BOOST_VERSION}/libs/locale/doc/html
=====================================
Resources/CMake/DcmtkConfiguration.cmake
=====================================
@@ -88,6 +88,7 @@ if (STATIC_BUILD OR NOT USE_SYSTEM_DCMTK)
-DDCMTK_VERSION_NUMBER=${DCMTK_VERSION_NUMBER}
)
+
if (NOT ENABLE_DCMTK_LOG)
# Disable logging internal to DCMTK
# https://groups.google.com/d/msg/orthanc-users/v2SzzAmY948/VxT1QVGiBAAJ
=====================================
Resources/CMake/DcmtkConfigurationStatic-3.6.2.cmake
=====================================
@@ -179,3 +179,16 @@ endif()
#set_source_files_properties(${DCMTK_SOURCES}
# PROPERTIES COMPILE_DEFINITIONS
# "PACKAGE_VERSION=\"${DCMTK_PACKAGE_VERSION}\";PACKAGE_VERSION_NUMBER=\"${DCMTK_VERSION_NUMBER}\"")
+
+
+# Starting with DCMTK 3.6.2, the Nagle algorithm is not disabled by
+# default since this does not seem to be appropriate (anymore) for
+# most modern operating systems. In order to change this default, the
+# environment variable NO_TCPDELAY can be set to "1" (see envvars.txt
+# for details). Alternatively, the macro DISABLE_NAGLE_ALGORITHM can
+# be defined to change this setting at compilation time (see
+# macros.txt for details).
+# https://forum.dcmtk.org/viewtopic.php?t=4632
+add_definitions(
+ -DDISABLE_NAGLE_ALGORITHM=1
+ )
=====================================
Resources/CMake/DcmtkConfigurationStatic-3.6.4.cmake
=====================================
@@ -169,3 +169,16 @@ list(REMOVE_ITEM DCMTK_SOURCES
${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdictbi.cc
${DCMTK_SOURCES_DIR}/dcmdata/libsrc/mkdeftag.cc
)
+
+
+# Starting with DCMTK 3.6.2, the Nagle algorithm is not disabled by
+# default since this does not seem to be appropriate (anymore) for
+# most modern operating systems. In order to change this default, the
+# environment variable NO_TCPDELAY can be set to "1" (see envvars.txt
+# for details). Alternatively, the macro DISABLE_NAGLE_ALGORITHM can
+# be defined to change this setting at compilation time (see
+# macros.txt for details).
+# https://forum.dcmtk.org/viewtopic.php?t=4632
+add_definitions(
+ -DDISABLE_NAGLE_ALGORITHM=1
+ )
=====================================
Resources/CMake/OrthancFrameworkParameters.cmake
=====================================
@@ -3,7 +3,7 @@
#####################################################################
# Version of the build, should always be "mainline" except in release branches
-set(ORTHANC_VERSION "1.5.5")
+set(ORTHANC_VERSION "1.5.6")
# Version of the database schema. History:
# * Orthanc 0.1.0 -> Orthanc 0.3.0 = no versioning
=====================================
Resources/DownloadOrthancFramework.cmake
=====================================
@@ -101,6 +101,8 @@ if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
set(ORTHANC_FRAMEWORK_MD5 "bf2f5ed1adb8b0fc5f10d278e68e1dfe")
elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.4")
set(ORTHANC_FRAMEWORK_MD5 "404baef5d4c43e7c5d9410edda8ef5a5")
+ elseif (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.5.5")
+ set(ORTHANC_FRAMEWORK_MD5 "cfc437e0687ae4bd725fd93dc1f08bc4")
endif()
endif()
endif()
=====================================
UnitTestsSources/FromDcmtkTests.cpp
=====================================
@@ -1521,6 +1521,18 @@ static std::string DecodeFromSpecification(const std::string& s)
+// Compatibility wrapper
+static pugi::xpath_node SelectNode(const pugi::xml_document& doc,
+ const char* xpath)
+{
+#if PUGIXML_VERSION <= 140
+ return doc.select_single_node(xpath); // Deprecated in pugixml 1.5
+#else
+ return doc.select_node(xpath);
+#endif
+}
+
+
TEST(Toolbox, EncodingsKorean)
{
// http://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part05/sect_I.2.html
@@ -1569,37 +1581,36 @@ TEST(Toolbox, EncodingsKorean)
pugi::xml_document doc;
doc.load_buffer(xml.c_str(), xml.size());
- pugi::xpath_node node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]/Value");
+ pugi::xpath_node node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]/Value");
ASSERT_STREQ("ISO_IR 192", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]");
ASSERT_STREQ("CS", node.node().attribute("vr").value());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]");
ASSERT_STREQ("PN", node.node().attribute("vr").value());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/FamilyName");
ASSERT_STREQ("Hong", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/GivenName");
ASSERT_STREQ("Gildong", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/FamilyName");
ASSERT_EQ(utf8.substr(13, 3), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/GivenName");
ASSERT_EQ(utf8.substr(17, 6), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/FamilyName");
ASSERT_EQ(utf8.substr(24, 3), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/GivenName");
ASSERT_EQ(utf8.substr(28), node.node().text().as_string());
#endif
}
-
TEST(Toolbox, EncodingsJapaneseKanji)
{
// http://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part05/sect_H.3.html
@@ -1650,31 +1661,31 @@ TEST(Toolbox, EncodingsJapaneseKanji)
pugi::xml_document doc;
doc.load_buffer(xml.c_str(), xml.size());
- pugi::xpath_node node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]/Value");
+ pugi::xpath_node node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]/Value");
ASSERT_STREQ("ISO_IR 192", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00080005\"]");
ASSERT_STREQ("CS", node.node().attribute("vr").value());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]");
ASSERT_STREQ("PN", node.node().attribute("vr").value());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/FamilyName");
ASSERT_STREQ("Yamada", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Alphabetic/GivenName");
ASSERT_STREQ("Tarou", node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/FamilyName");
ASSERT_EQ(utf8.substr(13, 6), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Ideographic/GivenName");
ASSERT_EQ(utf8.substr(20, 6), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/FamilyName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/FamilyName");
ASSERT_EQ(utf8.substr(27, 9), node.node().text().as_string());
- node = doc.select_node("//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/GivenName");
+ node = SelectNode(doc, "//NativeDicomModel/DicomAttribute[@tag=\"00100010\"]/PersonName/Phonetic/GivenName");
ASSERT_EQ(utf8.substr(37), node.node().text().as_string());
#endif
}
View it on GitLab: https://salsa.debian.org/med-team/orthanc/commit/cf3958ca691c3af86a82ef7f144f47854aacde14
--
View it on GitLab: https://salsa.debian.org/med-team/orthanc/commit/cf3958ca691c3af86a82ef7f144f47854aacde14
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/20190302/770d30b6/attachment-0001.html>
More information about the debian-med-commit
mailing list