From: Victor Julien Date: Sat, 20 Apr 2013 15:40:14 +0000 (+0200) Subject: DNS: add per tx internal id X-Git-Tag: suricata-2.0beta1~77 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6674f4892ca3ebfc993c315f2d73f9e3d3b72be1;p=thirdparty%2Fsuricata.git DNS: add per tx internal id Add per TX id. Rename transaction_cnt to transaction_max (id) and increment it on tx creation. --- diff --git a/src/app-layer-dns-common.c b/src/app-layer-dns-common.c index d1156c0ac9..a1fb7329b8 100644 --- a/src/app-layer-dns-common.c +++ b/src/app-layer-dns-common.c @@ -221,8 +221,12 @@ void DNSStoreQueryInState(DNSState *dns_state, const uint8_t *fqdn, const uint16 tx = DNSTransactionAlloc(tx_id); if (tx == NULL) return; + dns_state->transaction_max++; + SCLogDebug("dns_state->transaction_max updated to %u", dns_state->transaction_max); TAILQ_INSERT_TAIL(&dns_state->tx_list, tx, next); dns_state->curr = tx; + tx->tx_num = dns_state->transaction_max; + SCLogDebug("new tx %u with internal id %u", tx->tx_id, tx->tx_num); } DNSQueryEntry *q = SCMalloc(sizeof(DNSQueryEntry) + fqdn_len); @@ -249,10 +253,9 @@ void DNSStoreAnswerInState(DNSState *dns_state, const int rtype, const uint8_t * return; TAILQ_INSERT_TAIL(&dns_state->tx_list, tx, next); dns_state->curr = tx; - } + tx->tx_num = dns_state->transaction_max; - dns_state->transaction_cnt++; - SCLogDebug("dns_state->transaction_cnt %u", dns_state->transaction_cnt); + } DNSAnswerEntry *q = SCMalloc(sizeof(DNSAnswerEntry) + fqdn_len + data_len); if (q == NULL) diff --git a/src/app-layer-dns-common.h b/src/app-layer-dns-common.h index 595f0b2b08..9dda7603c8 100644 --- a/src/app-layer-dns-common.h +++ b/src/app-layer-dns-common.h @@ -122,6 +122,7 @@ typedef struct DNSAnswerEntry_ { /** \brief DNS Transaction, request/reply with same TX id. */ typedef struct DNSTransaction_ { + uint16_t tx_num; /**< internal: id */ uint16_t tx_id; /**< transaction id */ uint16_t replied; /**< bool indicating request is replied to. */ @@ -138,7 +139,7 @@ typedef struct DNSTransaction_ { typedef struct DNSState_ { TAILQ_HEAD(, DNSTransaction_) tx_list; /**< transaction list */ DNSTransaction *curr; /**< ptr to current tx */ - uint16_t transaction_cnt; + uint16_t transaction_max; uint16_t transaction_done; /* used by TCP only */ diff --git a/src/app-layer-dns-tcp.c b/src/app-layer-dns-tcp.c index 82bbca15ef..a48ff4eff5 100644 --- a/src/app-layer-dns-tcp.c +++ b/src/app-layer-dns-tcp.c @@ -577,14 +577,14 @@ void DNSStateUpdateTransactionId(void *state, uint16_t *id) { DNSState *s = state; - SCLogDebug("original id %"PRIu16", s->transaction_cnt %"PRIu16, - *id, (s->transaction_cnt)); + SCLogDebug("original id %"PRIu16", s->transaction_max %"PRIu16, + *id, (s->transaction_max)); - if ((s->transaction_cnt) > (*id)) { + if ((s->transaction_max) > (*id)) { SCLogDebug("original id %"PRIu16", updating with s->transaction_cnt %"PRIu16, - *id, (s->transaction_cnt)); + *id, (s->transaction_max)); - (*id) = (s->transaction_cnt); + (*id) = (s->transaction_max); SCLogDebug("updated id %"PRIu16, *id); } diff --git a/src/app-layer-dns-udp.c b/src/app-layer-dns-udp.c index 0db39c7e02..e0743b2cc2 100644 --- a/src/app-layer-dns-udp.c +++ b/src/app-layer-dns-udp.c @@ -301,14 +301,14 @@ static void DNSStateUpdateTransactionId(void *state, uint16_t *id) { DNSState *s = state; - SCLogDebug("original id %"PRIu16", s->transaction_cnt %"PRIu16, - *id, (s->transaction_cnt)); + SCLogDebug("original id %"PRIu16", s->transaction_max %"PRIu16, + *id, (s->transaction_max)); - if ((s->transaction_cnt) > (*id)) { - SCLogDebug("original id %"PRIu16", updating with s->transaction_cnt %"PRIu16, - *id, (s->transaction_cnt)); + if ((s->transaction_max) > (*id)) { + SCLogDebug("original id %"PRIu16", updating with s->transaction_max %"PRIu16, + *id, (s->transaction_max)); - (*id) = (s->transaction_cnt); + (*id) = (s->transaction_max); SCLogDebug("updated id %"PRIu16, *id); }