use std::mem::transmute;
use crate::applayer::LoggerFlags;
+use crate::core;
#[derive(Debug)]
pub struct TFTPTransaction {
pub mode : String,
pub logged : LoggerFlags,
id: u64,
+ pub de_state: Option<*mut core::DetectEngineState>,
}
pub struct TFTPState {
mode : mode.to_lowercase(),
logged : LoggerFlags::new(),
id : 0,
+ de_state: None,
}
}
pub fn is_mode_ok(&self) -> bool {
_ => false
}
}
+
+ pub fn free(&mut self) {
+ match self.de_state {
+ Some(state) => {
+ core::sc_detect_engine_state_free(state);
+ }
+ None => { },
+ }
+ }
+}
+
+impl Drop for TFTPTransaction {
+ fn drop(&mut self) {
+ self.free();
+ }
}
#[no_mangle]
)
);
+#[no_mangle]
+pub extern "C" fn rs_tftp_state_set_tx_detect_state(
+ tx: *mut std::os::raw::c_void,
+ de_state: &mut core::DetectEngineState) -> std::os::raw::c_int
+{
+ let tx = cast_pointer!(tx, TFTPTransaction);
+ tx.de_state = Some(de_state);
+ return 0;
+}
+
+#[no_mangle]
+pub extern "C" fn rs_tftp_state_get_tx_detect_state(
+ tx: *mut std::os::raw::c_void)
+ -> *mut core::DetectEngineState
+{
+ let tx = cast_pointer!(tx, TFTPTransaction);
+ match tx.de_state {
+ Some(ds) => {
+ return ds;
+ },
+ None => {
+ return std::ptr::null_mut();
+ }
+ }
+}
#[no_mangle]
pub extern "C" fn rs_tftp_request(state: &mut TFTPState,
static DetectEngineState *TFTPGetTxDetectState(void *vtx)
{
- return NULL;
+ return rs_tftp_state_get_tx_detect_state(vtx);
}
static int TFTPSetTxDetectState(void *vtx,
DetectEngineState *s)
{
- return 0;
+ return rs_tftp_state_set_tx_detect_state(vtx, s);
}
void RegisterTFTPParsers(void)
AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_TFTP,
TFTPGetTx);
- /* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_TFTP,
TFTPGetTxDetectState,
TFTPSetTxDetectState);