diff options
Diffstat (limited to 'implementation/endpoints/include/endpoint_manager_base.hpp')
-rw-r--r-- | implementation/endpoints/include/endpoint_manager_base.hpp | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/implementation/endpoints/include/endpoint_manager_base.hpp b/implementation/endpoints/include/endpoint_manager_base.hpp index aa21269..fec39cc 100644 --- a/implementation/endpoints/include/endpoint_manager_base.hpp +++ b/implementation/endpoints/include/endpoint_manager_base.hpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// Copyright (C) 2014-2021 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -12,7 +12,12 @@ #include <unordered_set> #include <memory> -#include <boost/asio/io_service.hpp> +#if VSOMEIP_BOOST_VERSION < 106600 +# include <boost/asio/io_service.hpp> +# define io_context io_service +#else +# include <boost/asio/io_context.hpp> +#endif #include <vsomeip/primitive_types.hpp> @@ -23,7 +28,6 @@ namespace vsomeip_v3 { class routing_manager_base; class configuration; -class local_server_endpoint_impl; class routing_host; class endpoint_manager_base @@ -31,7 +35,7 @@ class endpoint_manager_base public endpoint_host { public: endpoint_manager_base(routing_manager_base* const _rm, - boost::asio::io_service& _io, + boost::asio::io_context &_io, const std::shared_ptr<configuration>& _configuration); virtual ~endpoint_manager_base() = default; @@ -44,23 +48,31 @@ public: std::unordered_set<client_t> get_connected_clients() const; - std::shared_ptr<local_server_endpoint_impl> create_local_server( + std::shared_ptr<endpoint> create_local_server( const std::shared_ptr<routing_host> &_routing_host); // endpoint_host interface virtual void on_connect(std::shared_ptr<endpoint> _endpoint); virtual void on_disconnect(std::shared_ptr<endpoint> _endpoint); - virtual bool on_bind_error(std::shared_ptr<endpoint> _endpoint, uint16_t _remote_port); + virtual bool on_bind_error(std::shared_ptr<endpoint> _endpoint, + const boost::asio::ip::address &_remote_address, + uint16_t _remote_port); virtual void on_error(const byte_t *_data, length_t _length, - endpoint* const _receiver, - const boost::asio::ip::address &_remote_address, - std::uint16_t _remote_port); + endpoint* const _receiver, + const boost::asio::ip::address &_remote_address, + std::uint16_t _remote_port); virtual void release_port(uint16_t _port, bool _reliable); client_t get_client() const; + std::string get_client_host() const; + instance_t find_instance(service_t _service, + endpoint* const _endpoint) const; // Statistics void log_client_states() const; + // Multicast options + void add_multicast_option(const multicast_option_t &_option); + protected: std::map<client_t, std::shared_ptr<endpoint>> get_local_endpoints() const; @@ -68,14 +80,23 @@ private: std::shared_ptr<endpoint> create_local_unlocked(client_t _client); std::shared_ptr<endpoint> find_local_unlocked(client_t _client); + bool get_local_server_port(port_t &_port, const std::set<port_t> &_used_ports) const; + protected: routing_manager_base* const rm_; - boost::asio::io_service& io_; + boost::asio::io_context &io_; std::shared_ptr<configuration> configuration_; + bool is_local_routing_; + port_t local_port_; // local (client) port when connecting to other + // vsomeip application via TCP + private: mutable std::mutex local_endpoint_mutex_; std::map<client_t, std::shared_ptr<endpoint> > local_endpoints_; + + mutable std::mutex create_local_server_endpoint_mutex_; + }; } // namespace vsomeip_v3 |