From 3441e62e30c9a0c47fe337aa0e5850961534f0a6 Mon Sep 17 00:00:00 2001 From: Rex Schilasky <49162693+rex-schilasky@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:56:46 +0200 Subject: [PATCH] [core] new-pub-sub-matching-compatible (#1665) --- ecal/core/CMakeLists.txt | 5 ++++ ecal/core/src/pubsub/ecal_pubgate.cpp | 4 ++- ecal/core/src/pubsub/ecal_subgate.cpp | 4 ++- ecal/core/src/readwrite/ecal_reader.cpp | 13 +++++---- .../core/src/readwrite/ecal_transport_layer.h | 29 +++++++++++++++++++ ecal/core/src/readwrite/ecal_writer.cpp | 15 +++++----- 6 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 ecal/core/src/readwrite/ecal_transport_layer.h diff --git a/ecal/core/CMakeLists.txt b/ecal/core/CMakeLists.txt index 5947c42f07..00207c3e14 100644 --- a/ecal/core/CMakeLists.txt +++ b/ecal/core/CMakeLists.txt @@ -217,6 +217,10 @@ endif() ###################################### # readwrite ###################################### +set(ecal_readwrite_src + src/readwrite/ecal_transport_layer.h +) + if(ECAL_CORE_PUBLISHER) set(ecal_writer_src src/readwrite/ecal_writer.cpp @@ -537,6 +541,7 @@ set(ecal_sources ${ecal_monitoring_src} ${ecal_pub_src} ${ecal_sub_src} + ${ecal_readwrite_src} ${ecal_writer_src} ${ecal_reader_src} ${ecal_registration_src} diff --git a/ecal/core/src/pubsub/ecal_pubgate.cpp b/ecal/core/src/pubsub/ecal_pubgate.cpp index 0dc863b343..3c696ea8bf 100644 --- a/ecal/core/src/pubsub/ecal_pubgate.cpp +++ b/ecal/core/src/pubsub/ecal_pubgate.cpp @@ -129,7 +129,9 @@ namespace eCAL CDataWriter::SLayerStates layer_states; for (const auto& layer : ecal_topic.tlayer) { - if (layer.enabled) + // transport layer versions 0 and 1 did not support dynamic layer enable feature + // so we set assume layer is enabled if we receive a registration in this case + if (layer.enabled || (layer.version < 2)) { switch (layer.type) { diff --git a/ecal/core/src/pubsub/ecal_subgate.cpp b/ecal/core/src/pubsub/ecal_subgate.cpp index 0690ca7ee3..aabe5af905 100644 --- a/ecal/core/src/pubsub/ecal_subgate.cpp +++ b/ecal/core/src/pubsub/ecal_subgate.cpp @@ -232,7 +232,9 @@ namespace eCAL CDataReader::SLayerStates layer_states; for (const auto& layer : ecal_topic.tlayer) { - if (layer.enabled) + // transport layer versions 0 and 1 did not support dynamic layer enable feature + // so we set assume layer is enabled if we receive a registration in this case + if (layer.enabled || layer.version < 2) { switch (layer.type) { diff --git a/ecal/core/src/readwrite/ecal_reader.cpp b/ecal/core/src/readwrite/ecal_reader.cpp index 39701bd798..cb19b57201 100644 --- a/ecal/core/src/readwrite/ecal_reader.cpp +++ b/ecal/core/src/readwrite/ecal_reader.cpp @@ -32,6 +32,7 @@ #include "ecal_reader.h" #include "ecal_global_accessors.h" #include "ecal_reader_layer.h" +#include "ecal_transport_layer.h" #if ECAL_CORE_TRANSPORT_UDP #include "udp/ecal_reader_udp.h" @@ -589,9 +590,9 @@ namespace eCAL { Registration::TLayer udp_tlayer; udp_tlayer.type = tl_ecal_udp; - udp_tlayer.version = 1; + udp_tlayer.version = ecal_transport_layer_version; udp_tlayer.enabled = m_layers.udp.read_enabled; - udp_tlayer.active = m_layers.udp.active; + udp_tlayer.active = m_layers.udp.active; ecal_reg_sample_topic.tlayer.push_back(udp_tlayer); } #endif @@ -601,9 +602,9 @@ namespace eCAL { Registration::TLayer shm_tlayer; shm_tlayer.type = tl_ecal_shm; - shm_tlayer.version = 1; + shm_tlayer.version = ecal_transport_layer_version; shm_tlayer.enabled = m_layers.shm.read_enabled; - shm_tlayer.active = m_layers.shm.active; + shm_tlayer.active = m_layers.shm.active; ecal_reg_sample_topic.tlayer.push_back(shm_tlayer); } #endif @@ -613,9 +614,9 @@ namespace eCAL { Registration::TLayer tcp_tlayer; tcp_tlayer.type = tl_ecal_tcp; - tcp_tlayer.version = 1; + tcp_tlayer.version = ecal_transport_layer_version; tcp_tlayer.enabled = m_layers.tcp.read_enabled; - tcp_tlayer.active = m_layers.tcp.active; + tcp_tlayer.active = m_layers.tcp.active; ecal_reg_sample_topic.tlayer.push_back(tcp_tlayer); } #endif diff --git a/ecal/core/src/readwrite/ecal_transport_layer.h b/ecal/core/src/readwrite/ecal_transport_layer.h new file mode 100644 index 0000000000..0e5cc61283 --- /dev/null +++ b/ecal/core/src/readwrite/ecal_transport_layer.h @@ -0,0 +1,29 @@ +/* ========================= eCAL LICENSE ================================= + * + * Copyright (C) 2016 - 2024 Continental Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ========================= eCAL LICENSE ================================= +*/ + +/** + * @brief transport layer settings +**/ + +#pragma once + +namespace eCAL +{ + constexpr int ecal_transport_layer_version = 2; +} diff --git a/ecal/core/src/readwrite/ecal_writer.cpp b/ecal/core/src/readwrite/ecal_writer.cpp index 61eec8bd58..24b81d5aed 100644 --- a/ecal/core/src/readwrite/ecal_writer.cpp +++ b/ecal/core/src/readwrite/ecal_writer.cpp @@ -35,8 +35,7 @@ #include "ecal_writer.h" #include "ecal_writer_base.h" #include "ecal_writer_buffer_payload.h" - -#include "pubsub/ecal_pubgate.h" +#include "ecal_transport_layer.h" #include #include @@ -643,9 +642,9 @@ namespace eCAL { eCAL::Registration::TLayer udp_tlayer; udp_tlayer.type = tl_ecal_udp; - udp_tlayer.version = 1; + udp_tlayer.version = ecal_transport_layer_version; udp_tlayer.enabled = m_layers.udp.write_enabled; - udp_tlayer.active = m_layers.udp.active; + udp_tlayer.active = m_layers.udp.active; udp_tlayer.par_layer.layer_par_udpmc = m_writer_udp->GetConnectionParameter().layer_par_udpmc; ecal_reg_sample_topic.tlayer.push_back(udp_tlayer); } @@ -657,9 +656,9 @@ namespace eCAL { eCAL::Registration::TLayer shm_tlayer; shm_tlayer.type = tl_ecal_shm; - shm_tlayer.version = 1; + shm_tlayer.version = ecal_transport_layer_version; shm_tlayer.enabled = m_layers.shm.write_enabled; - shm_tlayer.active = m_layers.shm.active; + shm_tlayer.active = m_layers.shm.active; shm_tlayer.par_layer.layer_par_shm = m_writer_shm->GetConnectionParameter().layer_par_shm; ecal_reg_sample_topic.tlayer.push_back(shm_tlayer); } @@ -671,9 +670,9 @@ namespace eCAL { eCAL::Registration::TLayer tcp_tlayer; tcp_tlayer.type = tl_ecal_tcp; - tcp_tlayer.version = 1; + tcp_tlayer.version = ecal_transport_layer_version; tcp_tlayer.enabled = m_layers.tcp.write_enabled; - tcp_tlayer.active = m_layers.tcp.active; + tcp_tlayer.active = m_layers.tcp.active; tcp_tlayer.par_layer.layer_par_tcp = m_writer_tcp->GetConnectionParameter().layer_par_tcp; ecal_reg_sample_topic.tlayer.push_back(tcp_tlayer); }