add conference FNE REST API to report the currently configured TGID list;

pull/48/head
Bryan Biedenkapp 2 years ago
parent 9bd06b916a
commit c60b69b54e

@ -257,6 +257,7 @@ void RESTAPI::initializeEndpoints()
m_dispatcher.match(GET_VERSION).get(REST_API_BIND(RESTAPI::restAPI_GetVersion, this));
m_dispatcher.match(GET_STATUS).get(REST_API_BIND(RESTAPI::restAPI_GetStatus, this));
m_dispatcher.match(FNE_GET_PEERLIST).get(REST_API_BIND(RESTAPI::restAPI_GetPeerList, this));
m_dispatcher.match(FNE_GET_TGID_LIST).get(REST_API_BIND(RESTAPI::restAPI_GetTGIDList, this));
m_dispatcher.match(FNE_GET_FORCE_UPDATE).get(REST_API_BIND(RESTAPI::restAPI_GetForceUpdate, this));
}
@ -492,6 +493,96 @@ void RESTAPI::restAPI_GetPeerList(const HTTPPayload& request, HTTPPayload& reply
reply.payload(response);
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="reply"></param>
/// <param name="match"></param>
void RESTAPI::restAPI_GetTGIDList(const HTTPPayload& request, HTTPPayload& reply, const RequestMatch& match)
{
if (!validateAuth(request, reply)) {
return;
}
json::object response = json::object();
setResponseDefaultStatus(response);
json::array tgs = json::array();
if (m_tidLookup != nullptr) {
if (m_tidLookup->groupVoice().size() > 0) {
for (auto entry : m_tidLookup->groupVoice()) {
json::object tg = json::object();
std::string tgName = entry.name();
tg["name"].set<std::string>(tgName);
bool invalid = entry.isInvalid();
tg["invalid"].set<bool>(invalid);
{
json::object source = json::object();
uint32_t tgId = entry.source().tgId();
source["tgid"].set<uint32_t>(tgId);
uint8_t tgSlot = entry.source().tgSlot();
source["slot"].set<uint8_t>(tgSlot);
tg["source"].set<json::object>(source);
}
{
json::object config = json::object();
bool active = entry.config().active();
config["active"].set<bool>(active);
bool parrot = entry.config().parrot();
config["parrot"].set<bool>(parrot);
json::array inclusions = json::array();
std::vector<uint32_t> inclusion = entry.config().inclusion();
if (inclusion.size() > 0) {
for (auto inclEntry : inclusion) {
uint32_t peerId = inclEntry;
inclusions.push_back(json::value((double)peerId));
}
}
config["inclusion"].set<json::array>(inclusions);
json::array exclusions = json::array();
std::vector<uint32_t> exclusion = entry.config().exclusion();
if (exclusion.size() > 0) {
for (auto exclEntry : exclusion) {
uint32_t peerId = exclEntry;
exclusions.push_back(json::value((double)peerId));
}
}
config["exclusion"].set<json::array>(exclusions);
json::array rewrites = json::array();
std::vector<lookups::TalkgroupRuleRewrite> rewrite = entry.config().rewrite();
if (rewrite.size() > 0) {
for (auto rewrEntry : rewrite) {
json::object rewrite = json::object();
uint32_t peerId = rewrEntry.peerId();
rewrite["peerId"].set<uint32_t>(peerId);
uint32_t tgId = rewrEntry.tgId();
rewrite["tgid"].set<uint32_t>(tgId);
uint8_t tgSlot = rewrEntry.tgSlot();
rewrite["slot"].set<uint8_t>(tgSlot);
exclusions.push_back(json::value(rewrite));
}
}
config["rewrite"].set<json::array>(rewrites);
tg["config"].set<json::object>(config);
}
tgs.push_back(json::value(tg));
}
}
}
response["tgs"].set<json::array>(tgs);
reply.payload(response);
}
/// <summary>
///
/// </summary>

@ -110,6 +110,8 @@ private:
void restAPI_GetStatus(const HTTPPayload& request, HTTPPayload& reply, const network::rest::RequestMatch& match);
/// <summary></summary>
void restAPI_GetPeerList(const HTTPPayload& request, HTTPPayload& reply, const network::rest::RequestMatch& match);
/// <summary></summary>
void restAPI_GetTGIDList(const HTTPPayload& request, HTTPPayload& reply, const network::rest::RequestMatch& match);
/// <summary></summary>
void restAPI_GetForceUpdate(const HTTPPayload& request, HTTPPayload& reply, const network::rest::RequestMatch& match);

@ -34,6 +34,7 @@
// ---------------------------------------------------------------------------
#define FNE_GET_PEERLIST "/peerlist"
#define FNE_GET_TGID_LIST "/tgidlist"
#define FNE_GET_FORCE_UPDATE "/force-update"

@ -56,6 +56,7 @@
#define RCD_GET_VOICE_CH "voice-ch"
#define RCD_FNE_GET_PEERLIST "fne-peerlist"
#define RCD_FNE_GET_TGIDLIST "fne-tgidlist"
#define RCD_FNE_GET_FORCEUPDATE "fne-force-update"
#define RCD_MODE "mdm-mode"
@ -192,7 +193,8 @@ void usage(const char* message, const char* arg)
reply += " status Display current settings and operation mode\r\n";
reply += " voice-ch Retrieves the list of configured voice channels\r\n";
reply += "\r\n";
reply += " peerlist Retrieves the list of connected peers (Conference FNE only)\r\n";
reply += " fne-peerlist Retrieves the list of connected peers (Conference FNE only)\r\n";
reply += " fne-tgidlist Retrieves the list of configured TGIDs (Conference FNE only)\r\n";
reply += " fne-force-update Forces the FNE to send list update (Conference FNE only)\r\n";
reply += "\r\n";
reply += " mdm-mode <mode> Set current mode of host (idle, lockout, dmr, p25, nxdn)\r\n";
@ -439,6 +441,9 @@ int main(int argc, char** argv)
else if (rcom == RCD_FNE_GET_PEERLIST) {
retCode = client->send(HTTP_GET, FNE_GET_PEERLIST, json::object(), response);
}
else if (rcom == RCD_FNE_GET_TGIDLIST) {
retCode = client->send(HTTP_GET, FNE_GET_TGID_LIST, json::object(), response);
}
else if (rcom == RCD_FNE_GET_FORCEUPDATE) {
retCode = client->send(HTTP_GET, FNE_GET_FORCE_UPDATE, json::object(), response);
}

Loading…
Cancel
Save

Powered by TurnKey Linux.