detect: new helper to register multi-buffer with progress

This allows to use these engines for hook rules needing exact
progress (checked in SigValidate)
pull/13053/head
Philippe Antoine 7 months ago committed by Victor Julien
parent 7d806dc7b7
commit bb9b8d2460

@ -137,6 +137,20 @@ extern "C" {
u32,
) -> *mut c_void,
) -> c_int;
pub fn DetectHelperMultiBufferProgressMpmRegister(
name: *const libc::c_char, desc: *const libc::c_char, alproto: AppProto, toclient: bool,
toserver: bool,
get_multi_data: unsafe extern "C" fn(
*mut c_void,
*const c_void,
*const c_void,
u8,
*const c_void,
i32,
u32,
) -> *mut c_void,
progress: c_int,
) -> c_int;
}
#[repr(u8)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]

@ -80,20 +80,29 @@ int DetectHelperBufferMpmRegister(const char *name, const char *desc, AppProto a
return DetectBufferTypeGetByName(name);
}
int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData)
int DetectHelperMultiBufferProgressMpmRegister(const char *name, const char *desc, AppProto alproto,
bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData, int progress)
{
if (toserver) {
DetectAppLayerMultiRegister(name, alproto, SIG_FLAG_TOSERVER, 0, GetData, 2, 0);
DetectAppLayerMultiRegister(
name, alproto, SIG_FLAG_TOSERVER, progress, GetData, 2, progress);
}
if (toclient) {
DetectAppLayerMultiRegister(name, alproto, SIG_FLAG_TOCLIENT, 0, GetData, 2, 0);
DetectAppLayerMultiRegister(
name, alproto, SIG_FLAG_TOCLIENT, progress, GetData, 2, progress);
}
DetectBufferTypeSupportsMultiInstance(name);
DetectBufferTypeSetDescriptionByName(name, desc);
return DetectBufferTypeGetByName(name);
}
int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData)
{
return DetectHelperMultiBufferProgressMpmRegister(
name, desc, alproto, toclient, toserver, GetData, 0);
}
int SCDetectHelperNewKeywordId(void)
{
if (DETECT_TBLSIZE_IDX >= DETECT_TBLSIZE) {

@ -43,6 +43,8 @@ int DetectHelperBufferMpmRegister(const char *name, const char *desc, AppProto a
bool toclient, bool toserver, InspectionBufferGetDataPtr GetData);
int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData);
int DetectHelperMultiBufferProgressMpmRegister(const char *name, const char *desc, AppProto alproto,
bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData, int progress);
InspectionBuffer *DetectHelperGetMultiData(struct DetectEngineThreadCtx_ *det_ctx,
const DetectEngineTransforms *transforms, Flow *f, const uint8_t flow_flags, void *txv,

Loading…
Cancel
Save