properly complete grantTG REST API implementation;

pull/39/head
Bryan Biedenkapp 3 years ago
parent ca3810fa12
commit 2a3c827cab

@ -413,6 +413,26 @@ void Control::permittedTG(uint32_t dstId, uint8_t slot)
}
}
/// <summary>
/// Grants a TGID on a non-authoritative host.
/// </summary>
/// <param name="dstId"></param>
/// <paran name="slot"></param>
void Control::grantTG(uint32_t srcId, uint32_t dstId, uint8_t slot, bool grp)
{
switch (slot) {
case 1U:
m_slot1->grantTG(srcId, dstId, grp);
break;
case 2U:
m_slot2->grantTG(srcId, dstId, grp);
break;
default:
LogError(LOG_DMR, "DMR, invalid slot, slotNo = %u", slot);
break;
}
}
/// <summary>
/// Releases a granted TG.
/// </summary>

@ -95,7 +95,8 @@ namespace dmr
void setSupervisor(bool supervisor);
/// <summary>Permits a TGID on a non-authoritative host.</summary>
void permittedTG(uint32_t dstId, uint8_t slot);
/// <summary>Grants a TGID on a non-authoritative host.</summary>
void grantTG(uint32_t srcId, uint32_t dstId, uint8_t slot, bool grp);
/// <summary>Releases a granted TG.</summary>
void releaseGrantTG(uint32_t dstId, uint8_t slot);
/// <summary>Touchs a granted TG to keep a channel grant alive.</summary>

@ -627,6 +627,25 @@ void Slot::permittedTG(uint32_t dstId)
m_permittedDstId = dstId;
}
/// <summary>
/// Grants a TGID on a non-authoritative host.
/// </summary>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
/// <param name="grp"></param>
void Slot::grantTG(uint32_t srcId, uint32_t dstId, bool grp)
{
if (!m_control) {
return;
}
if (m_verbose) {
LogMessage(LOG_DMR, "DMR Slot %u, network TG grant demand, srcId = %u, dstId = %u", m_slotNo, srcId, dstId);
}
m_control->writeRF_CSBK_Grant(srcId, dstId, 4U, grp);
}
/// <summary>
/// Releases a granted TG.
/// </summary>

@ -96,7 +96,8 @@ namespace dmr
/// <summary>Permits a TGID on a non-authoritative host.</summary>
void permittedTG(uint32_t dstId);
/// <summary>Grants a TGID on a non-authoritative host.</summary>
void grantTG(uint32_t srcId, uint32_t dstId, bool grp);
/// <summary>Releases a granted TG.</summary>
void releaseGrantTG(uint32_t dstId);
/// <summary>Touchs a granted TG to keep a channel grant alive.</summary>

@ -1045,13 +1045,24 @@ void RESTAPI::restAPI_PutGrantTG(const HTTPPayload& request, HTTPPayload& reply,
return;
}
// validate unit-to-unit is a integer within the JSON blob
if (!req["unitToUnit"].is<bool>()) {
errorPayload(reply, "unit-to-unit was not a valid boolean");
// validate source ID is a integer within the JSON blob
if (!req["srcId"].is<int>()) {
errorPayload(reply, "source ID was not a valid integer");
return;
}
uint32_t srcId = req["srcId"].get<uint32_t>();
if (srcId == 0U) {
errorPayload(reply, "soruce ID is an illegal TGID");
return;
}
//bool unitToUnit = req["unitToUnit"].get<bool>();
// validate unit-to-unit is a integer within the JSON blob
bool unitToUnit = false;
if (req["unitToUnit"].is<bool>()) {
unitToUnit = req["unitToUnit"].get<bool>();
}
switch (state) {
case STATE_DMR:
@ -1071,8 +1082,7 @@ void RESTAPI::restAPI_PutGrantTG(const HTTPPayload& request, HTTPPayload& reply,
}
if (m_dmr != nullptr) {
// TODO TODO
//m_dmr->grantTG(dstId, slot, unitToUnit);
m_dmr->grantTG(srcId, dstId, slot, !unitToUnit);
}
else {
errorPayload(reply, "DMR mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE);
@ -1088,8 +1098,7 @@ void RESTAPI::restAPI_PutGrantTG(const HTTPPayload& request, HTTPPayload& reply,
#if defined(ENABLE_P25)
{
if (m_p25 != nullptr) {
// TODO TODO
//m_p25->grantTG(dstId, unitToUnit);
m_p25->grantTG(srcId, dstId, !unitToUnit);
}
else {
errorPayload(reply, "P25 mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE);
@ -1105,8 +1114,7 @@ void RESTAPI::restAPI_PutGrantTG(const HTTPPayload& request, HTTPPayload& reply,
#if defined(ENABLE_NXDN)
{
if (m_nxdn != nullptr) {
// TODO TODO
//m_nxdn->grantTG(dstId, unitToUnit);
m_nxdn->grantTG(srcId, dstId, !unitToUnit);
}
else {
errorPayload(reply, "NXDN mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE);

@ -691,12 +691,31 @@ void Control::permittedTG(uint32_t dstId)
}
if (m_verbose) {
LogMessage(LOG_P25, "non-authoritative TG permit, dstId = %u", dstId);
LogMessage(LOG_NXDN, "non-authoritative TG permit, dstId = %u", dstId);
}
m_permittedDstId = dstId;
}
/// <summary>
/// Grants a TGID on a non-authoritative host.
/// </summary>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
/// <param name="grp"></param>
void Control::grantTG(uint32_t srcId, uint32_t dstId, bool grp)
{
if (!m_control) {
return;
}
if (m_verbose) {
LogMessage(LOG_NXDN, "network TG grant demand, srcId = %u, dstId = %u", srcId, dstId);
}
m_trunk->writeRF_Message_Grant(srcId, dstId, 4U, grp);
}
/// <summary>
/// Releases a granted TG.
/// </summary>

@ -107,7 +107,8 @@ namespace nxdn
void setSupervisor(bool supervisor) { m_supervisor = supervisor; }
/// <summary>Permits a TGID on a non-authoritative host.</summary>
void permittedTG(uint32_t dstId);
/// <summary>Grants a TGID on a non-authoritative host.</summary>
void grantTG(uint32_t srcId, uint32_t dstId, bool grp);
/// <summary>Releases a granted TG.</summary>
void releaseGrantTG(uint32_t dstId);
/// <summary>Touchs a granted TG to keep a channel grant alive.</summary>

@ -862,6 +862,25 @@ void Control::permittedTG(uint32_t dstId)
m_permittedDstId = dstId;
}
/// <summary>
/// Grants a TGID on a non-authoritative host.
/// </summary>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
/// <param name="grp"></param>
void Control::grantTG(uint32_t srcId, uint32_t dstId, bool grp)
{
if (!m_control) {
return;
}
if (m_verbose) {
LogMessage(LOG_P25, "network TG grant demand, srcId = %u, dstId = %u", srcId, dstId);
}
m_trunk->writeRF_TSDU_Grant(srcId, dstId, 4U, grp);
}
/// <summary>
/// Releases a granted TG.
/// </summary>

@ -115,7 +115,8 @@ namespace p25
void setSupervisor(bool supervisor) { m_supervisor = supervisor; }
/// <summary>Permits a TGID on a non-authoritative host.</summary>
void permittedTG(uint32_t dstId);
/// <summary>Grants a TGID on a non-authoritative host.</summary>
void grantTG(uint32_t srcId, uint32_t dstId, bool grp);
/// <summary>Releases a granted TG.</summary>
void releaseGrantTG(uint32_t dstId);
/// <summary>Touchs a granted TG to keep a channel grant alive.</summary>

Loading…
Cancel
Save

Powered by TurnKey Linux.