Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 3870:09798f2b985f transcoding
added a Timeout argument to every DICOM command + 'TargetAet' not mandatory anymore in /retrieve
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Wed, 29 Apr 2020 12:26:51 +0200 |
parents | 9973d10bc5c4 |
children | 2effa961f67f |
comparison
equal
deleted
inserted
replaced
3869:c23ef85c7d9c | 3870:09798f2b985f |
---|---|
78 | 78 |
79 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); | 79 const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); |
80 RemoteModalityParameters remote = | 80 RemoteModalityParameters remote = |
81 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 81 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
82 | 82 |
83 Json::Value request; | |
84 call.ParseJsonRequest(request); | |
85 int timeout = Toolbox::GetJsonIntegerField(request, "Timeout", -1); | |
86 | |
83 try | 87 try |
84 { | 88 { |
85 DicomControlUserConnection connection(localAet, remote); | 89 DicomControlUserConnection connection(localAet, remote); |
86 | 90 |
91 // New in Orthanc 1.7.0 | |
92 if (timeout != -1) | |
93 { | |
94 connection.SetTimeout(timeout); | |
95 } | |
96 | |
87 if (connection.Echo()) | 97 if (connection.Echo()) |
88 { | 98 { |
89 // Echo has succeeded | 99 // Echo has succeeded |
90 call.GetOutput().AnswerBuffer("{}", MimeType_Json); | 100 call.GetOutput().AnswerBuffer("{}", MimeType_Json); |
91 return; | 101 return; |
603 size_t index) | 613 size_t index) |
604 { | 614 { |
605 ServerContext& context = OrthancRestApi::GetContext(call); | 615 ServerContext& context = OrthancRestApi::GetContext(call); |
606 | 616 |
607 std::string targetAet; | 617 std::string targetAet; |
618 int timeout = -1; | |
608 | 619 |
609 Json::Value body; | 620 Json::Value body; |
610 if (call.ParseJsonRequest(body)) | 621 if (call.ParseJsonRequest(body)) |
611 { | 622 { |
612 targetAet = SerializationToolbox::ReadString(body, "TargetAet"); | 623 targetAet = Toolbox::GetJsonStringField(body, "TargetAet", context.GetDefaultLocalApplicationEntityTitle()); |
624 timeout = Toolbox::GetJsonIntegerField(body, "Timeout", -1); | |
613 } | 625 } |
614 else | 626 else |
615 { | 627 { |
616 body = Json::objectValue; | 628 body = Json::objectValue; |
617 call.BodyToString(targetAet); | 629 if (call.GetBodySize() > 0) |
630 { | |
631 call.BodyToString(targetAet); | |
632 } | |
633 else | |
634 { | |
635 targetAet = context.GetDefaultLocalApplicationEntityTitle(); | |
636 } | |
618 } | 637 } |
619 | 638 |
620 std::unique_ptr<DicomMoveScuJob> job(new DicomMoveScuJob(context)); | 639 std::unique_ptr<DicomMoveScuJob> job(new DicomMoveScuJob(context)); |
621 | 640 |
622 { | 641 { |
623 QueryAccessor query(call); | 642 QueryAccessor query(call); |
624 job->SetTargetAet(targetAet); | 643 job->SetTargetAet(targetAet); |
625 job->SetLocalAet(query.GetHandler().GetLocalAet()); | 644 job->SetLocalAet(query.GetHandler().GetLocalAet()); |
626 job->SetRemoteModality(query.GetHandler().GetRemoteModality()); | 645 job->SetRemoteModality(query.GetHandler().GetRemoteModality()); |
646 job->SetTimeout(timeout); | |
627 | 647 |
628 LOG(WARNING) << "Driving C-Move SCU on remote modality " | 648 LOG(WARNING) << "Driving C-Move SCU on remote modality " |
629 << query.GetHandler().GetRemoteModality().GetApplicationEntityTitle() | 649 << query.GetHandler().GetRemoteModality().GetApplicationEntityTitle() |
630 << " to target modality " << targetAet; | 650 << " to target modality " << targetAet; |
631 | 651 |
951 (request, "LocalAet", context.GetDefaultLocalApplicationEntityTitle()); | 971 (request, "LocalAet", context.GetDefaultLocalApplicationEntityTitle()); |
952 std::string moveOriginatorAET = Toolbox::GetJsonStringField | 972 std::string moveOriginatorAET = Toolbox::GetJsonStringField |
953 (request, "MoveOriginatorAet", context.GetDefaultLocalApplicationEntityTitle()); | 973 (request, "MoveOriginatorAet", context.GetDefaultLocalApplicationEntityTitle()); |
954 int moveOriginatorID = Toolbox::GetJsonIntegerField | 974 int moveOriginatorID = Toolbox::GetJsonIntegerField |
955 (request, "MoveOriginatorID", 0 /* By default, not a C-MOVE */); | 975 (request, "MoveOriginatorID", 0 /* By default, not a C-MOVE */); |
976 int timeout = Toolbox::GetJsonIntegerField | |
977 (request, "Timeout", -1); | |
956 | 978 |
957 job->SetLocalAet(localAet); | 979 job->SetLocalAet(localAet); |
958 job->SetRemoteModality(MyGetModalityUsingSymbolicName(remote)); | 980 job->SetRemoteModality(MyGetModalityUsingSymbolicName(remote)); |
959 | 981 |
960 if (moveOriginatorID != 0) | 982 if (moveOriginatorID != 0) |
965 // New in Orthanc 1.6.0 | 987 // New in Orthanc 1.6.0 |
966 if (Toolbox::GetJsonBooleanField(request, "StorageCommitment", false)) | 988 if (Toolbox::GetJsonBooleanField(request, "StorageCommitment", false)) |
967 { | 989 { |
968 job->EnableStorageCommitment(true); | 990 job->EnableStorageCommitment(true); |
969 } | 991 } |
992 | |
993 // New in Orthanc 1.7.0 | |
994 job->SetTimeout(timeout); | |
970 | 995 |
971 OrthancRestApi::GetApi(call).SubmitCommandsJob | 996 OrthancRestApi::GetApi(call).SubmitCommandsJob |
972 (call, job.release(), true /* synchronous by default */, request); | 997 (call, job.release(), true /* synchronous by default */, request); |
973 } | 998 } |
974 | 999 |
1020 | 1045 |
1021 std::string localAet = Toolbox::GetJsonStringField | 1046 std::string localAet = Toolbox::GetJsonStringField |
1022 (request, "LocalAet", context.GetDefaultLocalApplicationEntityTitle()); | 1047 (request, "LocalAet", context.GetDefaultLocalApplicationEntityTitle()); |
1023 std::string targetAet = Toolbox::GetJsonStringField | 1048 std::string targetAet = Toolbox::GetJsonStringField |
1024 (request, "TargetAet", context.GetDefaultLocalApplicationEntityTitle()); | 1049 (request, "TargetAet", context.GetDefaultLocalApplicationEntityTitle()); |
1050 int timeout = Toolbox::GetJsonIntegerField | |
1051 (request, "Timeout", -1); | |
1025 | 1052 |
1026 const RemoteModalityParameters source = | 1053 const RemoteModalityParameters source = |
1027 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); | 1054 MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); |
1028 | 1055 |
1029 DicomControlUserConnection connection(localAet, source); | 1056 DicomControlUserConnection connection(localAet, source); |
1057 | |
1058 if (timeout > -1) | |
1059 { | |
1060 connection.SetTimeout(timeout); | |
1061 } | |
1030 | 1062 |
1031 for (Json::Value::ArrayIndex i = 0; i < request[KEY_RESOURCES].size(); i++) | 1063 for (Json::Value::ArrayIndex i = 0; i < request[KEY_RESOURCES].size(); i++) |
1032 { | 1064 { |
1033 DicomMap resource; | 1065 DicomMap resource; |
1034 FromDcmtkBridge::FromJson(resource, request[KEY_RESOURCES][i]); | 1066 FromDcmtkBridge::FromJson(resource, request[KEY_RESOURCES][i]); |