mirror of
https://github.com/nostar/urfd.git
synced 2026-11-08 12:26:46 +00:00
added CSEProtocol class for better EncodeDvPacket desigh
This commit is contained in:
1 parent
065be9bf90
commit
707486f47e
24 files changed
+139
-115
No files matched your search
@@ -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 };
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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_ptr<CClie
|
||||
Buffer->Append((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;
|
||||
}
|
||||
@@ -70,8 +70,8 @@ protected:
|
||||
void EncodeConnectAckPacket(const CCallsign &, char, CBuffer *);
|
||||
void EncodeConnectNackPacket(const CCallsign &, char, CBuffer *);
|
||||
void EncodeDisconnectPacket(CBuffer *, std::shared_ptr<CClient>);
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_ptr<CClie
|
||||
}
|
||||
|
||||
|
||||
bool CDmrmmdvmProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, uint8_t seqid, CBuffer *Buffer) const
|
||||
bool CDmrmmdvmProtocol::EncodeMMDVMHeaderPacket(const CDvHeaderPacket &Packet, uint8_t seqid, CBuffer *Buffer) const
|
||||
{
|
||||
uint8_t tag[] = { 'D','M','R','D' };
|
||||
|
||||
@@ -861,10 +855,7 @@ bool CDmrmmdvmProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, uint
|
||||
return true;
|
||||
}
|
||||
|
||||
void CDmrmmdvmProtocol::EncodeDvPacket(
|
||||
const CDvHeaderPacket &Header,
|
||||
const CDvFramePacket &DvFrame0, const CDvFramePacket &DvFrame1, const CDvFramePacket &DvFrame2,
|
||||
uint8_t seqid, CBuffer *Buffer) const
|
||||
void CDmrmmdvmProtocol::EncodeMMDVMPacket(const CDvHeaderPacket &Header, const CDvFramePacket &DvFrame0, const CDvFramePacket &DvFrame1, const CDvFramePacket &DvFrame2, uint8_t seqid, CBuffer *Buffer) const
|
||||
{
|
||||
uint8_t tag[] = { 'D','M','R','D' };
|
||||
Buffer->Set(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' };
|
||||
|
||||
|
||||
@@ -89,9 +89,9 @@ protected:
|
||||
void EncodeConnectAckPacket(CBuffer *, const CCallsign &, uint32_t);
|
||||
void EncodeNackPacket(CBuffer *, const CCallsign &);
|
||||
void EncodeClosePacket(CBuffer *, std::shared_ptr<CClient>);
|
||||
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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#include <string>
|
||||
#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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+6
-7
@@ -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;
|
||||
};
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
#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<CDvHeaderPacket> &, const CIp &) {}
|
||||
virtual void OnDvFramePacketIn(std::unique_ptr<CDvFramePacket> &, const CIp * = nullptr);
|
||||
|
||||
// stream handle helpers
|
||||
|
||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
#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;
|
||||
}
|
||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
#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;
|
||||
};
|
||||
@@ -395,7 +395,7 @@ void CURFProtocol::OnDvFramePacketIn(std::unique_ptr<CDvFramePacket> &DvFrame, c
|
||||
DvFrame->SetRemotePeerOrigin();
|
||||
|
||||
// and call base class
|
||||
OnDvFramePacketIn(DvFrame, Ip);
|
||||
CProtocol::OnDvFramePacketIn(DvFrame, Ip);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',' ',' ',' ',' ',' ',' ',' ' };
|
||||
|
||||
@@ -92,9 +92,9 @@ protected:
|
||||
void EncodeConnectAckPacket(CBuffer *) const;
|
||||
//void EncodeConnectNackPacket(const CCallsign &, char, CBuffer *);
|
||||
//void EncodeDisconnectPacket(CBuffer *, std::shared_ptr<CClient>);
|
||||
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*);
|
||||
|
||||
Reference in new issue
Block a user