From 3d752bc3630a7a75327429c48a14562fefbbb719 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 5 Apr 2024 09:03:38 -0400 Subject: [PATCH] add preferred peer ID lists to the REST API; --- src/fne/network/RESTAPI.cpp | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/fne/network/RESTAPI.cpp b/src/fne/network/RESTAPI.cpp index 576e4de0..d7fa593d 100644 --- a/src/fne/network/RESTAPI.cpp +++ b/src/fne/network/RESTAPI.cpp @@ -194,6 +194,17 @@ json::object tgToJson(const TalkgroupRuleGroupVoice& groupVoice) } } config["rewrite"].set(rewrites); + + json::array preferreds = json::array(); + std::vector preferred = groupVoice.config().preferred(); + if (preferred.size() > 0) { + for (auto prefEntry : preferred) { + uint32_t peerId = prefEntry; + preferreds.push_back(json::value((double)peerId)); + } + } + config["nonpreferred"].set(preferreds); + tg["config"].set(config); } @@ -366,6 +377,27 @@ TalkgroupRuleGroupVoice jsonToTG(json::object& req, HTTPPayload& reply) config.rewrite(rewrite); } + if (!configObj["preferred"].is()) { + errorPayload(reply, "TG configuration \"preferred\" was not a valid JSON array"); + LogDebug(LOG_REST, "TG configuration \"preferred\" was not a valid JSON array"); + return TalkgroupRuleGroupVoice(); + } + json::array preferreds = configObj["exclusion"].get(); + + std::vector preferred = groupVoice.config().preferred(); + if (preferreds.size() > 0) { + for (auto prefEntry : preferreds) { + if (!prefEntry.is()) { + errorPayload(reply, "TG configuration preferred value was not a valid number"); + LogDebug(LOG_REST, "TG configuration preferred value was not a valid number"); + return TalkgroupRuleGroupVoice(); + } + + preferred.push_back(prefEntry.get()); + } + config.preferred(preferred); + } + groupVoice.config(config); } @@ -1039,12 +1071,13 @@ void RESTAPI::restAPI_PutTGAdd(const HTTPPayload& request, HTTPPayload& reply, c uint32_t incCount = groupVoice.config().inclusion().size(); uint32_t excCount = groupVoice.config().exclusion().size(); uint32_t rewrCount = groupVoice.config().rewrite().size(); + uint32_t prefCount = groupVoice.config().preferred().size(); if (incCount > 0 && excCount > 0) { ::LogWarning(LOG_REST, "Talkgroup (%s) defines both inclusions and exclusions! Inclusions take precedence and exclusions will be ignored.", groupName.c_str()); } - ::LogInfoEx(LOG_REST, "Talkgroup NAME: %s SRC_TGID: %u SRC_TS: %u ACTIVE: %u PARROT: %u INCLUSIONS: %u EXCLUSIONS: %u REWRITES: %u", groupName.c_str(), tgId, tgSlot, active, parrot, incCount, excCount, rewrCount); + ::LogInfoEx(LOG_REST, "Talkgroup NAME: %s SRC_TGID: %u SRC_TS: %u ACTIVE: %u PARROT: %u INCLUSIONS: %u EXCLUSIONS: %u REWRITES: %u PREFERRED: %u", groupName.c_str(), tgId, tgSlot, active, parrot, incCount, excCount, rewrCount, prefCount); m_tidLookup->addEntry(groupVoice); /*