|
|
|
|
@ -194,6 +194,7 @@ static void SBBInit(StreamingBuffer *sb,
|
|
|
|
|
sbb2->len = data_len;
|
|
|
|
|
|
|
|
|
|
sb->head = sbb;
|
|
|
|
|
sb->sbb_size = sbb->len + sbb2->len;
|
|
|
|
|
SBB_RB_INSERT(&sb->sbb_tree, sbb);
|
|
|
|
|
SBB_RB_INSERT(&sb->sbb_tree, sbb2);
|
|
|
|
|
|
|
|
|
|
@ -221,6 +222,7 @@ static void SBBInitLeadingGap(StreamingBuffer *sb,
|
|
|
|
|
sbb->len = data_len;
|
|
|
|
|
|
|
|
|
|
sb->head = sbb;
|
|
|
|
|
sb->sbb_size = sbb->len;
|
|
|
|
|
SBB_RB_INSERT(&sb->sbb_tree, sbb);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("sbb %"PRIu64", len %u",
|
|
|
|
|
@ -255,6 +257,7 @@ static inline void ConsolidateFwd(StreamingBuffer *sb,
|
|
|
|
|
tr: [ ]
|
|
|
|
|
*/
|
|
|
|
|
if (sa->offset >= tr->offset && sa_re <= tr_re) {
|
|
|
|
|
sb->sbb_size -= sa->len;
|
|
|
|
|
sa->len = tr->len;
|
|
|
|
|
sa->offset = tr->offset;
|
|
|
|
|
sa_re = sa->offset + sa->len;
|
|
|
|
|
@ -272,6 +275,7 @@ static inline void ConsolidateFwd(StreamingBuffer *sb,
|
|
|
|
|
} else if (sa->offset <= tr->offset && sa_re >= tr_re) {
|
|
|
|
|
SCLogDebug("-> (fwd) tr %p %"PRIu64"/%u REMOVED ECLIPSED", tr, tr->offset, tr->len);
|
|
|
|
|
SBB_RB_REMOVE(tree, tr);
|
|
|
|
|
sb->sbb_size -= tr->len;
|
|
|
|
|
FREE(sb->cfg, tr, sizeof(StreamingBufferBlock));
|
|
|
|
|
/*
|
|
|
|
|
sa: [ ]
|
|
|
|
|
@ -282,11 +286,13 @@ static inline void ConsolidateFwd(StreamingBuffer *sb,
|
|
|
|
|
} else if (sa->offset < tr->offset && // starts before
|
|
|
|
|
sa_re >= tr->offset && sa_re < tr_re) // ends inside
|
|
|
|
|
{
|
|
|
|
|
// merge
|
|
|
|
|
// merge. sb->sbb_size includes both so we need to adjust that too.
|
|
|
|
|
uint32_t combined_len = sa->len + tr->len;
|
|
|
|
|
sa->len = tr_re - sa->offset;
|
|
|
|
|
sa_re = sa->offset + sa->len;
|
|
|
|
|
SCLogDebug("-> (fwd) tr %p %"PRIu64"/%u REMOVED MERGED", tr, tr->offset, tr->len);
|
|
|
|
|
SBB_RB_REMOVE(tree, tr);
|
|
|
|
|
sb->sbb_size -= (combined_len - sa->len); // remove what we added twice
|
|
|
|
|
FREE(sb->cfg, tr, sizeof(StreamingBufferBlock));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -307,6 +313,7 @@ static inline void ConsolidateBackward(StreamingBuffer *sb,
|
|
|
|
|
break; // entirely after
|
|
|
|
|
|
|
|
|
|
if (sa->offset >= tr->offset && sa_re <= tr_re) {
|
|
|
|
|
sb->sbb_size -= sa->len; // sa entirely eclipsed so remove double accounting
|
|
|
|
|
sa->len = tr->len;
|
|
|
|
|
sa->offset = tr->offset;
|
|
|
|
|
sa_re = sa->offset + sa->len;
|
|
|
|
|
@ -328,6 +335,7 @@ static inline void ConsolidateBackward(StreamingBuffer *sb,
|
|
|
|
|
if (sb->head == tr)
|
|
|
|
|
sb->head = sa;
|
|
|
|
|
SBB_RB_REMOVE(tree, tr);
|
|
|
|
|
sb->sbb_size -= tr->len; // tr entirely eclipsed so remove double accounting
|
|
|
|
|
FREE(sb->cfg, tr, sizeof(StreamingBufferBlock));
|
|
|
|
|
/*
|
|
|
|
|
sa: [ ]
|
|
|
|
|
@ -336,7 +344,8 @@ static inline void ConsolidateBackward(StreamingBuffer *sb,
|
|
|
|
|
tr: [ ]
|
|
|
|
|
*/
|
|
|
|
|
} else if (sa->offset > tr->offset && sa_re > tr_re && sa->offset <= tr_re) {
|
|
|
|
|
// merge
|
|
|
|
|
// merge. sb->sbb_size includes both so we need to adjust that too.
|
|
|
|
|
uint32_t combined_len = sa->len + tr->len;
|
|
|
|
|
sa->len = sa_re - tr->offset;
|
|
|
|
|
sa->offset = tr->offset;
|
|
|
|
|
sa_re = sa->offset + sa->len;
|
|
|
|
|
@ -344,6 +353,7 @@ static inline void ConsolidateBackward(StreamingBuffer *sb,
|
|
|
|
|
if (sb->head == tr)
|
|
|
|
|
sb->head = sa;
|
|
|
|
|
SBB_RB_REMOVE(tree, tr);
|
|
|
|
|
sb->sbb_size -= (combined_len - sa->len); // remove what we added twice
|
|
|
|
|
FREE(sb->cfg, tr, sizeof(StreamingBufferBlock));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -366,6 +376,7 @@ static int Insert(StreamingBuffer *sb, struct SBB *tree,
|
|
|
|
|
FREE(sb->cfg, sbb, sizeof(StreamingBufferBlock));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
sb->sbb_size += len; // may adjust based on consolidation below
|
|
|
|
|
if (SBB_RB_PREV(sbb) == NULL) {
|
|
|
|
|
sb->head = sbb;
|
|
|
|
|
} else {
|
|
|
|
|
@ -389,6 +400,7 @@ static void SBBFree(StreamingBuffer *sb)
|
|
|
|
|
StreamingBufferBlock *sbb = NULL, *safe = NULL;
|
|
|
|
|
RB_FOREACH_SAFE(sbb, SBB, &sb->sbb_tree, safe) {
|
|
|
|
|
SBB_RB_REMOVE(&sb->sbb_tree, sbb);
|
|
|
|
|
sb->sbb_size -= sbb->len;
|
|
|
|
|
FREE(sb->cfg, sbb, sizeof(StreamingBufferBlock));
|
|
|
|
|
}
|
|
|
|
|
sb->head = NULL;
|
|
|
|
|
@ -413,6 +425,7 @@ static void SBBPrune(StreamingBuffer *sb)
|
|
|
|
|
if (sbb->len >= shrink_by) {
|
|
|
|
|
sbb->len -= shrink_by;
|
|
|
|
|
sbb->offset += shrink_by;
|
|
|
|
|
sb->sbb_size -= shrink_by;
|
|
|
|
|
DEBUG_VALIDATE_BUG_ON(sbb->offset != sb->stream_offset);
|
|
|
|
|
}
|
|
|
|
|
sb->head = sbb;
|
|
|
|
|
@ -422,6 +435,7 @@ static void SBBPrune(StreamingBuffer *sb)
|
|
|
|
|
SBB_RB_REMOVE(&sb->sbb_tree, sbb);
|
|
|
|
|
/* either we set it again for the next sbb, or there isn't any */
|
|
|
|
|
sb->head = NULL;
|
|
|
|
|
sb->sbb_size -= sbb->len;
|
|
|
|
|
SCLogDebug("sb %p removed %p %"PRIu64", %u", sb, sbb, sbb->offset, sbb->len);
|
|
|
|
|
FREE(sb->cfg, sbb, sizeof(StreamingBufferBlock));
|
|
|
|
|
}
|
|
|
|
|
@ -941,6 +955,7 @@ static int StreamingBufferTest01(void)
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg1,(const uint8_t *)"ABCDEFGH", 8));
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg2,(const uint8_t *)"01234567", 8));
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment *seg3 = StreamingBufferAppendRaw(sb, (const uint8_t *)"QWERTY", 6);
|
|
|
|
|
@ -952,6 +967,7 @@ static int StreamingBufferTest01(void)
|
|
|
|
|
FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,seg3));
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg3,(const uint8_t *)"QWERTY", 6));
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment *seg4 = StreamingBufferAppendRaw(sb, (const uint8_t *)"KLM", 3);
|
|
|
|
|
@ -964,6 +980,7 @@ static int StreamingBufferTest01(void)
|
|
|
|
|
FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,seg4));
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg4,(const uint8_t *)"KLM", 3));
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment *seg5 = StreamingBufferAppendRaw(sb, (const uint8_t *)"!@#$%^&*()_+<>?/,.;:'[]{}-=", 27);
|
|
|
|
|
@ -977,6 +994,7 @@ static int StreamingBufferTest01(void)
|
|
|
|
|
FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,seg5));
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg5,(const uint8_t *)"!@#$%^&*()_+<>?/,.;:'[]{}-=", 27));
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment *seg6 = StreamingBufferAppendRaw(sb, (const uint8_t *)"UVWXYZ", 6);
|
|
|
|
|
@ -991,6 +1009,7 @@ static int StreamingBufferTest01(void)
|
|
|
|
|
FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,seg6));
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,seg6,(const uint8_t *)"UVWXYZ", 6));
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
SCFree(seg1);
|
|
|
|
|
@ -1022,9 +1041,11 @@ static int StreamingBufferTest02(void)
|
|
|
|
|
Dump(sb);
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSlide(sb, 6);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
@ -1039,6 +1060,7 @@ static int StreamingBufferTest02(void)
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSlide(sb, 6);
|
|
|
|
|
@ -1049,6 +1071,7 @@ static int StreamingBufferTest02(void)
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
FAIL_IF_NOT_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1074,6 +1097,8 @@ static int StreamingBufferTest03(void)
|
|
|
|
|
Dump(sb);
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 16);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
@ -1088,6 +1113,8 @@ static int StreamingBufferTest03(void)
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 22);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSlide(sb, 10);
|
|
|
|
|
@ -1098,6 +1125,8 @@ static int StreamingBufferTest03(void)
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 12);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1155,6 +1184,8 @@ static int StreamingBufferTest04(void)
|
|
|
|
|
DumpSegment(sb, &seg1);
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 22);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
/* far ahead of curve: */
|
|
|
|
|
@ -1179,6 +1210,8 @@ static int StreamingBufferTest04(void)
|
|
|
|
|
DumpSegment(sb, &seg2);
|
|
|
|
|
DumpSegment(sb, &seg3);
|
|
|
|
|
DumpSegment(sb, &seg4);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 25);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
FAIL_IF(!StreamingBufferSegmentCompareRawData(sb,&seg1,(const uint8_t *)"ABCDEFGH", 8));
|
|
|
|
|
@ -1241,16 +1274,22 @@ static int StreamingBufferTest06(void)
|
|
|
|
|
StreamingBufferSegment seg2;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg2, (const uint8_t *)"C", 1, 2) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 2);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg3, (const uint8_t *)"F", 1, 5) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 3);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg4;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg4, (const uint8_t *)"H", 1, 7) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 4);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg5;
|
|
|
|
|
@ -1261,6 +1300,8 @@ static int StreamingBufferTest06(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg6;
|
|
|
|
|
@ -1271,6 +1312,8 @@ static int StreamingBufferTest06(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1289,16 +1332,22 @@ static int StreamingBufferTest07(void)
|
|
|
|
|
StreamingBufferSegment seg2;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg2, (const uint8_t *)"D", 1, 3) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 2);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg3, (const uint8_t *)"F", 1, 5) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 3);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg4;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg4, (const uint8_t *)"H", 1, 7) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 4);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg5;
|
|
|
|
|
@ -1309,6 +1358,8 @@ static int StreamingBufferTest07(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg6;
|
|
|
|
|
@ -1319,6 +1370,8 @@ static int StreamingBufferTest07(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1337,16 +1390,22 @@ static int StreamingBufferTest08(void)
|
|
|
|
|
StreamingBufferSegment seg2;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg2, (const uint8_t *)"D", 1, 3) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 2);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg3, (const uint8_t *)"F", 1, 5) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 3);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg4;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg4, (const uint8_t *)"H", 1, 7) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 4);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg5;
|
|
|
|
|
@ -1357,6 +1416,8 @@ static int StreamingBufferTest08(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg6;
|
|
|
|
|
@ -1367,6 +1428,8 @@ static int StreamingBufferTest08(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 20);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 20);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1385,16 +1448,22 @@ static int StreamingBufferTest09(void)
|
|
|
|
|
StreamingBufferSegment seg2;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg2, (const uint8_t *)"D", 1, 3) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 2);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg3, (const uint8_t *)"H", 1, 7) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 3);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg4;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg4, (const uint8_t *)"F", 1, 5) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 4);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg5;
|
|
|
|
|
@ -1405,6 +1474,8 @@ static int StreamingBufferTest09(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg6;
|
|
|
|
|
@ -1415,6 +1486,8 @@ static int StreamingBufferTest09(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
@ -1437,6 +1510,8 @@ static int StreamingBufferTest10(void)
|
|
|
|
|
StreamingBufferSegment seg3;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg3, (const uint8_t *)"H", 1, 7) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 3);
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg4;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg4, (const uint8_t *)"B", 1, 1) != 0);
|
|
|
|
|
@ -1448,6 +1523,8 @@ static int StreamingBufferTest10(void)
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg6, (const uint8_t *)"G", 1, 6) != 0);
|
|
|
|
|
Dump(sb);
|
|
|
|
|
FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 6);
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg7;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg7, (const uint8_t *)"ABCDEFGHIJ", 10, 0) != 0);
|
|
|
|
|
@ -1457,6 +1534,8 @@ static int StreamingBufferTest10(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
|
|
|
|
|
StreamingBufferSegment seg8;
|
|
|
|
|
FAIL_IF(StreamingBufferInsertAt(sb, &seg8, (const uint8_t *)"abcdefghij", 10, 0) != 0);
|
|
|
|
|
@ -1467,6 +1546,8 @@ static int StreamingBufferTest10(void)
|
|
|
|
|
FAIL_IF(sbb1->offset != 0);
|
|
|
|
|
FAIL_IF(sbb1->len != 10);
|
|
|
|
|
FAIL_IF(SBB_RB_NEXT(sbb1));
|
|
|
|
|
FAIL_IF_NULL(sb->head);
|
|
|
|
|
FAIL_IF_NOT(sb->sbb_size == 10);
|
|
|
|
|
|
|
|
|
|
StreamingBufferFree(sb);
|
|
|
|
|
PASS;
|
|
|
|
|
|