Mercurial > hg > orthanc
diff OrthancServer/DicomProtocol/DicomFindAnswers.cpp @ 2059:8e67325eaa3f
fix
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 30 Jun 2016 20:02:21 +0200 |
parents | f0acfa753973 |
children | 9329ba17a069 |
line wrap: on
line diff
--- a/OrthancServer/DicomProtocol/DicomFindAnswers.cpp Thu Jun 30 08:20:23 2016 +0200 +++ b/OrthancServer/DicomProtocol/DicomFindAnswers.cpp Thu Jun 30 20:02:21 2016 +0200 @@ -50,29 +50,34 @@ ParsedDicomFile* dicom_; DicomMap* map_; - void CleanupDicom() + void CleanupDicom(bool isWorklist) { - if (dicom_ != NULL) + if (isWorklist && + dicom_ != NULL) { + // These lines are necessary when serving worklists, otherwise + // Orthanc does not behave as "wlmscpfs" dicom_->Remove(DICOM_TAG_MEDIA_STORAGE_SOP_INSTANCE_UID); dicom_->Remove(DICOM_TAG_SOP_INSTANCE_UID); } } public: - Answer(ParsedDicomFile& dicom) : + Answer(bool isWorklist, + ParsedDicomFile& dicom) : dicom_(dicom.Clone()), map_(NULL) { - CleanupDicom(); + CleanupDicom(isWorklist); } - Answer(const void* dicom, + Answer(bool isWorklist, + const void* dicom, size_t size) : dicom_(new ParsedDicomFile(dicom, size)), map_(NULL) { - CleanupDicom(); + CleanupDicom(isWorklist); } Answer(const DicomMap& map) : @@ -120,6 +125,20 @@ }; + void DicomFindAnswers::SetWorklist(bool isWorklist) + { + if (answers_.empty()) + { + isWorklist_ = isWorklist; + } + else + { + // This set of answers is not empty anymore, cannot change its type + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + } + + void DicomFindAnswers::Clear() { for (size_t i = 0; i < answers_.size(); i++) @@ -149,14 +168,14 @@ void DicomFindAnswers::Add(ParsedDicomFile& dicom) { - answers_.push_back(new Answer(dicom)); + answers_.push_back(new Answer(isWorklist_, dicom)); } void DicomFindAnswers::Add(const void* dicom, size_t size) { - answers_.push_back(new Answer(dicom, size)); + answers_.push_back(new Answer(isWorklist_, dicom, size)); }