app-layer: add logger flags to AppLayerTxData

pull/5169/head
Victor Julien 6 years ago
parent 411f428a38
commit c797c9f09c

@ -54,12 +54,16 @@ impl AppLayerTxConfig {
pub struct AppLayerTxData { pub struct AppLayerTxData {
/// config: log flags /// config: log flags
pub config: AppLayerTxConfig, pub config: AppLayerTxConfig,
/// logger flags for tx logging api
logged: LoggerFlags,
} }
impl AppLayerTxData { impl AppLayerTxData {
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
config: AppLayerTxConfig::new(), config: AppLayerTxConfig::new(),
logged: LoggerFlags::new(),
} }
} }
} }
@ -339,7 +343,8 @@ impl AppLayerGetTxIterTuple {
} }
/// LoggerFlags tracks which loggers have already been executed. /// LoggerFlags tracks which loggers have already been executed.
#[derive(Debug)] #[repr(C)]
#[derive(Debug,PartialEq)]
pub struct LoggerFlags { pub struct LoggerFlags {
flags: u32, flags: u32,
} }

@ -207,6 +207,7 @@ static TmEcode OutputTxLog(ThreadVars *tv, Packet *p, void *thread_data)
break; break;
void * const tx = ires.tx_ptr; void * const tx = ires.tx_ptr;
tx_id = ires.tx_id; tx_id = ires.tx_id;
AppLayerTxData *txd = AppLayerParserGetTxData(ipproto, alproto, tx);
if (list[ALPROTO_UNKNOWN] != 0) { if (list[ALPROTO_UNKNOWN] != 0) {
OutputTxLogList0(tv, op_thread_data, p, f, tx, tx_id); OutputTxLogList0(tv, op_thread_data, p, f, tx, tx_id);
@ -214,7 +215,7 @@ static TmEcode OutputTxLog(ThreadVars *tv, Packet *p, void *thread_data)
goto next_tx; 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; const LoggerId tx_logged_old = tx_logged;
SCLogDebug("logger: expect %08x, have %08x", logger_expectation, tx_logged); SCLogDebug("logger: expect %08x, have %08x", logger_expectation, tx_logged);
if (tx_logged == logger_expectation) { if (tx_logged == logger_expectation) {
@ -286,8 +287,12 @@ next_logger:
if (tx_logged != tx_logged_old) { if (tx_logged != tx_logged_old) {
SCLogDebug("logger: storing %08x (was %08x)", SCLogDebug("logger: storing %08x (was %08x)",
tx_logged, tx_logged_old); tx_logged, tx_logged_old);
AppLayerParserSetTxLogged(p->proto, alproto, alstate, tx, if (txd != NULL) {
tx_logged); 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 /* If all loggers logged set a flag and update the last tx_id

Loading…
Cancel
Save