various cleanups; correct incorrect implementation for copy constructors on DFSI FSC messages;

pull/65/head
Bryan Biedenkapp 2 years ago
parent cd579eeabf
commit eae8923227

@ -474,7 +474,7 @@ namespace network
/** /**
* @brief Generates a new stream ID. * @brief Generates a new stream ID.
* @returns uint32_T New stream ID. * @returns uint32_t New stream ID.
*/ */
uint32_t createStreamId() { std::uniform_int_distribution<uint32_t> dist(DVM_RAND_MIN, DVM_RAND_MAX); return dist(m_random); } uint32_t createStreamId() { std::uniform_int_distribution<uint32_t> dist(DVM_RAND_MIN, DVM_RAND_MAX); return dist(m_random); }

@ -68,6 +68,8 @@ namespace p25
* @{ * @{
*/ */
const uint8_t DFSI_RTP_PAYLOAD_TYPE = 0x64U; //!
const uint8_t DFSI_STATUS_NO_ERROR = 0x00U; //! const uint8_t DFSI_STATUS_NO_ERROR = 0x00U; //!
const uint8_t DFSI_STATUS_ERASE = 0x02U; //! const uint8_t DFSI_STATUS_ERASE = 0x02U; //!

@ -37,7 +37,7 @@ FSCACK::FSCACK() : FSCMessage(),
/* Initializes a instance of the FSCACK class. */ /* Initializes a instance of the FSCACK class. */
FSCACK::FSCACK(uint8_t* data) : FSCMessage(data), FSCACK::FSCACK(const uint8_t* data) : FSCMessage(data),
m_ackMessageId(FSCMessageType::FSC_INVALID), m_ackMessageId(FSCMessageType::FSC_INVALID),
m_ackVersion(1U), m_ackVersion(1U),
m_ackCorrelationTag(0U), m_ackCorrelationTag(0U),

@ -51,7 +51,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCACK class. * @brief Initializes a copy instance of the FSCACK class.
* @param data Buffer to containing FSCACK to decode. * @param data Buffer to containing FSCACK to decode.
*/ */
FSCACK(uint8_t* data); FSCACK(const uint8_t* data);
/** /**
* @brief Decode a FSC ACK frame. * @brief Decode a FSC ACK frame.

@ -36,7 +36,7 @@ FSCConnect::FSCConnect() : FSCMessage(),
/* Initializes a instance of the FSCConnect class. */ /* Initializes a instance of the FSCConnect class. */
FSCConnect::FSCConnect(uint8_t* data) : FSCMessage(data), FSCConnect::FSCConnect(const uint8_t* data) : FSCMessage(data),
m_vcBasePort(0U), m_vcBasePort(0U),
m_vcSSRC(0U), m_vcSSRC(0U),
m_fsHeartbeatPeriod(5U), m_fsHeartbeatPeriod(5U),

@ -51,7 +51,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCConnect class. * @brief Initializes a copy instance of the FSCConnect class.
* @param data Buffer to containing FSCConnect to decode. * @param data Buffer to containing FSCConnect to decode.
*/ */
FSCConnect(uint8_t* data); FSCConnect(const uint8_t* data);
/** /**
* @brief Decode a FSC connect frame. * @brief Decode a FSC connect frame.

@ -33,7 +33,7 @@ FSCConnectResponse::FSCConnectResponse() : FSCResponse(),
/* Initializes a instance of the FSCConnectResponse class. */ /* Initializes a instance of the FSCConnectResponse class. */
FSCConnectResponse::FSCConnectResponse(uint8_t* data) : FSCResponse(data), FSCConnectResponse::FSCConnectResponse(const uint8_t* data) : FSCResponse(data),
m_vcBasePort(0U) m_vcBasePort(0U)
{ {
decode(data); decode(data);

@ -51,7 +51,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCConnectResponse class. * @brief Initializes a copy instance of the FSCConnectResponse class.
* @param data Buffer to containing FSCConnectResponse to decode. * @param data Buffer to containing FSCConnectResponse to decode.
*/ */
FSCConnectResponse(uint8_t* data); FSCConnectResponse(const uint8_t* data);
/** /**
* @brief Decode a FSC connect response frame. * @brief Decode a FSC connect response frame.

@ -32,7 +32,7 @@ FSCDisconnect::FSCDisconnect() : FSCMessage()
/* Initializes a instance of the FSCDisconnect class. */ /* Initializes a instance of the FSCDisconnect class. */
FSCDisconnect::FSCDisconnect(uint8_t* data) : FSCMessage(data) FSCDisconnect::FSCDisconnect(const uint8_t* data) : FSCMessage(data)
{ {
decode(data); decode(data);
} }

@ -51,7 +51,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCDisconnect class. * @brief Initializes a copy instance of the FSCDisconnect class.
* @param data Buffer to containing FSCDisconnect to decode. * @param data Buffer to containing FSCDisconnect to decode.
*/ */
FSCDisconnect(uint8_t* data); FSCDisconnect(const uint8_t* data);
}; };
} // namespace fsc } // namespace fsc
} // namespace frames } // namespace frames

@ -32,7 +32,7 @@ FSCHeartbeat::FSCHeartbeat() : FSCMessage()
/* Initializes a instance of the FSCHeartbeat class. */ /* Initializes a instance of the FSCHeartbeat class. */
FSCHeartbeat::FSCHeartbeat(uint8_t* data) : FSCMessage(data) FSCHeartbeat::FSCHeartbeat(const uint8_t* data) : FSCMessage(data)
{ {
decode(data); decode(data);
} }

@ -51,7 +51,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCHeartbeat class. * @brief Initializes a copy instance of the FSCHeartbeat class.
* @param data Buffer to containing FSCHeartbeat to decode. * @param data Buffer to containing FSCHeartbeat to decode.
*/ */
FSCHeartbeat(uint8_t* data); FSCHeartbeat(const uint8_t* data);
}; };
} // namespace fsc } // namespace fsc
} // namespace frames } // namespace frames

@ -8,6 +8,7 @@
* *
*/ */
#include "common/p25/dfsi/frames/fsc/FSCMessage.h" #include "common/p25/dfsi/frames/fsc/FSCMessage.h"
#include "common/p25/dfsi/frames/Frames.h"
#include "common/p25/dfsi/DFSIDefines.h" #include "common/p25/dfsi/DFSIDefines.h"
#include "common/Utils.h" #include "common/Utils.h"
#include "common/Log.h" #include "common/Log.h"
@ -35,7 +36,7 @@ FSCMessage::FSCMessage() :
/* Initializes a instance of the FSCMessage class. */ /* Initializes a instance of the FSCMessage class. */
FSCMessage::FSCMessage(uint8_t* data) : FSCMessage::FSCMessage(const uint8_t* data) :
m_messageId(FSCMessageType::FSC_INVALID), m_messageId(FSCMessageType::FSC_INVALID),
m_version(1U), m_version(1U),
m_correlationTag(0U) m_correlationTag(0U)
@ -70,3 +71,32 @@ void FSCMessage::encode(uint8_t* data)
if (m_messageId != FSCMessageType::FSC_HEARTBEAT && m_messageId != FSCMessageType::FSC_ACK) if (m_messageId != FSCMessageType::FSC_HEARTBEAT && m_messageId != FSCMessageType::FSC_ACK)
data[2U] = m_correlationTag; // Message Correlation Tag data[2U] = m_correlationTag; // Message Correlation Tag
} }
/* Create an instance of a FSCMessage. */
std::unique_ptr<FSCMessage> FSCMessage::createMessage(const uint8_t* data)
{
assert(data != nullptr);
uint8_t msg[FSCMessage::LENGTH + 1U];
::memset(msg, 0x00U, FSCMessage::LENGTH);
uint8_t messageId = (FSCMessageType::E)(msg[0U]); // Message ID
// standard P25 reference opcodes
switch (messageId) {
case FSCMessageType::FSC_CONNECT:
return std::unique_ptr<FSCMessage>(new FSCConnect(data));
case FSCMessageType::FSC_HEARTBEAT:
return std::unique_ptr<FSCMessage>(new FSCHeartbeat(data));
case FSCMessageType::FSC_ACK:
return std::unique_ptr<FSCMessage>(new FSCACK(data));
case FSCMessageType::FSC_DISCONNECT:
return std::unique_ptr<FSCMessage>(new FSCDisconnect(data));
default:
LogError(LOG_P25, "FSCMessage::create(), unknown message value, messageId = $%02X", messageId);
break;
}
return nullptr;
}

@ -50,7 +50,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCMessage class. * @brief Initializes a copy instance of the FSCMessage class.
* @param data Buffer to containing FSCMessage to decode. * @param data Buffer to containing FSCMessage to decode.
*/ */
FSCMessage(uint8_t* data); FSCMessage(const uint8_t* data);
/** /**
* @brief Decode a FSC message frame. * @brief Decode a FSC message frame.
@ -63,6 +63,13 @@ namespace p25
*/ */
virtual void encode(uint8_t* data); virtual void encode(uint8_t* data);
/**
* @brief Create an instance of a FSCMessage.
* @param[in] data Buffer containing FSCMessage packet data to decode.
* @returns FSCMessage* Instance of a FSCMessage representing the decoded data.
*/
static std::unique_ptr<FSCMessage> createMessage(const uint8_t* data);
public: public:
/** /**
* @brief Message ID. * @brief Message ID.

@ -33,7 +33,7 @@ FSCResponse::FSCResponse() :
/* Initializes a instance of the FSCResponse class. */ /* Initializes a instance of the FSCResponse class. */
FSCResponse::FSCResponse(uint8_t* data) : FSCResponse::FSCResponse(const uint8_t* data) :
m_version(1U) m_version(1U)
{ {
decode(data); decode(data);

@ -50,7 +50,7 @@ namespace p25
* @brief Initializes a copy instance of the FSCResponse class. * @brief Initializes a copy instance of the FSCResponse class.
* @param data Buffer to containing FSCResponse to decode. * @param data Buffer to containing FSCResponse to decode.
*/ */
FSCResponse(uint8_t* data); FSCResponse(const uint8_t* data);
/** /**
* @brief Decode a FSC message frame. * @brief Decode a FSC message frame.

@ -35,12 +35,15 @@ bool TSBKFactory::m_warnCRC = false;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/* Initializes a new instance of the TSBKFactory class. */ /* Initializes a new instance of the TSBKFactory class. */
TSBKFactory::TSBKFactory() = default; TSBKFactory::TSBKFactory() = default;
/* Finalizes a instance of TSBKFactory class. */ /* Finalizes a instance of TSBKFactory class. */
TSBKFactory::~TSBKFactory() = default; TSBKFactory::~TSBKFactory() = default;
/* Create an instance of a TSBK. */ /* Create an instance of a TSBK. */
std::unique_ptr<TSBK> TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK) std::unique_ptr<TSBK> TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
{ {
assert(data != nullptr); assert(data != nullptr);
@ -223,6 +226,7 @@ std::unique_ptr<TSBK> TSBKFactory::createTSBK(const uint8_t* data, bool rawTSBK)
} }
/* Create an instance of a AMBT. */ /* Create an instance of a AMBT. */
std::unique_ptr<AMBT> TSBKFactory::createAMBT(const data::DataHeader& dataHeader, const data::DataBlock* blocks) std::unique_ptr<AMBT> TSBKFactory::createAMBT(const data::DataHeader& dataHeader, const data::DataBlock* blocks)
{ {
assert(blocks != nullptr); assert(blocks != nullptr);
@ -310,6 +314,7 @@ std::unique_ptr<AMBT> TSBKFactory::createAMBT(const data::DataHeader& dataHeader
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/* Decode a TSBK. */ /* Decode a TSBK. */
std::unique_ptr<TSBK> TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK) std::unique_ptr<TSBK> TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool rawTSBK)
{ {
assert(tsbk != nullptr); assert(tsbk != nullptr);
@ -323,6 +328,7 @@ std::unique_ptr<TSBK> TSBKFactory::decode(TSBK* tsbk, const uint8_t* data, bool
} }
/* Decode an AMBT. */ /* Decode an AMBT. */
std::unique_ptr<AMBT> TSBKFactory::decode(AMBT* ambt, const data::DataHeader& dataHeader, const data::DataBlock* blocks) std::unique_ptr<AMBT> TSBKFactory::decode(AMBT* ambt, const data::DataHeader& dataHeader, const data::DataBlock* blocks)
{ {
assert(ambt != nullptr); assert(ambt != nullptr);

@ -4,10 +4,6 @@
* GPLv2 Open Source. Use is subject to license terms. * GPLv2 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* @package DVM / Modem Host Software
* @derivedfrom MMDVMHost (https://github.com/g4klx/MMDVMHost)
* @license GPLv2 License (https://opensource.org/licenses/GPL-2.0)
*
* Copyright (C) 2021 Jonathan Naylor, G4KLX * Copyright (C) 2021 Jonathan Naylor, G4KLX
* Copyright (C) 2021 Bryan Biedenkapp, N2PLL * Copyright (C) 2021 Bryan Biedenkapp, N2PLL
* *

Loading…
Cancel
Save

Powered by TurnKey Linux.