rust app-layer template: add stubs for gap handling

pull/5184/head
Jason Ish 5 years ago
parent d60671d855
commit 3f615f751b

@ -225,6 +225,16 @@ impl TemplateState {
return None;
}
fn on_request_gap(&mut self, _size: u32) {
/* A gap in request data has been seen. For the purposes of this template
* we simply clear out the request buffer. */
self.request_buffer.truncate(0);
}
fn on_response_gap(&mut self, _size: u32) {
self.response_buffer.truncate(0);
}
}
/// Probe to see if this input looks like a request or response.
@ -312,11 +322,20 @@ pub extern "C" fn rs_template_parse_request(
if eof {
// If needed, handled EOF, or pass it into the parser.
return AppLayerResult::ok();
}
let state = cast_pointer!(state, TemplateState);
let buf = build_slice!(input, input_len as usize);
state.parse_request(buf).into()
if input == std::ptr::null_mut() && input_len > 0 {
// Here we have a gap signaled by the input being null, but a greater
// than 0 input_len which provides the size of the gap.
state.on_request_gap(input_len);
AppLayerResult::ok()
} else {
let buf = build_slice!(input, input_len as usize);
state.parse_request(buf).into()
}
}
#[no_mangle]
@ -337,8 +356,16 @@ pub extern "C" fn rs_template_parse_response(
}
};
let state = cast_pointer!(state, TemplateState);
let buf = build_slice!(input, input_len as usize);
state.parse_response(buf).into()
if input == std::ptr::null_mut() && input_len > 0 {
// Here we have a gap signaled by the input being null, but a greater
// than 0 input_len which provides the size of the gap.
state.on_response_gap(input_len);
AppLayerResult::ok()
} else {
let buf = build_slice!(input, input_len as usize);
state.parse_response(buf).into()
}
}
#[no_mangle]
@ -518,7 +545,7 @@ pub unsafe extern "C" fn rs_template_register_parser() {
get_tx_iterator: Some(rs_template_state_get_tx_iterator),
get_tx_data: rs_template_get_tx_data,
apply_tx_config: None,
flags: 0,
flags: APP_LAYER_PARSER_OPT_ACCEPT_GAPS,
};
let ip_proto_str = CString::new("tcp").unwrap();

Loading…
Cancel
Save