Mercurial > hg > orthanc
diff OrthancServer/OrthancRestApi/OrthancRestModalities.cpp @ 1427:d710ea64f0fd
Custom setting of the local AET during C-Store SCU (both in Lua and in the REST API)
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 29 Jun 2015 12:42:54 +0200 |
parents | b22ba8c5edbe |
children | 0a355eeeb351 |
line wrap: on
line diff
--- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Fri Jun 26 16:30:51 2015 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Mon Jun 29 12:42:54 2015 +0200 @@ -54,8 +54,9 @@ { ServerContext& context = OrthancRestApi::GetContext(call); + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); try { @@ -173,8 +174,9 @@ return; } + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); DicomFindAnswers answers; FindPatient(answers, locker.GetConnection(), fields); @@ -202,8 +204,9 @@ return; } + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); DicomFindAnswers answers; FindStudy(answers, locker.GetConnection(), fields); @@ -232,8 +235,9 @@ return; } + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); DicomFindAnswers answers; FindSeries(answers, locker.GetConnection(), fields); @@ -263,8 +267,9 @@ return; } + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); DicomFindAnswers answers; FindInstance(answers, locker.GetConnection(), fields); @@ -287,8 +292,9 @@ return; } + const std::string& localAet = context.GetDefaultLocalApplicationEntityTitle(); RemoteModalityParameters remote = Configuration::GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); - ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), remote); + ReusableDicomUserConnection::Locker locker(context.GetReusableDicomUserConnection(), localAet, remote); DicomFindAnswers patients; FindPatient(patients, locker.GetConnection(), m); @@ -547,7 +553,8 @@ * DICOM C-Store SCU ***************************************************************************/ - static bool GetInstancesToExport(std::list<std::string>& instances, + static bool GetInstancesToExport(Json::Value& request, + std::list<std::string>& instances, const std::string& remote, RestApiPostCall& call) { @@ -555,7 +562,7 @@ std::string stripped = Toolbox::StripSpaces(call.GetPostBody()); - Json::Value request; + request = Json::objectValue; if (Toolbox::IsSHA1(stripped)) { // This is for compatibility with Orthanc <= 0.5.1. @@ -575,41 +582,55 @@ } context.GetIndex().GetChildInstances(instances, request.asString()); + return true; } - else if (request.isArray()) - { - for (Json::Value::ArrayIndex i = 0; i < request.size(); i++) - { - if (!request[i].isString()) - { - return false; - } - std::string stripped = Toolbox::StripSpaces(request[i].asString()); - if (!Toolbox::IsSHA1(stripped)) - { - return false; - } - - if (Configuration::GetGlobalBoolParameter("LogExportedResources", true)) - { - context.GetIndex().LogExportedResource(stripped, remote); - } - - std::list<std::string> tmp; - context.GetIndex().GetChildInstances(tmp, stripped); - - for (std::list<std::string>::const_iterator - it = tmp.begin(); it != tmp.end(); ++it) - { - instances.push_back(*it); - } - } + const Json::Value* resources; + if (request.isArray()) + { + resources = &request; } else { - // Neither a string, nor a list of strings. Bad request. - return false; + if (request.type() != Json::objectValue || + !request.isMember("Resources")) + { + return false; + } + + resources = &request["Resources"]; + if (!resources->isArray()) + { + return false; + } + } + + for (Json::Value::ArrayIndex i = 0; i < resources->size(); i++) + { + if (!(*resources) [i].isString()) + { + return false; + } + + std::string stripped = Toolbox::StripSpaces((*resources) [i].asString()); + if (!Toolbox::IsSHA1(stripped)) + { + return false; + } + + if (Configuration::GetGlobalBoolParameter("LogExportedResources", true)) + { + context.GetIndex().LogExportedResource(stripped, remote); + } + + std::list<std::string> tmp; + context.GetIndex().GetChildInstances(tmp, stripped); + + for (std::list<std::string>::const_iterator + it = tmp.begin(); it != tmp.end(); ++it) + { + instances.push_back(*it); + } } return true; @@ -622,19 +643,26 @@ std::string remote = call.GetUriComponent("id", ""); + Json::Value request; std::list<std::string> instances; - if (!GetInstancesToExport(instances, remote, call)) + if (!GetInstancesToExport(request, instances, remote, call)) { return; } + std::string localAet = context.GetDefaultLocalApplicationEntityTitle(); + if (request.isMember("LocalAet")) + { + localAet = request["LocalAet"].asString(); + } + RemoteModalityParameters p = Configuration::GetModalityUsingSymbolicName(remote); ServerJob job; for (std::list<std::string>::const_iterator it = instances.begin(); it != instances.end(); ++it) { - job.AddCommand(new StoreScuCommand(context, p, false)).AddInput(*it); + job.AddCommand(new StoreScuCommand(context, localAet, p, false)).AddInput(*it); } job.SetDescription("HTTP request: Store-SCU to peer \"" + remote + "\""); @@ -694,8 +722,9 @@ std::string remote = call.GetUriComponent("id", ""); + Json::Value request; std::list<std::string> instances; - if (!GetInstancesToExport(instances, remote, call)) + if (!GetInstancesToExport(request, instances, remote, call)) { return; }