};
use suricata::conf::conf_get;
use suricata::core::{ALPROTO_UNKNOWN, IPPROTO_TCP};
-use suricata::flow::Flow;
use suricata::{
build_slice, cast_pointer, export_state_data_get, export_tx_data_get, SCLogError, SCLogNotice,
};
-use suricata_sys::sys::AppProto;
+use suricata_sys::sys::{AppProto, Flow};
static mut TEMPLATE_MAX_TX: usize = 256;
pub const FLOW_DIR_REVERSED: u32 = BIT_U32!(26);
/// Opaque flow type (defined in C)
-pub enum Flow {}
+pub use suricata_sys::sys::Flow;
-/// Rust implementation of Flow.
-impl Flow {
- /// Return the time of the last flow update as a `Duration`
- /// since the epoch.
- pub fn get_last_time(&mut self) -> std::time::Duration {
- unsafe {
- let mut secs: u64 = 0;
- let mut usecs: u64 = 0;
- FlowGetLastTimeAsParts(self, &mut secs, &mut usecs);
- std::time::Duration::new(secs, usecs as u32 * 1000)
- }
+/// Return the time of the last flow update as a `Duration`
+/// since the epoch.
+pub fn flow_get_last_time(flow: &Flow) -> std::time::Duration {
+ unsafe {
+ let mut secs: u64 = 0;
+ let mut usecs: u64 = 0;
+ FlowGetLastTimeAsParts(flow, &mut secs, &mut usecs);
+ std::time::Duration::new(secs, usecs as u32 * 1000)
}
+}
- /// Return the flow flags.
- pub fn get_flags(&self) -> u32 {
- unsafe { FlowGetFlags(self) }
- }
+/// Return the flow flags.
+pub fn flow_get_flags(flow: &Flow) -> u32 {
+ unsafe { FlowGetFlags(flow) }
+}
- /// Return flow ports
- pub fn get_ports(&self) -> (u16, u16) {
- unsafe { (FlowGetSourcePort(self), FlowGetDestinationPort(self)) }
- }
+/// Return flow ports
+pub fn flow_get_ports(flow: &Flow) -> (u16, u16) {
+ unsafe { (FlowGetSourcePort(flow), FlowGetDestinationPort(flow)) }
}
use crate::direction::DIR_BOTH;
use crate::filecontainer::*;
use crate::filetracker::*;
-use crate::flow::Flow;
+use crate::flow::{Flow, flow_get_last_time};
use crate::frames::*;
use crate::nfs::nfs2_records::*;
}
SCLogDebug!("parsing {} bytes of request data", stream_slice.len());
- state.update_ts(flow.get_last_time().as_secs());
+ state.update_ts(flow_get_last_time(flow).as_secs());
state.parse_tcp_data_ts(flow, &stream_slice)
}
}
SCLogDebug!("parsing {} bytes of response data", stream_slice.len());
- state.update_ts(flow.get_last_time().as_secs());
+ state.update_ts(flow_get_last_time(flow).as_secs());
state.parse_tcp_data_tc(flow, &stream_slice)
}
use crate::applayer;
use crate::applayer::*;
use crate::direction::Direction;
-use crate::flow::{Flow, FLOW_DIR_REVERSED};
+use crate::flow::{Flow, FLOW_DIR_REVERSED, flow_get_flags, flow_get_last_time, flow_get_ports};
use crate::frames::*;
use crate::conf::*;
use crate::applayer::{AppLayerResult, AppLayerTxData, AppLayerEvent};
state.ts_gap = true;
}
- state.update_ts(flow.get_last_time().as_secs());
+ state.update_ts(flow_get_last_time(flow).as_secs());
state.parse_tcp_data_ts(flow, &stream_slice)
}
state.tc_gap = true;
}
- state.update_ts(flow.get_last_time().as_secs());
+ state.update_ts(flow_get_last_time(flow).as_secs());
state.parse_tcp_data_tc(flow, &stream_slice)
}
if retval != ALPROTO_SMB {
return retval;
}
- let (sp, dp) = f.get_ports();
- let flags = f.get_flags();
+ let (sp, dp) = flow_get_ports(f);
+ let flags = flow_get_flags(f);
let fsp = if (flags & FLOW_DIR_REVERSED) != 0 { dp } else { sp };
let fdp = if (flags & FLOW_DIR_REVERSED) != 0 { sp } else { dp };
if fsp == 445 && fdp != 445 {