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]);