Mercurial > hg > orthanc
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 } |