summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürgen Gehring <Juergen.Gehring@bmw.de>2016-11-04 09:24:39 -0700
committerJürgen Gehring <Juergen.Gehring@bmw.de>2016-11-04 09:24:39 -0700
commit7bb933404f4ee0be3add0c506b53e1c1f7274869 (patch)
tree50110be8f40777c8561163b5080fcff4bcc6d193
parent172d8af010131b141fbaa1184e515e83700bdf20 (diff)
downloadvSomeIP-7bb933404f4ee0be3add0c506b53e1c1f7274869.tar.gz
vSomeIP 2.4.32.4.3
-rw-r--r--CHANGES4
-rw-r--r--CMakeLists.txt2
-rw-r--r--README.md81
-rw-r--r--implementation/endpoints/src/udp_client_endpoint_impl.cpp26
4 files changed, 22 insertions, 91 deletions
diff --git a/CHANGES b/CHANGES
index 4b12f50..8105aef 100644
--- a/CHANGES
+++ b/CHANGES
@@ -224,3 +224,7 @@ v2.4.2
- Incoming find service entries with unicast flag set to 0 are now replied with
a unicast offer service message instead of a multicast offer service message.
- application::stop() now blocks until the shutdown has finished completely
+
+v2.4.3
+- Fix receiving of UDP frames containing multiple SOME/IP messages via UDP from
+ external service instances
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2d886cc..21967a6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,7 +8,7 @@ project (vsomeip)
set (VSOMEIP_MAJOR_VERSION 2)
set (VSOMEIP_MINOR_VERSION 4)
-set (VSOMEIP_PATCH_VERSION 2)
+set (VSOMEIP_PATCH_VERSION 3)
set (VSOMEIP_VERSION ${VSOMEIP_MAJOR_VERSION}.${VSOMEIP_MINOR_VERSION}.${VSOMEIP_PATCH_VERSION})
set (PACKAGE_VERSION ${VSOMEIP_VERSION}) # Used in documentatin/doxygen.in
set (CMAKE_VERBOSE_MAKEFILE off)
diff --git a/README.md b/README.md
deleted file mode 100644
index bfdb89e..0000000
--- a/README.md
+++ /dev/null
@@ -1,81 +0,0 @@
-### vsomeip
-
-##### Copyright
-Copyright (C) 2015-2016, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
-
-##### License
-
-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/.
-
-##### vsomeip Overview
-----------------
-The vsomeip stack implements the http://some-ip.com/ (Scalable service-Oriented
-MiddlewarE over IP (SOME/IP)) protocol. The stack consists out of:
-
-* a shared library for SOME/IP (`libvsomeip.so`)
-* a second shared library for SOME/IP's service discovery (`libvsomeip-sd.so`)
- which is loaded during runtime if the service discovery is enabled.
-
-##### Build Instructions
-
-###### Dependencies
-
-- A C++11 enabled compiler like gcc >= 4.8 is needed.
-- vsomeip uses CMake as buildsystem.
-- vsomeip uses Boost >= 1.55:
-
-Ubuntu 14.04:
-
-`sudo apt-get install libboost-system1.55-dev libboost-thread1.55-dev libboost-log1.55-dev`
-
-Ubuntu 12.04: a PPA is necessary to use version 1.54 of Boost:
--- URL: https://launchpad.net/~boost-latest/+archive/ubuntu/ppa
---`sudo add-apt-repository ppa:boost-latest/ppa`
---`sudo apt-get install libboost-system1.55-dev libboost-thread1.55-dev
- libboost-log1.55-dev`
-
-For the tests Google's test framework https://code.google.com/p/googletest/[gtest] in version 1.7.0 is needed.
--- URL: https://googletest.googlecode.com/files/gtest-1.7.0.zip
-
-To build the documentation asciidoc, source-highlight, doxygen and graphviz is needed:
---`sudo apt-get install asciidoc source-highlight doxygen graphviz`
-
-###### Compilation
-
-For compilation call:
-
-```bash
-mkdir build
-cd build
-cmake ..
-make
-```
-
-To specify a installation directory (like `--prefix=` if you're used to autotools) call cmake like:
-```bash
-cmake -DCMAKE_INSTALL_PREFIX:PATH=$YOUR_PATH ..
-make
-make install
-```
-
-###### Compilation with predefined unicast and/or diagnosis address
-To predefine the unicast address, call cmake like:
-```bash
-cmake -DUNICAST_ADDRESS=<YOUR IP ADDRESS> ..
-```
-
-To predefine the diagnosis address, call cmake like:
-```bash
-cmake -DDIAGNOSIS_ADDRESS=<YOUR DIAGNOSIS ADDRESS> ..
-```
-The diagnosis address is a single byte value.
-
-###### Compilation with signal handling
-
-To compile vsomeip with signal handling (SIGINT/SIGTERM) enabled, call cmake like:
-```bash
-cmake -DENABLE_SIGNAL_HANDLING=1 ..
-```
-In the default setting, the application has to take care of shutting down vsomeip in case these signals are received.
diff --git a/implementation/endpoints/src/udp_client_endpoint_impl.cpp b/implementation/endpoints/src/udp_client_endpoint_impl.cpp
index c92fff0..4513845 100644
--- a/implementation/endpoints/src/udp_client_endpoint_impl.cpp
+++ b/implementation/endpoints/src/udp_client_endpoint_impl.cpp
@@ -139,15 +139,23 @@ void udp_client_endpoint_impl::receive_cbk(
<< (int) recv_buffer_[i] << " ";
VSOMEIP_DEBUG << msg.str();
#endif
- uint32_t current_message_size
- = utility::get_message_size(&this->recv_buffer_[0],
- (uint32_t) _bytes);
- if (current_message_size > VSOMEIP_SOMEIP_HEADER_SIZE &&
- current_message_size <= _bytes) {
- its_host->on_message(&recv_buffer_[0], current_message_size, this);
- } else {
- VSOMEIP_ERROR << "Received a unreliable vSomeIP message with bad length field";
- }
+ std::size_t remaining_bytes = _bytes;
+ std::size_t i = 0;
+ do {
+ uint32_t current_message_size
+ = utility::get_message_size(&this->recv_buffer_[i],
+ (uint32_t) remaining_bytes);
+ if (current_message_size > VSOMEIP_SOMEIP_HEADER_SIZE &&
+ current_message_size <= remaining_bytes) {
+ remaining_bytes -= current_message_size;
+
+ its_host->on_message(&recv_buffer_[i], current_message_size, this);
+ } else {
+ VSOMEIP_ERROR << "Received a unreliable vSomeIP message with bad length field";
+ remaining_bytes = 0;
+ }
+ i += current_message_size;
+ } while (remaining_bytes > 0);
}
if (!_error) {
receive();