unconditionally bundle first fragment in xmit

pull/936/head
Jeff Becker 5 years ago
parent 1f83fdb190
commit 86a4ccd98f
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -22,21 +22,14 @@ namespace llarp
ILinkSession::Packet_t
OutboundMessage::XMIT() const
{
size_t extra = 0;
if(m_Data.size() <= FragmentSize)
{
extra = m_Data.size();
}
auto xmit = CreatePacket(Command::eXMIT, 10 + 32 + extra, 0, 0);
size_t extra = std::min(m_Data.size(), FragmentSize);
auto xmit = CreatePacket(Command::eXMIT, 10 + 32 + extra, 0, 0);
htobe16buf(xmit.data() + CommandOverhead + PacketOverhead, m_Data.size());
htobe64buf(xmit.data() + 2 + CommandOverhead + PacketOverhead, m_MsgID);
std::copy_n(m_Digest.begin(), m_Digest.size(),
xmit.data() + 10 + CommandOverhead + PacketOverhead);
if(extra)
{
std::copy_n(m_Data.data(), extra,
xmit.data() + 10 + CommandOverhead + PacketOverhead + 32);
}
std::copy_n(m_Data.data(), extra,
xmit.data() + 10 + CommandOverhead + PacketOverhead + 32);
return xmit;
}
@ -135,7 +128,6 @@ namespace llarp
LogWarn("invalid fragment offset ", idx);
return;
}
byte_t *dst = m_Data.data() + idx;
std::copy_n(buf.base, buf.sz, dst);
m_Acks.set(idx / FragmentSize);

@ -701,15 +701,19 @@ namespace llarp
InboundMessage{rxid, sz, std::move(h), m_Parent->Now()})
.first;
auto _sz = data.size()
auto _sizeDelta = data.size()
- (CommandOverhead + sizeof(uint16_t) + sizeof(uint64_t)
+ PacketOverhead + 32);
if(sz <= FragmentSize && _sz == 0)
if(_sizeDelta == 0)
{
sz = std::min(sz, uint16_t{FragmentSize});
{
const llarp_buffer_t buf(data.data() + (data.size() - sz), sz);
LogInfo(_sz);
itr->second.HandleData(0, buf, now);
if(not itr->second.IsCompleted())
{
return;
}
if(not itr->second.Verify())
{
LogError("bad short xmit hash from ", m_RemoteAddr);

Loading…
Cancel
Save