diff options
author | Jürgen Gehring <Juergen.Gehring@bmw.de> | 2016-11-04 09:24:39 -0700 |
---|---|---|
committer | Jürgen Gehring <Juergen.Gehring@bmw.de> | 2016-11-04 09:24:39 -0700 |
commit | 7bb933404f4ee0be3add0c506b53e1c1f7274869 (patch) | |
tree | 50110be8f40777c8561163b5080fcff4bcc6d193 | |
parent | 172d8af010131b141fbaa1184e515e83700bdf20 (diff) | |
download | vSomeIP-7bb933404f4ee0be3add0c506b53e1c1f7274869.tar.gz |
vSomeIP 2.4.32.4.3
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | README.md | 81 | ||||
-rw-r--r-- | implementation/endpoints/src/udp_client_endpoint_impl.cpp | 26 |
4 files changed, 22 insertions, 91 deletions
@@ -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();
|