From dacb860d24f221fd7ad5a3fc775ad35f556717e0 Mon Sep 17 00:00:00 2001 From: Mats Klepsland Date: Wed, 4 May 2016 12:35:06 +0200 Subject: [PATCH] dns: register logger functions --- src/app-layer-dns-common.c | 15 +++++++++++++++ src/app-layer-dns-common.h | 3 +++ src/app-layer-dns-tcp.c | 2 ++ src/app-layer-dns-udp.c | 2 ++ 4 files changed, 22 insertions(+) diff --git a/src/app-layer-dns-common.c b/src/app-layer-dns-common.c index d74547ba21..16a2252b4c 100644 --- a/src/app-layer-dns-common.c +++ b/src/app-layer-dns-common.c @@ -236,6 +236,21 @@ int DNSGetAlstateProgress(void *tx, uint8_t direction) } } +void DNSSetTxLogged(void *alstate, void *tx, uint32_t logger) +{ + DNSTransaction *dns_tx = (DNSTransaction *)tx; + dns_tx->logged |= logger; +} + +int DNSGetTxLogged(void *alstate, void *tx, uint32_t logger) +{ + DNSTransaction *dns_tx = (DNSTransaction *)tx; + if (dns_tx->logged & logger) + return 1; + + return 0; +} + /** \brief get value for 'complete' status in DNS * * For DNS we use a simple bool. 1 means done. diff --git a/src/app-layer-dns-common.h b/src/app-layer-dns-common.h index df68abcfe7..a3bdd9351d 100644 --- a/src/app-layer-dns-common.h +++ b/src/app-layer-dns-common.h @@ -191,6 +191,7 @@ typedef struct DNSAnswerEntry_ { typedef struct DNSTransaction_ { uint16_t tx_num; /**< internal: id */ uint16_t tx_id; /**< transaction id */ + uint32_t logged; /**< flags for loggers done logging */ uint8_t replied; /**< bool indicating request is replied to. */ uint8_t reply_lost; @@ -253,6 +254,8 @@ void DNSAppLayerRegisterGetEventInfo(uint8_t ipproto, AppProto alproto); void *DNSGetTx(void *alstate, uint64_t tx_id); uint64_t DNSGetTxCnt(void *alstate); +void DNSSetTxLogged(void *alstate, void *tx, uint32_t logger); +int DNSGetTxLogged(void *alstate, void *tx, uint32_t logger); int DNSGetAlstateProgress(void *tx, uint8_t direction); int DNSGetAlstateProgressCompletionStatus(uint8_t direction); diff --git a/src/app-layer-dns-tcp.c b/src/app-layer-dns-tcp.c index 54c34ba6a3..dbce7ce30a 100644 --- a/src/app-layer-dns-tcp.c +++ b/src/app-layer-dns-tcp.c @@ -662,6 +662,8 @@ void RegisterDNSTCPParsers(void) AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_DNS, DNSGetTx); AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_DNS, DNSGetTxCnt); + AppLayerParserRegisterLoggerFuncs(IPPROTO_TCP, ALPROTO_DNS, DNSGetTxLogged, + DNSSetTxLogged); AppLayerParserRegisterGetStateProgressFunc(IPPROTO_TCP, ALPROTO_DNS, DNSGetAlstateProgress); AppLayerParserRegisterGetStateProgressCompletionStatus(ALPROTO_DNS, diff --git a/src/app-layer-dns-udp.c b/src/app-layer-dns-udp.c index ffe61aa8d9..77a6cb3c77 100644 --- a/src/app-layer-dns-udp.c +++ b/src/app-layer-dns-udp.c @@ -420,6 +420,8 @@ void RegisterDNSUDPParsers(void) DNSGetTx); AppLayerParserRegisterGetTxCnt(IPPROTO_UDP, ALPROTO_DNS, DNSGetTxCnt); + AppLayerParserRegisterLoggerFuncs(IPPROTO_UDP, ALPROTO_DNS, DNSGetTxLogged, + DNSSetTxLogged); AppLayerParserRegisterGetStateProgressFunc(IPPROTO_UDP, ALPROTO_DNS, DNSGetAlstateProgress); AppLayerParserRegisterGetStateProgressCompletionStatus(ALPROTO_DNS,