Mercurial > hg > orthanc
comparison OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 4796:94616af363ec filter-store-instance
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 01 Oct 2021 18:36:45 +0200 |
parents | 9804d6490872 |
children | 0bd98c52474b |
comparison
equal
deleted
inserted
replaced
4795:22d5b611dea7 | 4796:94616af363ec |
---|---|
77 #include "PluginsJob.h" | 77 #include "PluginsJob.h" |
78 | 78 |
79 #include <boost/regex.hpp> | 79 #include <boost/regex.hpp> |
80 #include <dcmtk/dcmdata/dcdict.h> | 80 #include <dcmtk/dcmdata/dcdict.h> |
81 #include <dcmtk/dcmdata/dcdicent.h> | 81 #include <dcmtk/dcmdata/dcdicent.h> |
82 #include <dcmtk/dcmnet/dimse.h> | |
82 | 83 |
83 #define ERROR_MESSAGE_64BIT "A 64bit version of the Orthanc API is necessary" | 84 #define ERROR_MESSAGE_64BIT "A 64bit version of the Orthanc API is necessary" |
84 | 85 |
85 | 86 |
86 namespace Orthanc | 87 namespace Orthanc |
1163 typedef std::list<OrthancPluginOnStoredInstanceCallback> OnStoredCallbacks; | 1164 typedef std::list<OrthancPluginOnStoredInstanceCallback> OnStoredCallbacks; |
1164 typedef std::list<OrthancPluginOnChangeCallback> OnChangeCallbacks; | 1165 typedef std::list<OrthancPluginOnChangeCallback> OnChangeCallbacks; |
1165 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; | 1166 typedef std::list<OrthancPluginIncomingHttpRequestFilter> IncomingHttpRequestFilters; |
1166 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; | 1167 typedef std::list<OrthancPluginIncomingHttpRequestFilter2> IncomingHttpRequestFilters2; |
1167 typedef std::list<OrthancPluginIncomingDicomInstanceFilter> IncomingDicomInstanceFilters; | 1168 typedef std::list<OrthancPluginIncomingDicomInstanceFilter> IncomingDicomInstanceFilters; |
1169 typedef std::list<OrthancPluginIncomingCStoreInstanceFilter> IncomingCStoreInstanceFilters; | |
1168 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; | 1170 typedef std::list<OrthancPluginDecodeImageCallback> DecodeImageCallbacks; |
1169 typedef std::list<OrthancPluginTranscoderCallback> TranscoderCallbacks; | 1171 typedef std::list<OrthancPluginTranscoderCallback> TranscoderCallbacks; |
1170 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; | 1172 typedef std::list<OrthancPluginJobsUnserializer> JobsUnserializers; |
1171 typedef std::list<OrthancPluginRefreshMetricsCallback> RefreshMetricsCallbacks; | 1173 typedef std::list<OrthancPluginRefreshMetricsCallback> RefreshMetricsCallbacks; |
1172 typedef std::list<StorageCommitmentScp*> StorageCommitmentScpCallbacks; | 1174 typedef std::list<StorageCommitmentScp*> StorageCommitmentScpCallbacks; |
1185 JobsUnserializers jobsUnserializers_; | 1187 JobsUnserializers jobsUnserializers_; |
1186 _OrthancPluginMoveCallback moveCallbacks_; | 1188 _OrthancPluginMoveCallback moveCallbacks_; |
1187 IncomingHttpRequestFilters incomingHttpRequestFilters_; | 1189 IncomingHttpRequestFilters incomingHttpRequestFilters_; |
1188 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; | 1190 IncomingHttpRequestFilters2 incomingHttpRequestFilters2_; |
1189 IncomingDicomInstanceFilters incomingDicomInstanceFilters_; | 1191 IncomingDicomInstanceFilters incomingDicomInstanceFilters_; |
1192 IncomingCStoreInstanceFilters incomingCStoreInstanceFilters_; // New in Orthanc 1.9.8 | |
1190 RefreshMetricsCallbacks refreshMetricsCallbacks_; | 1193 RefreshMetricsCallbacks refreshMetricsCallbacks_; |
1191 StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_; | 1194 StorageCommitmentScpCallbacks storageCommitmentScpCallbacks_; |
1192 std::unique_ptr<StorageAreaFactory> storageArea_; | 1195 std::unique_ptr<StorageAreaFactory> storageArea_; |
1193 std::set<std::string> authorizationTokens_; | 1196 std::set<std::string> authorizationTokens_; |
1194 | 1197 |
2259 } | 2262 } |
2260 | 2263 |
2261 return true; | 2264 return true; |
2262 } | 2265 } |
2263 | 2266 |
2264 | 2267 |
2268 | |
2269 uint16_t OrthancPlugins::FilterIncomingCStoreInstance(const DicomInstanceToStore& instance, | |
2270 const Json::Value& simplified) | |
2271 { | |
2272 DicomInstanceFromCallback wrapped(instance); | |
2273 | |
2274 boost::recursive_mutex::scoped_lock lock(pimpl_->invokeServiceMutex_); | |
2275 | |
2276 for (PImpl::IncomingCStoreInstanceFilters::const_iterator | |
2277 filter = pimpl_->incomingCStoreInstanceFilters_.begin(); | |
2278 filter != pimpl_->incomingCStoreInstanceFilters_.end(); ++filter) | |
2279 { | |
2280 int32_t filterResult = (*filter) (reinterpret_cast<const OrthancPluginDicomInstance*>(&wrapped)); | |
2281 | |
2282 if (filterResult >= 0 && filterResult <= 0xFFFF) | |
2283 { | |
2284 return static_cast<uint16_t>(filterResult); | |
2285 } | |
2286 else | |
2287 { | |
2288 // The callback is only allowed to answer uint16_t | |
2289 throw OrthancException(ErrorCode_Plugin); | |
2290 } | |
2291 } | |
2292 | |
2293 return STATUS_Success; | |
2294 } | |
2295 | |
2296 | |
2265 void OrthancPlugins::SignalChangeInternal(OrthancPluginChangeType changeType, | 2297 void OrthancPlugins::SignalChangeInternal(OrthancPluginChangeType changeType, |
2266 OrthancPluginResourceType resourceType, | 2298 OrthancPluginResourceType resourceType, |
2267 const char* resource) | 2299 const char* resource) |
2268 { | 2300 { |
2269 boost::recursive_mutex::scoped_lock lock(pimpl_->changeCallbackMutex_); | 2301 boost::recursive_mutex::scoped_lock lock(pimpl_->changeCallbackMutex_); |
2476 | 2508 |
2477 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming DICOM instances"; | 2509 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming DICOM instances"; |
2478 pimpl_->incomingDicomInstanceFilters_.push_back(p.callback); | 2510 pimpl_->incomingDicomInstanceFilters_.push_back(p.callback); |
2479 } | 2511 } |
2480 | 2512 |
2513 | |
2514 void OrthancPlugins::RegisterIncomingCStoreInstanceFilter(const void* parameters) | |
2515 { | |
2516 const _OrthancPluginIncomingCStoreInstanceFilter& p = | |
2517 *reinterpret_cast<const _OrthancPluginIncomingCStoreInstanceFilter*>(parameters); | |
2518 | |
2519 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming C-Store DICOM instances"; | |
2520 pimpl_->incomingCStoreInstanceFilters_.push_back(p.callback); | |
2521 } | |
2522 | |
2523 | |
2524 void RegisterIncomingCStoreInstanceFilter(const void* parameters); | |
2481 | 2525 |
2482 void OrthancPlugins::RegisterRefreshMetricsCallback(const void* parameters) | 2526 void OrthancPlugins::RegisterRefreshMetricsCallback(const void* parameters) |
2483 { | 2527 { |
2484 const _OrthancPluginRegisterRefreshMetricsCallback& p = | 2528 const _OrthancPluginRegisterRefreshMetricsCallback& p = |
2485 *reinterpret_cast<const _OrthancPluginRegisterRefreshMetricsCallback*>(parameters); | 2529 *reinterpret_cast<const _OrthancPluginRegisterRefreshMetricsCallback*>(parameters); |