diff options
Diffstat (limited to 'src/MuxElements.cpp')
-rw-r--r-- | src/MuxElements.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
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<DabService>& 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<DabService>& 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; + } } } |