# HG changeset patch # User Sebastien Jodogne # Date 1404981827 -7200 # Node ID 9d0c7301596e8010593a3045781f380f7c0f492d # Parent 52e71b25f9ce92facaaa6c2825c8033b86525916 storescp modality diff -r 52e71b25f9ce -r 9d0c7301596e OrthancServer/DicomProtocol/DicomUserConnection.cpp --- a/OrthancServer/DicomProtocol/DicomUserConnection.cpp Thu Jul 10 09:48:38 2014 +0200 +++ b/OrthancServer/DicomProtocol/DicomUserConnection.cpp Thu Jul 10 10:43:47 2014 +0200 @@ -154,7 +154,8 @@ { if (cond.bad()) { - throw OrthancException("DicomUserConnection: " + std::string(cond.text())); + LOG(ERROR) << "DicomUserConnection: " << std::string(cond.text()); + throw OrthancException(ErrorCode_NetworkProtocol); } } @@ -162,7 +163,8 @@ { if (!IsOpen()) { - throw OrthancException("DicomUserConnection: First open the connection"); + LOG(ERROR) << "DicomUserConnection: First open the connection"; + throw OrthancException(ErrorCode_NetworkProtocol); } } diff -r 52e71b25f9ce -r 9d0c7301596e OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp --- a/OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp Thu Jul 10 09:48:38 2014 +0200 +++ b/OrthancServer/DicomProtocol/ReusableDicomUserConnection.cpp Thu Jul 10 10:43:47 2014 +0200 @@ -172,6 +172,14 @@ void ReusableDicomUserConnection::Unlock() { + if (connection_ != NULL && + connection_->GetDistantManufacturer() == ModalityManufacturer_StoreScp) + { + // "storescp" from DCMTK has problems when reusing a + // connection. Always close. + Close(); + } + lastUse_ = Now(); mutex_.unlock(); } diff -r 52e71b25f9ce -r 9d0c7301596e OrthancServer/ServerEnumerations.cpp --- a/OrthancServer/ServerEnumerations.cpp Thu Jul 10 09:48:38 2014 +0200 +++ b/OrthancServer/ServerEnumerations.cpp Thu Jul 10 10:43:47 2014 +0200 @@ -279,6 +279,9 @@ case ModalityManufacturer_Generic: return "Generic"; + case ModalityManufacturer_StoreScp: + return "StoreScp"; + case ModalityManufacturer_ClearCanvas: return "ClearCanvas"; @@ -336,6 +339,10 @@ { return ModalityManufacturer_ClearCanvas; } + else if (manufacturer == "StoreScp") + { + return ModalityManufacturer_StoreScp; + } else if (manufacturer == "MedInria") { return ModalityManufacturer_MedInria; diff -r 52e71b25f9ce -r 9d0c7301596e OrthancServer/ServerEnumerations.h --- a/OrthancServer/ServerEnumerations.h Thu Jul 10 09:48:38 2014 +0200 +++ b/OrthancServer/ServerEnumerations.h Thu Jul 10 10:43:47 2014 +0200 @@ -57,6 +57,7 @@ enum ModalityManufacturer { ModalityManufacturer_Generic, + ModalityManufacturer_StoreScp, ModalityManufacturer_ClearCanvas, ModalityManufacturer_MedInria, ModalityManufacturer_Dcm4Chee diff -r 52e71b25f9ce -r 9d0c7301596e Resources/Configuration.json --- a/Resources/Configuration.json Thu Jul 10 09:48:38 2014 +0200 +++ b/Resources/Configuration.json Thu Jul 10 10:43:47 2014 +0200 @@ -100,8 +100,9 @@ /** * A fourth parameter is available to enable patches for a * specific PACS manufacturer. The allowed values are currently - * "Generic" (default value), "ClearCanvas", "MedInria" and - * "Dcm4Chee". This parameter is case-sensitive. + * "Generic" (default value), "StoreScp" (storescp tool from + * DCMTK), "ClearCanvas", "MedInria" and "Dcm4Chee". This + * parameter is case-sensitive. **/ // "clearcanvas" : [ "CLEARCANVAS", "192.168.1.1", 104, "ClearCanvas" ] },