comparison OrthancServer/OrthancMoveRequestHandler.cpp @ 3157:8a9eb767280c

Fix issue #128 (Asynchronous C-MOVE: invalid number of remaining sub-operations)
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 23 Jan 2019 09:32:59 +0100
parents ac72032d69a2
children 8ea7c4546c3a
comparison
equal deleted inserted replaced
3156:0c2b719c3796 3157:8a9eb767280c
123 { 123 {
124 private: 124 private:
125 ServerContext& context_; 125 ServerContext& context_;
126 std::auto_ptr<DicomModalityStoreJob> job_; 126 std::auto_ptr<DicomModalityStoreJob> job_;
127 size_t position_; 127 size_t position_;
128 size_t countInstances_;
128 129
129 public: 130 public:
130 AsynchronousMove(ServerContext& context, 131 AsynchronousMove(ServerContext& context,
131 const std::string& targetAet, 132 const std::string& targetAet,
132 const std::string& publicId, 133 const std::string& publicId,
154 } 155 }
155 156
156 std::list<std::string> tmp; 157 std::list<std::string> tmp;
157 context_.GetIndex().GetChildInstances(tmp, publicId); 158 context_.GetIndex().GetChildInstances(tmp, publicId);
158 159
160 countInstances_ = tmp.size();
161
159 job_->Reserve(tmp.size()); 162 job_->Reserve(tmp.size());
160 163
161 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it) 164 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it)
162 { 165 {
163 job_->AddInstance(*it); 166 job_->AddInstance(*it);
164 } 167 }
165 } 168 }
166 169
167 virtual unsigned int GetSubOperationCount() const 170 virtual unsigned int GetSubOperationCount() const
168 { 171 {
169 return 1; 172 return countInstances_;
170 } 173 }
171 174
172 virtual Status DoNext() 175 virtual Status DoNext()
173 { 176 {
177 if (position_ >= countInstances_)
178 {
179 return Status_Failure;
180 }
181
174 if (position_ == 0) 182 if (position_ == 0)
175 { 183 {
176 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */); 184 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */);
177 return Status_Success; 185 }
178 } 186
179 else 187 position_ ++;
180 { 188 return Status_Success;
181 return Status_Failure;
182 }
183 } 189 }
184 }; 190 };
185 } 191 }
186 192
187 193