}
fn setfileflags(&mut self, direction: u8, flags: u16) {
SCLogDebug!("direction: {}, flags: {}", direction, flags);
- if direction == 1 {
+ if direction == STREAM_TOCLIENT {
self.files.flags_tc = flags;
} else {
self.files.flags_ts = flags;
{
let state = cast_pointer!(state, NFSState);
let flow = cast_pointer!(flow, Flow);
+ let file_flags = unsafe { FileFlowToFlags(flow, STREAM_TOSERVER) };
+ rs_nfs_setfileflags(STREAM_TOSERVER, state, file_flags);
+
+ if input.is_null() == true && input_len > 0 {
+ return rs_nfs_parse_request_tcp_gap(state, input_len);
+ }
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
SCLogDebug!("parsing {} bytes of request data", input_len);
{
let state = cast_pointer!(state, NFSState);
let flow = cast_pointer!(flow, Flow);
+ let file_flags = unsafe { FileFlowToFlags(flow, STREAM_TOCLIENT) };
+ rs_nfs_setfileflags(STREAM_TOCLIENT, state, file_flags);
+
+ if input.is_null() == true && input_len > 0 {
+ return rs_nfs_parse_response_tcp_gap(state, input_len);
+ }
SCLogDebug!("parsing {} bytes of response data", input_len);
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
/// C binding parse a DNS request. Returns 1 on success, -1 on failure.
#[no_mangle]
-pub extern "C" fn rs_nfs_parse_request_udp(_f: *const Flow,
+pub extern "C" fn rs_nfs_parse_request_udp(f: *const Flow,
state: *mut std::os::raw::c_void,
_pstate: *mut std::os::raw::c_void,
input: *const u8,
_flags: u8) -> AppLayerResult
{
let state = cast_pointer!(state, NFSState);
+ let file_flags = unsafe { FileFlowToFlags(f, STREAM_TOSERVER) };
+ rs_nfs_setfileflags(STREAM_TOSERVER, state, file_flags);
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
SCLogDebug!("parsing {} bytes of request data", input_len);
}
#[no_mangle]
-pub extern "C" fn rs_nfs_parse_response_udp(_f: *const Flow,
+pub extern "C" fn rs_nfs_parse_response_udp(f: *const Flow,
state: *mut std::os::raw::c_void,
_pstate: *mut std::os::raw::c_void,
input: *const u8,
_flags: u8) -> AppLayerResult
{
let state = cast_pointer!(state, NFSState);
-
+ let file_flags = unsafe { FileFlowToFlags(f, STREAM_TOCLIENT) };
+ rs_nfs_setfileflags(STREAM_TOCLIENT, state, file_flags);
SCLogDebug!("parsing {} bytes of response data", input_len);
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
state.parse_udp_tc(buf)