summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/src/tcp_server_endpoint_impl.cpp')
-rw-r--r--implementation/endpoints/src/tcp_server_endpoint_impl.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/implementation/endpoints/src/tcp_server_endpoint_impl.cpp b/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
index 37e3554..5a061e1 100644
--- a/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
+++ b/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
@@ -25,8 +25,10 @@ tcp_server_endpoint_impl::tcp_server_endpoint_impl(
std::shared_ptr<endpoint_host> _host, endpoint_type _local,
boost::asio::io_service &_io, std::uint32_t _max_message_size,
std::uint32_t _buffer_shrink_threshold,
- std::chrono::milliseconds _send_timeout)
- : tcp_server_endpoint_base_impl(_host, _local, _io, _max_message_size),
+ std::chrono::milliseconds _send_timeout,
+ configuration::endpoint_queue_limit_t _queue_limit)
+ : tcp_server_endpoint_base_impl(_host, _local, _io,
+ _max_message_size, _queue_limit),
acceptor_(_io),
buffer_shrink_threshold_(_buffer_shrink_threshold),
local_port_(_local.port()),
@@ -110,7 +112,7 @@ void tcp_server_endpoint_impl::send_queued(const queue_iterator_type _queue_iter
<< _queue_iterator->first.address().to_string() << ":" << std::dec
<< static_cast<std::uint16_t>(_queue_iterator->first.port())
<< " dropping outstanding messages (" << std::dec
- << _queue_iterator->second.size() << ").";
+ << _queue_iterator->second.second.size() << ").";
queues_.erase(_queue_iterator->first);
}
}
@@ -310,7 +312,7 @@ void tcp_server_endpoint_impl::connection::send_queued(
" couldn't lock server_";
return;
}
- message_buffer_ptr_t its_buffer = _queue_iterator->second.front();
+ message_buffer_ptr_t its_buffer = _queue_iterator->second.second.front();
const service_t its_service = VSOMEIP_BYTES_TO_WORD(
(*its_buffer)[VSOMEIP_SERVICE_POS_MIN],
(*its_buffer)[VSOMEIP_SERVICE_POS_MAX]);
@@ -328,8 +330,10 @@ void tcp_server_endpoint_impl::connection::send_queued(
std::chrono::steady_clock::now();
if (std::chrono::duration_cast<std::chrono::milliseconds>(
now - last_cookie_sent_) > std::chrono::milliseconds(10000)) {
- send_magic_cookie(its_buffer);
- last_cookie_sent_ = now;
+ if (send_magic_cookie(its_buffer)) {
+ last_cookie_sent_ = now;
+ _queue_iterator->second.first += sizeof(SERVICE_COOKIE);
+ }
}
}
@@ -351,14 +355,16 @@ void tcp_server_endpoint_impl::connection::send_queued(
}
}
-void tcp_server_endpoint_impl::connection::send_magic_cookie(
+bool tcp_server_endpoint_impl::connection::send_magic_cookie(
message_buffer_ptr_t &_buffer) {
if (max_message_size_ == MESSAGE_SIZE_UNLIMITED
|| max_message_size_ - _buffer->size() >=
VSOMEIP_SOMEIP_HEADER_SIZE + VSOMEIP_SOMEIP_MAGIC_COOKIE_SIZE) {
_buffer->insert(_buffer->begin(), SERVICE_COOKIE,
SERVICE_COOKIE + sizeof(SERVICE_COOKIE));
+ return true;
}
+ return false;
}
bool tcp_server_endpoint_impl::connection::is_magic_cookie(size_t _offset) const {
@@ -553,7 +559,10 @@ void tcp_server_endpoint_impl::connection::receive_cbk(
|| _error == boost::asio::error::connection_reset
|| _error == boost::asio::error::timed_out) {
if(_error == boost::asio::error::timed_out) {
- VSOMEIP_WARNING << "tcp_server_endpoint receive_cbk: " << _error.message();
+ std::lock_guard<std::mutex> its_lock(socket_mutex_);
+ VSOMEIP_WARNING << "tcp_server_endpoint receive_cbk: " << _error.message()
+ << " local: " << get_address_port_local()
+ << " remote: " << get_address_port_remote();
}
{
std::lock_guard<std::mutex> its_lock(its_server->connections_mutex_);
@@ -746,10 +755,8 @@ void tcp_server_endpoint_impl::print_status() {
}
auto found_queue = queues_.find(c.first);
if (found_queue != queues_.end()) {
- its_queue_size = found_queue->second.size();
- for (const auto &m : found_queue->second) {
- its_data_size += m->size();
- }
+ its_queue_size = found_queue->second.second.size();
+ its_data_size = found_queue->second.first;
}
VSOMEIP_INFO << "status tse: client: "
<< c.second->get_address_port_remote()