From 28ed0d3a18720be4d3eb572f853934707a220ad8 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Mon, 3 Jun 2019 16:08:29 +0200 Subject: [PATCH] nfs: implement get_event_info_by_id callback --- rust/src/nfs/nfs.rs | 33 +++++++++++++++++++++++++++++++++ src/app-layer-nfs-tcp.c | 4 +--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/rust/src/nfs/nfs.rs b/rust/src/nfs/nfs.rs index fdea7008fb..f396d0eecb 100644 --- a/rust/src/nfs/nfs.rs +++ b/rust/src/nfs/nfs.rs @@ -91,6 +91,18 @@ pub enum NFSEvent { UnsupportedVersion = 2, } +impl NFSEvent { + fn from_i32(value: i32) -> Option { + match value { + 0 => Some(NFSEvent::MalformedData), + 1 => Some(NFSEvent::NonExistingVersion), + 2 => Some(NFSEvent::UnsupportedVersion), + _ => None, + } + } +} + + #[derive(Debug)] pub enum NFSTransactionTypeData { RENAME(Vec), @@ -1596,6 +1608,27 @@ pub extern "C" fn rs_nfs_state_get_events(tx: *mut libc::c_void) return tx.events; } +#[no_mangle] +pub extern "C" fn rs_nfs_state_get_event_info_by_id(event_id: libc::c_int, + event_name: *mut *const libc::c_char, + event_type: *mut AppLayerEventType) + -> i8 +{ + if let Some(e) = NFSEvent::from_i32(event_id as i32) { + let estr = match e { + NFSEvent::MalformedData => { "malformed_data\0" }, + NFSEvent::NonExistingVersion => { "non_existing_version\0" }, + NFSEvent::UnsupportedVersion => { "unsupported_version\0" }, + }; + unsafe{ + *event_name = estr.as_ptr() as *const libc::c_char; + *event_type = APP_LAYER_EVENT_TYPE_TRANSACTION; + }; + 0 + } else { + -1 + } +} #[no_mangle] pub extern "C" fn rs_nfs_state_get_event_info(event_name: *const libc::c_char, event_id: *mut libc::c_int, diff --git a/src/app-layer-nfs-tcp.c b/src/app-layer-nfs-tcp.c index ffa81a2a07..50565e37cb 100644 --- a/src/app-layer-nfs-tcp.c +++ b/src/app-layer-nfs-tcp.c @@ -104,9 +104,7 @@ static int NFSTCPStateGetEventInfo(const char *event_name, int *event_id, static int NFSTCPStateGetEventInfoById(int event_id, const char **event_name, AppLayerEventType *event_type) { - *event_name = "NFS TCP event name (generic)"; - *event_type = APP_LAYER_EVENT_TYPE_TRANSACTION; - return 0; + return rs_nfs_state_get_event_info_by_id(event_id, event_name, event_type); } static AppLayerDecoderEvents *NFSTCPGetEvents(void *tx) -- 2.47.2