Mercurial > hg > orthanc
comparison Plugins/Engine/OrthancPlugins.cpp @ 3713:56f2397f027a storage-commitment
integration mainline->storage-commitment
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 02 Mar 2020 15:42:17 +0100 |
parents | 1c69af37d8ae 2a170a8f1faf |
children | e7003b2203a7 |
comparison
equal
deleted
inserted
replaced
3711:14b363d972a8 | 3713:56f2397f027a |
---|---|
365 } | 365 } |
366 } | 366 } |
367 | 367 |
368 public: | 368 public: |
369 DicomWebBinaryFormatter(const _OrthancPluginEncodeDicomWeb& parameters) : | 369 DicomWebBinaryFormatter(const _OrthancPluginEncodeDicomWeb& parameters) : |
370 callback_(parameters.callback) | 370 callback_(parameters.callback) |
371 { | 371 { |
372 } | 372 } |
373 | 373 |
374 virtual DicomWebJsonVisitor::BinaryMode Format(std::string& bulkDataUri, | 374 virtual DicomWebJsonVisitor::BinaryMode Format(std::string& bulkDataUri, |
375 const std::vector<DicomTag>& parentTags, | 375 const std::vector<DicomTag>& parentTags, |
433 MultipartState_SecondPart, | 433 MultipartState_SecondPart, |
434 MultipartState_NextParts | 434 MultipartState_NextParts |
435 }; | 435 }; |
436 | 436 |
437 HttpOutput& output_; | 437 HttpOutput& output_; |
438 std::auto_ptr<std::string> errorDetails_; | 438 std::unique_ptr<std::string> errorDetails_; |
439 bool logDetails_; | 439 bool logDetails_; |
440 MultipartState multipartState_; | 440 MultipartState multipartState_; |
441 std::string multipartSubType_; | 441 std::string multipartSubType_; |
442 std::string multipartContentType_; | 442 std::string multipartContentType_; |
443 std::string multipartFirstPart_; | 443 std::string multipartFirstPart_; |
663 _OrthancPluginChunkedRestCallback parameters_; | 663 _OrthancPluginChunkedRestCallback parameters_; |
664 boost::regex regex_; | 664 boost::regex regex_; |
665 | 665 |
666 public: | 666 public: |
667 ChunkedRestCallback(_OrthancPluginChunkedRestCallback parameters) : | 667 ChunkedRestCallback(_OrthancPluginChunkedRestCallback parameters) : |
668 parameters_(parameters), | 668 parameters_(parameters), |
669 regex_(parameters.pathRegularExpression) | 669 regex_(parameters.pathRegularExpression) |
670 { | 670 { |
671 } | 671 } |
672 | 672 |
673 const boost::regex& GetRegularExpression() const | 673 const boost::regex& GetRegularExpression() const |
674 { | 674 { |
792 boost::mutex::scoped_lock lock_; | 792 boost::mutex::scoped_lock lock_; |
793 ServerContext* context_; | 793 ServerContext* context_; |
794 | 794 |
795 public: | 795 public: |
796 ServerContextLock(PImpl& that) : | 796 ServerContextLock(PImpl& that) : |
797 lock_(that.contextMutex_), | 797 lock_(that.contextMutex_), |
798 context_(that.context_) | 798 context_(that.context_) |
799 { | 799 { |
800 if (context_ == NULL) | 800 if (context_ == NULL) |
801 { | 801 { |
802 throw OrthancException(ErrorCode_DatabaseNotInitialized); | 802 throw OrthancException(ErrorCode_DatabaseNotInitialized); |
803 } | 803 } |
844 _OrthancPluginMoveCallback moveCallbacks_; | 844 _OrthancPluginMoveCallback moveCallbacks_; |
845 IncomingHttpRequestFilters incomingHttpRequestFilters_; | 845 IncomingHttpRequestFilters incomingHttpRequestFilters_; |
846 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; | 846 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; |
847 RefreshMetricsCallbacks refreshMetricsCallbacks_; | 847 RefreshMetricsCallbacks refreshMetricsCallbacks_; |
848 StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_; | 848 StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_; |
849 std::auto_ptr<StorageAreaFactory> storageArea_; | 849 std::unique_ptr<StorageAreaFactory> storageArea_; |
850 | 850 |
851 boost::recursive_mutex restCallbackMutex_; | 851 boost::recursive_mutex restCallbackMutex_; |
852 boost::recursive_mutex storedCallbackMutex_; | 852 boost::recursive_mutex storedCallbackMutex_; |
853 boost::recursive_mutex changeCallbackMutex_; | 853 boost::recursive_mutex changeCallbackMutex_; |
854 boost::mutex findCallbackMutex_; | 854 boost::mutex findCallbackMutex_; |
860 boost::recursive_mutex invokeServiceMutex_; | 860 boost::recursive_mutex invokeServiceMutex_; |
861 | 861 |
862 Properties properties_; | 862 Properties properties_; |
863 int argc_; | 863 int argc_; |
864 char** argv_; | 864 char** argv_; |
865 std::auto_ptr<OrthancPluginDatabase> database_; | 865 std::unique_ptr<OrthancPluginDatabase> database_; |
866 PluginsErrorDictionary dictionary_; | 866 PluginsErrorDictionary dictionary_; |
867 | 867 |
868 PImpl() : | 868 PImpl() : |
869 context_(NULL), | 869 context_(NULL), |
870 findCallback_(NULL), | 870 findCallback_(NULL), |
880 | 880 |
881 class OrthancPlugins::WorklistHandler : public IWorklistRequestHandler | 881 class OrthancPlugins::WorklistHandler : public IWorklistRequestHandler |
882 { | 882 { |
883 private: | 883 private: |
884 OrthancPlugins& that_; | 884 OrthancPlugins& that_; |
885 std::auto_ptr<HierarchicalMatcher> matcher_; | 885 std::unique_ptr<HierarchicalMatcher> matcher_; |
886 std::auto_ptr<ParsedDicomFile> filtered_; | 886 std::unique_ptr<ParsedDicomFile> filtered_; |
887 ParsedDicomFile* currentQuery_; | 887 ParsedDicomFile* currentQuery_; |
888 | 888 |
889 void Reset() | 889 void Reset() |
890 { | 890 { |
891 matcher_.reset(); | 891 matcher_.reset(); |
994 { | 994 { |
995 throw OrthancException(ErrorCode_Plugin); | 995 throw OrthancException(ErrorCode_Plugin); |
996 } | 996 } |
997 | 997 |
998 ParsedDicomFile f(dicom, size); | 998 ParsedDicomFile f(dicom, size); |
999 std::auto_ptr<ParsedDicomFile> summary(matcher_->Extract(f)); | 999 std::unique_ptr<ParsedDicomFile> summary(matcher_->Extract(f)); |
1000 reinterpret_cast<DicomFindAnswers*>(answers)->Add(*summary); | 1000 reinterpret_cast<DicomFindAnswers*>(answers)->Add(*summary); |
1001 } | 1001 } |
1002 }; | 1002 }; |
1003 | 1003 |
1004 | 1004 |
1005 class OrthancPlugins::FindHandler : public IFindRequestHandler | 1005 class OrthancPlugins::FindHandler : public IFindRequestHandler |
1006 { | 1006 { |
1007 private: | 1007 private: |
1008 OrthancPlugins& that_; | 1008 OrthancPlugins& that_; |
1009 std::auto_ptr<DicomArray> currentQuery_; | 1009 std::unique_ptr<DicomArray> currentQuery_; |
1010 | 1010 |
1011 void Reset() | 1011 void Reset() |
1012 { | 1012 { |
1013 currentQuery_.reset(NULL); | 1013 currentQuery_.reset(NULL); |
1014 } | 1014 } |
1464 std::vector<std::string> groups_; | 1464 std::vector<std::string> groups_; |
1465 std::vector<const char*> cgroups_; | 1465 std::vector<const char*> cgroups_; |
1466 | 1466 |
1467 public: | 1467 public: |
1468 RestCallbackMatcher(const UriComponents& uri) : | 1468 RestCallbackMatcher(const UriComponents& uri) : |
1469 flatUri_(Toolbox::FlattenUri(uri)) | 1469 flatUri_(Toolbox::FlattenUri(uri)) |
1470 { | 1470 { |
1471 } | 1471 } |
1472 | 1472 |
1473 bool IsMatch(const boost::regex& re) | 1473 bool IsMatch(const boost::regex& re) |
1474 { | 1474 { |
2481 *reinterpret_cast<const _OrthancPluginBufferCompression*>(parameters); | 2481 *reinterpret_cast<const _OrthancPluginBufferCompression*>(parameters); |
2482 | 2482 |
2483 std::string result; | 2483 std::string result; |
2484 | 2484 |
2485 { | 2485 { |
2486 std::auto_ptr<DeflateBaseCompressor> compressor; | 2486 std::unique_ptr<DeflateBaseCompressor> compressor; |
2487 | 2487 |
2488 switch (p.compression) | 2488 switch (p.compression) |
2489 { | 2489 { |
2490 case OrthancPluginCompressionType_Zlib: | 2490 case OrthancPluginCompressionType_Zlib: |
2491 { | 2491 { |
2531 | 2531 |
2532 CopyToMemoryBuffer(*p.target, result); | 2532 CopyToMemoryBuffer(*p.target, result); |
2533 } | 2533 } |
2534 | 2534 |
2535 | 2535 |
2536 static OrthancPluginImage* ReturnImage(std::auto_ptr<ImageAccessor>& image) | 2536 static OrthancPluginImage* ReturnImage(std::unique_ptr<ImageAccessor>& image) |
2537 { | 2537 { |
2538 // Images returned to plugins are assumed to be writeable. If the | 2538 // Images returned to plugins are assumed to be writeable. If the |
2539 // input image is read-only, we return a copy so that it can be modified. | 2539 // input image is read-only, we return a copy so that it can be modified. |
2540 | 2540 |
2541 if (image->IsReadOnly()) | 2541 if (image->IsReadOnly()) |
2542 { | 2542 { |
2543 std::auto_ptr<Image> copy(new Image(image->GetFormat(), image->GetWidth(), image->GetHeight(), false)); | 2543 std::unique_ptr<Image> copy(new Image(image->GetFormat(), image->GetWidth(), image->GetHeight(), false)); |
2544 ImageProcessing::Copy(*copy, *image); | 2544 ImageProcessing::Copy(*copy, *image); |
2545 image.reset(NULL); | 2545 image.reset(NULL); |
2546 return reinterpret_cast<OrthancPluginImage*>(copy.release()); | 2546 return reinterpret_cast<OrthancPluginImage*>(copy.release()); |
2547 } | 2547 } |
2548 else | 2548 else |
2554 | 2554 |
2555 void OrthancPlugins::UncompressImage(const void* parameters) | 2555 void OrthancPlugins::UncompressImage(const void* parameters) |
2556 { | 2556 { |
2557 const _OrthancPluginUncompressImage& p = *reinterpret_cast<const _OrthancPluginUncompressImage*>(parameters); | 2557 const _OrthancPluginUncompressImage& p = *reinterpret_cast<const _OrthancPluginUncompressImage*>(parameters); |
2558 | 2558 |
2559 std::auto_ptr<ImageAccessor> image; | 2559 std::unique_ptr<ImageAccessor> image; |
2560 | 2560 |
2561 switch (p.format) | 2561 switch (p.format) |
2562 { | 2562 { |
2563 case OrthancPluginImageFormat_Png: | 2563 case OrthancPluginImageFormat_Png: |
2564 { | 2564 { |
2938 void OrthancPlugins::ConvertPixelFormat(const void* parameters) | 2938 void OrthancPlugins::ConvertPixelFormat(const void* parameters) |
2939 { | 2939 { |
2940 const _OrthancPluginConvertPixelFormat& p = *reinterpret_cast<const _OrthancPluginConvertPixelFormat*>(parameters); | 2940 const _OrthancPluginConvertPixelFormat& p = *reinterpret_cast<const _OrthancPluginConvertPixelFormat*>(parameters); |
2941 const ImageAccessor& source = *reinterpret_cast<const ImageAccessor*>(p.source); | 2941 const ImageAccessor& source = *reinterpret_cast<const ImageAccessor*>(p.source); |
2942 | 2942 |
2943 std::auto_ptr<ImageAccessor> target(new Image(Plugins::Convert(p.targetFormat), source.GetWidth(), source.GetHeight(), false)); | 2943 std::unique_ptr<ImageAccessor> target(new Image(Plugins::Convert(p.targetFormat), source.GetWidth(), source.GetHeight(), false)); |
2944 ImageProcessing::Convert(*target, source); | 2944 ImageProcessing::Convert(*target, source); |
2945 | 2945 |
2946 *(p.target) = ReturnImage(target); | 2946 *(p.target) = ReturnImage(target); |
2947 } | 2947 } |
2948 | 2948 |
2991 const void* parameters) | 2991 const void* parameters) |
2992 { | 2992 { |
2993 const _OrthancPluginDicomToJson& p = | 2993 const _OrthancPluginDicomToJson& p = |
2994 *reinterpret_cast<const _OrthancPluginDicomToJson*>(parameters); | 2994 *reinterpret_cast<const _OrthancPluginDicomToJson*>(parameters); |
2995 | 2995 |
2996 std::auto_ptr<ParsedDicomFile> dicom; | 2996 std::unique_ptr<ParsedDicomFile> dicom; |
2997 | 2997 |
2998 if (service == _OrthancPluginService_DicomBufferToJson) | 2998 if (service == _OrthancPluginService_DicomBufferToJson) |
2999 { | 2999 { |
3000 dicom.reset(new ParsedDicomFile(p.buffer, p.size)); | 3000 dicom.reset(new ParsedDicomFile(p.buffer, p.size)); |
3001 } | 3001 } |
3056 { | 3056 { |
3057 OrthancConfiguration::ReaderLock lock; | 3057 OrthancConfiguration::ReaderLock lock; |
3058 privateCreator = lock.GetConfiguration().GetDefaultPrivateCreator(); | 3058 privateCreator = lock.GetConfiguration().GetDefaultPrivateCreator(); |
3059 } | 3059 } |
3060 | 3060 |
3061 std::auto_ptr<ParsedDicomFile> file | 3061 std::unique_ptr<ParsedDicomFile> file |
3062 (ParsedDicomFile::CreateFromJson(json, static_cast<DicomFromJsonFlags>(p.flags), | 3062 (ParsedDicomFile::CreateFromJson(json, static_cast<DicomFromJsonFlags>(p.flags), |
3063 privateCreator)); | 3063 privateCreator)); |
3064 | 3064 |
3065 if (p.pixelData) | 3065 if (p.pixelData) |
3066 { | 3066 { |
3120 const void* parameters) | 3120 const void* parameters) |
3121 { | 3121 { |
3122 const _OrthancPluginCreateImage& p = | 3122 const _OrthancPluginCreateImage& p = |
3123 *reinterpret_cast<const _OrthancPluginCreateImage*>(parameters); | 3123 *reinterpret_cast<const _OrthancPluginCreateImage*>(parameters); |
3124 | 3124 |
3125 std::auto_ptr<ImageAccessor> result; | 3125 std::unique_ptr<ImageAccessor> result; |
3126 | 3126 |
3127 switch (service) | 3127 switch (service) |
3128 { | 3128 { |
3129 case _OrthancPluginService_CreateImage: | 3129 case _OrthancPluginService_CreateImage: |
3130 result.reset(new Image(Plugins::Convert(p.format), p.width, p.height, false)); | 3130 result.reset(new Image(Plugins::Convert(p.format), p.width, p.height, false)); |
4610 pluginOutput.Close(error, errorDictionary_); | 4610 pluginOutput.Close(error, errorDictionary_); |
4611 } | 4611 } |
4612 }; | 4612 }; |
4613 | 4613 |
4614 | 4614 |
4615 bool OrthancPlugins::CreateChunkedRequestReader(std::auto_ptr<IChunkedRequestReader>& target, | 4615 bool OrthancPlugins::CreateChunkedRequestReader(std::unique_ptr<IChunkedRequestReader>& target, |
4616 RequestOrigin origin, | 4616 RequestOrigin origin, |
4617 const char* remoteIp, | 4617 const char* remoteIp, |
4618 const char* username, | 4618 const char* username, |
4619 HttpMethod method, | 4619 HttpMethod method, |
4620 const UriComponents& uri, | 4620 const UriComponents& uri, |