diff options
Diffstat (limited to 'implementation/configuration')
4 files changed, 43 insertions, 2 deletions
diff --git a/implementation/configuration/include/configuration.hpp b/implementation/configuration/include/configuration.hpp index 88a978b..26ebf36 100644 --- a/implementation/configuration/include/configuration.hpp +++ b/implementation/configuration/include/configuration.hpp @@ -74,6 +74,7 @@ public: virtual std::size_t get_max_dispatchers(const std::string &_name) const = 0; virtual std::size_t get_max_dispatch_time(const std::string &_name) const = 0; virtual std::size_t get_io_thread_count(const std::string &_name) const = 0; + virtual std::size_t get_request_debouncing(const std::string &_name) const = 0; virtual std::uint32_t get_max_message_size_local() const = 0; virtual std::uint32_t get_message_size_reliable(const std::string& _address, diff --git a/implementation/configuration/include/configuration_impl.hpp b/implementation/configuration/include/configuration_impl.hpp index 9693d72..9f7c3c3 100644 --- a/implementation/configuration/include/configuration_impl.hpp +++ b/implementation/configuration/include/configuration_impl.hpp @@ -80,6 +80,7 @@ public: VSOMEIP_EXPORT std::size_t get_max_dispatchers(const std::string &_name) const; VSOMEIP_EXPORT std::size_t get_max_dispatch_time(const std::string &_name) const; VSOMEIP_EXPORT std::size_t get_io_thread_count(const std::string &_name) const; + VSOMEIP_EXPORT std::size_t get_request_debouncing(const std::string &_name) const; VSOMEIP_EXPORT std::set<std::pair<service_t, instance_t> > get_remote_services() const; @@ -227,7 +228,7 @@ protected: std::string logfile_; boost::log::trivial::severity_level loglevel_; - std::map<std::string, std::tuple<client_t, std::size_t, std::size_t, size_t>> applications_; + std::map<std::string, std::tuple<client_t, std::size_t, std::size_t, std::size_t, std::size_t>> applications_; std::set<client_t> client_identifiers_; std::map<service_t, diff --git a/implementation/configuration/include/internal.hpp.in b/implementation/configuration/include/internal.hpp.in index 686ea8e..7d8a18c 100644 --- a/implementation/configuration/include/internal.hpp.in +++ b/implementation/configuration/include/internal.hpp.in @@ -8,6 +8,7 @@ #include <cstdint> #include <limits> +#include <vsomeip/primitive_types.hpp> #define VSOMEIP_ENV_APPLICATION_NAME "VSOMEIP_APPLICATION_NAME" #define VSOMEIP_ENV_CONFIGURATION "VSOMEIP_CONFIGURATION" @@ -56,6 +57,8 @@ #define VSOMEIP_MAX_DESERIALIZER 5 +#define VSOMEIP_REQUEST_DEBOUNCE_TIME 10 + #define VSOMEIP_COMMAND_HEADER_SIZE 7 #define VSOMEIP_COMMAND_TYPE_POS 0 @@ -89,6 +92,7 @@ #define VSOMEIP_REGISTER_EVENT 0x1B #define VSOMEIP_UNREGISTER_EVENT 0x1C #define VSOMEIP_ID_RESPONSE 0x1D +#define VSOMEIP_ID_REQUEST 0x1E #define VSOMEIP_OFFER_SERVICE_COMMAND_SIZE 16 #define VSOMEIP_REQUEST_SERVICE_COMMAND_SIZE 17 @@ -101,6 +105,7 @@ #define VSOMEIP_REGISTER_EVENT_COMMAND_SIZE 15 #define VSOMEIP_UNREGISTER_EVENT_COMMAND_SIZE 14 #define VSOMEIP_ID_RESPONSE_COMMAND_SIZE 12 +#define VSOMEIP_ID_REQUEST_COMMAND_SIZE 13 #ifndef _WIN32 #include <pthread.h> @@ -126,10 +131,25 @@ typedef enum { RIE_DEL_CLIENT = 0x3, } routing_info_entry_e; +struct service_data_t { + service_t service_; + instance_t instance_; + major_version_t major_; + minor_version_t minor_; + bool use_exclusive_proxy_; // only used for requests! + + bool operator<(const service_data_t &_other) const { + return (service_ < _other.service_ + || (service_ == _other.service_ + && instance_ < _other.instance_)); + } +}; + struct configuration_data_t { #ifndef _WIN32 volatile char initialized_; pthread_mutex_t mutex_; + pid_t pid_; #endif unsigned short client_base_; diff --git a/implementation/configuration/src/configuration_impl.cpp b/implementation/configuration/src/configuration_impl.cpp index d2c6283..7375bdb 100644 --- a/implementation/configuration/src/configuration_impl.cpp +++ b/implementation/configuration/src/configuration_impl.cpp @@ -441,6 +441,7 @@ void configuration_impl::load_application_data( std::size_t its_max_dispatchers(VSOMEIP_MAX_DISPATCHERS); std::size_t its_max_dispatch_time(VSOMEIP_MAX_DISPATCH_TIME); std::size_t its_io_thread_count(VSOMEIP_IO_THREAD_COUNT); + std::size_t its_request_debounce_time(VSOMEIP_REQUEST_DEBOUNCE_TIME); for (auto i = _tree.begin(); i != _tree.end(); ++i) { std::string its_key(i->first); std::string its_value(i->second.data()); @@ -470,6 +471,13 @@ void configuration_impl::load_application_data( VSOMEIP_WARNING << "Max. number of threads per application is 255"; its_io_thread_count = 255; } + } else if (its_key == "request_debounce_time") { + its_converter << std::dec << its_value; + its_converter >> its_request_debounce_time; + if (its_request_debounce_time > 10000) { + VSOMEIP_WARNING << "Max. request debounce time is 10.000ms"; + its_request_debounce_time = 10000; + } } } if (its_name != "") { @@ -487,7 +495,8 @@ void configuration_impl::load_application_data( } applications_[its_name] = std::make_tuple(its_id, its_max_dispatchers, - its_max_dispatch_time, its_io_thread_count); + its_max_dispatch_time, its_io_thread_count, + its_request_debounce_time); } else { VSOMEIP_WARNING << "Multiple configurations for application " << its_name << ". Ignoring a configuration from " @@ -1797,6 +1806,16 @@ bool configuration_impl::is_configured_client_id(client_t _id) const { return (client_identifiers_.find(_id) != client_identifiers_.end()); } +std::size_t configuration_impl::get_request_debouncing(const std::string &_name) const { + size_t debounce_time = VSOMEIP_REQUEST_DEBOUNCE_TIME; + auto found_application = applications_.find(_name); + if (found_application != applications_.end()) { + debounce_time = std::get<4>(found_application->second); + } + + return debounce_time; +} + std::size_t configuration_impl::get_io_thread_count(const std::string &_name) const { std::size_t its_io_thread_count = VSOMEIP_IO_THREAD_COUNT; |