diff --git a/reflector/BMProtocol.cpp b/reflector/BMProtocol.cpp index 4749573..f87e724 100644 --- a/reflector/BMProtocol.cpp +++ b/reflector/BMProtocol.cpp @@ -572,6 +572,21 @@ void CBMProtocol::EncodeConnectNackPacket(CBuffer *Buffer) Buffer->Append((uint8_t)0); } +bool CBMProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const +{ + uint8_t tag[] = { 'D','S','V','T',0x10,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; + struct dstar_header DstarHeader; + + Packet.ConvertToDstarStruct(&DstarHeader); + + Buffer->Set(tag, sizeof(tag)); + Buffer->Append(Packet.GetStreamId()); + Buffer->Append((uint8_t)0x80); + Buffer->Append((uint8_t *)&DstarHeader, sizeof(struct dstar_header)); + + return true; +} + bool CBMProtocol::EncodeDvFramePacket(const CDvFramePacket &Packet, CBuffer *Buffer) const { uint8_t tag[] = { 'D','S','V','T',0x20,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; diff --git a/reflector/BMProtocol.h b/reflector/BMProtocol.h index 94ebe43..da58320 100644 --- a/reflector/BMProtocol.h +++ b/reflector/BMProtocol.h @@ -20,7 +20,7 @@ #include "Version.h" #include "Timer.h" -#include "Protocol.h" +#include "SEProtocol.h" #include "Clients.h" //////////////////////////////////////////////////////////////////////////////////////// @@ -30,7 +30,7 @@ class CPeer; //////////////////////////////////////////////////////////////////////////////////////// // class -class CBMProtocol : public CProtocol +class CBMProtocol : public CSEProtocol { public: // initialization @@ -66,6 +66,7 @@ protected: void EncodeDisconnectPacket(CBuffer *); void EncodeConnectAckPacket(CBuffer *, const char *); void EncodeConnectNackPacket(CBuffer *); + bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const; bool EncodeDvLastFramePacket(const CDvFramePacket &, CBuffer *) const; diff --git a/reflector/DCSProtocol.cpp b/reflector/DCSProtocol.cpp index 46bd810..d2492b0 100644 --- a/reflector/DCSProtocol.cpp +++ b/reflector/DCSProtocol.cpp @@ -242,19 +242,11 @@ void CDcsProtocol::HandleQueue(void) CBuffer buffer; if ( packet->IsLastPacket() ) { - EncodeDvLastPacket( - m_StreamsCache[module].m_dvHeader, - (const CDvFramePacket &)*packet.get(), - m_StreamsCache[module].m_iSeqCounter++, - &buffer); + EncodeLastDCSPacket(m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++, &buffer); } else if ( packet->IsDvFrame() ) { - EncodeDvPacket( - m_StreamsCache[module].m_dvHeader, - (const CDvFramePacket &)*packet.get(), - m_StreamsCache[module].m_iSeqCounter++, - &buffer); + EncodeDCSPacket(m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++, &buffer); } // send it @@ -461,7 +453,7 @@ void CDcsProtocol::EncodeDisconnectPacket(CBuffer *Buffer, std::shared_ptrAppend((uint8_t)0x00); } -void CDcsProtocol::EncodeDvPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq, CBuffer *Buffer) const +void CDcsProtocol::EncodeDCSPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq, CBuffer *Buffer) const { uint8_t tag[] = { '0','0','0','1' }; struct dstar_header DstarHeader; @@ -481,8 +473,8 @@ void CDcsProtocol::EncodeDvPacket(const CDvHeaderPacket &Header, const CDvFrameP Buffer->Append((uint8_t)0x00, 38); } -void CDcsProtocol::EncodeDvLastPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq, CBuffer *Buffer) const +void CDcsProtocol::EncodeLastDCSPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq, CBuffer *Buffer) const { - EncodeDvPacket(Header, DvFrame, iSeq, Buffer); + EncodeDCSPacket(Header, DvFrame, iSeq, Buffer); (Buffer->data())[45] |= 0x40; } diff --git a/reflector/DCSProtocol.h b/reflector/DCSProtocol.h index 0ce92fe..d064dc1 100644 --- a/reflector/DCSProtocol.h +++ b/reflector/DCSProtocol.h @@ -70,8 +70,8 @@ protected: void EncodeConnectAckPacket(const CCallsign &, char, CBuffer *); void EncodeConnectNackPacket(const CCallsign &, char, CBuffer *); void EncodeDisconnectPacket(CBuffer *, std::shared_ptr); - void EncodeDvPacket(const CDvHeaderPacket &, const CDvFramePacket &, uint32_t, CBuffer *) const; - void EncodeDvLastPacket(const CDvHeaderPacket &, const CDvFramePacket &, uint32_t, CBuffer *) const; + void EncodeDCSPacket(const CDvHeaderPacket &, const CDvFramePacket &, uint32_t, CBuffer *) const; + void EncodeLastDCSPacket(const CDvHeaderPacket &, const CDvFramePacket &, uint32_t, CBuffer *) const; protected: // for keep alive diff --git a/reflector/DExtraProtocol.h b/reflector/DExtraProtocol.h index 4e401cd..42f76d4 100644 --- a/reflector/DExtraProtocol.h +++ b/reflector/DExtraProtocol.h @@ -19,7 +19,7 @@ #pragma once #include "Timer.h" -#include "Protocol.h" +#include "SEProtocol.h" #include "DVHeaderPacket.h" #include "DVFramePacket.h" @@ -47,7 +47,7 @@ //////////////////////////////////////////////////////////////////////////////////////// // class -class CDextraProtocol : public CProtocol +class CDextraProtocol : public CSEProtocol { public: // initialization diff --git a/reflector/DMRMMDVMProtocol.cpp b/reflector/DMRMMDVMProtocol.cpp index 8355c0a..1d914e3 100644 --- a/reflector/DMRMMDVMProtocol.cpp +++ b/reflector/DMRMMDVMProtocol.cpp @@ -368,14 +368,14 @@ void CDmrmmdvmProtocol::HandleQueue(void) m_StreamsCache[mod].m_uiSeqId = 0; // encode it - EncodeDvHeaderPacket((CDvHeaderPacket &)*packet.get(), m_StreamsCache[mod].m_uiSeqId, &buffer); + EncodeMMDVMHeaderPacket((CDvHeaderPacket &)*packet.get(), m_StreamsCache[mod].m_uiSeqId, &buffer); m_StreamsCache[mod].m_uiSeqId = 1; } // check if it's a last frame else if ( packet->IsLastPacket() ) { // encode it - EncodeDvLastPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_uiSeqId, &buffer); + EncodeLastMMDVMPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_uiSeqId, &buffer); m_StreamsCache[mod].m_uiSeqId = (m_StreamsCache[mod].m_uiSeqId + 1) & 0xFF; } // otherwise, just a regular DV frame @@ -391,13 +391,7 @@ void CDmrmmdvmProtocol::HandleQueue(void) m_StreamsCache[mod].m_dvFrame1 = CDvFramePacket((const CDvFramePacket &)*packet.get()); break; case 3: - EncodeDvPacket( - m_StreamsCache[mod].m_dvHeader, - m_StreamsCache[mod].m_dvFrame0, - m_StreamsCache[mod].m_dvFrame1, - (const CDvFramePacket &)*packet.get(), - m_StreamsCache[mod].m_uiSeqId, - &buffer); + EncodeMMDVMPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_dvFrame0, m_StreamsCache[mod].m_dvFrame1, (const CDvFramePacket &)*packet.get(), m_StreamsCache[mod].m_uiSeqId, &buffer); m_StreamsCache[mod].m_uiSeqId = (m_StreamsCache[mod].m_uiSeqId + 1) & 0xFF; break; default: @@ -820,7 +814,7 @@ void CDmrmmdvmProtocol::EncodeClosePacket(CBuffer *Buffer, std::shared_ptrSet(tag, sizeof(tag)); @@ -927,7 +918,7 @@ void CDmrmmdvmProtocol::EncodeDvPacket( } -void CDmrmmdvmProtocol::EncodeDvLastPacket(const CDvHeaderPacket &Packet, uint8_t seqid, CBuffer *Buffer) const +void CDmrmmdvmProtocol::EncodeLastMMDVMPacket(const CDvHeaderPacket &Packet, uint8_t seqid, CBuffer *Buffer) const { uint8_t tag[] = { 'D','M','R','D' }; diff --git a/reflector/DMRMMDVMProtocol.h b/reflector/DMRMMDVMProtocol.h index 71a5559..da8086b 100644 --- a/reflector/DMRMMDVMProtocol.h +++ b/reflector/DMRMMDVMProtocol.h @@ -89,9 +89,9 @@ protected: void EncodeConnectAckPacket(CBuffer *, const CCallsign &, uint32_t); void EncodeNackPacket(CBuffer *, const CCallsign &); void EncodeClosePacket(CBuffer *, std::shared_ptr); - bool EncodeDvHeaderPacket(const CDvHeaderPacket &, uint8_t, CBuffer *) const; - void EncodeDvPacket(const CDvHeaderPacket &, const CDvFramePacket &, const CDvFramePacket &, const CDvFramePacket &, uint8_t, CBuffer *) const; - void EncodeDvLastPacket(const CDvHeaderPacket &, uint8_t, CBuffer *) const; + bool EncodeMMDVMHeaderPacket(const CDvHeaderPacket &, uint8_t, CBuffer *) const; + void EncodeMMDVMPacket(const CDvHeaderPacket &, const CDvFramePacket &, const CDvFramePacket &, const CDvFramePacket &, uint8_t, CBuffer *) const; + void EncodeLastMMDVMPacket(const CDvHeaderPacket &, uint8_t, CBuffer *) const; // dmr DstId to Module helper char DmrDstIdToModule(uint32_t) const; diff --git a/reflector/DMRPlusProtocol.cpp b/reflector/DMRPlusProtocol.cpp index 0c6d5f2..d1fa72f 100644 --- a/reflector/DMRPlusProtocol.cpp +++ b/reflector/DMRPlusProtocol.cpp @@ -241,7 +241,7 @@ void CDmrplusProtocol::HandleQueue(void) m_StreamsCache[mod].m_uiSeqId = 4; // encode it - EncodeDvHeaderPacket((const CDvHeaderPacket &)*packet.get(), &buffer); + EncodeDMRPlusHeaderPacket((const CDvHeaderPacket &)*packet.get(), &buffer); } else { @@ -255,13 +255,7 @@ void CDmrplusProtocol::HandleQueue(void) m_StreamsCache[mod].m_dvFrame1 = CDvFramePacket((const CDvFramePacket &)*packet.get()); break; case 3: - EncodeDvPacket( - m_StreamsCache[mod].m_dvHeader, - m_StreamsCache[mod].m_dvFrame0, - m_StreamsCache[mod].m_dvFrame1, - (const CDvFramePacket &)*packet.get(), - m_StreamsCache[mod].m_uiSeqId, - &buffer); + EncodeDMRPlusPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_dvFrame0, m_StreamsCache[mod].m_dvFrame1, (const CDvFramePacket &)*packet.get(), m_StreamsCache[mod].m_uiSeqId, &buffer); m_StreamsCache[mod].m_uiSeqId = GetNextSeqId(m_StreamsCache[mod].m_uiSeqId); break; default: @@ -516,11 +510,9 @@ void CDmrplusProtocol::EncodeConnectNackPacket(CBuffer *Buffer) Buffer->Set(tag, sizeof(tag)); } -bool CDmrplusProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const +bool CDmrplusProtocol::EncodeDMRPlusHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const { - uint8_t tag[] = { 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02, - 0x00,0x05,0x01,0x02,0x00,0x00,0x00 - } ; + uint8_t tag[] = { 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x05,0x01,0x02,0x00,0x00,0x00 }; Buffer->Set(tag, sizeof(tag)); // uiSeqId @@ -563,10 +555,7 @@ bool CDmrplusProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuff return true; } -void CDmrplusProtocol::EncodeDvPacket -(const CDvHeaderPacket &Header, - const CDvFramePacket &DvFrame0, const CDvFramePacket &DvFrame1, const CDvFramePacket &DvFrame2, - uint8_t seqid, CBuffer *Buffer) const +void CDmrplusProtocol::EncodeDMRPlusPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame0, const CDvFramePacket &DvFrame1, const CDvFramePacket &DvFrame2, uint8_t seqid, CBuffer *Buffer) const { uint8_t tag[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, diff --git a/reflector/DMRPlusProtocol.h b/reflector/DMRPlusProtocol.h index 2d30d5a..83113d9 100644 --- a/reflector/DMRPlusProtocol.h +++ b/reflector/DMRPlusProtocol.h @@ -74,8 +74,8 @@ protected: // packet encoding helpers void EncodeConnectAckPacket(CBuffer *); void EncodeConnectNackPacket(CBuffer *); - bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; - void EncodeDvPacket(const CDvHeaderPacket &, const CDvFramePacket &, const CDvFramePacket &, const CDvFramePacket &, uint8_t, CBuffer *) const; + bool EncodeDMRPlusHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; + void EncodeDMRPlusPacket(const CDvHeaderPacket &, const CDvFramePacket &, const CDvFramePacket &, const CDvFramePacket &, uint8_t, CBuffer *) const; void SwapEndianess(uint8_t *, int) const; // dmr SeqId helper diff --git a/reflector/DPlusProtocol.h b/reflector/DPlusProtocol.h index a7813e6..35b5144 100644 --- a/reflector/DPlusProtocol.h +++ b/reflector/DPlusProtocol.h @@ -19,7 +19,7 @@ #pragma once #include "Timer.h" -#include "Protocol.h" +#include "SEProtocol.h" #include "DVHeaderPacket.h" #include "DVFramePacket.h" @@ -34,7 +34,7 @@ public: uint8_t m_iSeqCounter; }; -class CDplusProtocol : public CProtocol +class CDplusProtocol : public CSEProtocol { public: // initialization diff --git a/reflector/G3Protocol.h b/reflector/G3Protocol.h index 1af3836..a39bb86 100644 --- a/reflector/G3Protocol.h +++ b/reflector/G3Protocol.h @@ -20,7 +20,7 @@ #include #include "Timer.h" -#include "Protocol.h" +#include "SEProtocol.h" #include "DVHeaderPacket.h" #include "DVFramePacket.h" #include "RawSocket.h" @@ -52,7 +52,7 @@ //////////////////////////////////////////////////////////////////////////////////////// // class -class CG3Protocol : public CProtocol +class CG3Protocol : public CSEProtocol { public: // constructor diff --git a/reflector/M17Protocol.cpp b/reflector/M17Protocol.cpp index a6e98ee..b5a5415 100644 --- a/reflector/M17Protocol.cpp +++ b/reflector/M17Protocol.cpp @@ -240,11 +240,11 @@ void CM17Protocol::HandleQueue(void) memcpy(frame.magic, "M17 ", 4); if ( packet->IsLastPacket() ) { - EncodeDvLastPacket(frame, m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++); + EncodeLastM17Packet(frame, m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++); } else if ( packet->IsDvFrame() ) { - EncodeDvPacket(frame, m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++); + EncodeM17Packet(frame, m_StreamsCache[module].m_dvHeader, (const CDvFramePacket &)*packet.get(), m_StreamsCache[module].m_iSeqCounter++); } // push it to all our clients linked to the module and who are not streaming in @@ -385,7 +385,7 @@ void CM17Protocol::EncodeKeepAlivePacket(CBuffer &Buffer) g_Reflector.GetCallsign().CodeOut(Buffer.data() + 4); } -void CM17Protocol::EncodeDvPacket(SM17Frame &frame, const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq) const +void CM17Protocol::EncodeM17Packet(SM17Frame &frame, const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq) const { ECodecType codec_in = Header.GetCodecIn(); // We'll need this @@ -410,8 +410,8 @@ void CM17Protocol::EncodeDvPacket(SM17Frame &frame, const CDvHeaderPacket &Heade frame.crc = htons(m17crc.CalcCRC(frame.magic, sizeof(SM17Frame)-2)); } -void CM17Protocol::EncodeDvLastPacket(SM17Frame &frame, const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq) const +void CM17Protocol::EncodeLastM17Packet(SM17Frame &frame, const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame, uint32_t iSeq) const { - EncodeDvPacket(frame, Header, DvFrame, iSeq); + EncodeM17Packet(frame, Header, DvFrame, iSeq); frame.framenumber |= 0x8000U; } diff --git a/reflector/M17Protocol.h b/reflector/M17Protocol.h index 6cf39e7..ca3c1ad 100644 --- a/reflector/M17Protocol.h +++ b/reflector/M17Protocol.h @@ -66,8 +66,8 @@ protected: // packet encoding helpers void EncodeKeepAlivePacket(CBuffer &); - void EncodeDvPacket(SM17Frame &, const CDvHeaderPacket &, const CDvFramePacket &, uint32_t) const; - void EncodeDvLastPacket(SM17Frame &, const CDvHeaderPacket &, const CDvFramePacket &, uint32_t) const; + void EncodeM17Packet(SM17Frame &, const CDvHeaderPacket &, const CDvFramePacket &, uint32_t) const; + void EncodeLastM17Packet(SM17Frame &, const CDvHeaderPacket &, const CDvFramePacket &, uint32_t) const; protected: // for keep alive diff --git a/reflector/Makefile b/reflector/Makefile index e070ce2..134b88d 100644 --- a/reflector/Makefile +++ b/reflector/Makefile @@ -36,8 +36,8 @@ endif LDFLAGS=-pthread -XRFSRCS = Buffer.cpp Callsign.cpp CallsignList.cpp CallsignListItem.cpp Client.cpp Clients.cpp DCSClient.cpp DCSProtocol.cpp DExtraClient.cpp DExtraPeer.cpp DExtraProtocol.cpp DPlusClient.cpp DPlusProtocol.cpp DVFramePacket.cpp DVHeaderPacket.cpp GateKeeper.cpp IP.cpp M17Client.cpp M17CRC.cpp M17Packet.cpp M17Client.cpp Notification.cpp Packet.cpp PacketStream.cpp PeerCallsignList.cpp Peer.cpp Peers.cpp Protocol.cpp Protocols.cpp Reflector.cpp UDPSocket.cpp User.cpp Users.cpp Version.cpp Main.cpp -XLXSRCS = BMClient.cpp BMPeer.cpp BPTC19696.cpp CRC.cpp DMRIdDir.cpp DMRIdDirFile.cpp DMRIdDirHttp.cpp DMRMMDVMClient.cpp DMRMMDVMProtocol.cpp DMRPlusClient.cpp DMRPlusProtocol.cpp Golay2087.cpp Golay24128.cpp Hamming.cpp QR1676.cpp RS129.cpp Semaphore.cpp Utils.cpp WiresXCmd.cpp WiresXCmdHandler.cpp WiresXInfo.cpp URFClient.cpp URFProtocol.cpp URFPeer.cpp YSFClient.cpp YSFConvolution.cpp YSFFich.cpp YSFNode.cpp YSFNodeDir.cpp YSFNodeDirFile.cpp YSFNodeDirHttp.cpp YSFPayload.cpp YSFProtocol.cpp YSFUtils.cpp +XRFSRCS = Buffer.cpp Callsign.cpp CallsignList.cpp CallsignListItem.cpp Client.cpp Clients.cpp DCSClient.cpp DCSProtocol.cpp DExtraClient.cpp DExtraPeer.cpp DExtraProtocol.cpp DPlusClient.cpp DPlusProtocol.cpp DVFramePacket.cpp DVHeaderPacket.cpp GateKeeper.cpp IP.cpp Notification.cpp Packet.cpp PacketStream.cpp PeerCallsignList.cpp Peer.cpp Peers.cpp Protocol.cpp Protocols.cpp Reflector.cpp SEProtocol.cpp UDPSocket.cpp User.cpp Users.cpp Version.cpp Main.cpp +XLXSRCS = BMClient.cpp BMPeer.cpp BMProtocol.cpp BPTC19696.cpp CRC.cpp DMRIdDir.cpp DMRIdDirFile.cpp DMRIdDirHttp.cpp DMRMMDVMClient.cpp DMRMMDVMProtocol.cpp DMRPlusClient.cpp DMRPlusProtocol.cpp Golay2087.cpp Golay24128.cpp Hamming.cpp M17Client.cpp M17CRC.cpp M17Packet.cpp M17Client.cpp M17Protocol.cpp QR1676.cpp RS129.cpp Semaphore.cpp Utils.cpp WiresXCmd.cpp WiresXCmdHandler.cpp WiresXInfo.cpp URFClient.cpp URFProtocol.cpp URFPeer.cpp YSFClient.cpp YSFConvolution.cpp YSFFich.cpp YSFNode.cpp YSFNodeDir.cpp YSFNodeDirFile.cpp YSFNodeDirHttp.cpp YSFPayload.cpp YSFProtocol.cpp YSFUtils.cpp G3SRCS = G3Client.cpp G3Protocol.cpp RawSocket.cpp UDPMsgSocket.cpp SRCS = $(XRFSRCS) $(XLXSRCS) diff --git a/reflector/Packet.cpp b/reflector/Packet.cpp index 44e13f2..997c374 100644 --- a/reflector/Packet.cpp +++ b/reflector/Packet.cpp @@ -35,7 +35,7 @@ CPacket::CPacket() m_uiYsfPacketFrameId = 0; m_uiM17FrameNumber = 0; m_cModule = ' '; - m_uiOriginId = ORIGIN_LOCAL; + m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::none; m_bLastPacket = false; }; @@ -53,7 +53,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid) m_uiYsfPacketFrameId = 0xFF; m_uiM17FrameNumber = 0x8000U; m_cModule = ' '; - m_uiOriginId = ORIGIN_LOCAL; + m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dstar; m_bLastPacket = (0x40U == (dstarpid & 0x40U)); }; @@ -71,7 +71,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dmrpid, uint8_t dmrspid, bool lastpacket) m_uiYsfPacketFrameId = 0xFF; m_uiM17FrameNumber = 0x8000U; m_cModule = ' '; - m_uiOriginId = ORIGIN_LOCAL; + m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dmr; m_bLastPacket = lastpacket; }; @@ -89,7 +89,7 @@ CPacket::CPacket(uint16_t sid, uint8_t ysfpid, uint8_t ysfsubpid, uint8_t ysffri m_uiDmrPacketSubid = 0xFF; m_uiM17FrameNumber = 0x8000U; m_cModule = ' '; - m_uiOriginId = ORIGIN_LOCAL; + m_eOrigin = EOrigin::local; m_eCodecIn = ECodecType::dmr; m_bLastPacket = lastpacket; } @@ -107,7 +107,7 @@ CPacket::CPacket(uint16_t sid, uint8_t dstarpid, uint8_t dmrpid, uint8_t dmrsubp m_uiYsfPacketFrameId = ysffrid; m_uiM17FrameNumber = 0x8000U; m_cModule = ' '; - m_uiOriginId = ORIGIN_LOCAL; + m_eOrigin = EOrigin::local; m_eCodecIn = codecIn; m_bLastPacket = lastpacket; } diff --git a/reflector/Packet.h b/reflector/Packet.h index 2979dd0..cecbbf7 100644 --- a/reflector/Packet.h +++ b/reflector/Packet.h @@ -20,12 +20,11 @@ // Origin Id -#define ORIGIN_LOCAL 0 -#define ORIGIN_PEER 1 - #include "Defines.h" #include "M17Packet.h" +enum class EOrigin { local, peer }; + class CPacket { public: @@ -61,19 +60,20 @@ public: uint8_t GetYsfPacketSubId(void) const { return m_uiYsfPacketSubId; } uint8_t GetYsfPacketFrameId(void) const { return m_uiYsfPacketFrameId; } char GetModule(void) const { return m_cModule; } - bool IsLocalOrigin(void) const { return (m_uiOriginId == ORIGIN_LOCAL); } + bool IsLocalOrigin(void) const { return (m_eOrigin == EOrigin::local); } bool IsSecond(void) const { return m_bIsSecond; } ECodecType GetCodecIn(void) const { return m_eCodecIn; } // set void UpdatePids(const uint32_t); void SetModule(char cMod) { m_cModule = cMod; } - void SetLocalOrigin(void) { m_uiOriginId = ORIGIN_LOCAL; } - void SetRemotePeerOrigin(void) { m_uiOriginId = ORIGIN_PEER; } + void SetLocalOrigin(void) { m_eOrigin = EOrigin::local; } + void SetRemotePeerOrigin(void) { m_eOrigin = EOrigin::peer; } protected: // data ECodecType m_eCodecIn; + EOrigin m_eOrigin; bool m_bLastPacket; bool m_bIsSecond; char m_cModule; @@ -85,5 +85,4 @@ protected: uint8_t m_uiYsfPacketId; uint8_t m_uiYsfPacketSubId; uint8_t m_uiYsfPacketFrameId; - uint8_t m_uiOriginId; }; diff --git a/reflector/Protocol.cpp b/reflector/Protocol.cpp index a90810c..400a4d1 100644 --- a/reflector/Protocol.cpp +++ b/reflector/Protocol.cpp @@ -124,21 +124,6 @@ void CProtocol::Close(void) m_Socket6.Close(); } -//////////////////////////////////////////////////////////////////////////////////////// -// packet encoding helpers - -bool CProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const -{ - if ( packet.IsDvFrame() ) - return EncodeDvFramePacket((CDvFramePacket &)packet, buffer); - - if ( packet.IsDvHeader() ) - return EncodeDvHeaderPacket((CDvHeaderPacket &)packet, buffer); - - std::cerr << "Can't encode an unknown packet type!" << std::endl; - return false; -} - //////////////////////////////////////////////////////////////////////////////////////// // streams helpers diff --git a/reflector/Protocol.h b/reflector/Protocol.h index 0be010c..3bbe718 100644 --- a/reflector/Protocol.h +++ b/reflector/Protocol.h @@ -1,3 +1,5 @@ +#pragma once + // Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved. // urfd -- The universal reflector @@ -16,8 +18,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -#pragma once - #include "UDPSocket.h" #include "PacketStream.h" #include "DVHeaderPacket.h" @@ -83,13 +83,7 @@ public: virtual void Task(void) = 0; protected: - // packet encoding helpers - virtual bool EncodeDvPacket(const CPacket &, CBuffer *) const; - virtual bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const { return false; } - virtual bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const { return false; } - // stream helpers - virtual void OnDvHeaderPacketIn(std::unique_ptr &, const CIp &) {} virtual void OnDvFramePacketIn(std::unique_ptr &, const CIp * = nullptr); // stream handle helpers diff --git a/reflector/SEProtocol.cpp b/reflector/SEProtocol.cpp new file mode 100644 index 0000000..59e8c53 --- /dev/null +++ b/reflector/SEProtocol.cpp @@ -0,0 +1,29 @@ +// urfd -- The universal reflector +// Copyright © 2021 Thomas A. Early N7TAE +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "SEProtocol.h" + +bool CSEProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const +{ + if ( packet.IsDvFrame() ) + return EncodeDvFramePacket((CDvFramePacket &)packet, buffer); + + if ( packet.IsDvHeader() ) + return EncodeDvHeaderPacket((CDvHeaderPacket &)packet, buffer); + + std::cerr << "Can't encode an unknown packet type!" << std::endl; + return false; +} diff --git a/reflector/SEProtocol.h b/reflector/SEProtocol.h new file mode 100644 index 0000000..3c2614e --- /dev/null +++ b/reflector/SEProtocol.h @@ -0,0 +1,29 @@ +#pragma once + +// urfd -- The universal reflector +// Copyright © 2021 Thomas A. Early N7TAE +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "Protocol.h" + +// "SE" means "Standard Encoding" +class CSEProtocol : public CProtocol +{ +protected: + // packet encoding helpers + virtual bool EncodeDvPacket(const CPacket &, CBuffer *) const; + virtual bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const = 0; + virtual bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const = 0; +}; diff --git a/reflector/URFProtocol.cpp b/reflector/URFProtocol.cpp index 103d237..d1107bb 100644 --- a/reflector/URFProtocol.cpp +++ b/reflector/URFProtocol.cpp @@ -395,7 +395,7 @@ void CURFProtocol::OnDvFramePacketIn(std::unique_ptr &DvFrame, c DvFrame->SetRemotePeerOrigin(); // and call base class - OnDvFramePacketIn(DvFrame, Ip); + CProtocol::OnDvFramePacketIn(DvFrame, Ip); } //////////////////////////////////////////////////////////////////////////////////////// diff --git a/reflector/URFProtocol.h b/reflector/URFProtocol.h index 1c01c5d..b634390 100644 --- a/reflector/URFProtocol.h +++ b/reflector/URFProtocol.h @@ -20,12 +20,12 @@ #include "Version.h" #include "Timer.h" -#include "Protocol.h" +#include "SEProtocol.h" #include "Clients.h" class CPeer; -class CURFProtocol : public CProtocol +class CURFProtocol : public CSEProtocol { public: // initialization diff --git a/reflector/YSFProtocol.cpp b/reflector/YSFProtocol.cpp index f742aa2..1623713 100644 --- a/reflector/YSFProtocol.cpp +++ b/reflector/YSFProtocol.cpp @@ -295,13 +295,13 @@ void CYsfProtocol::HandleQueue(void) m_StreamsCache[mod].m_dvHeader = CDvHeaderPacket((CDvHeaderPacket &)*packet.get()); // encode it - EncodeDvHeaderPacket((CDvHeaderPacket &)*packet.get(), &buffer); + EncodeYSFHeaderPacket((CDvHeaderPacket &)*packet.get(), &buffer); } // check if it's a last frame else if ( packet->IsLastPacket() ) { // encode it - EncodeDvLastPacket(m_StreamsCache[mod].m_dvHeader, &buffer); + EncodeLastYSFPacket(m_StreamsCache[mod].m_dvHeader, &buffer); } // otherwise, just a regular DV frame else @@ -315,7 +315,7 @@ void CYsfProtocol::HandleQueue(void) if ( sid == 4 ) { - EncodeDvPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_dvFrames, &buffer); + EncodeYSFPacket(m_StreamsCache[mod].m_dvHeader, m_StreamsCache[mod].m_dvFrames, &buffer); } } } @@ -522,7 +522,7 @@ void CYsfProtocol::EncodeConnectAckPacket(CBuffer *Buffer) const Buffer->Set(tag, sizeof(tag)); } -bool CYsfProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Header, CBuffer *Buffer) const +bool CYsfProtocol::EncodeYSFHeaderPacket(const CDvHeaderPacket &Header, CBuffer *Buffer) const { uint8_t tag[] = { 'Y','S','F','D' }; uint8_t dest[] = { 'A','L','L',' ',' ',' ',' ',' ',' ',' ' }; @@ -577,7 +577,7 @@ bool CYsfProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Header, CBuffer * return true; } -bool CYsfProtocol::EncodeDvPacket(const CDvHeaderPacket &Header, const CDvFramePacket *DvFrames, CBuffer *Buffer) const +bool CYsfProtocol::EncodeYSFPacket(const CDvHeaderPacket &Header, const CDvFramePacket *DvFrames, CBuffer *Buffer) const { uint8_t tag[] = { 'Y','S','F','D' }; uint8_t dest[] = { 'A','L','L',' ',' ',' ',' ',' ',' ',' ' }; @@ -669,7 +669,7 @@ bool CYsfProtocol::EncodeDvPacket(const CDvHeaderPacket &Header, const CDvFrameP return true; } -bool CYsfProtocol::EncodeDvLastPacket(const CDvHeaderPacket &Header, CBuffer *Buffer) const +bool CYsfProtocol::EncodeLastYSFPacket(const CDvHeaderPacket &Header, CBuffer *Buffer) const { uint8_t tag[] = { 'Y','S','F','D' }; uint8_t dest[] = { 'A','L','L',' ',' ',' ',' ',' ',' ',' ' }; diff --git a/reflector/YSFProtocol.h b/reflector/YSFProtocol.h index 27e9d3f..5a90628 100644 --- a/reflector/YSFProtocol.h +++ b/reflector/YSFProtocol.h @@ -92,9 +92,9 @@ protected: void EncodeConnectAckPacket(CBuffer *) const; //void EncodeConnectNackPacket(const CCallsign &, char, CBuffer *); //void EncodeDisconnectPacket(CBuffer *, std::shared_ptr); - bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; - bool EncodeDvPacket(const CDvHeaderPacket &, const CDvFramePacket *, CBuffer *) const; - bool EncodeDvLastPacket(const CDvHeaderPacket &, CBuffer *) const; + bool EncodeYSFHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; + bool EncodeYSFPacket(const CDvHeaderPacket &, const CDvFramePacket *, CBuffer *) const; + bool EncodeLastYSFPacket(const CDvHeaderPacket &, CBuffer *) const; // Wires-X packet decoding helpers bool IsValidwirexPacket(const CBuffer &, CYSFFICH *, CCallsign *, int *, int*);