|
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 |