// incompatible engine->alproto with flow alproto
goto next;
}
- if (engine->ctx.tx_min_progress > tx->tx_progress)
- break;
- if (tx->tx_progress > engine->ctx.tx_min_progress) {
- /* if state value is at or beyond engine state, we can skip it. It means we ran at
- * least once already. */
- if (tx->detect_progress > engine->ctx.tx_min_progress) {
- SCLogDebug("tx already marked progress as beyond engine: %u > %u",
- tx->detect_progress, engine->ctx.tx_min_progress);
- goto next;
+
+ if (engine->ctx.tx_min_progress != -1) {
+ if (engine->ctx.tx_min_progress > tx->tx_progress)
+ break;
+ if (tx->tx_progress > engine->ctx.tx_min_progress) {
+ /* if state value is at or beyond engine state, we can skip it. It means we ran at
+ * least once already. */
+ if (tx->detect_progress > engine->ctx.tx_min_progress) {
+ SCLogDebug("tx already marked progress as beyond engine: %u > %u",
+ tx->detect_progress, engine->ctx.tx_min_progress);
+ goto next;
+ }
}
- }
- PREFILTER_PROFILING_START(det_ctx);
- engine->cb.PrefilterTx(
- det_ctx, engine->pectx, p, p->flow, tx_ptr, tx->tx_id, tx->tx_data_ptr, flow_flags);
- PREFILTER_PROFILING_END(det_ctx, engine->gid);
-
- if (tx->tx_progress > engine->ctx.tx_min_progress && engine->is_last_for_progress) {
- /* track with an offset of one, so that tx->progress 0 complete is tracked
- * as 1, progress 1 as 2, etc. This is to allow 0 to mean: nothing tracked, even
- * though a parser may use 0 as a valid value. */
- tx->detect_progress = engine->ctx.tx_min_progress + 1;
- SCLogDebug("tx->tx_progress %d engine->ctx.tx_min_progress %d "
- "engine->is_last_for_progress %d => tx->detect_progress updated to %02x",
- tx->tx_progress, engine->ctx.tx_min_progress, engine->is_last_for_progress,
- tx->detect_progress);
+ PREFILTER_PROFILING_START(det_ctx);
+ engine->cb.PrefilterTx(det_ctx, engine->pectx, p, p->flow, tx_ptr, tx->tx_id,
+ tx->tx_data_ptr, flow_flags);
+ PREFILTER_PROFILING_END(det_ctx, engine->gid);
+
+ if (tx->tx_progress > engine->ctx.tx_min_progress && engine->is_last_for_progress) {
+ /* track with an offset of one, so that tx->progress 0 complete is tracked
+ * as 1, progress 1 as 2, etc. This is to allow 0 to mean: nothing tracked, even
+ * though a parser may use 0 as a valid value. */
+ tx->detect_progress = engine->ctx.tx_min_progress + 1;
+ SCLogDebug("tx->tx_progress %d engine->ctx.tx_min_progress %d "
+ "engine->is_last_for_progress %d => tx->detect_progress updated to %02x",
+ tx->tx_progress, engine->ctx.tx_min_progress, engine->is_last_for_progress,
+ tx->detect_progress);
+ }
+ } else {
+ PREFILTER_PROFILING_START(det_ctx);
+ engine->cb.PrefilterTx(det_ctx, engine->pectx, p, p->flow, tx_ptr, tx->tx_id,
+ tx->tx_data_ptr, flow_flags);
+ PREFILTER_PROFILING_END(det_ctx, engine->gid);
}
next:
if (engine->is_last)
e->pectx = pectx;
e->alproto = alproto;
// TODO change function prototype ?
- DEBUG_VALIDATE_BUG_ON(tx_min_progress > UINT8_MAX);
+ DEBUG_VALIDATE_BUG_ON(tx_min_progress > INT8_MAX);
e->tx_min_progress = (uint8_t)tx_min_progress;
e->Free = FreeFunc;
PrefilterEngine *prev_engine = NULL;
engine = sgh->tx_engines;
do {
- BUG_ON(engine->ctx.tx_min_progress < last_tx_progress);
+ if (engine->ctx.tx_min_progress != -1)
+ BUG_ON(engine->ctx.tx_min_progress < last_tx_progress);
if (engine->alproto == a) {
if (last_tx_progress_set && engine->ctx.tx_min_progress > last_tx_progress) {
if (prev_engine) {