]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
DNS: add per tx internal id
authorVictor Julien <victor@inliniac.net>
Sat, 20 Apr 2013 15:40:14 +0000 (17:40 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 27 Jun 2013 11:43:06 +0000 (13:43 +0200)
Add per TX id. Rename transaction_cnt to transaction_max (id) and increment it on tx creation.

src/app-layer-dns-common.c
src/app-layer-dns-common.h
src/app-layer-dns-tcp.c
src/app-layer-dns-udp.c

index d1156c0ac99949021053e9115537699a08221d14..a1fb7329b8a06914787cb9ab5174a7d3acb17a5a 100644 (file)
@@ -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)
index 595f0b2b08f507d409b3c0b1532f2ea8cf7ac664..9dda7603c8246fce7aa18ffd41e6aedc9786ca59 100644 (file)
@@ -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 */
index 82bbca15ef5c44f1f48ddb627001e119c8bc1384..a48ff4eff598f9af2f83ab966fca229c322a195c 100644 (file)
@@ -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);
     }
index 0db39c7e02c2507ff59d06c11660284677a69434..e0743b2cc219fa89650372f816425670c60b4abf 100644 (file)
@@ -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);
     }