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
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 };
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<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 };
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<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 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;

@ -108,9 +108,9 @@ protected:
bool IsValidDvLastFramePacket(const CBuffer &, std::unique_ptr<CDvLastFramePacket> &);
// packet encoding helpers
bool EncodeDvHeaderPacket(const std::unique_ptr<CDvHeaderPacket> &, CBuffer *) const;
bool EncodeDvFramePacket(const std::unique_ptr<CDvFramePacket> &, CBuffer *) const;
bool EncodeDvLastFramePacket(const std::unique_ptr<CDvLastFramePacket> &, CBuffer *) const;
bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const;
bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const;
bool EncodeDvLastFramePacket(const CDvLastFramePacket &, CBuffer *) const;
protected:
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 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;
}
////////////////////////////////////////////////////////////////////////////////////////

@ -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 )
{

Loading…
Cancel
Save

Powered by TurnKey Linux.