summaryrefslogtreecommitdiffstats
path: root/src/flow-worker.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/flow-worker.c')
-rw-r--r--src/flow-worker.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/flow-worker.c b/src/flow-worker.c
index a20e053..32fbe09 100644
--- a/src/flow-worker.c
+++ b/src/flow-worker.c
@@ -391,8 +391,16 @@ static inline void FlowWorkerStreamTCPUpdate(ThreadVars *tv, FlowWorkerThreadDat
StreamTcp(tv, p, fw->stream_thread, &fw->pq);
FLOWWORKER_PROFILING_END(p, PROFILE_FLOWWORKER_STREAM);
- if (FlowChangeProto(p->flow)) {
+ // this is the first packet that sets no payload inspection
+ bool setting_nopayload =
+ p->flow->alparser &&
+ AppLayerParserStateIssetFlag(p->flow->alparser, APP_LAYER_PARSER_NO_INSPECTION) &&
+ !(p->flags & PKT_NOPAYLOAD_INSPECTION);
+ if (FlowChangeProto(p->flow) || setting_nopayload) {
StreamTcpDetectLogFlush(tv, fw->stream_thread, p->flow, p, &fw->pq);
+ if (setting_nopayload) {
+ FlowSetNoPayloadInspectionFlag(p->flow);
+ }
AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS);
AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TC);
}
@@ -430,6 +438,10 @@ static inline void FlowWorkerStreamTCPUpdate(ThreadVars *tv, FlowWorkerThreadDat
TmqhOutputPacketpool(tv, x);
}
}
+ if (FlowChangeProto(p->flow) && p->flow->flags & FLOW_ACTION_DROP) {
+ // in case f->flags & FLOW_ACTION_DROP was set by one of the dequeued packets
+ PacketDrop(p, ACTION_DROP, PKT_DROP_REASON_FLOW_DROP);
+ }
}
static void FlowWorkerFlowTimeout(ThreadVars *tv, Packet *p, FlowWorkerThreadData *fw,