void TmModuleLogDnsLogRegister (void)
{
- tmm_modules[TMM_LOGDNSLOG].name = MODULE_NAME;
- tmm_modules[TMM_LOGDNSLOG].ThreadInit = LogDnsLogThreadInit;
- tmm_modules[TMM_LOGDNSLOG].ThreadExitPrintStats = LogDnsLogExitPrintStats;
- tmm_modules[TMM_LOGDNSLOG].ThreadDeinit = LogDnsLogThreadDeinit;
- tmm_modules[TMM_LOGDNSLOG].RegisterTests = NULL;
- tmm_modules[TMM_LOGDNSLOG].cap_flags = 0;
- tmm_modules[TMM_LOGDNSLOG].flags = TM_FLAG_LOGAPI_TM;
-
OutputRegisterTxModule(MODULE_NAME, "dns-log", LogDnsLogInitCtx,
- ALPROTO_DNS, LogDnsLogger);
+ ALPROTO_DNS, LogDnsLogger, LogDnsLogThreadInit, LogDnsLogThreadDeinit,
+ LogDnsLogExitPrintStats);
/* enable the logger for the app layer */
SCLogDebug("registered %s", MODULE_NAME);
tmm_modules[TMM_LOGHTTPLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterTxModule(MODULE_NAME, "http-log", LogHttpLogInitCtx,
- ALPROTO_HTTP, LogHttpLogger);
+ ALPROTO_HTTP, LogHttpLogger, NULL, NULL, NULL);
}
#define LOG_HTTP_MAXN_NODES 64
/* register as separate module */
OutputRegisterTxModule("JsonHttpLog", "http-json-log", OutputHttpLogInit,
- ALPROTO_HTTP, JsonHttpLogger);
+ ALPROTO_HTTP, JsonHttpLogger, NULL, NULL, NULL);
/* also register as child of eve-log */
OutputRegisterTxSubModule("eve-log", "JsonHttpLog", "eve-log.http", OutputHttpLogInitSub,
tmm_modules[TMM_JSONSMTPLOG].flags = TM_FLAG_LOGAPI_TM;
/* register as separate module */
- OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log",
- OutputSmtpLogInit, ALPROTO_SMTP,
- JsonSmtpLogger);
+ OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log", OutputSmtpLogInit,
+ ALPROTO_SMTP, JsonSmtpLogger, NULL, NULL, NULL);
/* also register as child of eve-log */
OutputRegisterTxSubModule("eve-log", "JsonSmtpLog",
uint32_t id;
int tc_log_progress;
int ts_log_progress;
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *);
+ void (*ThreadExitPrintStats)(ThreadVars *, void *);
} OutputTxLogger;
static OutputTxLogger *list = NULL;
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
OutputCtx *output_ctx, int tc_log_progress,
- int ts_log_progress, TxLoggerCondition LogCondition)
+ int ts_log_progress, TxLoggerCondition LogCondition,
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+ void (*ThreadExitPrintStats)(ThreadVars *, void *))
{
+#if 0
int module_id = TmModuleGetIdByName(name);
if (module_id < 0)
return -1;
+#endif
if (!(AppLayerParserIsTxAware(alproto))) {
SCLogNotice("%s logger not enabled: protocol %s is disabled",
op->LogCondition = LogCondition;
op->output_ctx = output_ctx;
op->name = name;
+#if 0
op->module_id = (TmmId) module_id;
+#endif
+ op->ThreadInit = ThreadInit;
+ op->ThreadDeinit = ThreadDeinit;
+ op->ThreadExitPrintStats = ThreadExitPrintStats;
if (tc_log_progress < 0) {
op->tc_log_progress =
OutputTxLogger *logger = list;
while (logger) {
- TmModule *tm_module = TmModuleGetByName((char *)logger->name);
- if (tm_module == NULL) {
- SCLogError(SC_ERR_INVALID_ARGUMENT,
+
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **) = NULL;
+
+ if (logger->ThreadInit) {
+ SCLogNotice("Logger %s has ThreadInit.", logger->name);
+ ThreadInit = logger->ThreadInit;
+ } else {
+ SCLogNotice("Logger %s DOES NOT have ThreadInit.", logger->name);
+ }
+
+ if (ThreadInit == NULL) {
+ TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+ if (tm_module == NULL) {
+ SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
+ }
+ ThreadInit = tm_module->ThreadInit;
}
- if (tm_module->ThreadInit) {
+ if (ThreadInit) {
void *retptr = NULL;
- if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
+ if (ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
/* todo */ BUG_ON(ts == NULL);
memset(ts, 0x00, sizeof(*ts));
OutputTxLogger *logger = list;
while (logger && store) {
- TmModule *tm_module = TmModuleGetByName((char *)logger->name);
- if (tm_module == NULL) {
- SCLogError(SC_ERR_INVALID_ARGUMENT,
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *) = NULL;
+
+ if (logger->ThreadDeinit) {
+ ThreadDeinit = logger->ThreadDeinit;
+ }
+
+ if (ThreadDeinit == NULL) {
+ TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+ if (tm_module == NULL) {
+ SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
+ }
+ ThreadDeinit = tm_module->ThreadDeinit;
}
- if (tm_module->ThreadDeinit) {
- tm_module->ThreadDeinit(tv, store->thread_data);
+ if (ThreadDeinit) {
+ ThreadDeinit(tv, store->thread_data);
}
OutputLoggerThreadStore *next_store = store->next;
OutputTxLogger *logger = list;
while (logger && store) {
- TmModule *tm_module = TmModuleGetByName((char *)logger->name);
- if (tm_module == NULL) {
- SCLogError(SC_ERR_INVALID_ARGUMENT,
+ void (*ThreadExitPrintStats)(ThreadVars *, void *) = NULL;
+
+ if (logger->ThreadExitPrintStats) {
+ ThreadExitPrintStats = logger->ThreadExitPrintStats;
+ }
+
+ if (ThreadExitPrintStats == NULL) {
+ TmModule *tm_module = TmModuleGetByName((char *)logger->name);
+ if (tm_module == NULL) {
+ SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
+ }
+ ThreadExitPrintStats = tm_module->ThreadExitPrintStats;
}
- if (tm_module->ThreadExitPrintStats) {
- tm_module->ThreadExitPrintStats(tv, store->thread_data);
+ if (ThreadExitPrintStats) {
+ ThreadExitPrintStats(tv, store->thread_data);
}
logger = logger->next;
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
OutputCtx *, int tc_log_progress, int ts_log_progress,
- TxLoggerCondition LogCondition);
+ TxLoggerCondition LogCondition,
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+ void (*ThreadExitPrintStats)(ThreadVars *, void *));
void TmModuleTxLoggerRegister (void);
void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress,
- TxLoggerCondition TxLogCondition)
+ TxLoggerCondition TxLogCondition,
+ TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
+ TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
+ void (*ThreadExitPrintStats)(ThreadVars *, void *))
{
if (unlikely(TxLogFunc == NULL)) {
goto error;
module->alproto = alproto;
module->tc_log_progress = tc_log_progress;
module->ts_log_progress = ts_log_progress;
+ module->ThreadInit = ThreadInit;
+ module->ThreadDeinit = ThreadDeinit;
+ module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Tx logger \"%s\" registered.", name);
TxLogger TxLogFunc, TxLoggerCondition TxLogCondition)
{
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
- TxLogFunc, -1, -1, TxLogCondition);
+ TxLogFunc, -1, -1, TxLogCondition, NULL, NULL,
+ NULL);
}
void OutputRegisterTxSubModuleWithCondition(const char *parent_name,
{
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
TxLogFunc, tc_log_progress, ts_log_progress,
- NULL);
+ NULL, NULL, NULL, NULL);
}
void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
void
OutputRegisterTxModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
- TxLogger TxLogFunc)
+ TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *),
+ void (*ThreadExitPrintStats)(ThreadVars *, void *))
{
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
- TxLogFunc, -1, -1, NULL);
+ TxLogFunc, -1, -1, NULL, ThreadInit,
+ ThreadDeinit, ThreadExitPrintStats);
}
void
OutputCtx *(*InitFunc)(ConfNode *);
OutputCtx *(*InitSubFunc)(ConfNode *, OutputCtx *parent_ctx);
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *);
+ void (*ThreadExitPrintStats)(ThreadVars *, void *);
+
PacketLogger PacketLogFunc;
PacketLogCondition PacketConditionFunc;
TxLogger TxLogFunc;
void OutputRegisterTxModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
- TxLogger TxLogFunc);
+ TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
+ TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
+ void (*ThreadExitPrintStats)(ThreadVars *, void *));
+
void OutputRegisterTxSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx),
AppProto alproto, TxLogger TxLogFunc);
/* free list for our outputs */
typedef struct OutputFreeList_ {
+#if 0
TmModule *tm_module;
+#endif
+ OutputModule *output_module;
OutputCtx *output_ctx;
TAILQ_ENTRY(OutputFreeList_) entries;
{
OutputFreeList *output;
while ((output = TAILQ_FIRST(&output_free_list))) {
- SCLogDebug("output %s %p %p", output->tm_module->name, output, output->output_ctx);
+#if 0
+ SCLogNotice("output %s %p %p", output->tm_module->name, output, output->output_ctx);
+#endif
+ SCLogDebug("output %s %p %p", output->output_module->name, output,
+ output->output_ctx);
if (output->output_ctx != NULL && output->output_ctx->DeInit != NULL)
output->output_ctx->DeInit(output->output_ctx);
* the output ctx at shutdown and unix socket reload */
static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx)
{
+#if 0
TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name);
exit(EXIT_FAILURE);
}
+#endif
OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList));
if (unlikely(fl_output == NULL))
return;
+#if 0
fl_output->tm_module = tm_module;
+#endif
+ fl_output->output_module = module;
fl_output->output_ctx = output_ctx;
TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries);
}
return;
}
+#if 0
TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name);
exit(EXIT_FAILURE);
}
- if (strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0)
+ /* XXX What to do here? */
+ if (tm_module != NULL && strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0)
debuglog_enabled = 1;
+#endif
if (module->PacketLogFunc) {
SCLogDebug("%s is a packet logger", module->name);
SCLogDebug("%s is a tx logger", module->name);
OutputRegisterTxLogger(module->name, module->alproto,
module->TxLogFunc, output_ctx, module->tc_log_progress,
- module->ts_log_progress, module->TxLogCondition);
+ module->ts_log_progress, module->TxLogCondition,
+ module->ThreadInit, module->ThreadDeinit,
+ module->ThreadExitPrintStats);
/* need one instance of the tx logger module */
if (tx_logger_module == NULL) {
if (unlikely(runmode_output == NULL))
return;
runmode_output->name = module->name;
+#if 0
runmode_output->tm_module = tm_module;
+#endif
runmode_output->output_ctx = output_ctx;
InsertInRunModeOutputs(runmode_output);
}
CASE_CODE (TMM_ALERTSYSLOG);
CASE_CODE (TMM_LOGDROPLOG);
CASE_CODE (TMM_RESPONDREJECT);
- CASE_CODE (TMM_LOGDNSLOG);
CASE_CODE (TMM_LOGHTTPLOG);
CASE_CODE (TMM_LOGTLSLOG);
CASE_CODE (TMM_LOGTCPDATALOG);
TMM_ALERTSYSLOG,
TMM_LOGDROPLOG,
TMM_RESPONDREJECT,
- TMM_LOGDNSLOG,
TMM_LOGHTTPLOG,
TMM_LOGTLSLOG,
TMM_LOGTCPDATALOG,