diff --git a/src/network/BaseNetwork.cpp b/src/network/BaseNetwork.cpp index f530310a..9e5c2ddb 100644 --- a/src/network/BaseNetwork.cpp +++ b/src/network/BaseNetwork.cpp @@ -128,8 +128,6 @@ bool BaseNetwork::writeGrantReq(const uint8_t mode, const uint32_t srcId, const uint8_t buffer[DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - ::memcpy(buffer + 0U, TAG_REPEATER_GRANT, 7U); - __SET_UINT32(srcId, buffer, 11U); // Source Address __SET_UINT32(dstId, buffer, 15U); // Destination Address buffer[19U] = slot; // Slot Number @@ -162,8 +160,6 @@ bool BaseNetwork::writeActLog(const char* message) char buffer[DATA_PACKET_LENGTH]; uint32_t len = ::strlen(message); - ::memcpy(buffer + 0U, TAG_TRANSFER_ACT_LOG, 7U); - ::strcpy(buffer + 11U, message); m_frameQueue->enqueueMessage((uint8_t*)buffer, (uint32_t)len + 12U, 0U, m_peerId, @@ -189,11 +185,9 @@ bool BaseNetwork::writeDiagLog(const char* message) char buffer[DATA_PACKET_LENGTH]; uint32_t len = ::strlen(message); - ::memcpy(buffer + 0U, TAG_TRANSFER_DIAG_LOG, 8U); - - ::strcpy(buffer + 12U, message); + ::strcpy(buffer + 11U, message); - m_frameQueue->enqueueMessage((uint8_t*)buffer, (uint32_t)len + 13U, 0U, m_peerId, + m_frameQueue->enqueueMessage((uint8_t*)buffer, (uint32_t)len + 12U, 0U, m_peerId, { NET_FUNC_TRANSFER, NET_TRANSFER_SUBFUNC_DIAG }, 0U, m_addr, m_addrLen); return m_frameQueue->flushQueue(); } diff --git a/src/network/BaseNetwork.h b/src/network/BaseNetwork.h index c895520e..34d7b17a 100644 --- a/src/network/BaseNetwork.h +++ b/src/network/BaseNetwork.h @@ -65,24 +65,12 @@ #define TAG_P25_DATA "P25D" #define TAG_NXDN_DATA "NXDD" -#define TAG_MASTER_WL_RID "MSTWRID" -#define TAG_MASTER_BL_RID "MSTBRID" -#define TAG_MASTER_ACTIVE_TGS "MSTTID" -#define TAG_MASTER_DEACTIVE_TGS "MSTDTID" - -#define TAG_MASTER_NAK "MSTNAK" -#define TAG_MASTER_CLOSING "MSTCL" -#define TAG_MASTER_PONG "MSTPONG" - #define TAG_REPEATER_LOGIN "RPTL" #define TAG_REPEATER_AUTH "RPTK" #define TAG_REPEATER_CONFIG "RPTC" -#define TAG_REPEATER_ACK "RPTACK" -#define TAG_REPEATER_CLOSING "RPTCL" -#define TAG_REPEATER_PING "RPTPING" - -#define TAG_REPEATER_GRANT "RPTGRNT" +#define TAG_REPEATER_PING "RPTP" +#define TAG_REPEATER_GRANT "RPTG" #define TAG_TRANSFER_ACT_LOG "TRNSLOG" #define TAG_TRANSFER_DIAG_LOG "TRNSDIAG" diff --git a/src/network/FNENetwork.cpp b/src/network/FNENetwork.cpp index 5af0f7a0..faa45849 100644 --- a/src/network/FNENetwork.cpp +++ b/src/network/FNENetwork.cpp @@ -488,7 +488,7 @@ void FNENetwork::clock(uint32_t ms) connection.pktLastSeq(connection.pktLastSeq() + 1); m_peers[peerId] = connection; - writePeerTagged(peerId, { NET_FUNC_PONG, NET_SUBFUNC_NOP }, TAG_MASTER_PONG); + writePeerCommand(peerId, { NET_FUNC_PONG, NET_SUBFUNC_NOP }); if (m_debug) { LogDebug(LOG_NET, "PEER %u ping received and answered", peerId); @@ -552,10 +552,10 @@ void FNENetwork::clock(uint32_t ms) // validate peer (simple validation really) if (connection.connected() && connection.address() == ip) { - uint8_t rawPayload[length - 12U]; - ::memset(rawPayload, 0x00U, length - 12U); - ::memcpy(rawPayload, buffer.get() + 12U, length - 12U); - std::string payload(rawPayload, rawPayload + (length - 12U)); + uint8_t rawPayload[length - 11U]; + ::memset(rawPayload, 0x00U, length - 11U); + ::memcpy(rawPayload, buffer.get() + 11U, length - 11U); + std::string payload(rawPayload, rawPayload + (length - 11U)); bool currState = g_disableTimeDisplay; g_disableTimeDisplay = true; @@ -642,11 +642,11 @@ void FNENetwork::close() LogMessage(LOG_NET, "Closing Network"); if (m_status == NET_STAT_MST_RUNNING) { - uint8_t buffer[9U]; - ::memcpy(buffer + 0U, TAG_MASTER_CLOSING, 5U); + uint8_t buffer[1U]; + ::memset(buffer, 0x00U, 1U); for (auto peer : m_peers) { - writePeer(peer.first, { NET_FUNC_MST_CLOSING, NET_SUBFUNC_NOP }, buffer, 9U, (ushort)0U, 0U); + writePeer(peer.first, { NET_FUNC_MST_CLOSING, NET_SUBFUNC_NOP }, buffer, 1U, (ushort)0U, 0U); } } @@ -700,7 +700,7 @@ void FNENetwork::writeWhitelistRIDs(uint32_t peerId, bool queueOnly) offs += 4U; } - writePeerTagged(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_WL_RID }, TAG_MASTER_WL_RID, + writePeerCommand(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_WL_RID }, payload, 4U + (ridWhitelist.size() * 4U), queueOnly, true); } @@ -756,7 +756,7 @@ void FNENetwork::writeBlacklistRIDs(uint32_t peerId, bool queueOnly) offs += 4U; } - writePeerTagged(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_BL_RID }, TAG_MASTER_BL_RID, + writePeerCommand(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_BL_RID }, payload, 4U + (ridBlacklist.size() * 4U), queueOnly, true); } @@ -830,7 +830,7 @@ void FNENetwork::writeTGIDs(uint32_t peerId, bool queueOnly) offs += 5U; } - writePeerTagged(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_ACTIVE_TGS }, TAG_MASTER_ACTIVE_TGS, + writePeerCommand(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_ACTIVE_TGS }, payload, 4U + (tgidList.size() * 5U), queueOnly, true); } @@ -900,7 +900,7 @@ void FNENetwork::writeDeactiveTGIDs(uint32_t peerId, bool queueOnly) offs += 5U; } - writePeerTagged(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_DEACTIVE_TGS }, TAG_MASTER_DEACTIVE_TGS, + writePeerCommand(peerId, { NET_FUNC_MASTER, NET_MASTER_SUBFUNC_DEACTIVE_TGS }, payload, 4U + (tgidList.size() * 5U), queueOnly, true); } @@ -915,7 +915,7 @@ void FNENetwork::writeDeactiveTGIDs() } /// -/// Helper to send a raw message to the specified peer. +/// Helper to send a data message to the specified peer. /// /// Peer ID. /// Opcode. @@ -945,7 +945,7 @@ bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const } /// -/// Helper to send a raw message to the specified peer. +/// Helper to send a data message to the specified peer. /// /// Peer ID. /// Opcode. @@ -970,36 +970,27 @@ bool FNENetwork::writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const } /// -/// Helper to send a tagged message to the specified peer. +/// Helper to send a command message to the specified peer. /// /// Peer ID. /// Opcode. -/// Message tag. /// Buffer to write to the network. /// Length of buffer to write. /// /// -bool FNENetwork::writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode, const char* tag, +bool FNENetwork::writePeerCommand(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, bool queueOnly, bool incPktSeq) { assert(peerId > 0); - assert(tag != nullptr); - - if (strlen(tag) + length > DATA_PACKET_LENGTH) { - return false; - } uint8_t buffer[DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - ::memcpy(buffer + 0U, tag, strlen(tag)); - __SET_UINT32(peerId, buffer, strlen(tag)); // Peer ID - if (data != nullptr && length > 0U) { - ::memcpy(buffer + strlen(tag), data, length); + ::memcpy(buffer + 6U, data, length); } - uint32_t len = length + (strlen(tag) + 4U); + uint32_t len = length + 6U; return writePeer(peerId, opcode, buffer, len, 0U, queueOnly, incPktSeq); } @@ -1014,14 +1005,11 @@ bool FNENetwork::writePeerACK(uint32_t peerId, const uint8_t* data, uint32_t len uint8_t buffer[DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - ::memcpy(buffer + 0U, TAG_REPEATER_ACK, 6U); - __SET_UINT32(peerId, buffer, 6U); // Peer ID - if (data != nullptr && length > 0U) { ::memcpy(buffer + 6U, data, length); } - return writePeer(peerId, { NET_FUNC_ACK, NET_SUBFUNC_NOP }, buffer, 10U + length, 0U, false, true); + return writePeer(peerId, { NET_FUNC_ACK, NET_SUBFUNC_NOP }, buffer, length + 10U, 0U, false, true); } /// @@ -1037,7 +1025,6 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag) uint8_t buffer[DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - ::memcpy(buffer + 0U, TAG_MASTER_NAK, 6U); __SET_UINT32(peerId, buffer, 6U); // Peer ID LogWarning(LOG_NET, "%s from unauth PEER %u", tag, peerId); @@ -1059,11 +1046,9 @@ bool FNENetwork::writePeerNAK(uint32_t peerId, const char* tag, sockaddr_storage uint8_t buffer[DATA_PACKET_LENGTH]; ::memset(buffer, 0x00U, DATA_PACKET_LENGTH); - ::memcpy(buffer + 0U, TAG_MASTER_NAK, 6U); __SET_UINT32(peerId, buffer, 6U); // Peer ID LogWarning(LOG_NET, "%s from unauth PEER %u", tag, peerId); - m_frameQueue->enqueueMessage(buffer, 10U, createStreamId(), peerId, m_peerId, { NET_FUNC_NAK, NET_SUBFUNC_NOP }, 0U, addr, addrLen); return m_frameQueue->flushQueue(); diff --git a/src/network/FNENetwork.h b/src/network/FNENetwork.h index 8dbbf94d..589f0abb 100644 --- a/src/network/FNENetwork.h +++ b/src/network/FNENetwork.h @@ -256,15 +256,15 @@ namespace network /// Helper to send the list of deactivated TGIDs to connected peers. void writeDeactiveTGIDs(); - /// Helper to send a raw message to the specified peer. + /// Helper to send a data message to the specified peer. bool writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint16_t pktSeq, uint32_t streamId, bool queueOnly = false); - /// Helper to send a raw message to the specified peer. + /// Helper to send a data message to the specified peer. bool writePeer(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data, uint32_t length, uint32_t streamId, bool queueOnly = false, bool incPktSeq = false); - /// Helper to send a tagged message to the specified peer. - bool writePeerTagged(uint32_t peerId, FrameQueue::OpcodePair opcode, const char* tag, const uint8_t* data = nullptr, uint32_t length = 0U, + /// Helper to send a command message to the specified peer. + bool writePeerCommand(uint32_t peerId, FrameQueue::OpcodePair opcode, const uint8_t* data = nullptr, uint32_t length = 0U, bool queueOnly = false, bool incPktSeq = false); /// Helper to send a ACK response to the specified peer. diff --git a/src/network/Network.cpp b/src/network/Network.cpp index 0e292a28..e3ffa2a6 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -617,8 +617,8 @@ void Network::close() LogMessage(LOG_NET, "Closing Network"); if (m_status == NET_STAT_RUNNING) { - uint8_t buffer[9U]; - ::memcpy(buffer + 0U, TAG_REPEATER_CLOSING, 5U); + uint8_t buffer[1U]; + ::memset(buffer, 0x00U, 1U); m_frameQueue->enqueueMessage(buffer, 9U, createStreamId(), m_peerId, { NET_FUNC_RPT_CLOSING, NET_SUBFUNC_NOP }, pktSeq(true), m_addr, m_addrLen); @@ -648,8 +648,8 @@ bool Network::writeLogin() } uint8_t buffer[8U]; - ::memcpy(buffer + 0U, TAG_REPEATER_LOGIN, 4U); + __SET_UINT32(m_peerId, buffer, 4U); // Peer ID if (m_debug) Utils::dump(1U, "Network Message, Login", buffer, 8U); @@ -764,9 +764,8 @@ bool Network::writeConfig() /// bool Network::writePing() { - uint8_t buffer[11U]; - - ::memcpy(buffer + 0U, TAG_REPEATER_PING, 7U); + uint8_t buffer[1U]; + ::memset(buffer, 0x00U, 1U); if (m_debug) Utils::dump(1U, "Network Message, Ping", buffer, 11U);