comparison OrthancServer/DicomProtocol/DicomUserConnection.cpp @ 2222:21713ce8717b

Fix handling of Move Originator AET and ID in C-MOVE SCP
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 13 Dec 2016 14:34:33 +0100
parents 9b373b7d6713
children a3a65de1840f
comparison
equal deleted inserted replaced
2221:e7beca979562 2222:21713ce8717b
152 152
153 void CheckIsOpen() const; 153 void CheckIsOpen() const;
154 154
155 void Store(DcmInputStream& is, 155 void Store(DcmInputStream& is,
156 DicomUserConnection& connection, 156 DicomUserConnection& connection,
157 const std::string& moveOriginatorAET,
157 uint16_t moveOriginatorID); 158 uint16_t moveOriginatorID);
158 }; 159 };
159 160
160 161
161 static void Check(const OFCondition& cond) 162 static void Check(const OFCondition& cond)
257 } 258 }
258 259
259 260
260 void DicomUserConnection::PImpl::Store(DcmInputStream& is, 261 void DicomUserConnection::PImpl::Store(DcmInputStream& is,
261 DicomUserConnection& connection, 262 DicomUserConnection& connection,
263 const std::string& moveOriginatorAET,
262 uint16_t moveOriginatorID) 264 uint16_t moveOriginatorID)
263 { 265 {
264 CheckIsOpen(); 266 CheckIsOpen();
265 267
266 DcmFileFormat dcmff; 268 DcmFileFormat dcmff;
339 strncpy(request.AffectedSOPClassUID, sopClass, DIC_UI_LEN); 341 strncpy(request.AffectedSOPClassUID, sopClass, DIC_UI_LEN);
340 request.Priority = DIMSE_PRIORITY_MEDIUM; 342 request.Priority = DIMSE_PRIORITY_MEDIUM;
341 request.DataSetType = DIMSE_DATASET_PRESENT; 343 request.DataSetType = DIMSE_DATASET_PRESENT;
342 strncpy(request.AffectedSOPInstanceUID, sopInstance, DIC_UI_LEN); 344 strncpy(request.AffectedSOPInstanceUID, sopInstance, DIC_UI_LEN);
343 345
344 strncpy(request.MoveOriginatorApplicationEntityTitle, 346 if (!moveOriginatorAET.empty())
345 connection.GetLocalApplicationEntityTitle().c_str(), DIC_AE_LEN); 347 {
346 request.opts = O_STORE_MOVEORIGINATORAETITLE; 348 strncpy(request.MoveOriginatorApplicationEntityTitle,
347 349 moveOriginatorAET.c_str(), DIC_AE_LEN);
348 if (moveOriginatorID != 0) 350 request.opts = O_STORE_MOVEORIGINATORAETITLE;
349 { 351
350 request.MoveOriginatorID = moveOriginatorID; // The type DIC_US is an alias for uint16_t 352 request.MoveOriginatorID = moveOriginatorID; // The type DIC_US is an alias for uint16_t
351 request.opts |= O_STORE_MOVEORIGINATORID; 353 request.opts |= O_STORE_MOVEORIGINATORID;
352 } 354 }
353 355
354 // Finally conduct transmission of data 356 // Finally conduct transmission of data
959 return pimpl_->IsOpen(); 961 return pimpl_->IsOpen();
960 } 962 }
961 963
962 void DicomUserConnection::Store(const char* buffer, 964 void DicomUserConnection::Store(const char* buffer,
963 size_t size, 965 size_t size,
966 const std::string& moveOriginatorAET,
964 uint16_t moveOriginatorID) 967 uint16_t moveOriginatorID)
965 { 968 {
966 // Prepare an input stream for the memory buffer 969 // Prepare an input stream for the memory buffer
967 DcmInputBufferStream is; 970 DcmInputBufferStream is;
968 if (size > 0) 971 if (size > 0)
969 is.setBuffer(buffer, size); 972 is.setBuffer(buffer, size);
970 is.setEos(); 973 is.setEos();
971 974
972 pimpl_->Store(is, *this, moveOriginatorID); 975 pimpl_->Store(is, *this, moveOriginatorAET, moveOriginatorID);
973 } 976 }
974 977
975 void DicomUserConnection::Store(const std::string& buffer, 978 void DicomUserConnection::Store(const std::string& buffer,
979 const std::string& moveOriginatorAET,
976 uint16_t moveOriginatorID) 980 uint16_t moveOriginatorID)
977 { 981 {
978 if (buffer.size() > 0) 982 if (buffer.size() > 0)
979 Store(reinterpret_cast<const char*>(&buffer[0]), buffer.size(), moveOriginatorID); 983 Store(reinterpret_cast<const char*>(&buffer[0]), buffer.size(), moveOriginatorAET, moveOriginatorID);
980 else 984 else
981 Store(NULL, 0, moveOriginatorID); 985 Store(NULL, 0, moveOriginatorAET, moveOriginatorID);
982 } 986 }
983 987
984 void DicomUserConnection::StoreFile(const std::string& path, 988 void DicomUserConnection::StoreFile(const std::string& path,
989 const std::string& moveOriginatorAET,
985 uint16_t moveOriginatorID) 990 uint16_t moveOriginatorID)
986 { 991 {
987 // Prepare an input stream for the file 992 // Prepare an input stream for the file
988 DcmInputFileStream is(path.c_str()); 993 DcmInputFileStream is(path.c_str());
989 pimpl_->Store(is, *this, moveOriginatorID); 994 pimpl_->Store(is, *this, moveOriginatorAET, moveOriginatorID);
990 } 995 }
991 996
992 bool DicomUserConnection::Echo() 997 bool DicomUserConnection::Echo()
993 { 998 {
994 CheckIsOpen(); 999 CheckIsOpen();