// Scan signals to reassemble()
bool payload_discard[2] = { false, false };
+ unsigned bytes_scanned[2] = { 0, 0 };
// Used by scan, reassemble and eval to communicate
uint8_t frame_type[2] = { Http2Enums::FT__NONE, Http2Enums::FT__NONE };
const StreamSplitter::Status ret_val =
implement_scan(session_data, data, length, flush_offset, source_id);
+ session_data->bytes_scanned[source_id] += (ret_val == StreamSplitter::FLUSH)?
+ *flush_offset : length;
+
if (ret_val == StreamSplitter::ABORT)
session_data->abort_flow[source_id] = true;
if (session_data->payload_discard[source_id])
{
if (flags & PKT_PDU_TAIL)
+ {
session_data->payload_discard[source_id] = false;
+ session_data->bytes_scanned[source_id] = 0;
+ }
#ifdef REG_TEST
if (HttpTestManager::use_test_output(HttpTestManager::IN_HTTP2))
StreamBuffer frame_buf { nullptr, 0 };
- if ( total > MAX_OCTETS || offset+len > total)
+ if ( offset+len > total || total != session_data->bytes_scanned[source_id])
{
assert(false);
session_data->abort_flow[source_id] = true;
// but don't create pkt_data buffer
frame_buf.data = (const uint8_t*)"";
}
+ session_data->bytes_scanned[source_id] = 0;
}
return frame_buf;