Mercurial > hg > orthanc
comparison OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 4364:d527a081f92d
Allow concurrency on the OrthancPluginRegisterIncomingHttpRequestFilter() callbacks
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 09 Dec 2020 16:17:46 +0100 |
parents | e1e918e790e8 |
children | 79ef2b6d8e76 |
comparison
equal
deleted
inserted
replaced
4363:1382c908d67c | 4364:d527a081f92d |
---|---|
928 boost::shared_mutex decoderTranscoderMutex_; // Changed from "boost::mutex" in Orthanc 1.7.0 | 928 boost::shared_mutex decoderTranscoderMutex_; // Changed from "boost::mutex" in Orthanc 1.7.0 |
929 boost::mutex jobsUnserializersMutex_; | 929 boost::mutex jobsUnserializersMutex_; |
930 boost::mutex refreshMetricsMutex_; | 930 boost::mutex refreshMetricsMutex_; |
931 boost::mutex storageCommitmentScpMutex_; | 931 boost::mutex storageCommitmentScpMutex_; |
932 boost::recursive_mutex invokeServiceMutex_; | 932 boost::recursive_mutex invokeServiceMutex_; |
933 boost::shared_mutex incomingHttpRequestFilterMutex_; // New in Orthanc 1.9.0 | |
933 | 934 |
934 Properties properties_; | 935 Properties properties_; |
935 int argc_; | 936 int argc_; |
936 char** argv_; | 937 char** argv_; |
937 std::unique_ptr<OrthancPluginDatabase> database_; | 938 std::unique_ptr<OrthancPluginDatabase> database_; |
2153 void OrthancPlugins::RegisterIncomingHttpRequestFilter(const void* parameters) | 2154 void OrthancPlugins::RegisterIncomingHttpRequestFilter(const void* parameters) |
2154 { | 2155 { |
2155 const _OrthancPluginIncomingHttpRequestFilter& p = | 2156 const _OrthancPluginIncomingHttpRequestFilter& p = |
2156 *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter*>(parameters); | 2157 *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter*>(parameters); |
2157 | 2158 |
2159 boost::unique_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); | |
2160 | |
2158 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; | 2161 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; |
2159 pimpl_->incomingHttpRequestFilters_.push_back(p.callback); | 2162 pimpl_->incomingHttpRequestFilters_.push_back(p.callback); |
2160 } | 2163 } |
2161 | 2164 |
2162 | 2165 |
2163 void OrthancPlugins::RegisterIncomingHttpRequestFilter2(const void* parameters) | 2166 void OrthancPlugins::RegisterIncomingHttpRequestFilter2(const void* parameters) |
2164 { | 2167 { |
2165 const _OrthancPluginIncomingHttpRequestFilter2& p = | 2168 const _OrthancPluginIncomingHttpRequestFilter2& p = |
2166 *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter2*>(parameters); | 2169 *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter2*>(parameters); |
2167 | 2170 |
2171 boost::unique_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); | |
2172 | |
2168 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; | 2173 CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; |
2169 pimpl_->incomingHttpRequestFilters2_.push_back(p.callback); | 2174 pimpl_->incomingHttpRequestFilters2_.push_back(p.callback); |
2170 } | 2175 } |
2171 | 2176 |
2172 | 2177 |
4421 } | 4426 } |
4422 | 4427 |
4423 return true; | 4428 return true; |
4424 } | 4429 } |
4425 | 4430 |
4431 case _OrthancPluginService_RegisterIncomingHttpRequestFilter: | |
4432 RegisterIncomingHttpRequestFilter(parameters); | |
4433 return true; | |
4434 | |
4435 case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: | |
4436 RegisterIncomingHttpRequestFilter2(parameters); | |
4437 return true; | |
4438 | |
4426 default: | 4439 default: |
4427 return false; | 4440 return false; |
4428 } | 4441 } |
4429 } | 4442 } |
4430 | 4443 |
4480 RegisterTranscoderCallback(parameters); | 4493 RegisterTranscoderCallback(parameters); |
4481 return true; | 4494 return true; |
4482 | 4495 |
4483 case _OrthancPluginService_RegisterJobsUnserializer: | 4496 case _OrthancPluginService_RegisterJobsUnserializer: |
4484 RegisterJobsUnserializer(parameters); | 4497 RegisterJobsUnserializer(parameters); |
4485 return true; | |
4486 | |
4487 case _OrthancPluginService_RegisterIncomingHttpRequestFilter: | |
4488 RegisterIncomingHttpRequestFilter(parameters); | |
4489 return true; | |
4490 | |
4491 case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: | |
4492 RegisterIncomingHttpRequestFilter2(parameters); | |
4493 return true; | 4498 return true; |
4494 | 4499 |
4495 case _OrthancPluginService_RegisterIncomingDicomInstanceFilter: | 4500 case _OrthancPluginService_RegisterIncomingDicomInstanceFilter: |
4496 RegisterIncomingDicomInstanceFilter(parameters); | 4501 RegisterIncomingDicomInstanceFilter(parameters); |
4497 return true; | 4502 return true; |
4938 getKeys[i] = getArguments[i].first.c_str(); | 4943 getKeys[i] = getArguments[i].first.c_str(); |
4939 getValues[i] = getArguments[i].second.c_str(); | 4944 getValues[i] = getArguments[i].second.c_str(); |
4940 } | 4945 } |
4941 | 4946 |
4942 { | 4947 { |
4943 boost::recursive_mutex::scoped_lock lock(pimpl_->invokeServiceMutex_); | 4948 boost::shared_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); |
4944 | 4949 |
4945 // Improved callback with support for GET arguments, since Orthanc 1.3.0 | 4950 // Improved callback with support for GET arguments, since Orthanc 1.3.0 |
4946 for (PImpl::IncomingHttpRequestFilters2::const_iterator | 4951 for (PImpl::IncomingHttpRequestFilters2::const_iterator |
4947 filter = pimpl_->incomingHttpRequestFilters2_.begin(); | 4952 filter = pimpl_->incomingHttpRequestFilters2_.begin(); |
4948 filter != pimpl_->incomingHttpRequestFilters2_.end(); ++filter) | 4953 filter != pimpl_->incomingHttpRequestFilters2_.end(); ++filter) |