comparison 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
comparison
equal deleted inserted replaced
4472:28a4baadde17 4473:68f52897c119
42 #include "../../OrthancFramework/Sources/TemporaryFile.h" 42 #include "../../OrthancFramework/Sources/TemporaryFile.h"
43 #include "../../OrthancFramework/Sources/Toolbox.h" 43 #include "../../OrthancFramework/Sources/Toolbox.h"
44 44
45 #include "ServerIndex.h" 45 #include "ServerIndex.h"
46 46
47 #include <boost/regex.hpp>
48
47 49
48 static const char* const DICOM_MODALITIES = "DicomModalities"; 50 static const char* const DICOM_MODALITIES = "DicomModalities";
49 static const char* const DICOM_MODALITIES_IN_DB = "DicomModalitiesInDatabase"; 51 static const char* const DICOM_MODALITIES_IN_DB = "DicomModalitiesInDatabase";
50 static const char* const ORTHANC_PEERS = "OrthancPeers"; 52 static const char* const ORTHANC_PEERS = "OrthancPeers";
51 static const char* const ORTHANC_PEERS_IN_DB = "OrthancPeersInDatabase"; 53 static const char* const ORTHANC_PEERS_IN_DB = "OrthancPeersInDatabase";
575 } 577 }
576 578
577 579
578 void OrthancConfiguration::LoadModalitiesAndPeers() 580 void OrthancConfiguration::LoadModalitiesAndPeers()
579 { 581 {
580 LoadModalities(); 582 if (serverIndex_ == NULL)
581 LoadPeers(); 583 {
584 throw OrthancException(ErrorCode_BadSequenceOfCalls);
585 }
586 else
587 {
588 LoadModalities();
589 LoadPeers();
590 }
582 } 591 }
583 592
584 593
585 void OrthancConfiguration::RegisterFont(ServerResources::FileResourceId resource) 594 void OrthancConfiguration::RegisterFont(ServerResources::FileResourceId resource)
586 { 595 {
926 // New configuration option in Orthanc 1.6.0 935 // New configuration option in Orthanc 1.6.0
927 return GetStringParameter("DefaultPrivateCreator", ""); 936 return GetStringParameter("DefaultPrivateCreator", "");
928 } 937 }
929 938
930 939
940 static void GetAcceptOption(std::set<DicomTransferSyntax>& target,
941 const OrthancConfiguration& configuration,
942 const std::string& optionName,
943 TransferSyntaxGroup optionGroup)
944 {
945 bool accept;
946 if (configuration.LookupBooleanParameter(accept, optionName))
947 {
948 std::set<DicomTransferSyntax> group;
949 GetTransferSyntaxGroup(group, optionGroup);
950
951 for (std::set<DicomTransferSyntax>::const_iterator
952 syntax = group.begin(); syntax != group.end(); ++syntax)
953 {
954 if (accept)
955 {
956 target.insert(*syntax);
957 }
958 else
959 {
960 target.insert(*syntax);
961 }
962 }
963 }
964 }
965
966
967 void OrthancConfiguration::GetAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target) const
968 {
969 target.clear();
970
971 // This is the list of the transfer syntaxes that were supported up to Orthanc 0.7.1
972 target.insert(DicomTransferSyntax_LittleEndianExplicit);
973 target.insert(DicomTransferSyntax_BigEndianExplicit);
974 target.insert(DicomTransferSyntax_LittleEndianImplicit);
975
976 // Groups of transfer syntaxes, supported since Orthanc 0.7.2
977 GetAcceptOption(target, *this, "DeflatedTransferSyntaxAccepted", TransferSyntaxGroup_Deflated);
978 GetAcceptOption(target, *this, "JpegTransferSyntaxAccepted", TransferSyntaxGroup_Jpeg);
979 GetAcceptOption(target, *this, "Jpeg2000TransferSyntaxAccepted", TransferSyntaxGroup_Jpeg2000);
980 GetAcceptOption(target, *this, "JpegLosslessTransferSyntaxAccepted", TransferSyntaxGroup_JpegLossless);
981 GetAcceptOption(target, *this, "JpipTransferSyntaxAccepted", TransferSyntaxGroup_Jpip);
982 GetAcceptOption(target, *this, "Mpeg2TransferSyntaxAccepted", TransferSyntaxGroup_Mpeg2);
983 GetAcceptOption(target, *this, "Mpeg4TransferSyntaxAccepted", TransferSyntaxGroup_Mpeg4);
984 GetAcceptOption(target, *this, "RleTransferSyntaxAccepted", TransferSyntaxGroup_Rle);
985 }
986
987
931 void OrthancConfiguration::DefaultExtractDicomSummary(DicomMap& target, 988 void OrthancConfiguration::DefaultExtractDicomSummary(DicomMap& target,
932 const ParsedDicomFile& dicom) 989 const ParsedDicomFile& dicom)
933 { 990 {
934 std::set<DicomTag> ignoreTagLength; 991 std::set<DicomTag> ignoreTagLength;
935 dicom.ExtractDicomSummary(target, ORTHANC_MAXIMUM_TAG_LENGTH, ignoreTagLength); 992 dicom.ExtractDicomSummary(target, ORTHANC_MAXIMUM_TAG_LENGTH, ignoreTagLength);
956 void OrthancConfiguration::DefaultDicomHeaderToJson(Json::Value& target, 1013 void OrthancConfiguration::DefaultDicomHeaderToJson(Json::Value& target,
957 const ParsedDicomFile& dicom) 1014 const ParsedDicomFile& dicom)
958 { 1015 {
959 dicom.HeaderToJson(target, DicomToJsonFormat_Full); 1016 dicom.HeaderToJson(target, DicomToJsonFormat_Full);
960 } 1017 }
1018
1019
1020 static void AddTransferSyntaxes(std::set<DicomTransferSyntax>& target,
1021 const std::string& source)
1022 {
1023 boost::regex pattern(Toolbox::WildcardToRegularExpression(source));
1024
1025 std::set<DicomTransferSyntax> allSyntaxes;
1026 GetAllDicomTransferSyntaxes(allSyntaxes);
1027
1028 for (std::set<DicomTransferSyntax>::const_iterator
1029 syntax = allSyntaxes.begin(); syntax != allSyntaxes.end(); ++syntax)
1030 {
1031 if (regex_match(GetTransferSyntaxUid(*syntax), pattern))
1032 {
1033 target.insert(*syntax);
1034 }
1035 }
1036 }
1037
1038
1039 void OrthancConfiguration::ParseAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target,
1040 const std::string& source)
1041 {
1042 Json::Value json;
1043
1044 if (Toolbox::ReadJson(json, source))
1045 {
1046 if (json.type() == Json::stringValue)
1047 {
1048 AddTransferSyntaxes(target, json.asString());
1049 }
1050 else if (json.type() == Json::arrayValue)
1051 {
1052 for (Json::Value::ArrayIndex i = 0; i < json.size(); i++)
1053 {
1054 if (json[i].type() == Json::stringValue)
1055 {
1056 AddTransferSyntaxes(target, json[i].asString());
1057 }
1058 else
1059 {
1060 throw OrthancException(ErrorCode_BadFileFormat);
1061 }
1062 }
1063 }
1064 else
1065 {
1066 throw OrthancException(ErrorCode_BadFileFormat);
1067 }
1068 }
1069 else
1070 {
1071 AddTransferSyntaxes(target, source);
1072 }
1073 }
961 } 1074 }