From d57f046c40e716069d37f9e6b7911afd41c7b116 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Thu, 16 Aug 2018 16:37:38 +0200 Subject: Add support for sending empty linkage sets to clear receiver databases --- src/MuxElements.cpp | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) (limited to 'src/MuxElements.cpp') diff --git a/src/MuxElements.cpp b/src/MuxElements.cpp index e19c93d..9c1fc7a 100644 --- a/src/MuxElements.cpp +++ b/src/MuxElements.cpp @@ -665,26 +665,35 @@ bool dabEnsemble::validate_linkage_sets() { for (const auto& ls : linkagesets) { const std::string keyserviceuid = ls->keyservice; - const auto& keyservice = std::find_if( - services.cbegin(), - services.cend(), - [&](const std::shared_ptr& srv) { + if (keyserviceuid.empty()) { + if (not ls->id_list.empty()) { + etiLog.log(error, "Linkage set 0x%04x with empty key service " + "should have an empty list.", ls->lsn); + return false; + } + } + else { + const auto& keyservice = std::find_if( + services.cbegin(), + services.cend(), + [&](const std::shared_ptr& srv) { return srv->uid == keyserviceuid; - }); + }); - if (keyservice == services.end()) { - etiLog.log(error, "Invalid key service %s in linkage set 0x%04x", - keyserviceuid.c_str(), ls->lsn); - return false; - } + if (keyservice == services.end()) { + etiLog.log(error, "Invalid key service %s in linkage set 0x%04x", + keyserviceuid.c_str(), ls->lsn); + return false; + } - // need to add key service to num_ids - const size_t num_ids = 1 + ls->id_list.size(); - if (num_ids > 0x0F) { - etiLog.log(error, - "Too many links for linkage set 0x%04x", - ls->lsn); - return false; + // need to add key service to num_ids + const size_t num_ids = 1 + ls->id_list.size(); + if (num_ids > 0x0F) { + etiLog.log(error, + "Too many links for linkage set 0x%04x", + ls->lsn); + return false; + } } } -- cgit v1.2.3