typedef struct OutputTxLogger_ {
AppProto alproto;
TxLogger LogFunc;
+ TxLoggerCondition LogCondition;
OutputCtx *output_ctx;
struct OutputTxLogger_ *next;
const char *name;
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
OutputCtx *output_ctx, int tc_log_progress,
- int ts_log_progress)
+ int ts_log_progress, TxLoggerCondition LogCondition)
{
int module_id = TmModuleGetIdByName(name);
if (module_id < 0)
op->alproto = alproto;
op->LogFunc = LogFunc;
+ op->LogCondition = LogCondition;
op->output_ctx = output_ctx;
op->name = name;
op->module_id = (TmmId) module_id;
if (!(AppLayerParserStateIssetFlag(f->alparser,
APP_LAYER_PARSER_EOF))) {
- if (tx_progress_tc < logger->tc_log_progress) {
- SCLogDebug("progress not far enough, not logging");
- logger_not_logged = 1;
- goto next;
- }
-
- if (tx_progress_ts < logger->ts_log_progress) {
- SCLogDebug("progress not far enough, not logging");
- logger_not_logged = 1;
- goto next;
+ if (logger->LogCondition) {
+ int r = logger->LogCondition(tv, p, alstate, tx, tx_id);
+ if (r == FALSE) {
+ SCLogDebug("conditions not met, not logging");
+ logger_not_logged = 1;
+ goto next;
+ }
+ } else {
+ if (tx_progress_tc < logger->tc_log_progress) {
+ SCLogDebug("progress not far enough, not logging");
+ logger_not_logged = 1;
+ goto next;
+ }
+
+ if (tx_progress_ts < logger->ts_log_progress) {
+ SCLogDebug("progress not far enough, not logging");
+ logger_not_logged = 1;
+ goto next;
+ }
}
}
}
/**
- * \brief Register a tx output module with progress.
+ * \brief Wrapper function for tx output modules.
*
* This function will register an output module so it can be
* configured with the configuration file.
*
* \retval Returns 0 on success, -1 on failure.
*/
-void OutputRegisterTxModuleWithProgress(const char *name, const char *conf_name,
+void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
- TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress)
+ TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress,
+ TxLoggerCondition TxLogCondition)
{
if (unlikely(TxLogFunc == NULL)) {
goto error;
module->conf_name = conf_name;
module->InitFunc = InitFunc;
module->TxLogFunc = TxLogFunc;
+ module->TxLogCondition = TxLogCondition;
module->alproto = alproto;
module->tc_log_progress = tc_log_progress;
module->ts_log_progress = ts_log_progress;
exit(EXIT_FAILURE);
}
-void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
+void OutputRegisterTxSubModuleWrapper(const char *parent_name,
const char *name, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *,
OutputCtx *parent_ctx), AppProto alproto, TxLogger TxLogFunc,
- int tc_log_progress, int ts_log_progress)
+ int tc_log_progress, int ts_log_progress,
+ TxLoggerCondition TxLogCondition)
{
if (unlikely(TxLogFunc == NULL)) {
goto error;
module->parent_name = parent_name;
module->InitSubFunc = InitFunc;
module->TxLogFunc = TxLogFunc;
+ module->TxLogCondition = TxLogCondition;
module->alproto = alproto;
module->tc_log_progress = tc_log_progress;
module->ts_log_progress = ts_log_progress;
exit(EXIT_FAILURE);
}
+/**
+ * \brief Register a tx output module with condition.
+ *
+ * This function will register an output module so it can be
+ * configured with the configuration file.
+ *
+ * \retval Returns 0 on success, -1 on failure.
+ */
+void OutputRegisterTxModuleWithCondition(const char *name, const char *conf_name,
+ OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
+ TxLogger TxLogFunc, TxLoggerCondition TxLogCondition)
+{
+ OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
+ TxLogFunc, 0, 0, TxLogCondition);
+}
+
+void OutputRegisterTxSubModuleWithCondition(const char *parent_name,
+ const char *name, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *,
+ OutputCtx *parent_ctx), AppProto alproto, TxLogger TxLogFunc,
+ TxLoggerCondition TxLogCondition)
+{
+ OutputRegisterTxSubModuleWrapper(parent_name, name, conf_name, InitFunc,
+ alproto, TxLogFunc, 0, 0,
+ TxLogCondition);
+}
+
+/**
+ * \brief Register a tx output module with progress.
+ *
+ * This function will register an output module so it can be
+ * configured with the configuration file.
+ *
+ * \retval Returns 0 on success, -1 on failure.
+ */
+void OutputRegisterTxModuleWithProgress(const char *name, const char *conf_name,
+ OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
+ TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress)
+{
+ OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
+ TxLogFunc, tc_log_progress, ts_log_progress,
+ NULL);
+}
+
+void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
+ const char *name, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *,
+ OutputCtx *parent_ctx), AppProto alproto, TxLogger TxLogFunc,
+ int tc_log_progress, int ts_log_progress)
+{
+ OutputRegisterTxSubModuleWrapper(parent_name, name, conf_name, InitFunc,
+ alproto, TxLogFunc, tc_log_progress,
+ ts_log_progress, NULL);
+}
+
/**
* \brief Register a tx output module.
*
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc)
{
- /* wrapper function */
- OutputRegisterTxModuleWithProgress(name, conf_name, InitFunc, alproto,
- TxLogFunc, 0, 0);
+ OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
+ TxLogFunc, 0, 0, NULL);
}
void
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx),
AppProto alproto, TxLogger TxLogFunc)
{
- /* wrapper function */
- OutputRegisterTxSubModuleWithProgress(parent_name, name, conf_name,
- InitFunc, alproto, TxLogFunc, 0, 0);
+ OutputRegisterTxSubModuleWrapper(parent_name, name, conf_name,
+ InitFunc, alproto, TxLogFunc, 0, 0, NULL);
}
/**
PacketLogger PacketLogFunc;
PacketLogCondition PacketConditionFunc;
TxLogger TxLogFunc;
+ TxLoggerCondition TxLogCondition;
FileLogger FileLogFunc;
FiledataLogger FiledataLogFunc;
FlowLogger FlowLogFunc;
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx),
AppProto alproto, TxLogger TxLogFunc);
+void OutputRegisterTxModuleWithCondition(const char *name, const char *conf_name,
+ OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
+ TxLogger TxLogFunc, TxLoggerCondition TxLogCondition);
+void OutputRegisterTxSubModuleWithCondition(const char *parent_name,
+ const char *name, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *,
+ OutputCtx *parent_ctx), AppProto alproto, TxLogger TxLogFunc,
+ TxLoggerCondition TxLogCondition);
+
void OutputRegisterTxModuleWithProgress(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress);