dcerpc: Change fn sign as per rust registration requirement

Registering parsers in Rust requires signatures to be a certain way and
compatible with C. Change signatures of all the functions.
pull/6139/head
Shivani Bhardwaj 5 years ago committed by Victor Julien
parent dee972b863
commit a0a09a102b

@ -1183,9 +1183,10 @@ pub extern "C" fn rs_parse_dcerpc_response_gap(
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_parse_request( pub extern "C" fn rs_dcerpc_parse_request(
flow: *mut core::Flow, state: &mut DCERPCState, _pstate: *mut std::os::raw::c_void, flow: *const core::Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void,
input: *const u8, input_len: u32, _data: *mut std::os::raw::c_void, flags: u8, input: *const u8, input_len: u32, _data: *const std::os::raw::c_void, flags: u8,
) -> AppLayerResult { ) -> AppLayerResult {
let state = cast_pointer!(state, DCERPCState);
SCLogDebug!("Handling request: input {:p} input_len {} flags {:x} EOF {}", SCLogDebug!("Handling request: input {:p} input_len {} flags {:x} EOF {}",
input, input_len, flags, flags & core::STREAM_EOF != 0); input, input_len, flags, flags & core::STREAM_EOF != 0);
if flags & core::STREAM_EOF != 0 && input_len == 0 { if flags & core::STREAM_EOF != 0 && input_len == 0 {
@ -1205,9 +1206,10 @@ pub extern "C" fn rs_dcerpc_parse_request(
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_parse_response( pub extern "C" fn rs_dcerpc_parse_response(
flow: *mut core::Flow, state: &mut DCERPCState, _pstate: *mut std::os::raw::c_void, flow: *const core::Flow, state: *mut std::os::raw::c_void, _pstate: *mut std::os::raw::c_void,
input: *const u8, input_len: u32, _data: *mut std::os::raw::c_void, flags: u8, input: *const u8, input_len: u32, _data: *const std::os::raw::c_void, flags: u8,
) -> AppLayerResult { ) -> AppLayerResult {
let state = cast_pointer!(state, DCERPCState);
if flags & core::STREAM_EOF != 0 && input_len == 0 { if flags & core::STREAM_EOF != 0 && input_len == 0 {
return AppLayerResult::ok(); return AppLayerResult::ok();
} }
@ -1226,15 +1228,15 @@ pub extern "C" fn rs_dcerpc_parse_response(
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rs_dcerpc_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void { pub extern "C" fn rs_dcerpc_state_new(_orig_state: *mut std::os::raw::c_void, _orig_proto: core::AppProto) -> *mut std::os::raw::c_void {
let state = DCERPCState::new(); let state = DCERPCState::new();
let boxed = Box::new(state); let boxed = Box::new(state);
transmute(boxed) return unsafe { transmute(boxed)};
} }
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn rs_dcerpc_state_free(state: *mut std::os::raw::c_void) { pub extern "C" fn rs_dcerpc_state_free(state: *mut std::os::raw::c_void) {
let _drop: Box<DCERPCState> = transmute(state); let _state: Box<DCERPCState> = unsafe { transmute(state) };
} }
#[no_mangle] #[no_mangle]
@ -1281,8 +1283,8 @@ pub extern "C" fn rs_dcerpc_get_tx_detect_state(
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_set_tx_detect_state( pub extern "C" fn rs_dcerpc_set_tx_detect_state(
vtx: *mut std::os::raw::c_void, de_state: *mut core::DetectEngineState, vtx: *mut std::os::raw::c_void, de_state: &mut core::DetectEngineState,
) -> u8 { ) -> std::os::raw::c_int {
let dce_tx = cast_pointer!(vtx, DCERPCTransaction); let dce_tx = cast_pointer!(vtx, DCERPCTransaction);
dce_tx.de_state = Some(de_state); dce_tx.de_state = Some(de_state);
0 0
@ -1291,10 +1293,10 @@ pub extern "C" fn rs_dcerpc_set_tx_detect_state(
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_get_tx( pub extern "C" fn rs_dcerpc_get_tx(
vtx: *mut std::os::raw::c_void, tx_id: u64, vtx: *mut std::os::raw::c_void, tx_id: u64,
) -> *mut DCERPCTransaction { ) -> *mut std::os::raw::c_void {
let dce_state = cast_pointer!(vtx, DCERPCState); let dce_state = cast_pointer!(vtx, DCERPCState);
match dce_state.get_tx(tx_id) { match dce_state.get_tx(tx_id) {
Some(tx) => tx, Some(tx) => unsafe { transmute(tx) },
None => std::ptr::null_mut(), None => std::ptr::null_mut(),
} }
} }
@ -1306,7 +1308,9 @@ pub extern "C" fn rs_dcerpc_get_tx_cnt(vtx: *mut std::os::raw::c_void) -> u64 {
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_get_alstate_progress(tx: &mut DCERPCTransaction, direction: u8) -> u8 { pub extern "C" fn rs_dcerpc_get_alstate_progress(tx: *mut std::os::raw::c_void, direction: u8
)-> std::os::raw::c_int {
let tx = cast_pointer!(tx, DCERPCTransaction);
if direction == core::STREAM_TOSERVER && tx.req_done { if direction == core::STREAM_TOSERVER && tx.req_done {
SCLogDebug!("tx {} TOSERVER progress 1 => {:?}", tx.call_id, tx); SCLogDebug!("tx {} TOSERVER progress 1 => {:?}", tx.call_id, tx);
return 1; return 1;
@ -1362,7 +1366,7 @@ fn probe(input: &[u8]) -> (bool, bool) {
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn rs_dcerpc_probe_tcp(direction: u8, input: *const u8, pub extern "C" fn rs_dcerpc_probe_tcp(_f: *const core::Flow, direction: u8, input: *const u8,
len: u32, rdir: *mut u8) -> AppProto len: u32, rdir: *mut u8) -> AppProto
{ {
SCLogDebug!("Probing packet for DCERPC"); SCLogDebug!("Probing packet for DCERPC");
@ -1386,7 +1390,6 @@ pub extern "C" fn rs_dcerpc_probe_tcp(direction: u8, input: *const u8,
return 1; return 1;
} }
return 0; return 0;
} }
#[cfg(test)] #[cfg(test)]

@ -126,7 +126,7 @@ static uint16_t DCERPCTCPProbe(
{ {
SCLogDebug("DCERPCTCPProbe"); SCLogDebug("DCERPCTCPProbe");
const int r = rs_dcerpc_probe_tcp(direction, input, len, rdir); const int r = rs_dcerpc_probe_tcp(f, direction, input, len, rdir);
switch (r) { switch (r) {
case 1: case 1:
return ALPROTO_DCERPC; return ALPROTO_DCERPC;

Loading…
Cancel
Save