From 3ab6e758e30af1024859c615130a2fd85c3e0ba5 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Fri, 14 Aug 2020 17:47:17 -0700 Subject: [PATCH] fixed wicked overloading/enheritance bug for G3 --- src/cg3protocol.cpp | 22 +++++++++++----------- src/cg3protocol.h | 6 +++--- src/cprotocol.cpp | 23 +++++++---------------- src/cysfprotocol.cpp | 6 +++--- 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/src/cg3protocol.cpp b/src/cg3protocol.cpp index 225e81d..f71022e 100644 --- a/src/cg3protocol.cpp +++ b/src/cg3protocol.cpp @@ -636,43 +636,43 @@ bool CG3Protocol::IsValidDvLastFramePacket(const CBuffer &Buffer, std::unique_pt //////////////////////////////////////////////////////////////////////////////////////// // packet encoding helpers -bool CG3Protocol::EncodeDvHeaderPacket(const std::unique_ptr &Packet, CBuffer *Buffer) const +bool CG3Protocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const { uint8 tag[] = { 'D','S','V','T',0x10,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; struct dstar_header DstarHeader; - Packet->ConvertToDstarStruct(&DstarHeader); + Packet.ConvertToDstarStruct(&DstarHeader); Buffer->Set(tag, sizeof(tag)); - Buffer->Append(Packet->GetStreamId()); + Buffer->Append(Packet.GetStreamId()); Buffer->Append((uint8)0x80); Buffer->Append((uint8 *)&DstarHeader, sizeof(struct dstar_header)); return true; } -bool CG3Protocol::EncodeDvFramePacket(const std::unique_ptr &Packet, CBuffer *Buffer) const +bool CG3Protocol::EncodeDvFramePacket(const CDvFramePacket &Packet, CBuffer *Buffer) const { uint8 tag[] = { 'D','S','V','T',0x20,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; Buffer->Set(tag, sizeof(tag)); - Buffer->Append(Packet->GetStreamId()); - Buffer->Append((uint8)(Packet->GetPacketId() % 21)); - Buffer->Append((uint8 *)Packet->GetAmbe(), AMBE_SIZE); - Buffer->Append((uint8 *)Packet->GetDvData(), DVDATA_SIZE); + Buffer->Append(Packet.GetStreamId()); + Buffer->Append((uint8)(Packet.GetPacketId() % 21)); + Buffer->Append((uint8 *)Packet.GetAmbe(), AMBE_SIZE); + Buffer->Append((uint8 *)Packet.GetDvData(), DVDATA_SIZE); return true; } -bool CG3Protocol::EncodeDvLastFramePacket(const std::unique_ptr &Packet, CBuffer *Buffer) const +bool CG3Protocol::EncodeDvLastFramePacket(const CDvLastFramePacket &Packet, CBuffer *Buffer) const { uint8 tag1[] = { 'D','S','V','T',0x20,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; uint8 tag2[] = { 0x55,0xC8,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x1A,0xC6 }; Buffer->Set(tag1, sizeof(tag1)); - Buffer->Append(Packet->GetStreamId()); - Buffer->Append((uint8)((Packet->GetPacketId() % 21) | 0x40)); + Buffer->Append(Packet.GetStreamId()); + Buffer->Append((uint8)((Packet.GetPacketId() % 21) | 0x40)); Buffer->Append(tag2, sizeof(tag2)); return true; diff --git a/src/cg3protocol.h b/src/cg3protocol.h index 97ff5ea..42ee418 100644 --- a/src/cg3protocol.h +++ b/src/cg3protocol.h @@ -108,9 +108,9 @@ protected: bool IsValidDvLastFramePacket(const CBuffer &, std::unique_ptr &); // packet encoding helpers - bool EncodeDvHeaderPacket(const std::unique_ptr &, CBuffer *) const; - bool EncodeDvFramePacket(const std::unique_ptr &, CBuffer *) const; - bool EncodeDvLastFramePacket(const std::unique_ptr &, CBuffer *) const; + bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; + bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const; + bool EncodeDvLastFramePacket(const CDvLastFramePacket &, CBuffer *) const; protected: std::future m_PresenceFuture, m_ConfigFuture, m_IcmpFuture; diff --git a/src/cprotocol.cpp b/src/cprotocol.cpp index d6d423e..987780b 100644 --- a/src/cprotocol.cpp +++ b/src/cprotocol.cpp @@ -135,27 +135,18 @@ void CProtocol::Close(void) bool CProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const { - bool ok = false; if ( packet.IsDvFrame() ) { if ( packet.IsLastPacket() ) - { - ok = EncodeDvLastFramePacket((const CDvLastFramePacket &)packet, buffer); - } + return EncodeDvLastFramePacket((CDvLastFramePacket &)packet, buffer); else - { - ok = EncodeDvFramePacket((const CDvFramePacket &)packet, buffer); - } - } - else if ( packet.IsDvHeader() ) - { - ok = EncodeDvHeaderPacket((const CDvHeaderPacket &)packet, buffer); + return EncodeDvFramePacket((CDvFramePacket &)packet, buffer); } - else - { - buffer->clear(); - } - return ok; + if ( packet.IsDvHeader() ) + return EncodeDvHeaderPacket((CDvHeaderPacket &)packet, buffer); + + std::cerr << "Can't encode an unknown packet type!" << std::endl; + return false; } //////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/cysfprotocol.cpp b/src/cysfprotocol.cpp index 7e8d35f..5c74392 100644 --- a/src/cysfprotocol.cpp +++ b/src/cysfprotocol.cpp @@ -292,10 +292,10 @@ void CYsfProtocol::HandleQueue(void) { // update local stream cache // this relies on queue feeder setting valid module id - m_StreamsCache[iModId].m_dvHeader = CDvHeaderPacket((const CDvHeaderPacket &)*packet); + m_StreamsCache[iModId].m_dvHeader = CDvHeaderPacket((CDvHeaderPacket &)*packet); // encode it - EncodeDvHeaderPacket((const CDvHeaderPacket &)*packet.get(), &buffer); + EncodeDvHeaderPacket((CDvHeaderPacket &)*packet.get(), &buffer); } // check if it's a last frame else if ( packet->IsLastPacket() ) @@ -311,7 +311,7 @@ void CYsfProtocol::HandleQueue(void) if (sid <= 4) { //std::cout << (int)sid; - m_StreamsCache[iModId].m_dvFrames[sid] = CDvFramePacket((const CDvFramePacket &)*packet); + m_StreamsCache[iModId].m_dvFrames[sid] = CDvFramePacket((CDvFramePacket &)*packet); if ( sid == 4 ) {