pub struct AppLayerTxData {
/// config: log flags
pub config: AppLayerTxConfig,
+
+ /// logger flags for tx logging api
+ logged: LoggerFlags,
}
impl AppLayerTxData {
pub fn new() -> Self {
Self {
config: AppLayerTxConfig::new(),
+ logged: LoggerFlags::new(),
}
}
}
}
/// LoggerFlags tracks which loggers have already been executed.
-#[derive(Debug)]
+#[repr(C)]
+#[derive(Debug,PartialEq)]
pub struct LoggerFlags {
flags: u32,
}
break;
void * const tx = ires.tx_ptr;
tx_id = ires.tx_id;
+ AppLayerTxData *txd = AppLayerParserGetTxData(ipproto, alproto, tx);
if (list[ALPROTO_UNKNOWN] != 0) {
OutputTxLogList0(tv, op_thread_data, p, f, tx, tx_id);
goto next_tx;
}
- LoggerId tx_logged = AppLayerParserGetTxLogged(f, alstate, tx);
+ LoggerId tx_logged = txd ? txd->logged.flags : AppLayerParserGetTxLogged(f, alstate, tx);
const LoggerId tx_logged_old = tx_logged;
SCLogDebug("logger: expect %08x, have %08x", logger_expectation, tx_logged);
if (tx_logged == logger_expectation) {
if (tx_logged != tx_logged_old) {
SCLogDebug("logger: storing %08x (was %08x)",
tx_logged, tx_logged_old);
- AppLayerParserSetTxLogged(p->proto, alproto, alstate, tx,
- tx_logged);
+ if (txd != NULL) {
+ txd->logged.flags |= tx_logged;
+ } else {
+ AppLayerParserSetTxLogged(p->proto, alproto, alstate, tx,
+ tx_logged);
+ }
}
/* If all loggers logged set a flag and update the last tx_id