diff OrthancServer/Internals/FindScp.cpp @ 1859:4e7c318a3f69

C-FIND SCP will return tags with sequence value representation
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 02 Dec 2015 11:22:05 +0100
parents 30e97a1f4093
children b1291df2f780
line wrap: on
line diff
--- a/OrthancServer/Internals/FindScp.cpp	Tue Dec 01 16:57:03 2015 +0100
+++ b/OrthancServer/Internals/FindScp.cpp	Wed Dec 02 11:22:05 2015 +0100
@@ -148,9 +148,30 @@
           {
             if (data.findHandler_ != NULL)
             {
+              std::list<DicomTag> sequencesToReturn;
+
+              for (unsigned long i = 0; i < requestIdentifiers->card(); i++)
+              {
+                DcmElement* element = requestIdentifiers->getElement(i);
+                if (element && !element->isLeaf())
+                {
+                  const DicomTag tag(FromDcmtkBridge::Convert(element->getTag()));
+
+                  DcmSequenceOfItems& sequence = dynamic_cast<DcmSequenceOfItems&>(*element);
+                  if (sequence.card() != 0)
+                  {
+                    LOG(WARNING) << "Orthanc only supports sequence matching on worklists, "
+                                 << "ignoring C-FIND SCU constraint on tag (" << tag.Format() 
+                                 << ") " << FromDcmtkBridge::GetName(tag);
+                  }
+
+                  sequencesToReturn.push_back(tag);
+                }
+              }
+
               DicomMap input;
               FromDcmtkBridge::Convert(input, *requestIdentifiers);
-              data.findHandler_->Handle(data.answers_, input,
+              data.findHandler_->Handle(data.answers_, input, sequencesToReturn,
                                         *data.remoteIp_, *data.remoteAet_,
                                         *data.calledAet_);
               ok = true;