summaryrefslogtreecommitdiff
path: root/implementation/endpoints/include
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/include')
-rw-r--r--implementation/endpoints/include/client_endpoint_impl.hpp10
-rw-r--r--implementation/endpoints/include/endpoint.hpp4
-rw-r--r--implementation/endpoints/include/local_client_endpoint_impl.hpp2
-rw-r--r--implementation/endpoints/include/local_server_endpoint_impl.hpp14
-rw-r--r--implementation/endpoints/include/netlink_connector.hpp2
-rw-r--r--implementation/endpoints/include/server_endpoint_impl.hpp3
-rw-r--r--implementation/endpoints/include/tcp_client_endpoint_impl.hpp13
-rw-r--r--implementation/endpoints/include/udp_client_endpoint_impl.hpp10
-rw-r--r--implementation/endpoints/include/udp_server_endpoint_impl.hpp7
-rw-r--r--implementation/endpoints/include/virtual_server_endpoint_impl.hpp3
10 files changed, 51 insertions, 17 deletions
diff --git a/implementation/endpoints/include/client_endpoint_impl.hpp b/implementation/endpoints/include/client_endpoint_impl.hpp
index 97819bc..409bba0 100644
--- a/implementation/endpoints/include/client_endpoint_impl.hpp
+++ b/implementation/endpoints/include/client_endpoint_impl.hpp
@@ -14,6 +14,7 @@
#include <boost/array.hpp>
#include <boost/asio/io_service.hpp>
+#include <boost/asio/strand.hpp>
#include <boost/asio/ip/udp.hpp>
#include <boost/utility.hpp>
#include <vsomeip/constants.hpp>
@@ -53,7 +54,8 @@ public:
bool is_client() const;
- bool is_connected() const;
+ bool is_established() const;
+ void set_established(bool _established);
void set_connected(bool _connected);
virtual bool get_remote_address(boost::asio::ip::address &_address) const;
virtual std::uint16_t get_remote_port() const;
@@ -76,6 +78,7 @@ protected:
enum class cei_state_e : std::uint8_t {
CLOSED,
CONNECTING,
+ CONNECTED,
ESTABLISHED
};
virtual void send_queued() = 0;
@@ -98,6 +101,7 @@ protected:
boost::asio::steady_timer connect_timer_;
std::atomic<uint32_t> connect_timeout_;
std::atomic<cei_state_e> state_;
+ std::atomic<std::uint32_t> reconnect_counter_;
// send data
message_buffer_ptr_t packetizer_;
@@ -110,9 +114,13 @@ protected:
std::atomic<std::uint16_t> local_port_;
+ boost::asio::io_service::strand strand_;
+
private:
virtual void set_local_port() = 0;
virtual std::string get_remote_information() const = 0;
+ virtual std::uint32_t get_max_allowed_reconnects() const = 0;
+ virtual void max_allowed_reconnects_reached() = 0;
};
} // namespace vsomeip
diff --git a/implementation/endpoints/include/endpoint.hpp b/implementation/endpoints/include/endpoint.hpp
index f3bf510..b1204f0 100644
--- a/implementation/endpoints/include/endpoint.hpp
+++ b/implementation/endpoints/include/endpoint.hpp
@@ -25,7 +25,7 @@ public:
virtual void start() = 0;
virtual void stop() = 0;
- virtual bool is_connected() const = 0;
+ virtual bool is_established() const = 0;
virtual bool send(const byte_t *_data, uint32_t _size,
bool _flush = true) = 0;
@@ -57,7 +57,7 @@ public:
virtual void print_status() = 0;
- virtual void set_connected(bool _connected) = 0;
+ virtual void set_established(bool _established) = 0; virtual void set_connected(bool _connected) = 0;
};
} // namespace vsomeip
diff --git a/implementation/endpoints/include/local_client_endpoint_impl.hpp b/implementation/endpoints/include/local_client_endpoint_impl.hpp
index 214a6d0..16b3af5 100644
--- a/implementation/endpoints/include/local_client_endpoint_impl.hpp
+++ b/implementation/endpoints/include/local_client_endpoint_impl.hpp
@@ -63,6 +63,8 @@ private:
std::size_t _bytes);
void set_local_port();
std::string get_remote_information() const;
+ std::uint32_t get_max_allowed_reconnects() const;
+ void max_allowed_reconnects_reached();
message_buffer_t recv_buffer_;
};
diff --git a/implementation/endpoints/include/local_server_endpoint_impl.hpp b/implementation/endpoints/include/local_server_endpoint_impl.hpp
index aee73c4..8ff8a10 100644
--- a/implementation/endpoints/include/local_server_endpoint_impl.hpp
+++ b/implementation/endpoints/include/local_server_endpoint_impl.hpp
@@ -43,7 +43,8 @@ public:
boost::asio::io_service &_io,
std::uint32_t _max_message_size,
std::uint32_t _buffer_shrink_threshold,
- configuration::endpoint_queue_limit_t _queue_limit);
+ configuration::endpoint_queue_limit_t _queue_limit,
+ std::uint32_t _mode);
local_server_endpoint_impl(std::shared_ptr<endpoint_host> _host,
endpoint_type _local,
@@ -51,7 +52,8 @@ public:
std::uint32_t _max_message_size,
int native_socket,
std::uint32_t _buffer_shrink_threshold,
- configuration::endpoint_queue_limit_t _queue_limit);
+ configuration::endpoint_queue_limit_t _queue_limit,
+ std::uint32_t _mode);
virtual ~local_server_endpoint_impl();
@@ -90,12 +92,14 @@ private:
void send_queued(const queue_iterator_type _queue_iterator);
void set_bound_client(client_t _client);
+ client_t get_bound_client() const;
+
std::size_t get_recv_buffer_capacity() const;
private:
connection(std::weak_ptr<local_server_endpoint_impl> _server,
- std::uint32_t _recv_buffer_size_initial,
std::uint32_t _max_message_size,
+ std::uint32_t _recv_buffer_size_initial,
std::uint32_t _buffer_shrink_threshold,
boost::asio::io_service &_io_service);
@@ -133,6 +137,10 @@ private:
typedef std::map<endpoint_type, connection::ptr> connections_t;
std::mutex connections_mutex_;
connections_t connections_;
+
+ std::mutex client_connections_mutex_;
+ std::map<client_t, connection::ptr> client_connections_;
+
const std::uint32_t buffer_shrink_threshold_;
private:
diff --git a/implementation/endpoints/include/netlink_connector.hpp b/implementation/endpoints/include/netlink_connector.hpp
index f71ba88..730874e 100644
--- a/implementation/endpoints/include/netlink_connector.hpp
+++ b/implementation/endpoints/include/netlink_connector.hpp
@@ -67,7 +67,7 @@ public:
/// Get the underlying endpoint in the native type.
data_type* data()
{
- return &sockaddr;
+ return reinterpret_cast<struct sockaddr*>(&sockaddr);
}
/// Get the underlying endpoint in the native type.
diff --git a/implementation/endpoints/include/server_endpoint_impl.hpp b/implementation/endpoints/include/server_endpoint_impl.hpp
index 60e8ff4..68e719b 100644
--- a/implementation/endpoints/include/server_endpoint_impl.hpp
+++ b/implementation/endpoints/include/server_endpoint_impl.hpp
@@ -38,7 +38,8 @@ public:
bool is_client() const;
void restart(bool _force);
- bool is_connected() const;
+ bool is_established() const;
+ void set_established(bool _established);
void set_connected(bool _connected);
bool send(const uint8_t *_data, uint32_t _size, bool _flush);
bool send(const std::vector<byte_t>& _cmd_header, const byte_t *_data,
diff --git a/implementation/endpoints/include/tcp_client_endpoint_impl.hpp b/implementation/endpoints/include/tcp_client_endpoint_impl.hpp
index cbadf5a..77cbd39 100644
--- a/implementation/endpoints/include/tcp_client_endpoint_impl.hpp
+++ b/implementation/endpoints/include/tcp_client_endpoint_impl.hpp
@@ -25,9 +25,11 @@ public:
endpoint_type _remote,
boost::asio::io_service &_io,
std::uint32_t _max_message_size,
- std::uint32_t buffer_shrink_threshold,
+ std::uint32_t _buffer_shrink_threshold,
std::chrono::milliseconds _send_timeout,
- configuration::endpoint_queue_limit_t _queue_limit);
+ configuration::endpoint_queue_limit_t _queue_limit,
+ std::uint32_t _tcp_restart_aborts_max,
+ std::uint32_t _tcp_connect_time_max);
virtual ~tcp_client_endpoint_impl();
void start();
@@ -71,6 +73,8 @@ private:
service_t _service, method_t _method, client_t _client, session_t _session,
std::chrono::steady_clock::time_point _start);
std::string get_remote_information() const;
+ std::uint32_t get_max_allowed_reconnects() const;
+ void max_allowed_reconnects_reached();
const std::uint32_t recv_buffer_size_initial_;
message_buffer_ptr_t recv_buffer_;
@@ -82,6 +86,11 @@ private:
std::chrono::steady_clock::time_point last_cookie_sent_;
const std::chrono::milliseconds send_timeout_;
const std::chrono::milliseconds send_timeout_warning_;
+
+ std::uint32_t tcp_restart_aborts_max_;
+ std::uint32_t tcp_connect_time_max_;
+ std::atomic<uint32_t> aborted_restart_count_;
+ std::chrono::steady_clock::time_point connect_timepoint_;
};
} // namespace vsomeip
diff --git a/implementation/endpoints/include/udp_client_endpoint_impl.hpp b/implementation/endpoints/include/udp_client_endpoint_impl.hpp
index 1866d05..b11da93 100644
--- a/implementation/endpoints/include/udp_client_endpoint_impl.hpp
+++ b/implementation/endpoints/include/udp_client_endpoint_impl.hpp
@@ -30,14 +30,15 @@ public:
endpoint_type _local,
endpoint_type _remote,
boost::asio::io_service &_io,
- configuration::endpoint_queue_limit_t _queue_limit);
+ configuration::endpoint_queue_limit_t _queue_limit,
+ std::uint32_t _udp_receive_buffer_size);
virtual ~udp_client_endpoint_impl();
void start();
void restart(bool _force);
void receive_cbk(boost::system::error_code const &_error,
- std::size_t _bytes);
+ std::size_t _bytes, message_buffer_ptr_t _recv_buffer);
bool get_remote_address(boost::asio::ip::address &_address) const;
std::uint16_t get_remote_port() const;
@@ -51,11 +52,12 @@ private:
const std::string get_address_port_remote() const;
const std::string get_address_port_local() const;
std::string get_remote_information() const;
-
- message_buffer_t recv_buffer_;
+ std::uint32_t get_max_allowed_reconnects() const;
+ void max_allowed_reconnects_reached();
const boost::asio::ip::address remote_address_;
const std::uint16_t remote_port_;
+ const std::uint32_t udp_receive_buffer_size_;
};
} // namespace vsomeip
diff --git a/implementation/endpoints/include/udp_server_endpoint_impl.hpp b/implementation/endpoints/include/udp_server_endpoint_impl.hpp
index 48e4935..f1b6959 100644
--- a/implementation/endpoints/include/udp_server_endpoint_impl.hpp
+++ b/implementation/endpoints/include/udp_server_endpoint_impl.hpp
@@ -26,7 +26,8 @@ public:
udp_server_endpoint_impl(std::shared_ptr<endpoint_host> _host,
endpoint_type _local,
boost::asio::io_service &_io,
- configuration::endpoint_queue_limit_t _queue_limit);
+ configuration::endpoint_queue_limit_t _queue_limit,
+ std::uint32_t _udp_receive_buffer_size);
virtual ~udp_server_endpoint_impl();
void start();
@@ -64,6 +65,8 @@ private:
std::string get_remote_information(
const queue_iterator_type _queue_iterator) const;
+ const std::string get_address_port_local() const;
+
private:
socket_type socket_;
endpoint_type remote_;
@@ -75,7 +78,7 @@ private:
std::atomic<bool> joined_group_;
message_buffer_t recv_buffer_;
- std::mutex socket_mutex_;
+ mutable std::mutex socket_mutex_;
const std::uint16_t local_port_;
};
diff --git a/implementation/endpoints/include/virtual_server_endpoint_impl.hpp b/implementation/endpoints/include/virtual_server_endpoint_impl.hpp
index 58619cc..afe56e2 100644
--- a/implementation/endpoints/include/virtual_server_endpoint_impl.hpp
+++ b/implementation/endpoints/include/virtual_server_endpoint_impl.hpp
@@ -24,7 +24,8 @@ public:
void start();
void stop();
- bool is_connected() const;
+ bool is_established() const;
+ void set_established(bool _established);
void set_connected(bool _connected);
bool send(const byte_t *_data, uint32_t _size, bool _flush);