summaryrefslogtreecommitdiff
path: root/implementation/configuration
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/configuration')
-rw-r--r--implementation/configuration/include/configuration.hpp1
-rw-r--r--implementation/configuration/include/configuration_impl.hpp3
-rw-r--r--implementation/configuration/include/internal.hpp.in20
-rw-r--r--implementation/configuration/src/configuration_impl.cpp21
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;