}
}
-#[no_mangle]
-pub extern "C" fn rs_dns_state_has_events(state: &mut DNSState) -> u8 {
- if state.events > 0 {
- return 1;
- }
- return 0;
-}
-
#[no_mangle]
pub extern "C" fn rs_dns_state_get_events(state: &mut DNSState,
tx_id: libc::uint64_t)
}
}
-#[no_mangle]
-pub extern "C" fn rs_nfs_state_has_events(state: &mut NFSState) -> u8 {
- if state.events > 0 {
- return 1;
- }
- return 0;
-}
-
#[no_mangle]
pub extern "C" fn rs_nfs_state_get_events(state: &mut NFSState,
tx_id: libc::uint64_t)
}
-#[no_mangle]
-pub extern "C" fn rs_ntp_state_has_events(state: *mut libc::c_void) -> libc::c_int {
- let state = cast_pointer!(state,NTPState);
- if state.events > 0 {
- return 1;
- }
- return 0;
-}
-
#[no_mangle]
pub extern "C" fn rs_ntp_state_get_events(state: *mut libc::c_void,
tx_id: libc::uint64_t)
set_tx_logged : None,
get_de_state : rs_ntp_state_get_tx_detect_state,
set_de_state : rs_ntp_state_set_tx_detect_state,
- has_events : Some(rs_ntp_state_has_events),
get_events : Some(rs_ntp_state_get_events),
get_eventinfo : Some(rs_ntp_state_get_event_info),
localstorage_new : None,
/// Function called to set a detection state
pub set_de_state: SetDetectStateFn,
- /// Function to check if there are events
- pub has_events: Option<HasEventsFn>,
/// Function to get events
pub get_events: Option<GetEventsFn>,
/// Function to get an event description
pub type SetDetectStateFn = extern "C" fn (*mut c_void, &mut DetectEngineState) -> c_int;
pub type GetEventInfoFn = extern "C" fn (*const c_char, *mut c_int, *mut AppLayerEventType) -> c_int;
pub type GetEventsFn = extern "C" fn (*mut c_void, u64) -> *mut AppLayerDecoderEvents;
-pub type HasEventsFn = extern "C" fn (*mut c_void) -> c_int;
pub type GetTxLoggedFn = extern "C" fn (*mut c_void, *mut c_void) -> u32;
pub type SetTxLoggedFn = extern "C" fn (*mut c_void, *mut c_void, u32);
pub type LocalStorageNewFn = extern "C" fn () -> *mut c_void;
return NULL;
}
-static int DNP3HasEvents(void *state)
-{
- SCEnter();
- uint16_t events = (((DNP3State *)state)->events);
- SCReturnInt((events > 0));
-}
-
static void *DNP3GetTx(void *alstate, uint64_t tx_id)
{
SCEnter();
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_DNP3,
DNP3GetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_DNP3,
- DNP3HasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_DNP3,
DNP3GetTxDetectState, DNP3SetTxDetectState);
state = flow.alstate;
FAIL_IF(state == NULL);
- FAIL_IF(DNP3HasEvents(state));
DNP3Transaction *tx = DNP3GetTx(state, 0);
FAIL_IF(tx == NULL);
state = flow.alstate;
FAIL_IF(state == NULL);
- FAIL_IF(DNP3HasEvents(state));
DNP3Transaction *tx = DNP3GetTx(state, 0);
FAIL_IF(tx == NULL);
state = flow.alstate;
FAIL_IF(state == NULL);
- FAIL_IF(DNP3HasEvents(state));
DNP3Transaction *tx = DNP3GetTx(state, 0);
FAIL_IF(tx == NULL);
FAIL_IF_NULL(dnp3state);
int bytes = DNP3HandleRequestLinkLayer(dnp3state, pkt, sizeof(pkt));
FAIL_IF(bytes != sizeof(pkt));
- FAIL_IF(DNP3HasEvents(dnp3state));
DNP3Transaction *tx = DNP3GetTx(dnp3state, 0);
FAIL_IF_NULL(tx);
FAIL_IF_NOT(tx->has_request);
int bytes = DNP3HandleRequestLinkLayer(dnp3state, pkt, sizeof(pkt));
FAIL_IF(bytes != sizeof(pkt));
- /* Should have an event now. */
- FAIL_IF_NOT(DNP3HasEvents(dnp3state));
-
DNP3StateFree(dnp3state);
PASS;
}
return NULL;
}
-int DNSHasEvents(void *state)
-{
- DNSState *dns_state = (DNSState *)state;
- return (dns_state->events > 0);
-}
-
void *DNSGetTx(void *alstate, uint64_t tx_id)
{
DNSState *dns_state = (DNSState *)alstate;
void *DNSStateAlloc(void);
void DNSStateFree(void *s);
AppLayerDecoderEvents *DNSGetEvents(void *state, uint64_t id);
-int DNSHasEvents(void *state);
int DNSValidateRequestHeader(DNSState *, const DNSHeader *dns_header);
int DNSValidateResponseHeader(DNSState *, const DNSHeader *dns_header);
return 0;
}
-static int RustDNSHasEvents(void *state)
-{
- return rs_dns_state_has_events(state);
-}
-
static AppLayerDecoderEvents *RustDNSGetEvents(void *state, uint64_t id)
{
return rs_dns_state_get_events(state, id);
RustDNSStateTransactionFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_DNS,
RustDNSGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_DNS,
- RustDNSHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_DNS,
RustDNSGetTxDetectState, RustDNSSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_DNS, RustDNSGetTx);
DNSStateTransactionFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_DNS,
DNSGetTxDetectState, DNSSetTxDetectState);
AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_DNS,
return rs_dns_tx_get_detect_flags(tx, dir);
}
-
-static int RustDNSHasEvents(void *state)
-{
- return rs_dns_state_has_events(state);
-}
-
static AppLayerDecoderEvents *RustDNSGetEvents(void *state, uint64_t id)
{
return rs_dns_state_get_events(state, id);
RustDNSStateTransactionFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_UDP, ALPROTO_DNS,
RustDNSGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_DNS,
- RustDNSHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_DNS,
RustDNSGetTxDetectState, RustDNSSetTxDetectState);
AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_UDP, ALPROTO_DNS,
DNSStateTransactionFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_DNS,
DNSGetTxDetectState, DNSSetTxDetectState);
AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_UDP, ALPROTO_DNS,
return NULL;
}
-static int ENIPHasEvents(void *state)
-{
- return (((ENIPState *) state)->events > 0);
-}
-
static int ENIPStateGetEventInfo(const char *event_name, int *event_id, AppLayerEventType *event_type)
{
*event_id = SCMapEnumNameToValue(event_name, enip_decoder_event_table);
ENIPStateAlloc, ENIPStateFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_UDP, ALPROTO_ENIP, ENIPGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_ENIP, ENIPHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_ENIP,
ENIPGetTxDetectState, ENIPSetTxDetectState);
ENIPStateAlloc, ENIPStateFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_ENIP, ENIPGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_ENIP, ENIPHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_ENIP,
ENIPGetTxDetectState, ENIPSetTxDetectState);
SCLogDebug("couldn't set event %u", e);
}
-static int HTPHasEvents(void *state)
-{
- HtpState *htp_state = (HtpState *)state;
- return (htp_state->events > 0);
-}
-
static AppLayerDecoderEvents *HTPGetEvents(void *state, uint64_t tx_id)
{
SCLogDebug("get HTTP events for TX %"PRIu64, tx_id);
HTPStateSetTxLogged);
AppLayerParserRegisterGetStateProgressCompletionStatus(ALPROTO_HTTP,
HTPStateGetAlstateProgressCompletionStatus);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPHasEvents);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPGetEvents);
AppLayerParserRegisterGetEventInfo(IPPROTO_TCP, ALPROTO_HTTP, HTPStateGetEventInfo);
return NULL;
}
-static int ModbusHasEvents(void *state)
-{
- return (((ModbusState *) state)->events > 0);
-}
-
static int ModbusGetAlstateProgress(void *modbus_tx, uint8_t direction)
{
ModbusTransaction *tx = (ModbusTransaction *) modbus_tx;
AppLayerParserRegisterStateFuncs(IPPROTO_TCP, ALPROTO_MODBUS, ModbusStateAlloc, ModbusStateFree);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_MODBUS, ModbusHasEvents);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_MODBUS,
ModbusGetTxDetectState, ModbusSetTxDetectState);
return rs_nfs_state_get_event_info(event_name, event_id, event_type);
}
-static int NFSTCPHasEvents(void *state)
-{
- return rs_nfs_state_has_events(state);
-}
-
static AppLayerDecoderEvents *NFSTCPGetEvents(void *state, uint64_t id)
{
return rs_nfs_state_get_events(state, id);
AppLayerParserRegisterGetFilesFunc(IPPROTO_TCP, ALPROTO_NFS, NFSTCPGetFiles);
- /* Application layer event handling. */
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_NFS,
- NFSTCPHasEvents);
-
/* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_NFS,
NFSTCPGetTxDetectState, NFSTCPSetTxDetectState);
return rs_nfs_state_get_event_info(event_name, event_id, event_type);
}
-static int NFSHasEvents(void *state)
-{
- return rs_nfs_state_has_events(state);
-}
-
static AppLayerDecoderEvents *NFSGetEvents(void *state, uint64_t id)
{
return rs_nfs_state_get_events(state, id);
AppLayerParserRegisterGetFilesFunc(IPPROTO_UDP, ALPROTO_NFS, NFSGetFiles);
- /* Application layer event handling. */
- AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_NFS,
- NFSHasEvents);
-
/* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_NFS,
NFSGetTxDetectState, NFSSetTxDetectState);
void (*Truncate)(void *, uint8_t);
FileContainer *(*StateGetFiles)(void *, uint8_t);
AppLayerDecoderEvents *(*StateGetEvents)(void *, uint64_t);
- int (*StateHasEvents)(void *);
int (*StateGetProgress)(void *alstate, uint8_t direction);
uint64_t (*StateGetTxCnt)(void *alstate);
SCReturn;
}
-void AppLayerParserRegisterHasEventsFunc(uint8_t ipproto, AppProto alproto,
- int (*StateHasEvents)(void *))
-{
- SCEnter();
-
- alp_ctx.ctxs[FlowGetProtoMapping(ipproto)][alproto].StateHasEvents =
- StateHasEvents;
-
- SCReturn;
-}
-
void AppLayerParserRegisterLoggerFuncs(uint8_t ipproto, AppProto alproto,
LoggerId (*StateGetTxLogged)(void *, void *),
void (*StateSetTxLogged)(void *, void *, LoggerId))
printf("Optional:\n");
printf("- LocalStorageAlloc %p LocalStorageFree %p\n", ctx->LocalStorageAlloc, ctx->LocalStorageFree);
printf("- StateGetTxLogged %p StateSetTxLogged %p\n", ctx->StateGetTxLogged, ctx->StateSetTxLogged);
- printf("- StateGetEvents %p StateHasEvents %p StateGetEventInfo %p\n", ctx->StateGetEvents, ctx->StateHasEvents, ctx->StateGetEventInfo);
+ printf("- StateGetEvents %p StateGetEventInfo %p\n", ctx->StateGetEvents, ctx->StateGetEventInfo);
}
#define BOTH_SET(a, b) ((a) != NULL && (b) != NULL)
FileContainer *(*StateGetFiles)(void *, uint8_t));
void AppLayerParserRegisterGetEventsFunc(uint8_t ipproto, AppProto proto,
AppLayerDecoderEvents *(*StateGetEvents)(void *, uint64_t));
-void AppLayerParserRegisterHasEventsFunc(uint8_t ipproto, AppProto alproto,
- int (*StateHasEvents)(void *));
void AppLayerParserRegisterLoggerFuncs(uint8_t ipproto, AppProto alproto,
LoggerId (*StateGetTxLogged)(void *, void *),
void (*StateSetTxLogged)(void *, void *, LoggerId));
p->StateGetTxLogged, p->StateSetTxLogged);
}
- /* Application layer event handling. */
- if (p->StateHasEvents) {
- AppLayerParserRegisterHasEventsFunc(p->ip_proto, alproto,
- p->StateHasEvents);
- }
-
/* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(p->ip_proto, alproto,
p->GetTxDetectState, p->SetTxDetectState);
DetectEngineState *(*GetTxDetectState)(void *tx);
int (*SetTxDetectState)(void *tx, DetectEngineState *);
- int (*StateHasEvents)(void *);
AppLayerDecoderEvents *(*StateGetEvents)(void *, uint64_t);
int (*StateGetEventInfo)(const char *event_name,
int *event_id, AppLayerEventType *event_type);
return ssl_state->decoder_events;
}
-static int SSLHasEvents(void *state)
-{
- SSLState *ssl_state = (SSLState *)state;
- return (ssl_state->events > 0);
-}
-
static int SSLSetTxDetectState(void *vtx, DetectEngineState *de_state)
{
SSLState *ssl_state = (SSLState *)vtx;
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_TLS, SSLGetEvents);
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_TLS, SSLHasEvents);
-
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_TLS,
SSLGetTxDetectState, SSLSetTxDetectState);
return NULL;
}
-static int TemplateHasEvents(void *state)
-{
- TemplateState *echo = state;
- return echo->events;
-}
-
/**
* \brief Probe the input to see if it looks like echo.
*
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_TEMPLATE,
TemplateGetTx);
- /* Application layer event handling. */
- AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_TEMPLATE,
- TemplateHasEvents);
-
/* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_TEMPLATE,
TemplateGetTxDetectState, TemplateSetTxDetectState);
return NULL;
}
-static int TFTPHasEvents(void *state)
-{
- return rs_tftp_has_event(state);
-}
-
/**
* \brief Probe the input to see if it looks like echo.
*
AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_TFTP,
TFTPGetTx);
- /* Application layer event handling. */
- AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_TFTP,
- TFTPHasEvents);
-
/* What is this being registered for? */
AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_TFTP,
TFTPGetTxDetectState,