|
|
|
|
@ -619,7 +619,7 @@ static TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data)
|
|
|
|
|
if (p->proto == IPPROTO_TCP) {
|
|
|
|
|
StreamTcpSessionCleanup(p->flow->protoctx);
|
|
|
|
|
}
|
|
|
|
|
} else if (p->proto == IPPROTO_TCP && p->flow->protoctx) {
|
|
|
|
|
} else if (p->proto == IPPROTO_TCP && p->flow->protoctx && p->flags & PKT_STREAM_EST) {
|
|
|
|
|
FramesPrune(p->flow, p);
|
|
|
|
|
FLOWWORKER_PROFILING_START(p, PROFILE_FLOWWORKER_TCPPRUNE);
|
|
|
|
|
StreamTcpPruneSession(p->flow, p->flowflags & FLOW_PKT_TOSERVER ?
|
|
|
|
|
@ -631,18 +631,19 @@ static TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data)
|
|
|
|
|
|
|
|
|
|
if ((PKT_IS_PSEUDOPKT(p)) ||
|
|
|
|
|
(p->flow->flags & (FLOW_TS_APP_UPDATED | FLOW_TC_APP_UPDATED))) {
|
|
|
|
|
if (PKT_IS_TOSERVER(p)) {
|
|
|
|
|
if (PKT_IS_PSEUDOPKT(p) || (p->flow->flags & (FLOW_TS_APP_UPDATED))) {
|
|
|
|
|
AppLayerParserTransactionsCleanup(p->flow, STREAM_TOSERVER);
|
|
|
|
|
p->flow->flags &= ~FLOW_TS_APP_UPDATED;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (PKT_IS_PSEUDOPKT(p) || (p->flow->flags & (FLOW_TC_APP_UPDATED))) {
|
|
|
|
|
AppLayerParserTransactionsCleanup(p->flow, STREAM_TOCLIENT);
|
|
|
|
|
p->flow->flags &= ~FLOW_TC_APP_UPDATED;
|
|
|
|
|
if ((p->flags & PKT_STREAM_EST) || p->proto != IPPROTO_TCP) {
|
|
|
|
|
if (PKT_IS_TOSERVER(p)) {
|
|
|
|
|
if (PKT_IS_PSEUDOPKT(p) || (p->flow->flags & (FLOW_TS_APP_UPDATED))) {
|
|
|
|
|
AppLayerParserTransactionsCleanup(p->flow, STREAM_TOSERVER);
|
|
|
|
|
p->flow->flags &= ~FLOW_TS_APP_UPDATED;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (PKT_IS_PSEUDOPKT(p) || (p->flow->flags & (FLOW_TC_APP_UPDATED))) {
|
|
|
|
|
AppLayerParserTransactionsCleanup(p->flow, STREAM_TOCLIENT);
|
|
|
|
|
p->flow->flags &= ~FLOW_TC_APP_UPDATED;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
SCLogDebug("not pseudo, no app update: skip");
|
|
|
|
|
}
|
|
|
|
|
|