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> /// <summary>
/// Releases a granted TG. /// Releases a granted TG.
/// </summary> /// </summary>

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

@ -96,7 +96,8 @@ namespace dmr
/// <summary>Permits a TGID on a non-authoritative host.</summary> /// <summary>Permits a TGID on a non-authoritative host.</summary>
void permittedTG(uint32_t dstId); 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> /// <summary>Releases a granted TG.</summary>
void releaseGrantTG(uint32_t dstId); void releaseGrantTG(uint32_t dstId);
/// <summary>Touchs a granted TG to keep a channel grant alive.</summary> /// <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; return;
} }
// validate unit-to-unit is a integer within the JSON blob // validate source ID is a integer within the JSON blob
if (!req["unitToUnit"].is<bool>()) { if (!req["srcId"].is<int>()) {
errorPayload(reply, "unit-to-unit was not a valid boolean"); 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; 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) { switch (state) {
case STATE_DMR: case STATE_DMR:
@ -1071,8 +1082,7 @@ void RESTAPI::restAPI_PutGrantTG(const HTTPPayload& request, HTTPPayload& reply,
} }
if (m_dmr != nullptr) { if (m_dmr != nullptr) {
// TODO TODO m_dmr->grantTG(srcId, dstId, slot, !unitToUnit);
//m_dmr->grantTG(dstId, slot, unitToUnit);
} }
else { else {
errorPayload(reply, "DMR mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE); 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 defined(ENABLE_P25)
{ {
if (m_p25 != nullptr) { if (m_p25 != nullptr) {
// TODO TODO m_p25->grantTG(srcId, dstId, !unitToUnit);
//m_p25->grantTG(dstId, unitToUnit);
} }
else { else {
errorPayload(reply, "P25 mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE); 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 defined(ENABLE_NXDN)
{ {
if (m_nxdn != nullptr) { if (m_nxdn != nullptr) {
// TODO TODO m_nxdn->grantTG(srcId, dstId, !unitToUnit);
//m_nxdn->grantTG(dstId, unitToUnit);
} }
else { else {
errorPayload(reply, "NXDN mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE); errorPayload(reply, "NXDN mode is not enabled", HTTPPayload::SERVICE_UNAVAILABLE);

@ -691,12 +691,31 @@ void Control::permittedTG(uint32_t dstId)
} }
if (m_verbose) { 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; 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> /// <summary>
/// Releases a granted TG. /// Releases a granted TG.
/// </summary> /// </summary>

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

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

Loading…
Cancel
Save

Powered by TurnKey Linux.