Mercurial > hg > orthanc
diff OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp @ 5025:afa427f65444
Added an Asynchronous mode to /modalities/../move
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 21 Jun 2022 10:55:45 +0200 |
parents | c014ab79fca5 |
children | 98da039474b1 |
line wrap: on
line diff
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp Wed Jun 15 15:40:07 2022 +0200 +++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp Tue Jun 21 10:55:45 2022 +0200 @@ -1517,6 +1517,7 @@ { if (call.IsDocumentation()) { + OrthancRestApi::DocumentSubmitCommandsJob(call); call.GetDocumentation() .SetTag("Networking") .SetSummary("Trigger C-MOVE SCU") @@ -1534,12 +1535,12 @@ "Target AET that will be used by the remote DICOM modality as a target for its C-STORE SCU " "commands, defaults to `DicomAet` configuration option in order to do a simple query/retrieve", false) .SetRequestField(KEY_TIMEOUT, RestApiCallDocumentation::Type_Number, - "Timeout for the C-STORE command, in seconds", false) + "Timeout for the C-MOVE command, in seconds", false) .SetUriArgument("id", "Identifier of the modality of interest"); return; } - const ServerContext& context = OrthancRestApi::GetContext(call); + ServerContext& context = OrthancRestApi::GetContext(call); Json::Value request; @@ -1564,21 +1565,33 @@ const RemoteModalityParameters source = MyGetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - DicomAssociationParameters params(localAet, source); - InjectAssociationTimeout(params, request); // Handles KEY_TIMEOUT + std::unique_ptr<DicomMoveScuJob> job(new DicomMoveScuJob(context)); - DicomControlUserConnection connection(params); + job->SetQueryFormat(DicomToJsonFormat_Short); + + // QueryAccessor query(call); + job->SetTargetAet(targetAet); + job->SetLocalAet(localAet); + job->SetRemoteModality(source); + + if (request.isMember(KEY_TIMEOUT)) + { + job->SetTimeout(SerializationToolbox::ReadUnsignedInteger(request, KEY_TIMEOUT)); + } for (Json::Value::ArrayIndex i = 0; i < request[KEY_RESOURCES].size(); i++) { DicomMap resource; FromDcmtkBridge::FromJson(resource, request[KEY_RESOURCES][i], "Resources elements"); - - connection.Move(targetAet, level, resource); + + resource.SetValue(DICOM_TAG_QUERY_RETRIEVE_LEVEL, std::string(ResourceTypeToDicomQueryRetrieveLevel(level)), false); + + job->AddQuery(resource); } - // Move has succeeded - call.GetOutput().AnswerBuffer("{}", MimeType_Json); + OrthancRestApi::GetApi(call).SubmitCommandsJob + (call, job.release(), true /* synchronous by default */, request); + return; }