summaryrefslogtreecommitdiff
path: root/implementation/routing/include/routing_manager_stub.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/routing/include/routing_manager_stub.hpp')
-rw-r--r--implementation/routing/include/routing_manager_stub.hpp70
1 files changed, 64 insertions, 6 deletions
diff --git a/implementation/routing/include/routing_manager_stub.hpp b/implementation/routing/include/routing_manager_stub.hpp
index 4a37644..4c2ff01 100644
--- a/implementation/routing/include/routing_manager_stub.hpp
+++ b/implementation/routing/include/routing_manager_stub.hpp
@@ -19,6 +19,8 @@
#include <boost/asio/io_service.hpp>
#include <boost/asio/steady_timer.hpp>
+#include <vsomeip/handler.hpp>
+
#include "../../endpoints/include/endpoint_host.hpp"
#include "../include/routing_host.hpp"
@@ -27,6 +29,7 @@
namespace vsomeip_v3 {
class configuration;
+struct policy;
class routing_manager_stub_host;
class routing_manager_stub: public routing_host,
@@ -87,19 +90,31 @@ public:
bool send_provided_event_resend_request(client_t _client,
pending_remote_offer_id_t _id);
- bool is_policy_cached(uint32_t _uid);
+ bool update_security_policy_configuration(uint32_t _uid, uint32_t _gid,
+ const std::shared_ptr<policy> &_policy,
+ const std::shared_ptr<payload> &_payload,
+ const security_update_handler_t &_handler);
+ bool remove_security_policy_configuration(uint32_t _uid, uint32_t _gid,
+ const security_update_handler_t &_handler);
+ void on_security_update_response(pending_security_update_id_t _id,
+ client_t _client);
void policy_cache_add(uint32_t _uid, const std::shared_ptr<payload>& _payload);
-
void policy_cache_remove(uint32_t _uid);
+ bool is_policy_cached(uint32_t _uid);
- bool send_update_security_policy_request(client_t _client, pending_security_update_id_t _update_id,
- uint32_t _uid, const std::shared_ptr<payload>& _payload);
- bool send_remove_security_policy_request(client_t _client, pending_security_update_id_t _update_id,
- uint32_t _uid, uint32_t _gid);
+ bool send_update_security_policy_request(client_t _client,
+ pending_security_update_id_t _update_id, uint32_t _uid,
+ const std::shared_ptr<payload>& _payload);
+ bool send_remove_security_policy_request(client_t _client,
+ pending_security_update_id_t _update_id, uint32_t _uid, uint32_t _gid);
bool send_cached_security_policies(client_t _client);
+ bool add_requester_policies(uid_t _uid, gid_t _gid,
+ const std::set<std::shared_ptr<policy> > &_policies);
+ void remove_requester_policies(uid_t _uid, gid_t _gid);
+
private:
void broadcast(const std::vector<byte_t> &_command) const;
@@ -150,6 +165,34 @@ private:
void on_client_id_timer_expired(boost::system::error_code const &_error);
+ void get_requester_policies(uid_t _uid, gid_t _gid,
+ std::set<std::shared_ptr<policy> > &_policies) const;
+ bool send_requester_policies(const std::unordered_set<client_t> &_clients,
+ const std::set<std::shared_ptr<policy> > &_policies);
+
+ void on_security_update_timeout(
+ const boost::system::error_code &_error,
+ pending_security_update_id_t _id,
+ std::shared_ptr<boost::asio::steady_timer> _timer);
+
+ pending_security_update_id_t pending_security_update_add(
+ const std::unordered_set<client_t> &_clients);
+
+ std::unordered_set<client_t> pending_security_update_get(
+ pending_security_update_id_t _id);
+
+ bool pending_security_update_remove(
+ pending_security_update_id_t _id, client_t _client);
+
+ bool is_pending_security_update_finished(
+ pending_security_update_id_t _id);
+
+ void add_pending_security_update_handler(
+ pending_security_update_id_t _id,
+ security_update_handler_t _handler);
+ void add_pending_security_update_timer(
+ pending_security_update_id_t _id);
+
private:
routing_manager_stub_host *host_;
boost::asio::io_service &io_;
@@ -190,10 +233,25 @@ private:
std::map<client_t, std::vector<byte_t>> offered_services_info_;
std::map<client_t, std::vector<byte_t>> client_credentials_info_;
+ std::mutex pending_security_updates_mutex_;
+ pending_security_update_id_t pending_security_update_id_;
+ std::map<pending_security_update_id_t, std::unordered_set<client_t>> pending_security_updates_;
+
+ std::recursive_mutex security_update_handlers_mutex_;
+ std::map<pending_security_update_id_t, security_update_handler_t> security_update_handlers_;
+
+ std::mutex security_update_timers_mutex_;
+ std::map<pending_security_update_id_t, std::shared_ptr<boost::asio::steady_timer>> security_update_timers_;
std::mutex updated_security_policies_mutex_;
std::map<uint32_t, std::shared_ptr<payload>> updated_security_policies_;
+ mutable std::mutex requester_policies_mutex_;
+ std::map<uint32_t,
+ std::map<uint32_t,
+ std::set<std::shared_ptr<policy> >
+ >
+ > requester_policies_;
};
} // namespace vsomeip_v3