TmEcode Detect(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQueue *postpq);
TmEcode StreamTcp (ThreadVars *, Packet *, void *, PacketQueue *, PacketQueue *);
+static void FlowPruneFiles(Packet *p)
+{
+ if (p->flow && p->flow->alstate) {
+ Flow *f = p->flow;
+ FileContainer *fc = AppLayerParserGetFiles(p->proto, f->alproto,
+ f->alstate, PKT_IS_TOSERVER(p) ? STREAM_TOSERVER : STREAM_TOCLIENT);
+ if (fc != NULL) {
+ FilePrune(fc);
+ }
+ }
+}
+
static TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *preq, PacketQueue *unused)
{
FlowWorkerThreadData *fw = data;
// Outputs.
OutputLoggerLog(tv, p, fw->output_thread);
+ /* Prune any stored files. */
+ FlowPruneFiles(p);
+
/* Release tcp segments. Done here after alerting can use them. */
if (p->flow != NULL && p->proto == IPPROTO_TCP) {
FLOWWORKER_PROFILING_START(p, PROFILE_FLOWWORKER_TCPPRUNE);
OutputFileLogFfc(tv, op_thread_data, p, ffc_ts, file_close_ts, file_trunc, STREAM_TOSERVER);
OutputFileLogFfc(tv, op_thread_data, p, ffc_tc, file_close_tc, file_trunc, STREAM_TOCLIENT);
- if (ffc_ts && (p->flowflags & FLOW_PKT_TOSERVER))
- FilePrune(ffc_ts);
- if (ffc_tc && (p->flowflags & FLOW_PKT_TOCLIENT))
- FilePrune(ffc_tc);
-
return TM_ECODE_OK;
}