fixed wicked overloading/enheritance bug for G3

pull/1/head
Tom Early 5 years ago
parent c0230b9169
commit 3ab6e758e3

@ -636,43 +636,43 @@ bool CG3Protocol::IsValidDvLastFramePacket(const CBuffer &Buffer, std::unique_pt
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
// packet encoding helpers // packet encoding helpers
bool CG3Protocol::EncodeDvHeaderPacket(const std::unique_ptr<CDvHeaderPacket> &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 }; uint8 tag[] = { 'D','S','V','T',0x10,0x00,0x00,0x00,0x20,0x00,0x01,0x02 };
struct dstar_header DstarHeader; struct dstar_header DstarHeader;
Packet->ConvertToDstarStruct(&DstarHeader); Packet.ConvertToDstarStruct(&DstarHeader);
Buffer->Set(tag, sizeof(tag)); Buffer->Set(tag, sizeof(tag));
Buffer->Append(Packet->GetStreamId()); Buffer->Append(Packet.GetStreamId());
Buffer->Append((uint8)0x80); Buffer->Append((uint8)0x80);
Buffer->Append((uint8 *)&DstarHeader, sizeof(struct dstar_header)); Buffer->Append((uint8 *)&DstarHeader, sizeof(struct dstar_header));
return true; return true;
} }
bool CG3Protocol::EncodeDvFramePacket(const std::unique_ptr<CDvFramePacket> &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 }; uint8 tag[] = { 'D','S','V','T',0x20,0x00,0x00,0x00,0x20,0x00,0x01,0x02 };
Buffer->Set(tag, sizeof(tag)); Buffer->Set(tag, sizeof(tag));
Buffer->Append(Packet->GetStreamId()); Buffer->Append(Packet.GetStreamId());
Buffer->Append((uint8)(Packet->GetPacketId() % 21)); Buffer->Append((uint8)(Packet.GetPacketId() % 21));
Buffer->Append((uint8 *)Packet->GetAmbe(), AMBE_SIZE); Buffer->Append((uint8 *)Packet.GetAmbe(), AMBE_SIZE);
Buffer->Append((uint8 *)Packet->GetDvData(), DVDATA_SIZE); Buffer->Append((uint8 *)Packet.GetDvData(), DVDATA_SIZE);
return true; return true;
} }
bool CG3Protocol::EncodeDvLastFramePacket(const std::unique_ptr<CDvLastFramePacket> &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 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 }; uint8 tag2[] = { 0x55,0xC8,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x1A,0xC6 };
Buffer->Set(tag1, sizeof(tag1)); Buffer->Set(tag1, sizeof(tag1));
Buffer->Append(Packet->GetStreamId()); Buffer->Append(Packet.GetStreamId());
Buffer->Append((uint8)((Packet->GetPacketId() % 21) | 0x40)); Buffer->Append((uint8)((Packet.GetPacketId() % 21) | 0x40));
Buffer->Append(tag2, sizeof(tag2)); Buffer->Append(tag2, sizeof(tag2));
return true; return true;

@ -108,9 +108,9 @@ protected:
bool IsValidDvLastFramePacket(const CBuffer &, std::unique_ptr<CDvLastFramePacket> &); bool IsValidDvLastFramePacket(const CBuffer &, std::unique_ptr<CDvLastFramePacket> &);
// packet encoding helpers // packet encoding helpers
bool EncodeDvHeaderPacket(const std::unique_ptr<CDvHeaderPacket> &, CBuffer *) const; bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const;
bool EncodeDvFramePacket(const std::unique_ptr<CDvFramePacket> &, CBuffer *) const; bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const;
bool EncodeDvLastFramePacket(const std::unique_ptr<CDvLastFramePacket> &, CBuffer *) const; bool EncodeDvLastFramePacket(const CDvLastFramePacket &, CBuffer *) const;
protected: protected:
std::future<void> m_PresenceFuture, m_ConfigFuture, m_IcmpFuture; std::future<void> m_PresenceFuture, m_ConfigFuture, m_IcmpFuture;

@ -135,27 +135,18 @@ void CProtocol::Close(void)
bool CProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const bool CProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const
{ {
bool ok = false;
if ( packet.IsDvFrame() ) if ( packet.IsDvFrame() )
{ {
if ( packet.IsLastPacket() ) if ( packet.IsLastPacket() )
{ return EncodeDvLastFramePacket((CDvLastFramePacket &)packet, buffer);
ok = EncodeDvLastFramePacket((const CDvLastFramePacket &)packet, buffer);
}
else else
{ return EncodeDvFramePacket((CDvFramePacket &)packet, buffer);
ok = EncodeDvFramePacket((const CDvFramePacket &)packet, buffer);
}
}
else if ( packet.IsDvHeader() )
{
ok = EncodeDvHeaderPacket((const CDvHeaderPacket &)packet, buffer);
} }
else if ( packet.IsDvHeader() )
{ return EncodeDvHeaderPacket((CDvHeaderPacket &)packet, buffer);
buffer->clear();
} std::cerr << "Can't encode an unknown packet type!" << std::endl;
return ok; return false;
} }
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////

@ -292,10 +292,10 @@ void CYsfProtocol::HandleQueue(void)
{ {
// update local stream cache // update local stream cache
// this relies on queue feeder setting valid module id // 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 // encode it
EncodeDvHeaderPacket((const CDvHeaderPacket &)*packet.get(), &buffer); EncodeDvHeaderPacket((CDvHeaderPacket &)*packet.get(), &buffer);
} }
// check if it's a last frame // check if it's a last frame
else if ( packet->IsLastPacket() ) else if ( packet->IsLastPacket() )
@ -311,7 +311,7 @@ void CYsfProtocol::HandleQueue(void)
if (sid <= 4) if (sid <= 4)
{ {
//std::cout << (int)sid; //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 ) if ( sid == 4 )
{ {

Loading…
Cancel
Save

Powered by TurnKey Linux.