]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
rust: use LoggerFlags type to track logged state
authorJason Ish <ish@unx.ca>
Tue, 9 May 2017 17:08:14 +0000 (11:08 -0600)
committerJason Ish <ish@unx.ca>
Mon, 5 Jun 2017 20:57:21 +0000 (14:57 -0600)
rust/src/applayer.rs [new file with mode: 0644]
rust/src/dns/dns.rs
rust/src/lib.rs

diff --git a/rust/src/applayer.rs b/rust/src/applayer.rs
new file mode 100644 (file)
index 0000000..766b820
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (C) 2017 Open Information Security Foundation
+ *
+ * You can copy, redistribute or modify this Program under the terms of
+ * the GNU General Public License version 2 as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+/// LoggerFlags tracks which loggers have already been executed.
+#[derive(Debug)]
+pub struct LoggerFlags {
+    flags: u32,
+}
+
+impl LoggerFlags {
+
+    pub fn new() -> LoggerFlags {
+        return LoggerFlags{
+            flags: 0,
+        }
+    }
+
+    pub fn set_logged(&mut self, logger: u32) {
+        self.flags |= logger;
+    }
+
+    pub fn is_logged(&self, logger: u32) -> bool {
+        self.flags & logger != 0
+    }
+
+}
index f08ad4f0e811cb878386de6a61a7cbc141fe6600..5aadf148aaeaf8847f33e5897a06866a7829ef62 100644 (file)
@@ -22,6 +22,7 @@ use std;
 use std::mem::transmute;
 
 use log::*;
+use applayer::LoggerFlags;
 use core;
 use dns::parser;
 
@@ -142,7 +143,7 @@ pub struct DNSTransaction {
     pub id: u64,
     pub request: Option<DNSRequest>,
     pub response: Option<DNSResponse>,
-    pub logged: u32,
+    pub logged: LoggerFlags,
     pub de_state: Option<*mut core::DetectEngineState>,
     pub events: *mut core::AppLayerDecoderEvents,
 }
@@ -154,7 +155,7 @@ impl DNSTransaction {
             id: 0,
             request: None,
             response: None,
-            logged: 0,
+            logged: LoggerFlags::new(),
             de_state: None,
             events: std::ptr::null_mut(),
         }
@@ -575,7 +576,7 @@ pub extern "C" fn rs_dns_tx_set_logged(_state: &mut DNSState,
                                        tx: &mut DNSTransaction,
                                        logger: libc::uint32_t)
 {
-    tx.logged |= logger;
+    tx.logged.set_logged(logger);
 }
 
 #[no_mangle]
@@ -584,7 +585,7 @@ pub extern "C" fn rs_dns_tx_get_logged(_state: &mut DNSState,
                                        logger: libc::uint32_t)
                                        -> i8
 {
-    if tx.logged & logger != 0 {
+    if tx.logged.is_logged(logger) {
         return 1;
     }
     return 0;
index e1803588ebed8970b4924abe54da7b5630b80f4c..15c7c0735e876b809bda34d59a736a6b90d0134a 100644 (file)
@@ -24,6 +24,7 @@ pub mod log;
 pub mod core;
 pub mod conf;
 pub mod json;
+pub mod applayer;
 
 #[cfg(feature = "lua")]
 pub mod lua;