1.1 --- a/src/common/packet-metadata.cc Wed May 07 15:02:07 2008 -0700
1.2 +++ b/src/common/packet-metadata.cc Wed May 07 15:18:33 2008 -0700
1.3 @@ -178,6 +178,14 @@
1.4 value >>= 8;
1.5 buffer[1] = value;
1.6 }
1.7 +void
1.8 +PacketMetadata::Append32 (uint32_t value, uint8_t *buffer)
1.9 +{
1.10 + buffer[0] = value & 0xff;
1.11 + buffer[1] = (value >> 8) & 0xff;
1.12 + buffer[2] = (value >> 16) & 0xff;
1.13 + buffer[3] = (value >> 24) & 0xff;
1.14 +}
1.15 bool
1.16 PacketMetadata::TryToAppend16 (uint16_t value, uint8_t **pBuffer, uint8_t *end)
1.17 {
1.18 @@ -397,7 +405,7 @@
1.19 NS_ASSERT (m_used != item->prev && m_used != item->next);
1.20 uint32_t typeUidSize = GetUleb128Size (item->typeUid);
1.21 uint32_t sizeSize = GetUleb128Size (item->size);
1.22 - uint32_t n = typeUidSize + sizeSize + 2 + 2 + 2;
1.23 + uint32_t n = 2 + 2 + typeUidSize + sizeSize + 2;
1.24 if (m_used + n > m_data->m_size ||
1.25 (m_head != 0xffff &&
1.26 m_data->m_count != 1 &&
1.27 @@ -426,43 +434,40 @@
1.28 NS_ASSERT (m_data != 0);
1.29 uint32_t typeUid = ((item->typeUid & 0x1) == 0x1)?item->typeUid:item->typeUid+1;
1.30 NS_ASSERT (m_used != prev && m_used != next);
1.31 - append:
1.32 - uint8_t *start = &m_data->m_data[m_used];
1.33 - uint8_t *end = &m_data->m_data[m_data->m_size];
1.34 - if (end - start >= 14 &&
1.35 - (m_head == 0xffff ||
1.36 - m_data->m_count == 1 ||
1.37 - m_used == m_data->m_dirtyEnd))
1.38 +
1.39 + uint32_t typeUidSize = GetUleb128Size (typeUid);
1.40 + uint32_t sizeSize = GetUleb128Size (item->size);
1.41 + uint32_t fragStartSize = GetUleb128Size (extraItem->fragmentStart);
1.42 + uint32_t fragEndSize = GetUleb128Size (extraItem->fragmentEnd);
1.43 + uint32_t n = 2 + 2 + typeUidSize + sizeSize + 2 + fragStartSize + fragEndSize + 4;
1.44 +
1.45 + if (m_used + n > m_data->m_size ||
1.46 + (m_head != 0xffff &&
1.47 + m_data->m_count != 1 &&
1.48 + m_used != m_data->m_dirtyEnd))
1.49 {
1.50 - uint8_t *buffer = start;
1.51 -
1.52 - Append16 (next, buffer);
1.53 - buffer += 2;
1.54 - Append16 (prev, buffer);
1.55 - buffer += 2;
1.56 - if (TryToAppend (typeUid, &buffer, end) &&
1.57 - TryToAppend (item->size, &buffer, end) &&
1.58 - TryToAppend16 (item->chunkUid, &buffer, end) &&
1.59 - TryToAppend (extraItem->fragmentStart, &buffer, end) &&
1.60 - TryToAppend (extraItem->fragmentEnd, &buffer, end) &&
1.61 - TryToAppend32 (extraItem->packetUid, &buffer, end))
1.62 - {
1.63 - uintptr_t written = buffer - start;
1.64 - NS_ASSERT (written <= 0xffff);
1.65 - NS_ASSERT (written >= 14);
1.66 - return written;
1.67 - }
1.68 + ReserveCopy (n);
1.69 }
1.70
1.71 - uint32_t n = GetUleb128Size (typeUid);
1.72 - n += GetUleb128Size (item->size);
1.73 - n += 2;
1.74 - n += GetUleb128Size (extraItem->fragmentStart);
1.75 - n += GetUleb128Size (extraItem->fragmentEnd);
1.76 - n += 4;
1.77 - n += 2 + 2;
1.78 - ReserveCopy (n);
1.79 - goto append;
1.80 + uint8_t *buffer = &m_data->m_data[m_used];
1.81 +
1.82 + Append16 (next, buffer);
1.83 + buffer += 2;
1.84 + Append16 (prev, buffer);
1.85 + buffer += 2;
1.86 + AppendValue (typeUid, buffer);
1.87 + buffer += typeUidSize;
1.88 + AppendValue (item->size, buffer);
1.89 + buffer += sizeSize;
1.90 + Append16 (item->chunkUid, buffer);
1.91 + buffer += 2;
1.92 + AppendValue (extraItem->fragmentStart, buffer);
1.93 + buffer += fragStartSize;
1.94 + AppendValue (extraItem->fragmentEnd, buffer);
1.95 + buffer += fragEndSize;
1.96 + Append32 (extraItem->packetUid, buffer);
1.97 +
1.98 + return n;
1.99 }
1.100
1.101 void
2.1 --- a/src/common/packet-metadata.h Wed May 07 15:02:07 2008 -0700
2.2 +++ b/src/common/packet-metadata.h Wed May 07 15:18:33 2008 -0700
2.3 @@ -252,6 +252,7 @@
2.4 inline uint32_t GetUleb128Size (uint32_t value) const;
2.5 uint32_t ReadUleb128 (const uint8_t **pBuffer) const;
2.6 inline void Append16 (uint16_t value, uint8_t *buffer);
2.7 + inline void Append32 (uint32_t value, uint8_t *buffer);
2.8 inline bool TryToAppend (uint32_t value, uint8_t **pBuffer, uint8_t *end);
2.9 inline bool TryToAppend32 (uint32_t value, uint8_t **pBuffer, uint8_t *end);
2.10 inline bool TryToAppend16 (uint16_t value, uint8_t **pBuffer, uint8_t *end);