Mercurial > hg > orthanc
diff OrthancServer/Sources/OrthancConfiguration.cpp @ 4473:68f52897c119
new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 26 Jan 2021 14:48:10 +0100 |
parents | d9473bd5ed43 |
children | f8c1d94363b6 |
line wrap: on
line diff
--- a/OrthancServer/Sources/OrthancConfiguration.cpp Tue Jan 26 10:18:50 2021 +0100 +++ b/OrthancServer/Sources/OrthancConfiguration.cpp Tue Jan 26 14:48:10 2021 +0100 @@ -44,6 +44,8 @@ #include "ServerIndex.h" +#include <boost/regex.hpp> + static const char* const DICOM_MODALITIES = "DicomModalities"; static const char* const DICOM_MODALITIES_IN_DB = "DicomModalitiesInDatabase"; @@ -577,8 +579,15 @@ void OrthancConfiguration::LoadModalitiesAndPeers() { - LoadModalities(); - LoadPeers(); + if (serverIndex_ == NULL) + { + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + else + { + LoadModalities(); + LoadPeers(); + } } @@ -928,6 +937,54 @@ } + static void GetAcceptOption(std::set<DicomTransferSyntax>& target, + const OrthancConfiguration& configuration, + const std::string& optionName, + TransferSyntaxGroup optionGroup) + { + bool accept; + if (configuration.LookupBooleanParameter(accept, optionName)) + { + std::set<DicomTransferSyntax> group; + GetTransferSyntaxGroup(group, optionGroup); + + for (std::set<DicomTransferSyntax>::const_iterator + syntax = group.begin(); syntax != group.end(); ++syntax) + { + if (accept) + { + target.insert(*syntax); + } + else + { + target.insert(*syntax); + } + } + } + } + + + void OrthancConfiguration::GetAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target) const + { + target.clear(); + + // This is the list of the transfer syntaxes that were supported up to Orthanc 0.7.1 + target.insert(DicomTransferSyntax_LittleEndianExplicit); + target.insert(DicomTransferSyntax_BigEndianExplicit); + target.insert(DicomTransferSyntax_LittleEndianImplicit); + + // Groups of transfer syntaxes, supported since Orthanc 0.7.2 + GetAcceptOption(target, *this, "DeflatedTransferSyntaxAccepted", TransferSyntaxGroup_Deflated); + GetAcceptOption(target, *this, "JpegTransferSyntaxAccepted", TransferSyntaxGroup_Jpeg); + GetAcceptOption(target, *this, "Jpeg2000TransferSyntaxAccepted", TransferSyntaxGroup_Jpeg2000); + GetAcceptOption(target, *this, "JpegLosslessTransferSyntaxAccepted", TransferSyntaxGroup_JpegLossless); + GetAcceptOption(target, *this, "JpipTransferSyntaxAccepted", TransferSyntaxGroup_Jpip); + GetAcceptOption(target, *this, "Mpeg2TransferSyntaxAccepted", TransferSyntaxGroup_Mpeg2); + GetAcceptOption(target, *this, "Mpeg4TransferSyntaxAccepted", TransferSyntaxGroup_Mpeg4); + GetAcceptOption(target, *this, "RleTransferSyntaxAccepted", TransferSyntaxGroup_Rle); + } + + void OrthancConfiguration::DefaultExtractDicomSummary(DicomMap& target, const ParsedDicomFile& dicom) { @@ -958,4 +1015,60 @@ { dicom.HeaderToJson(target, DicomToJsonFormat_Full); } + + + static void AddTransferSyntaxes(std::set<DicomTransferSyntax>& target, + const std::string& source) + { + boost::regex pattern(Toolbox::WildcardToRegularExpression(source)); + + std::set<DicomTransferSyntax> allSyntaxes; + GetAllDicomTransferSyntaxes(allSyntaxes); + + for (std::set<DicomTransferSyntax>::const_iterator + syntax = allSyntaxes.begin(); syntax != allSyntaxes.end(); ++syntax) + { + if (regex_match(GetTransferSyntaxUid(*syntax), pattern)) + { + target.insert(*syntax); + } + } + } + + + void OrthancConfiguration::ParseAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target, + const std::string& source) + { + Json::Value json; + + if (Toolbox::ReadJson(json, source)) + { + if (json.type() == Json::stringValue) + { + AddTransferSyntaxes(target, json.asString()); + } + else if (json.type() == Json::arrayValue) + { + for (Json::Value::ArrayIndex i = 0; i < json.size(); i++) + { + if (json[i].type() == Json::stringValue) + { + AddTransferSyntaxes(target, json[i].asString()); + } + else + { + throw OrthancException(ErrorCode_BadFileFormat); + } + } + } + else + { + throw OrthancException(ErrorCode_BadFileFormat); + } + } + else + { + AddTransferSyntaxes(target, source); + } + } }