optimize case where fake payload is fragmented and re-assembled.
This commit is contained in:
@@ -464,6 +464,27 @@ Buffer::AddAtEnd (uint32_t end)
|
||||
void
|
||||
Buffer::AddAtEnd (const Buffer &o)
|
||||
{
|
||||
if (m_end == m_zeroAreaEnd &&
|
||||
o.m_start == o.m_zeroAreaStart &&
|
||||
o.m_zeroAreaEnd - o.m_zeroAreaStart > 0)
|
||||
{
|
||||
/**
|
||||
* This is an optimization which kicks in when
|
||||
* we attempt to aggregate two buffers which contain
|
||||
* adjacent zero areas.
|
||||
*/
|
||||
uint32_t zeroSize = o.m_zeroAreaEnd - o.m_zeroAreaStart;
|
||||
m_zeroAreaEnd += zeroSize;
|
||||
m_end = m_zeroAreaEnd;
|
||||
uint32_t endData = o.m_end - o.m_zeroAreaEnd;
|
||||
AddAtEnd (endData);
|
||||
Buffer::Iterator dst = End ();
|
||||
dst.Prev (endData);
|
||||
Buffer::Iterator src = o.End ();
|
||||
src.Prev (endData);
|
||||
dst.Write (src, o.End ());
|
||||
return;
|
||||
}
|
||||
Buffer dst = CreateFullCopy ();
|
||||
Buffer src = o.CreateFullCopy ();
|
||||
|
||||
@@ -1336,6 +1357,21 @@ BufferTest::RunTests (void)
|
||||
NS_TEST_ASSERT (memcmp (inputBuffer.PeekData (), outputBuffer.PeekData (), chunkSize) == 0);
|
||||
}
|
||||
|
||||
buffer = Buffer (5);
|
||||
buffer.AddAtEnd (2);
|
||||
i = buffer.End ();
|
||||
i.Prev (2);
|
||||
i.WriteU8 (0);
|
||||
i.WriteU8 (0x66);
|
||||
ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
|
||||
Buffer frag0 = buffer.CreateFragment (0, 2);
|
||||
ENSURE_WRITTEN_BYTES (frag0, 2, 0x00, 0x00);
|
||||
Buffer frag1 = buffer.CreateFragment (2, 5);
|
||||
ENSURE_WRITTEN_BYTES (frag1, 5, 0x00, 0x00, 0x00, 0x00, 0x66);
|
||||
frag0.AddAtEnd (frag1);
|
||||
ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
|
||||
ENSURE_WRITTEN_BYTES (frag0, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user