return status from API call from RESTClient::send(); appropriately deny a grant if supervisor is enabled and a permit call fails; fix issue with CMake not caching compiler information;

pull/25/head 2023-03-28
Bryan Biedenkapp 3 years ago
parent f36426a889
commit ab622ee08c

@ -290,15 +290,15 @@ option(CROSS_COMPILE_ARM "Cross-compile for 32-bit ARM" off)
option(CROSS_COMPILE_AARCH64 "Cross-compile for 64-bit ARM" off) option(CROSS_COMPILE_AARCH64 "Cross-compile for 64-bit ARM" off)
option(CROSS_COMPILE_RPI_ARM "Cross-compile for (old RPi) 32-bit ARM" off) option(CROSS_COMPILE_RPI_ARM "Cross-compile for (old RPi) 32-bit ARM" off)
set(CMAKE_C_COMPILER gcc) set(CMAKE_C_COMPILER gcc CACHE FILEPATH "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER g++) set(CMAKE_CXX_COMPILER g++ CACHE FILEPATH "CMAKE_CXX_COMPILER")
set(ARCH amd64) set(ARCH amd64)
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
message(CHECK_START "Cross compiling for 32-bit ARM") message(CHECK_START "Cross compiling for 32-bit ARM")
if (CROSS_COMPILE_ARM) if (CROSS_COMPILE_ARM)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc CACHE FILEPATH "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ CACHE FILEPATH "CMAKE_CXX_COMPILER")
set(ARCH arm) set(ARCH arm)
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm)
message(CHECK_PASS "yes") message(CHECK_PASS "yes")
@ -307,8 +307,8 @@ else ()
endif (CROSS_COMPILE_ARM) endif (CROSS_COMPILE_ARM)
message(CHECK_START "Cross compiling for 64-bit ARM") message(CHECK_START "Cross compiling for 64-bit ARM")
if (CROSS_COMPILE_AARCH64) if (CROSS_COMPILE_AARCH64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc CACHE FILEPATH "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++ CACHE FILEPATH "CMAKE_CXX_COMPILER")
set(ARCH arm64) set(ARCH arm64)
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64) set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64)
message(CHECK_PASS "yes") message(CHECK_PASS "yes")
@ -332,11 +332,11 @@ if (CROSS_COMPILE_RPI_ARM)
GIT_REPOSITORY https://github.com/raspberrypi/tools.git GIT_REPOSITORY https://github.com/raspberrypi/tools.git
) )
FetchContent_MakeAvailable(RPiTools) FetchContent_MakeAvailable(RPiTools)
set(CMAKE_C_COMPILER ${CMAKE_CURRENT_BINARY_DIR}/_deps/rpitools-src/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) set(CMAKE_C_COMPILER ${CMAKE_CURRENT_BINARY_DIR}/_deps/rpitools-src/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CACHE FILEPATH "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER ${CMAKE_CURRENT_BINARY_DIR}/_deps/rpitools-src/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++) set(CMAKE_CXX_COMPILER ${CMAKE_CURRENT_BINARY_DIR}/_deps/rpitools-src/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ CACHE FILEPATH "CMAKE_CXX_COMPILER")
else() else()
set(CMAKE_C_COMPILER ${RPI_ARM_TOOLS}/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) set(CMAKE_C_COMPILER ${RPI_ARM_TOOLS}/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CACHE FILEPATH "CMAKE_C_COMPILER")
set(CMAKE_CXX_COMPILER ${RPI_ARM_TOOLS}/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++) set(CMAKE_CXX_COMPILER ${RPI_ARM_TOOLS}/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ CACHE FILEPATH "CMAKE_CXX_COMPILER")
endif () endif ()
set(ARCH armhf) set(ARCH armhf)

@ -889,8 +889,18 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
req["dstId"].set<uint32_t>(dstId); req["dstId"].set<uint32_t>(dstId);
req["slot"].set<uint8_t>(slot); req["slot"].set<uint8_t>(slot);
RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(), int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, m_tscc->m_debug); HTTP_PUT, PUT_PERMIT_TG, req, m_tscc->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
m_tscc->m_affiliations->releaseGrant(dstId, false);
if (!net) {
writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
return false;
}
} }
else { else {
::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot); ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
@ -956,8 +966,18 @@ bool ControlSignaling::writeRF_CSBK_Grant(uint32_t srcId, uint32_t dstId, uint8_
req["dstId"].set<uint32_t>(dstId); req["dstId"].set<uint32_t>(dstId);
req["slot"].set<uint8_t>(slot); req["slot"].set<uint8_t>(slot);
RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(), int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, m_tscc->m_debug); HTTP_PUT, PUT_PERMIT_TG, req, m_tscc->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);
m_tscc->m_affiliations->releaseGrant(dstId, false);
if (!net) {
writeRF_CSBK_ACK_RSP(srcId, TS_DENY_RSN_TGT_BUSY, (grp) ? 1U : 0U);
m_slot->m_rfState = RS_RF_REJECTED;
}
return false;
}
} }
else { else {
::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot); ::LogError(LOG_RF, "DMR Slot %u, DT_CSBK, CSBKO_RAND (Random Access), failed to permit TG for use, chNo = %u, slot = %u", m_tscc->m_slotNo, chNo, slot);

@ -561,8 +561,18 @@ bool Trunk::writeRF_Message_Grant(uint32_t srcId, uint32_t dstId, uint8_t servic
req["state"].set<int>(state); req["state"].set<int>(state);
req["dstId"].set<uint32_t>(dstId); req["dstId"].set<uint32_t>(dstId);
RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(), int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, m_nxdn->m_debug); HTTP_PUT, PUT_PERMIT_TG, req, m_nxdn->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
::LogError((net) ? LOG_NET : LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL_RESP ", failed to permit TG for use, chNo = %u", chNo);
m_nxdn->m_affiliations.releaseGrant(dstId, false);
if (!net) {
writeRF_Message_Deny(0U, srcId, NXDN_CAUSE_VD_QUE_GRP_BUSY, RTCH_MESSAGE_TYPE_VCALL);
m_nxdn->m_rfState = RS_RF_REJECTED;
}
return false;
}
} }
else { else {
::LogError((net) ? LOG_NET : LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL_RESP ", failed to permit TG for use, chNo = %u", chNo); ::LogError((net) ? LOG_NET : LOG_RF, "NXDN, " NXDN_RTCH_MSG_TYPE_VCALL_RESP ", failed to permit TG for use, chNo = %u", chNo);

@ -2245,8 +2245,18 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
req["state"].set<int>(state); req["state"].set<int>(state);
req["dstId"].set<uint32_t>(dstId); req["dstId"].set<uint32_t>(dstId);
RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(), int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, m_p25->m_debug); HTTP_PUT, PUT_PERMIT_TG, req, m_p25->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo);
m_p25->m_affiliations.releaseGrant(dstId, false);
if (!net) {
writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_BONK, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH);
m_p25->m_rfState = RS_RF_REJECTED;
}
return false;
}
} }
else { else {
::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo); ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo);
@ -2285,11 +2295,21 @@ bool Trunk::writeRF_TSDU_Grant(uint32_t srcId, uint32_t dstId, uint8_t serviceOp
req["state"].set<int>(state); req["state"].set<int>(state);
req["dstId"].set<uint32_t>(dstId); req["dstId"].set<uint32_t>(dstId);
RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(), int ret = RESTClient::send(voiceChData.address(), voiceChData.port(), voiceChData.password(),
HTTP_PUT, PUT_PERMIT_TG, req, m_p25->m_debug); HTTP_PUT, PUT_PERMIT_TG, req, m_p25->m_debug);
if (ret != network::rest::http::HTTPPayload::StatusType::OK) {
::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo);
m_p25->m_affiliations.releaseGrant(dstId, false);
if (!net) {
writeRF_TSDU_Deny(srcId, dstId, P25_DENY_RSN_PTT_BONK, (grp) ? TSBK_IOSP_GRP_VCH : TSBK_IOSP_UU_VCH);
m_p25->m_rfState = RS_RF_REJECTED;
}
return false;
}
} }
else { else {
::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_GRP_VCH (Group Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo); ::LogError((net) ? LOG_NET : LOG_RF, P25_TSDU_STR ", TSBK_IOSP_UU_VCH (Unit-to-Unit Voice Channel Grant), failed to permit TG for use, chNo = %u", chNo);
} }
} }

@ -163,6 +163,7 @@ int RESTClient::send(const std::string& address, uint32_t port, const std::strin
assert(port > 0U); assert(port > 0U);
assert(password.empty()); assert(password.empty());
int ret = EXIT_SUCCESS;
m_debug = debug; m_debug = debug;
typedef network::rest::BasicRequestDispatcher<network::rest::http::HTTPPayload, network::rest::http::HTTPPayload> RESTDispatcherType; typedef network::rest::BasicRequestDispatcher<network::rest::http::HTTPPayload, network::rest::http::HTTPPayload> RESTDispatcherType;
@ -254,6 +255,12 @@ int RESTClient::send(const std::string& address, uint32_t port, const std::strin
return ERRNO_API_CALL_TIMEOUT; return ERRNO_API_CALL_TIMEOUT;
} }
rsp = json::object();
if (!parseResponseBody(m_response, rsp)) {
return ERRNO_BAD_API_RESPONSE;
}
ret = rsp["status"].get<int>();
if (m_console) { if (m_console) {
fprintf(stdout, "%s\r\n", m_response.content.c_str()); fprintf(stdout, "%s\r\n", m_response.content.c_str());
} }
@ -273,7 +280,7 @@ int RESTClient::send(const std::string& address, uint32_t port, const std::strin
return ERRNO_INTERNAL_ERROR; return ERRNO_INTERNAL_ERROR;
} }
return EXIT_SUCCESS; return ret;
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

Loading…
Cancel
Save

Powered by TurnKey Linux.