nfs3_state.free();
}
-/// C binding parse a DNS request. Returns 1 on success, -1 on failure.
+/// C binding parse a NFS TCP request. Returns 1 on success, -1 on failure.
#[no_mangle]
-pub extern "C" fn rs_nfs3_parse_request(_flow: *mut Flow,
+pub extern "C" fn rs_nfs_parse_request(_flow: *mut Flow,
state: &mut NFSState,
_pstate: *mut libc::c_void,
input: *mut libc::uint8_t,
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
SCLogDebug!("parsing {} bytes of request data", input_len);
- if buf.as_ptr().is_null() && input_len > 0 {
- if state.parse_tcp_data_ts_gap(input_len as u32) == 0 {
- return 1
- }
- return -1
- }
-
if state.parse_tcp_data_ts(buf) == 0 {
1
} else {
}
#[no_mangle]
-pub extern "C" fn rs_nfs3_parse_response(_flow: *mut Flow,
+pub extern "C" fn rs_nfs_parse_request_tcp_gap(
+ state: &mut NFSState,
+ input_len: libc::uint32_t)
+ -> libc::int8_t
+{
+ if state.parse_tcp_data_ts_gap(input_len as u32) == 0 {
+ return 1;
+ }
+ return -1;
+}
+
+#[no_mangle]
+pub extern "C" fn rs_nfs_parse_response(_flow: *mut Flow,
state: &mut NFSState,
_pstate: *mut libc::c_void,
input: *mut libc::uint8_t,
SCLogDebug!("parsing {} bytes of response data", input_len);
let buf = unsafe{std::slice::from_raw_parts(input, input_len as usize)};
- if buf.as_ptr().is_null() && input_len > 0 {
- if state.parse_tcp_data_tc_gap(input_len as u32) == 0 {
- return 1
- }
- return -1
- }
-
if state.parse_tcp_data_tc(buf) == 0 {
1
} else {
}
}
+#[no_mangle]
+pub extern "C" fn rs_nfs_parse_response_tcp_gap(
+ state: &mut NFSState,
+ input_len: libc::uint32_t)
+ -> libc::int8_t
+{
+ if state.parse_tcp_data_tc_gap(input_len as u32) == 0 {
+ return 1;
+ }
+ return -1;
+}
+
/// C binding parse a DNS request. Returns 1 on success, -1 on failure.
#[no_mangle]
pub extern "C" fn rs_nfs3_parse_request_udp(_flow: *mut Flow,
uint16_t file_flags = FileFlowToFlags(f, STREAM_TOSERVER);
rs_nfs3_setfileflags(0, state, file_flags);
- return rs_nfs3_parse_request(f, state, pstate, input, input_len, local_data);
+ int res;
+ if (input == NULL && input_len > 0) {
+ res = rs_nfs_parse_request_tcp_gap(state, input_len);
+ } else {
+ res = rs_nfs_parse_request(f, state, pstate, input, input_len, local_data);
+ }
+ return res;
}
static int NFSTCPParseResponse(Flow *f, void *state, AppLayerParserState *pstate,
uint16_t file_flags = FileFlowToFlags(f, STREAM_TOCLIENT);
rs_nfs3_setfileflags(1, state, file_flags);
- return rs_nfs3_parse_response(f, state, pstate, input, input_len, local_data);
+ int res;
+ if (input == NULL && input_len > 0) {
+ res = rs_nfs_parse_response_tcp_gap(state, input_len);
+ } else {
+ res = rs_nfs_parse_response(f, state, pstate, input, input_len, local_data);
+ }
+ return res;
}
static uint64_t NFSTCPGetTxCnt(void *state)