fix fragment printing

Mathieu Lacage 2007-06-06 09:23:47 +02:00
parent 3e511d1457
commit e829515b02
2 changed files with 17 additions and 35 deletions

View File

@ -776,6 +776,7 @@ PacketHistory::ReadItems (uint16_t current,
extraItem->fragmentEnd = item->size;
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
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,
std::ostream &os) const
{
ReadSmall (item, &buffer);
bool isExtra = (item->typeUid & 0x1) == 0x1;
PacketHistory::ExtraItem extraItem;
ReadItems (current, item, &extraItem);
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)
{
// payload.
printer.PrintPayload (os, packetUid, item->size,
fragmentStart,
fragmentEnd);
printer.PrintPayload (os, extraItem.packetUid, item->size,
extraItem.fragmentStart,
extraItem.fragmentEnd);
}
else if (fragmentStart != 0 &&
fragmentEnd != item->size)
else if (extraItem.fragmentStart != 0 ||
extraItem.fragmentEnd != item->size)
{
printer.PrintChunkFragment (uid, os, packetUid, item->size,
fragmentStart, fragmentEnd);
printer.PrintChunkFragment (uid, os, extraItem.packetUid, item->size,
extraItem.fragmentStart, extraItem.fragmentEnd);
}
else if (PacketPrinter::IsHeader (uid))
{
ns3::Buffer::Iterator j = data.Begin ();
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))
{
ns3::Buffer::Iterator j = data.End ();
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
{
NS_ASSERT (false);
}
return fragmentEnd - fragmentStart;
return extraItem.fragmentEnd - extraItem.fragmentStart;
}
uint32_t
@ -1208,9 +1192,8 @@ PacketHistory::Print (std::ostream &os, Buffer data, const PacketPrinter &printe
uint32_t offset = 0;
while (current != 0xffff)
{
uint8_t *buffer = &m_data->m_data[current];
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;
if (current == tail)
{
@ -1227,9 +1210,8 @@ PacketHistory::Print (std::ostream &os, Buffer data, const PacketPrinter &printe
uint32_t offset = 0;
while (current != 0xffff)
{
uint8_t *buffer = &m_data->m_data[current];
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;
if (current == tail)
{

View File

@ -113,7 +113,7 @@ private:
void ReadExtra (struct PacketHistory::ExtraItem *item, const uint8_t **pBuffer) const;
void Reserve (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,
std::ostream &os) const;
uint32_t GetTotalSize (void) const;