Project

General

Profile

Bug #3354 » flowtx.patch

Antti Tönkyrä, 12/18/2019 02:00 PM

View differences:

src/detect.c
DetectRunScratchpad *scratch);
static void DetectRunCleanup(DetectEngineThreadCtx *det_ctx,
Packet *p, Flow * const pflow);
static DetectTransaction GetDetectTx(const uint8_t ipproto, const AppProto alproto,
void *alstate, const uint64_t tx_id, void *tx_ptr, const int tx_end_state,
const uint8_t flow_flags);
/** \internal
*/
......
smatch = true;
#endif
DetectRunPostMatch(tv, det_ctx, p, s);
if (!(sflags & SIG_FLAG_NOALERT)) {
/* stateful sigs call PacketAlertAppend from DeStateDetectStartDetection */
if (!state_alert)
PacketAlertAppend(det_ctx, s, p, 0, alert_flags);
if (!state_alert) {
const uint8_t flow_flags = scratch->flow_flags;
void * const alstate = pflow->alstate;
const uint8_t ipproto = pflow->proto;
const AppProto alproto = pflow->alproto;
const uint64_t total_txs = AppLayerParserGetTxCnt(pflow, alstate);
uint64_t tx_id_min = AppLayerParserGetTransactionInspectId(pflow->alparser, flow_flags);
const int tx_end_state = AppLayerParserGetStateProgressCompletionStatus(alproto, flow_flags);
AppLayerGetTxIteratorFunc IterFunc = AppLayerGetTxIterator(ipproto, alproto);
AppLayerGetTxIterState state;
memset(&state, 0, sizeof(state));
AppLayerGetTxIterTuple ires = IterFunc(ipproto, alproto, alstate, tx_id_min, total_txs, &state);
if (ires.tx_ptr == NULL) {
PacketAlertAppend(det_ctx, s, p, 0, alert_flags);
} else {
DetectTransaction tx = GetDetectTx(ipproto, alproto, alstate, ires.tx_id, ires.tx_ptr, tx_end_state, flow_flags);
PacketAlertAppend(det_ctx, s, p, tx.tx_id, alert_flags);
}
}
} else {
/* apply actions even if not alerting */
DetectSignatureApplyActions(p, s, alert_flags);
    (1-1/1)