Mercurial > hg > orthanc
comparison Plugins/Engine/OrthancPlugins.cpp @ 3662:d8371b4302ff storage-commitment
OrthancPluginRegisterStorageCommitmentScpCallback()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 11 Feb 2020 19:59:53 +0100 |
parents | 94f4a18a79cc |
children | 85acfcc15829 |
comparison
equal
deleted
inserted
replaced
3661:25117919a36b | 3662:d8371b4302ff |
---|---|
680 return parameters_; | 680 return parameters_; |
681 } | 681 } |
682 }; | 682 }; |
683 | 683 |
684 | 684 |
685 | |
686 class StorageCommitmentScp : public IStorageCommitmentFactory | |
687 { | |
688 private: | |
689 class Handler : public IStorageCommitmentFactory::ILookupHandler | |
690 { | |
691 private: | |
692 _OrthancPluginRegisterStorageCommitmentScpCallback parameters_; | |
693 void* handler_; | |
694 | |
695 public: | |
696 Handler(_OrthancPluginRegisterStorageCommitmentScpCallback parameters, | |
697 void* handler) : | |
698 parameters_(parameters) | |
699 { | |
700 if (handler == NULL) | |
701 { | |
702 throw OrthancException(ErrorCode_NullPointer); | |
703 } | |
704 } | |
705 | |
706 virtual ~Handler() | |
707 { | |
708 assert(handler_ != NULL); | |
709 parameters_.destructor(handler_); | |
710 handler_ = NULL; | |
711 } | |
712 | |
713 virtual StorageCommitmentFailureReason Lookup(const std::string& sopClassUid, | |
714 const std::string& sopInstanceUid) | |
715 { | |
716 assert(handler_ != NULL); | |
717 OrthancPluginStorageCommitmentFailureReason reason = | |
718 OrthancPluginStorageCommitmentFailureReason_Success; | |
719 OrthancPluginErrorCode error = parameters_.lookup( | |
720 &reason, handler_, sopClassUid.c_str(), sopInstanceUid.c_str()); | |
721 if (error == OrthancPluginErrorCode_Success) | |
722 { | |
723 return Plugins::Convert(reason); | |
724 } | |
725 else | |
726 { | |
727 throw OrthancException(static_cast<ErrorCode>(error)); | |
728 } | |
729 } | |
730 }; | |
731 | |
732 _OrthancPluginRegisterStorageCommitmentScpCallback parameters_; | |
733 | |
734 public: | |
735 StorageCommitmentScp(_OrthancPluginRegisterStorageCommitmentScpCallback parameters) : | |
736 parameters_(parameters) | |
737 { | |
738 } | |
739 | |
740 virtual ILookupHandler* CreateStorageCommitment( | |
741 const std::string& jobId, | |
742 const std::string& transactionUid, | |
743 const std::vector<std::string>& sopClassUids, | |
744 const std::vector<std::string>& sopInstanceUids, | |
745 const std::string& remoteAet, | |
746 const std::string& calledAet) ORTHANC_OVERRIDE | |
747 { | |
748 const size_t n = sopClassUids.size(); | |
749 | |
750 if (sopInstanceUids.size() != n) | |
751 { | |
752 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
753 } | |
754 | |
755 std::vector<const char*> a, b; | |
756 a.resize(n); | |
757 b.resize(n); | |
758 | |
759 for (size_t i = 0; i < n; i++) | |
760 { | |
761 a[i] = sopClassUids[i].c_str(); | |
762 b[i] = sopInstanceUids[i].c_str(); | |
763 } | |
764 | |
765 void* handler = parameters_.factory(jobId.c_str(), transactionUid.c_str(), | |
766 a.empty() ? NULL : &a[0], b.empty() ? NULL : &b[0], | |
767 static_cast<uint32_t>(n), | |
768 remoteAet.c_str(), calledAet.c_str()); | |
769 if (handler == NULL) | |
770 { | |
771 return NULL; | |
772 } | |
773 else | |
774 { | |
775 return new Handler(parameters_, handler); | |
776 } | |
777 } | |
778 }; | |
779 | |
780 | |
685 class ServerContextLock | 781 class ServerContextLock |
686 { | 782 { |
687 private: | 783 private: |
688 boost::mutex::scoped_lock lock_; | 784 boost::mutex::scoped_lock lock_; |
689 ServerContext* context_; | 785 ServerContext* context_; |
722 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; | 818 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; |
723 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; | 819 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; |
724 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; | 820 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; |
725 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; | 821 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; |
726 typedef std::list<OrthancPluginRefreshMetricsCallback> RefreshMetricsCallbacks; | 822 typedef std::list<OrthancPluginRefreshMetricsCallback> RefreshMetricsCallbacks; |
823 typedef std::list<StorageCommitmentScp*> StorageCommitmentScpCallbacks; | |
727 typedef std::map<Property, std::string> Properties; | 824 typedef std::map<Property, std::string> Properties; |
728 | 825 |
729 PluginsManager manager_; | 826 PluginsManager manager_; |
730 | 827 |
731 RestCallbacks restCallbacks_; | 828 RestCallbacks restCallbacks_; |
738 JobsUnserializers jobsUnserializers_; | 835 JobsUnserializers jobsUnserializers_; |
739 _OrthancPluginMoveCallback moveCallbacks_; | 836 _OrthancPluginMoveCallback moveCallbacks_; |
740 IncomingHttpRequestFilters incomingHttpRequestFilters_; | 837 IncomingHttpRequestFilters incomingHttpRequestFilters_; |
741 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; | 838 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; |
742 RefreshMetricsCallbacks refreshMetricsCallbacks_; | 839 RefreshMetricsCallbacks refreshMetricsCallbacks_; |
840 StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_; | |
743 std::auto_ptr<StorageAreaFactory> storageArea_; | 841 std::auto_ptr<StorageAreaFactory> storageArea_; |
744 | 842 |
745 boost::recursive_mutex restCallbackMutex_; | 843 boost::recursive_mutex restCallbackMutex_; |
746 boost::recursive_mutex storedCallbackMutex_; | 844 boost::recursive_mutex storedCallbackMutex_; |
747 boost::recursive_mutex changeCallbackMutex_; | 845 boost::recursive_mutex changeCallbackMutex_; |
748 boost::mutex findCallbackMutex_; | 846 boost::mutex findCallbackMutex_; |
749 boost::mutex worklistCallbackMutex_; | 847 boost::mutex worklistCallbackMutex_; |
750 boost::mutex decodeImageCallbackMutex_; | 848 boost::mutex decodeImageCallbackMutex_; |
751 boost::mutex jobsUnserializersMutex_; | 849 boost::mutex jobsUnserializersMutex_; |
752 boost::mutex refreshMetricsMutex_; | 850 boost::mutex refreshMetricsMutex_; |
851 boost::mutex storageCommitmentScpMutex_; | |
753 boost::recursive_mutex invokeServiceMutex_; | 852 boost::recursive_mutex invokeServiceMutex_; |
754 | 853 |
755 Properties properties_; | 854 Properties properties_; |
756 int argc_; | 855 int argc_; |
757 char** argv_; | 856 char** argv_; |
1258 sizeof(int32_t) != sizeof(OrthancPluginInstanceOrigin) || | 1357 sizeof(int32_t) != sizeof(OrthancPluginInstanceOrigin) || |
1259 sizeof(int32_t) != sizeof(OrthancPluginJobStepStatus) || | 1358 sizeof(int32_t) != sizeof(OrthancPluginJobStepStatus) || |
1260 sizeof(int32_t) != sizeof(OrthancPluginConstraintType) || | 1359 sizeof(int32_t) != sizeof(OrthancPluginConstraintType) || |
1261 sizeof(int32_t) != sizeof(OrthancPluginMetricsType) || | 1360 sizeof(int32_t) != sizeof(OrthancPluginMetricsType) || |
1262 sizeof(int32_t) != sizeof(OrthancPluginDicomWebBinaryMode) || | 1361 sizeof(int32_t) != sizeof(OrthancPluginDicomWebBinaryMode) || |
1362 sizeof(int32_t) != sizeof(OrthancPluginStorageCommitmentFailureReason) || | |
1263 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludeBinary) != static_cast<int>(DicomToJsonFlags_IncludeBinary) || | 1363 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludeBinary) != static_cast<int>(DicomToJsonFlags_IncludeBinary) || |
1264 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludePrivateTags) != static_cast<int>(DicomToJsonFlags_IncludePrivateTags) || | 1364 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludePrivateTags) != static_cast<int>(DicomToJsonFlags_IncludePrivateTags) || |
1265 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludeUnknownTags) != static_cast<int>(DicomToJsonFlags_IncludeUnknownTags) || | 1365 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludeUnknownTags) != static_cast<int>(DicomToJsonFlags_IncludeUnknownTags) || |
1266 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludePixelData) != static_cast<int>(DicomToJsonFlags_IncludePixelData) || | 1366 static_cast<int>(OrthancPluginDicomToJsonFlags_IncludePixelData) != static_cast<int>(DicomToJsonFlags_IncludePixelData) || |
1267 static_cast<int>(OrthancPluginDicomToJsonFlags_ConvertBinaryToNull) != static_cast<int>(DicomToJsonFlags_ConvertBinaryToNull) || | 1367 static_cast<int>(OrthancPluginDicomToJsonFlags_ConvertBinaryToNull) != static_cast<int>(DicomToJsonFlags_ConvertBinaryToNull) || |
1301 for (PImpl::ChunkedRestCallbacks::iterator it = pimpl_->chunkedRestCallbacks_.begin(); | 1401 for (PImpl::ChunkedRestCallbacks::iterator it = pimpl_->chunkedRestCallbacks_.begin(); |
1302 it != pimpl_->chunkedRestCallbacks_.end(); ++it) | 1402 it != pimpl_->chunkedRestCallbacks_.end(); ++it) |
1303 { | 1403 { |
1304 delete *it; | 1404 delete *it; |
1305 } | 1405 } |
1406 | |
1407 for (PImpl::StorageCommitmentScpCallbacks::iterator | |
1408 it = pimpl_->storageCommitmentScpCallbacks_.begin(); | |
1409 it != pimpl_->storageCommitmentScpCallbacks_.end(); ++it) | |
1410 { | |
1411 delete *it; | |
1412 } | |
1306 } | 1413 } |
1307 | 1414 |
1308 | 1415 |
1309 static void ArgumentsToPlugin(std::vector<const char*>& keys, | 1416 static void ArgumentsToPlugin(std::vector<const char*>& keys, |
1310 std::vector<const char*>& values, | 1417 std::vector<const char*>& values, |
1858 | 1965 |
1859 boost::mutex::scoped_lock lock(pimpl_->refreshMetricsMutex_); | 1966 boost::mutex::scoped_lock lock(pimpl_->refreshMetricsMutex_); |
1860 | 1967 |
1861 LOG(INFO) << "Plugin has registered a callback to refresh its metrics"; | 1968 LOG(INFO) << "Plugin has registered a callback to refresh its metrics"; |
1862 pimpl_->refreshMetricsCallbacks_.push_back(p.callback); | 1969 pimpl_->refreshMetricsCallbacks_.push_back(p.callback); |
1970 } | |
1971 | |
1972 | |
1973 void OrthancPlugins::RegisterStorageCommitmentScpCallback(const void* parameters) | |
1974 { | |
1975 const _OrthancPluginRegisterStorageCommitmentScpCallback& p = | |
1976 *reinterpret_cast<const _OrthancPluginRegisterStorageCommitmentScpCallback*>(parameters); | |
1977 | |
1978 boost::mutex::scoped_lock lock(pimpl_->storageCommitmentScpMutex_); | |
1979 LOG(INFO) << "Plugin has registered a storage commitment callback"; | |
1980 | |
1981 pimpl_->storageCommitmentScpCallbacks_.push_back(new PImpl::StorageCommitmentScp(p)); | |
1863 } | 1982 } |
1864 | 1983 |
1865 | 1984 |
1866 void OrthancPlugins::AnswerBuffer(const void* parameters) | 1985 void OrthancPlugins::AnswerBuffer(const void* parameters) |
1867 { | 1986 { |
3880 | 3999 |
3881 case _OrthancPluginService_RegisterRefreshMetricsCallback: | 4000 case _OrthancPluginService_RegisterRefreshMetricsCallback: |
3882 RegisterRefreshMetricsCallback(parameters); | 4001 RegisterRefreshMetricsCallback(parameters); |
3883 return true; | 4002 return true; |
3884 | 4003 |
4004 case _OrthancPluginService_RegisterStorageCommitmentScpCallback: | |
4005 RegisterStorageCommitmentScpCallback(parameters); | |
4006 return true; | |
4007 | |
3885 case _OrthancPluginService_RegisterStorageArea: | 4008 case _OrthancPluginService_RegisterStorageArea: |
3886 { | 4009 { |
3887 LOG(INFO) << "Plugin has registered a custom storage area"; | 4010 LOG(INFO) << "Plugin has registered a custom storage area"; |
3888 const _OrthancPluginRegisterStorageArea& p = | 4011 const _OrthancPluginRegisterStorageArea& p = |
3889 *reinterpret_cast<const _OrthancPluginRegisterStorageArea*>(parameters); | 4012 *reinterpret_cast<const _OrthancPluginRegisterStorageArea*>(parameters); |
4537 return true; | 4660 return true; |
4538 } | 4661 } |
4539 } | 4662 } |
4540 } | 4663 } |
4541 } | 4664 } |
4665 | |
4666 | |
4667 IStorageCommitmentFactory::ILookupHandler* OrthancPlugins::CreateStorageCommitment( | |
4668 const std::string& jobId, | |
4669 const std::string& transactionUid, | |
4670 const std::vector<std::string>& sopClassUids, | |
4671 const std::vector<std::string>& sopInstanceUids, | |
4672 const std::string& remoteAet, | |
4673 const std::string& calledAet) | |
4674 { | |
4675 boost::mutex::scoped_lock lock(pimpl_->storageCommitmentScpMutex_); | |
4676 | |
4677 for (PImpl::StorageCommitmentScpCallbacks::iterator | |
4678 it = pimpl_->storageCommitmentScpCallbacks_.begin(); | |
4679 it != pimpl_->storageCommitmentScpCallbacks_.end(); ++it) | |
4680 { | |
4681 assert(*it != NULL); | |
4682 IStorageCommitmentFactory::ILookupHandler* handler = (*it)->CreateStorageCommitment | |
4683 (jobId, transactionUid, sopClassUids, sopInstanceUids, remoteAet, calledAet); | |
4684 | |
4685 if (handler != NULL) | |
4686 { | |
4687 return handler; | |
4688 } | |
4689 } | |
4690 | |
4691 return NULL; | |
4692 } | |
4542 } | 4693 } |