rust: use LoggerFlags type to track logged state

pull/2746/head
Jason Ish 8 years ago
parent b588b49779
commit c54fc7f98f

@ -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
}
}

@ -22,6 +22,7 @@ use std;
use std::mem::transmute; use std::mem::transmute;
use log::*; use log::*;
use applayer::LoggerFlags;
use core; use core;
use dns::parser; use dns::parser;
@ -142,7 +143,7 @@ pub struct DNSTransaction {
pub id: u64, pub id: u64,
pub request: Option<DNSRequest>, pub request: Option<DNSRequest>,
pub response: Option<DNSResponse>, pub response: Option<DNSResponse>,
pub logged: u32, pub logged: LoggerFlags,
pub de_state: Option<*mut core::DetectEngineState>, pub de_state: Option<*mut core::DetectEngineState>,
pub events: *mut core::AppLayerDecoderEvents, pub events: *mut core::AppLayerDecoderEvents,
} }
@ -154,7 +155,7 @@ impl DNSTransaction {
id: 0, id: 0,
request: None, request: None,
response: None, response: None,
logged: 0, logged: LoggerFlags::new(),
de_state: None, de_state: None,
events: std::ptr::null_mut(), events: std::ptr::null_mut(),
} }
@ -575,7 +576,7 @@ pub extern "C" fn rs_dns_tx_set_logged(_state: &mut DNSState,
tx: &mut DNSTransaction, tx: &mut DNSTransaction,
logger: libc::uint32_t) logger: libc::uint32_t)
{ {
tx.logged |= logger; tx.logged.set_logged(logger);
} }
#[no_mangle] #[no_mangle]
@ -584,7 +585,7 @@ pub extern "C" fn rs_dns_tx_get_logged(_state: &mut DNSState,
logger: libc::uint32_t) logger: libc::uint32_t)
-> i8 -> i8
{ {
if tx.logged & logger != 0 { if tx.logged.is_logged(logger) {
return 1; return 1;
} }
return 0; return 0;

@ -24,6 +24,7 @@ pub mod log;
pub mod core; pub mod core;
pub mod conf; pub mod conf;
pub mod json; pub mod json;
pub mod applayer;
#[cfg(feature = "lua")] #[cfg(feature = "lua")]
pub mod lua; pub mod lua;

Loading…
Cancel
Save