fix fragment printing
parent
3e511d1457
commit
e829515b02
|
@ -776,6 +776,7 @@ PacketHistory::ReadItems (uint16_t current,
|
||||||
extraItem->fragmentEnd = item->size;
|
extraItem->fragmentEnd = item->size;
|
||||||
extraItem->packetUid = m_packetUid;
|
extraItem->packetUid = m_packetUid;
|
||||||
}
|
}
|
||||||
|
NS_ASSERT (buffer <= &m_data->m_data[m_data->m_size]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1097,60 +1098,43 @@ PacketHistory::PrintDefault (std::ostream &os, Buffer buffer) const
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
PacketHistory::DoPrint (struct PacketHistory::SmallItem *item, uint8_t const*buffer,
|
PacketHistory::DoPrint (struct PacketHistory::SmallItem *item, uint32_t current,
|
||||||
Buffer data, uint32_t offset, const PacketPrinter &printer,
|
Buffer data, uint32_t offset, const PacketPrinter &printer,
|
||||||
std::ostream &os) const
|
std::ostream &os) const
|
||||||
{
|
{
|
||||||
ReadSmall (item, &buffer);
|
PacketHistory::ExtraItem extraItem;
|
||||||
bool isExtra = (item->typeUid & 0x1) == 0x1;
|
ReadItems (current, item, &extraItem);
|
||||||
uint32_t uid = item->typeUid & 0xfffffffe;
|
uint32_t uid = item->typeUid & 0xfffffffe;
|
||||||
uint32_t fragmentStart, fragmentEnd;
|
|
||||||
uint32_t packetUid;
|
|
||||||
if (isExtra)
|
|
||||||
{
|
|
||||||
PacketHistory::ExtraItem extraItem;
|
|
||||||
ReadExtra (&extraItem, &buffer);
|
|
||||||
fragmentStart = extraItem.fragmentStart;
|
|
||||||
fragmentEnd = extraItem.fragmentEnd;
|
|
||||||
packetUid = extraItem.packetUid;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fragmentStart = 0;
|
|
||||||
fragmentEnd = item->size;
|
|
||||||
packetUid = m_packetUid;
|
|
||||||
}
|
|
||||||
NS_ASSERT (buffer <= &m_data->m_data[m_data->m_size]);
|
|
||||||
if (uid == 0)
|
if (uid == 0)
|
||||||
{
|
{
|
||||||
// payload.
|
// payload.
|
||||||
printer.PrintPayload (os, packetUid, item->size,
|
printer.PrintPayload (os, extraItem.packetUid, item->size,
|
||||||
fragmentStart,
|
extraItem.fragmentStart,
|
||||||
fragmentEnd);
|
extraItem.fragmentEnd);
|
||||||
}
|
}
|
||||||
else if (fragmentStart != 0 &&
|
else if (extraItem.fragmentStart != 0 ||
|
||||||
fragmentEnd != item->size)
|
extraItem.fragmentEnd != item->size)
|
||||||
{
|
{
|
||||||
printer.PrintChunkFragment (uid, os, packetUid, item->size,
|
printer.PrintChunkFragment (uid, os, extraItem.packetUid, item->size,
|
||||||
fragmentStart, fragmentEnd);
|
extraItem.fragmentStart, extraItem.fragmentEnd);
|
||||||
}
|
}
|
||||||
else if (PacketPrinter::IsHeader (uid))
|
else if (PacketPrinter::IsHeader (uid))
|
||||||
{
|
{
|
||||||
ns3::Buffer::Iterator j = data.Begin ();
|
ns3::Buffer::Iterator j = data.Begin ();
|
||||||
j.Next (offset);
|
j.Next (offset);
|
||||||
printer.PrintChunk (uid, j, os, packetUid, item->size);
|
printer.PrintChunk (uid, j, os, extraItem.packetUid, item->size);
|
||||||
}
|
}
|
||||||
else if (PacketPrinter::IsTrailer (uid))
|
else if (PacketPrinter::IsTrailer (uid))
|
||||||
{
|
{
|
||||||
ns3::Buffer::Iterator j = data.End ();
|
ns3::Buffer::Iterator j = data.End ();
|
||||||
j.Prev (data.GetSize () - (offset + item->size));
|
j.Prev (data.GetSize () - (offset + item->size));
|
||||||
printer.PrintChunk (uid, j, os, packetUid, item->size);
|
printer.PrintChunk (uid, j, os, extraItem.packetUid, item->size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NS_ASSERT (false);
|
NS_ASSERT (false);
|
||||||
}
|
}
|
||||||
return fragmentEnd - fragmentStart;
|
return extraItem.fragmentEnd - extraItem.fragmentStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
@ -1208,9 +1192,8 @@ PacketHistory::Print (std::ostream &os, Buffer data, const PacketPrinter &printe
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
while (current != 0xffff)
|
while (current != 0xffff)
|
||||||
{
|
{
|
||||||
uint8_t *buffer = &m_data->m_data[current];
|
|
||||||
struct PacketHistory::SmallItem item;
|
struct PacketHistory::SmallItem item;
|
||||||
uint32_t realSize = DoPrint (&item, buffer, data, offset, printer, os);
|
uint32_t realSize = DoPrint (&item, current, data, offset, printer, os);
|
||||||
offset += realSize;
|
offset += realSize;
|
||||||
if (current == tail)
|
if (current == tail)
|
||||||
{
|
{
|
||||||
|
@ -1227,9 +1210,8 @@ PacketHistory::Print (std::ostream &os, Buffer data, const PacketPrinter &printe
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
while (current != 0xffff)
|
while (current != 0xffff)
|
||||||
{
|
{
|
||||||
uint8_t *buffer = &m_data->m_data[current];
|
|
||||||
struct PacketHistory::SmallItem item;
|
struct PacketHistory::SmallItem item;
|
||||||
uint32_t realSize = DoPrint (&item, buffer, data, offset, printer, os);
|
uint32_t realSize = DoPrint (&item, current, data, offset, printer, os);
|
||||||
offset -= realSize;
|
offset -= realSize;
|
||||||
if (current == tail)
|
if (current == tail)
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,7 +113,7 @@ private:
|
||||||
void ReadExtra (struct PacketHistory::ExtraItem *item, const uint8_t **pBuffer) const;
|
void ReadExtra (struct PacketHistory::ExtraItem *item, const uint8_t **pBuffer) const;
|
||||||
void Reserve (uint32_t n);
|
void Reserve (uint32_t n);
|
||||||
void ReserveCopy (uint32_t n);
|
void ReserveCopy (uint32_t n);
|
||||||
uint32_t DoPrint (struct PacketHistory::SmallItem *item, uint8_t const*buffer,
|
uint32_t DoPrint (struct PacketHistory::SmallItem *item, uint32_t current,
|
||||||
Buffer data, uint32_t offset, const PacketPrinter &printer,
|
Buffer data, uint32_t offset, const PacketPrinter &printer,
|
||||||
std::ostream &os) const;
|
std::ostream &os) const;
|
||||||
uint32_t GetTotalSize (void) const;
|
uint32_t GetTotalSize (void) const;
|
||||||
|
|
Loading…
Reference in New Issue