|
|
| 109 |
} |
109 |
} |
| 110 |
} |
110 |
} |
| 111 |
|
111 |
|
|
|
112 |
bool |
| 113 |
PacketMetadata::IsSharedPointerOk (uint16_t pointer) const |
| 114 |
{ |
| 115 |
bool ok = pointer == 0xffff || pointer <= m_data->m_size; |
| 116 |
return ok; |
| 117 |
} |
| 118 |
bool |
| 119 |
PacketMetadata::IsPointerOk (uint16_t pointer) const |
| 120 |
{ |
| 121 |
bool ok = pointer == 0xffff || pointer <= m_used; |
| 122 |
return ok; |
| 123 |
} |
| 124 |
|
| 125 |
bool |
| 126 |
PacketMetadata::IsStateOk (void) const |
| 127 |
{ |
| 128 |
bool ok = m_used <= m_data->m_size; |
| 129 |
ok &= IsPointerOk (m_head); |
| 130 |
ok &= IsPointerOk (m_tail); |
| 131 |
uint16_t current = m_head; |
| 132 |
while (ok && current != 0xffff) |
| 133 |
{ |
| 134 |
struct PacketMetadata::SmallItem item; |
| 135 |
PacketMetadata::ExtraItem extraItem; |
| 136 |
ReadItems (current, &item, &extraItem); |
| 137 |
ok &= IsSharedPointerOk (item.next); |
| 138 |
ok &= IsSharedPointerOk (item.prev); |
| 139 |
if (current != m_head) |
| 140 |
{ |
| 141 |
ok &= IsPointerOk (item.prev); |
| 142 |
} |
| 143 |
if (current != m_tail) |
| 144 |
{ |
| 145 |
ok &= IsPointerOk (item.next); |
| 146 |
} |
| 147 |
if (current == m_tail) |
| 148 |
{ |
| 149 |
break; |
| 150 |
} |
| 151 |
current = item.next; |
| 152 |
} |
| 153 |
return ok; |
| 154 |
} |
| 155 |
|
| 112 |
uint32_t |
156 |
uint32_t |
| 113 |
PacketMetadata::GetUleb128Size (uint32_t value) const |
157 |
PacketMetadata::GetUleb128Size (uint32_t value) const |
| 114 |
{ |
158 |
{ |
|
|
| 443 |
AppendValue (extraItem->fragmentEnd, buffer); |
487 |
AppendValue (extraItem->fragmentEnd, buffer); |
| 444 |
buffer += fragEndSize; |
488 |
buffer += fragEndSize; |
| 445 |
Append32 (extraItem->packetUid, buffer); |
489 |
Append32 (extraItem->packetUid, buffer); |
| 446 |
m_used = buffer - &m_data->m_data[0]; |
490 |
m_used = std::max (m_used, (uint16_t)(buffer - &m_data->m_data[0])); |
|
|
491 |
//m_used = buffer - &m_data->m_data[0]; |
| 447 |
m_data->m_dirtyEnd = m_used; |
492 |
m_data->m_dirtyEnd = m_used; |
| 448 |
return; |
493 |
return; |
| 449 |
} |
494 |
} |
|
|
| 484 |
struct PacketMetadata::ExtraItem *extraItem) const |
529 |
struct PacketMetadata::ExtraItem *extraItem) const |
| 485 |
{ |
530 |
{ |
| 486 |
NS_LOG_FUNCTION (this << current); |
531 |
NS_LOG_FUNCTION (this << current); |
|
|
532 |
NS_ASSERT (current <= m_data->m_size); |
| 487 |
const uint8_t *buffer = &m_data->m_data[current]; |
533 |
const uint8_t *buffer = &m_data->m_data[current]; |
| 488 |
item->next = buffer[0]; |
534 |
item->next = buffer[0]; |
| 489 |
item->next |= (buffer[1]) << 8; |
535 |
item->next |= (buffer[1]) << 8; |
|
|
| 599 |
void |
645 |
void |
| 600 |
PacketMetadata::AddHeader (const Header &header, uint32_t size) |
646 |
PacketMetadata::AddHeader (const Header &header, uint32_t size) |
| 601 |
{ |
647 |
{ |
|
|
648 |
NS_ASSERT (IsStateOk ()); |
| 602 |
uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1; |
649 |
uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1; |
| 603 |
DoAddHeader (uid, size); |
650 |
DoAddHeader (uid, size); |
|
|
651 |
NS_ASSERT (IsStateOk ()); |
| 604 |
} |
652 |
} |
| 605 |
void |
653 |
void |
| 606 |
PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size) |
654 |
PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size) |
|
|
| 627 |
{ |
675 |
{ |
| 628 |
uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1; |
676 |
uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1; |
| 629 |
NS_LOG_FUNCTION (this << uid << size); |
677 |
NS_LOG_FUNCTION (this << uid << size); |
|
|
678 |
NS_ASSERT (IsStateOk ()); |
| 630 |
if (!m_enable) |
679 |
if (!m_enable) |
| 631 |
{ |
680 |
{ |
| 632 |
m_metadataSkipped = true; |
681 |
m_metadataSkipped = true; |
|
|
| 667 |
{ |
716 |
{ |
| 668 |
m_head = item.next; |
717 |
m_head = item.next; |
| 669 |
} |
718 |
} |
|
|
719 |
NS_ASSERT (IsStateOk ()); |
| 670 |
} |
720 |
} |
| 671 |
void |
721 |
void |
| 672 |
PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size) |
722 |
PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size) |
| 673 |
{ |
723 |
{ |
| 674 |
uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1; |
724 |
uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1; |
| 675 |
NS_LOG_FUNCTION (this << uid << size); |
725 |
NS_LOG_FUNCTION (this << uid << size); |
|
|
726 |
NS_ASSERT (IsStateOk ()); |
| 676 |
if (!m_enable) |
727 |
if (!m_enable) |
| 677 |
{ |
728 |
{ |
| 678 |
m_metadataSkipped = true; |
729 |
m_metadataSkipped = true; |
|
|
| 687 |
m_chunkUid++; |
738 |
m_chunkUid++; |
| 688 |
uint16_t written = AddSmall (&item); |
739 |
uint16_t written = AddSmall (&item); |
| 689 |
UpdateTail (written); |
740 |
UpdateTail (written); |
|
|
741 |
NS_ASSERT (IsStateOk ()); |
| 690 |
} |
742 |
} |
| 691 |
void |
743 |
void |
| 692 |
PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size) |
744 |
PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size) |
| 693 |
{ |
745 |
{ |
| 694 |
uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1; |
746 |
uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1; |
| 695 |
NS_LOG_FUNCTION (this << uid << size); |
747 |
NS_LOG_FUNCTION (this << uid << size); |
|
|
748 |
NS_ASSERT (IsStateOk ()); |
| 696 |
if (!m_enable) |
749 |
if (!m_enable) |
| 697 |
{ |
750 |
{ |
| 698 |
m_metadataSkipped = true; |
751 |
m_metadataSkipped = true; |
|
|
| 733 |
{ |
786 |
{ |
| 734 |
m_tail = item.prev; |
787 |
m_tail = item.prev; |
| 735 |
} |
788 |
} |
|
|
789 |
NS_ASSERT (IsStateOk ()); |
| 736 |
} |
790 |
} |
| 737 |
void |
791 |
void |
| 738 |
PacketMetadata::AddAtEnd (PacketMetadata const&o) |
792 |
PacketMetadata::AddAtEnd (PacketMetadata const&o) |
| 739 |
{ |
793 |
{ |
| 740 |
NS_LOG_FUNCTION (this << &o); |
794 |
NS_LOG_FUNCTION (this << &o); |
|
|
795 |
NS_ASSERT (IsStateOk ()); |
| 741 |
if (!m_enable) |
796 |
if (!m_enable) |
| 742 |
{ |
797 |
{ |
| 743 |
m_metadataSkipped = true; |
798 |
m_metadataSkipped = true; |
|
|
| 748 |
// We have no items so 'AddAtEnd' is |
803 |
// We have no items so 'AddAtEnd' is |
| 749 |
// equivalent to self-assignment. |
804 |
// equivalent to self-assignment. |
| 750 |
*this = o; |
805 |
*this = o; |
|
|
806 |
NS_ASSERT (IsStateOk ()); |
| 751 |
return; |
807 |
return; |
| 752 |
} |
808 |
} |
| 753 |
if (o.m_head == 0xffff) |
809 |
if (o.m_head == 0xffff) |
|
|
| 803 |
} |
859 |
} |
| 804 |
current = item.next; |
860 |
current = item.next; |
| 805 |
} |
861 |
} |
|
|
862 |
NS_ASSERT (IsStateOk ()); |
| 806 |
} |
863 |
} |
| 807 |
void |
864 |
void |
| 808 |
PacketMetadata::AddPaddingAtEnd (uint32_t end) |
865 |
PacketMetadata::AddPaddingAtEnd (uint32_t end) |
|
|
| 817 |
PacketMetadata::RemoveAtStart (uint32_t start) |
874 |
PacketMetadata::RemoveAtStart (uint32_t start) |
| 818 |
{ |
875 |
{ |
| 819 |
NS_LOG_FUNCTION (this << start); |
876 |
NS_LOG_FUNCTION (this << start); |
|
|
877 |
NS_ASSERT (IsStateOk ()); |
| 820 |
if (!m_enable) |
878 |
if (!m_enable) |
| 821 |
{ |
879 |
{ |
| 822 |
m_metadataSkipped = true; |
880 |
m_metadataSkipped = true; |
|
|
| 873 |
current = item.next; |
931 |
current = item.next; |
| 874 |
} |
932 |
} |
| 875 |
NS_ASSERT (leftToRemove == 0); |
933 |
NS_ASSERT (leftToRemove == 0); |
|
|
934 |
NS_ASSERT (IsStateOk ()); |
| 876 |
} |
935 |
} |
| 877 |
void |
936 |
void |
| 878 |
PacketMetadata::RemoveAtEnd (uint32_t end) |
937 |
PacketMetadata::RemoveAtEnd (uint32_t end) |
| 879 |
{ |
938 |
{ |
| 880 |
NS_LOG_FUNCTION (this << end); |
939 |
NS_LOG_FUNCTION (this << end); |
|
|
940 |
NS_ASSERT (IsStateOk ()); |
| 881 |
if (!m_enable) |
941 |
if (!m_enable) |
| 882 |
{ |
942 |
{ |
| 883 |
m_metadataSkipped = true; |
943 |
m_metadataSkipped = true; |
|
|
| 936 |
current = item.prev; |
996 |
current = item.prev; |
| 937 |
} |
997 |
} |
| 938 |
NS_ASSERT (leftToRemove == 0); |
998 |
NS_ASSERT (leftToRemove == 0); |
|
|
999 |
NS_ASSERT (IsStateOk ()); |
| 939 |
} |
1000 |
} |
| 940 |
uint32_t |
1001 |
uint32_t |
| 941 |
PacketMetadata::GetTotalSize (void) const |
1002 |
PacketMetadata::GetTotalSize (void) const |