# HG changeset patch # User Sebastien Jodogne # Date 1398863331 -7200 # Node ID 3bd0589af992e7cf8a781bb5c31d2a1b4a4d1130 # Parent 31cc399c7762b8f87bf62ab7118727582ec8861f refactoring diff -r 31cc399c7762 -r 3bd0589af992 OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp --- a/OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp Wed Apr 30 14:51:43 2014 +0200 +++ b/OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp Wed Apr 30 15:08:51 2014 +0200 @@ -55,6 +55,7 @@ connection_->GetDistantManufacturer() == manufacturer) { // The current connection can be reused + LOG(INFO) << "Reusing the previous SCU connection"; return; } @@ -92,7 +93,7 @@ { boost::mutex::scoped_lock lock(that->mutex_); if (that->connection_ != NULL && - Now() > that->lastUse_ + that->timeBeforeClose_) + Now() >= that->lastUse_ + that->timeBeforeClose_) { LOG(INFO) << "Closing the global SCU connection after timeout"; that->Close(); diff -r 31cc399c7762 -r 3bd0589af992 OrthancServer/OrthancInitialization.cpp --- a/OrthancServer/OrthancInitialization.cpp Wed Apr 30 14:51:43 2014 +0200 +++ b/OrthancServer/OrthancInitialization.cpp Wed Apr 30 15:08:51 2014 +0200 @@ -508,25 +508,6 @@ } - void ConnectToModalityUsingSymbolicName(DicomUserConnection& connection, - const std::string& name) - { - std::string aet, address; - int port; - ModalityManufacturer manufacturer; - GetDicomModalityUsingSymbolicName(name, aet, address, port, manufacturer); - - LOG(WARNING) << "Connecting to remote DICOM modality: AET=" << aet << ", address=" << address << ", port=" << port; - - connection.SetLocalApplicationEntityTitle(GetGlobalStringParameter("DicomAet", "ORTHANC")); - connection.SetDistantApplicationEntityTitle(aet); - connection.SetDistantHost(address); - connection.SetDistantPort(port); - connection.SetDistantManufacturer(manufacturer); - connection.Open(); - } - - bool IsSameAETitle(const std::string& aet1, const std::string& aet2) { @@ -587,7 +568,6 @@ } - RemoteModalityParameters GetModalityUsingSymbolicName(const std::string& name) { std::string aet, address; @@ -599,6 +579,7 @@ return RemoteModalityParameters(name, aet, address, port, manufacturer); } + RemoteModalityParameters GetModalityUsingAet(const std::string& aet) { std::string name, address; @@ -613,6 +594,5 @@ { throw OrthancException("Unknown modality for AET: " + aet); } - } } diff -r 31cc399c7762 -r 3bd0589af992 OrthancServer/OrthancInitialization.h --- a/OrthancServer/OrthancInitialization.h Wed Apr 30 14:51:43 2014 +0200 +++ b/OrthancServer/OrthancInitialization.h Wed Apr 30 15:08:51 2014 +0200 @@ -37,7 +37,7 @@ #include #include #include "../Core/HttpServer/MongooseServer.h" -#include "DicomProtocol/DicomUserConnection.h" +#include "DicomProtocol/RemoteModalityParameters.h" #include "ServerEnumerations.h" namespace Orthanc @@ -86,9 +86,6 @@ void GetGlobalListOfStringsParameter(std::list& target, const std::string& key); - void ConnectToModalityUsingSymbolicName(DicomUserConnection& connection, - const std::string& name); - bool IsKnownAETitle(const std::string& aet); bool IsSameAETitle(const std::string& aet1, diff -r 31cc399c7762 -r 3bd0589af992 OrthancServer/OrthancRestApi/OrthancRestModalities.cpp --- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Wed Apr 30 14:51:43 2014 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Wed Apr 30 15:08:51 2014 +0200 @@ -32,7 +32,6 @@ #include "OrthancRestApi.h" -#include "../DicomProtocol/DicomUserConnection.h" #include "../OrthancInitialization.h" #include "../../Core/HttpClient.h" @@ -66,6 +65,8 @@ static void DicomFindPatient(RestApi::PostCall& call) { + ServerContext& context = OrthancRestApi::GetContext(call); + DicomMap m; DicomMap::SetupFindPatientTemplate(m); if (!MergeQueryAndTemplate(m, call.GetPostBody())) @@ -73,11 +74,11 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); + RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote); DicomFindAnswers answers; - connection.FindPatient(answers, m); + connection.GetConnection().FindPatient(answers, m); Json::Value result; answers.ToJson(result); @@ -86,6 +87,8 @@ static void DicomFindStudy(RestApi::PostCall& call) { + ServerContext& context = OrthancRestApi::GetContext(call); + DicomMap m; DicomMap::SetupFindStudyTemplate(m); if (!MergeQueryAndTemplate(m, call.GetPostBody())) @@ -99,11 +102,11 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); - + RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote); + DicomFindAnswers answers; - connection.FindStudy(answers, m); + connection.GetConnection().FindStudy(answers, m); Json::Value result; answers.ToJson(result); @@ -112,6 +115,8 @@ static void DicomFindSeries(RestApi::PostCall& call) { + ServerContext& context = OrthancRestApi::GetContext(call); + DicomMap m; DicomMap::SetupFindSeriesTemplate(m); if (!MergeQueryAndTemplate(m, call.GetPostBody())) @@ -126,11 +131,11 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); - + RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote); + DicomFindAnswers answers; - connection.FindSeries(answers, m); + connection.GetConnection().FindSeries(answers, m); Json::Value result; answers.ToJson(result); @@ -139,6 +144,8 @@ static void DicomFindInstance(RestApi::PostCall& call) { + ServerContext& context = OrthancRestApi::GetContext(call); + DicomMap m; DicomMap::SetupFindInstanceTemplate(m); if (!MergeQueryAndTemplate(m, call.GetPostBody())) @@ -154,11 +161,11 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); - + RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote); + DicomFindAnswers answers; - connection.FindInstance(answers, m); + connection.GetConnection().FindInstance(answers, m); Json::Value result; answers.ToJson(result); @@ -167,6 +174,8 @@ static void DicomFind(RestApi::PostCall& call) { + ServerContext& context = OrthancRestApi::GetContext(call); + DicomMap m; DicomMap::SetupFindPatientTemplate(m); if (!MergeQueryAndTemplate(m, call.GetPostBody())) @@ -174,11 +183,11 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, call.GetUriComponent("id", "")); - + RemoteModalityParameters remote = GetModalityUsingSymbolicName(call.GetUriComponent("id", "")); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), remote); + DicomFindAnswers patients; - connection.FindPatient(patients, m); + connection.GetConnection().FindPatient(patients, m); // Loop over the found patients Json::Value result = Json::arrayValue; @@ -195,7 +204,7 @@ m.CopyTagIfExists(patients.GetAnswer(i), DICOM_TAG_PATIENT_ID); DicomFindAnswers studies; - connection.FindStudy(studies, m); + connection.GetConnection().FindStudy(studies, m); patient["Studies"] = Json::arrayValue; @@ -214,7 +223,7 @@ m.CopyTagIfExists(studies.GetAnswer(j), DICOM_TAG_STUDY_INSTANCE_UID); DicomFindAnswers series; - connection.FindSeries(series, m); + connection.GetConnection().FindSeries(series, m); // Loop over the found series study["Series"] = Json::arrayValue; @@ -309,8 +318,8 @@ return; } - DicomUserConnection connection; - ConnectToModalityUsingSymbolicName(connection, remote); + RemoteModalityParameters p = GetModalityUsingSymbolicName(remote); + ReusableDicomUserConnection::Connection connection(context.GetReusableDicomUserConnection(), p); for (std::list::const_iterator it = instances.begin(); it != instances.end(); ++it) @@ -319,7 +328,7 @@ std::string dicom; context.ReadFile(dicom, *it, FileContentType_Dicom); - connection.Store(dicom); + connection.GetConnection().Store(dicom); } call.GetOutput().AnswerBuffer("{}", "application/json");