summaryrefslogtreecommitdiff
path: root/implementation/endpoints/include/endpoint_manager_base.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/include/endpoint_manager_base.hpp')
-rw-r--r--implementation/endpoints/include/endpoint_manager_base.hpp41
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