mirror of
https://github.com/OISF/suricata.git
synced 2026-10-11 22:09:53 +00:00
rust: bindgen detect ThreadCtx keyword functions
This commit is contained in:
committed by
Victor Julien
parent
5fe920ec42
commit
7d024a840c
+21
-6
@@ -648,6 +648,12 @@ pub struct DetectEngineCtx_ {
|
||||
pub type DetectEngineCtx = DetectEngineCtx_;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct DetectEngineThreadCtx_ {
|
||||
_unused: [u8; 0],
|
||||
}
|
||||
pub type DetectEngineThreadCtx = DetectEngineThreadCtx_;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct Signature_ {
|
||||
_unused: [u8; 0],
|
||||
}
|
||||
@@ -668,6 +674,21 @@ extern "C" {
|
||||
s: *mut Signature, transform: ::std::os::raw::c_int, options: *mut ::std::os::raw::c_void,
|
||||
) -> ::std::os::raw::c_int;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
name: *const ::std::os::raw::c_char,
|
||||
InitFunc: ::std::option::Option<
|
||||
unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> *mut ::std::os::raw::c_void,
|
||||
>,
|
||||
data: *mut ::std::os::raw::c_void,
|
||||
FreeFunc: ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>,
|
||||
) -> ::std::os::raw::c_int;
|
||||
}
|
||||
extern "C" {
|
||||
pub fn SCDetectThreadCtxGetGlobalKeywordThreadCtx(
|
||||
det_ctx: *mut DetectEngineThreadCtx, id: ::std::os::raw::c_int,
|
||||
) -> *mut ::std::os::raw::c_void;
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
pub struct InspectionBuffer {
|
||||
@@ -699,12 +720,6 @@ impl Default for InspectionBuffer {
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct DetectEngineThreadCtx_ {
|
||||
_unused: [u8; 0],
|
||||
}
|
||||
pub type DetectEngineThreadCtx = DetectEngineThreadCtx_;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct DetectEngineTransforms {
|
||||
_unused: [u8; 0],
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
// types from detect.h with only forward declarations for bindgen
|
||||
// could be #ifndef SURICATA_BINDGEN_H #include "detect.h" #endif
|
||||
typedef struct DetectEngineCtx_ DetectEngineCtx;
|
||||
typedef struct DetectEngineThreadCtx_ DetectEngineThreadCtx;
|
||||
typedef struct Signature_ Signature;
|
||||
typedef struct SigMatch_ SigMatch;
|
||||
|
||||
@@ -36,4 +37,10 @@ SigMatch *DetectBufferGetFirstSigMatch(const Signature *s, const uint32_t buf_id
|
||||
SigMatch *DetectBufferGetLastSigMatch(const Signature *s, const uint32_t buf_id);
|
||||
int SCDetectSignatureAddTransform(Signature *s, int transform, void *options);
|
||||
|
||||
// Declared here for bindgen
|
||||
// But defined in detect-engine.c to access g_master_de_ctx
|
||||
int SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
const char *name, void *(*InitFunc)(void *), void *data, void (*FreeFunc)(void *));
|
||||
void *SCDetectThreadCtxGetGlobalKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id);
|
||||
|
||||
#endif /* SURICATA_DETECT_ENGINE_BUFFER_H */
|
||||
|
||||
+4
-3
@@ -40,6 +40,7 @@
|
||||
#include "detect-engine-sigorder.h"
|
||||
|
||||
#include "detect-engine-build.h"
|
||||
#include "detect-engine-buffer.h"
|
||||
#include "detect-engine-siggroup.h"
|
||||
#include "detect-engine-address.h"
|
||||
#include "detect-engine-port.h"
|
||||
@@ -3895,8 +3896,8 @@ void *DetectThreadCtxGetKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id)
|
||||
* \retval id for retrieval of ctx at runtime
|
||||
* \retval -1 on error
|
||||
*/
|
||||
int DetectRegisterThreadCtxGlobalFuncs(const char *name,
|
||||
void *(*InitFunc)(void *), void *data, void (*FreeFunc)(void *))
|
||||
int SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
const char *name, void *(*InitFunc)(void *), void *data, void (*FreeFunc)(void *))
|
||||
{
|
||||
int id;
|
||||
BUG_ON(InitFunc == NULL || FreeFunc == NULL);
|
||||
@@ -3939,7 +3940,7 @@ int DetectRegisterThreadCtxGlobalFuncs(const char *name,
|
||||
*
|
||||
* \retval ctx or NULL on error
|
||||
*/
|
||||
void *DetectThreadCtxGetGlobalKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id)
|
||||
void *SCDetectThreadCtxGetGlobalKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id)
|
||||
{
|
||||
if (id < 0 || id > det_ctx->global_keyword_ctxs_size ||
|
||||
det_ctx->global_keyword_ctxs_array == NULL) {
|
||||
|
||||
@@ -80,10 +80,6 @@ DetectEngineCtx *DetectEngineCtxInitStubForMT(void);
|
||||
void DetectEngineCtxFree(DetectEngineCtx *);
|
||||
int DetectEngineThreadCtxGetJsonContext(DetectEngineThreadCtx *det_ctx);
|
||||
|
||||
int DetectRegisterThreadCtxGlobalFuncs(const char *name,
|
||||
void *(*InitFunc)(void *), void *data, void (*FreeFunc)(void *));
|
||||
void *DetectThreadCtxGetGlobalKeywordThreadCtx(DetectEngineThreadCtx *det_ctx, int id);
|
||||
|
||||
TmEcode DetectEngineThreadCtxInit(ThreadVars *, void *, void **);
|
||||
TmEcode DetectEngineThreadCtxDeinit(ThreadVars *, void *);
|
||||
bool DetectEngineMpmCachingEnabled(void);
|
||||
|
||||
@@ -132,7 +132,7 @@ void DetectHttpCookieRegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_cookie",
|
||||
"http cookie header");
|
||||
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http_cookie", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_http_cookie_buffer_id = DetectBufferTypeGetByName("http_cookie");
|
||||
@@ -238,7 +238,7 @@ static InspectionBuffer *GetRequestData2(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetCookie(txv, STREAM_TOSERVER, &b, &b_len, thread_buf) != 1)
|
||||
@@ -261,7 +261,7 @@ static InspectionBuffer *GetResponseData2(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetCookie(txv, STREAM_TOCLIENT, &b, &b_len, thread_buf) != 1)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "detect.h"
|
||||
#include "detect-parse.h"
|
||||
#include "detect-engine.h"
|
||||
#include "detect-engine-buffer.h"
|
||||
#include "detect-engine-mpm.h"
|
||||
#include "detect-engine-state.h"
|
||||
#include "detect-engine-prefilter.h"
|
||||
@@ -101,8 +102,7 @@ HttpHeaderBuffer *HttpHeaderGetBufferSpace(DetectEngineThreadCtx *det_ctx, uint8
|
||||
{
|
||||
*ret_hdr_td = NULL;
|
||||
|
||||
HttpHeaderThreadData *hdr_td =
|
||||
DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, keyword_id);
|
||||
HttpHeaderThreadData *hdr_td = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, keyword_id);
|
||||
if (hdr_td == NULL)
|
||||
return NULL;
|
||||
*ret_hdr_td = hdr_td;
|
||||
|
||||
@@ -170,7 +170,7 @@ static InspectionBuffer *GetBuffer2ForTX(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
|
||||
@@ -249,10 +249,10 @@ void DetectHttpHeaderNamesRegister(void)
|
||||
|
||||
g_buffer_id = DetectBufferTypeGetByName(BUFFER_NAME);
|
||||
|
||||
g_keyword_thread_id = DetectRegisterThreadCtxGlobalFuncs(KEYWORD_NAME,
|
||||
HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
g_keyword_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
KEYWORD_NAME, HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http2.header_names", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
SCLogDebug("keyword %s registered. Thread id %d. "
|
||||
|
||||
+10
-10
@@ -152,7 +152,7 @@ static InspectionBuffer *GetBuffer2ForTX(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetHeaders(txv, flow_flags, &b, &b_len, thread_buf) != 1)
|
||||
@@ -413,9 +413,9 @@ void DetectHttpHeaderRegister(void)
|
||||
|
||||
g_http_header_buffer_id = DetectBufferTypeGetByName("http_header");
|
||||
|
||||
g_keyword_thread_id = DetectRegisterThreadCtxGlobalFuncs("http_header",
|
||||
HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_keyword_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http_header", HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http2.header", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
}
|
||||
|
||||
@@ -472,7 +472,7 @@ static bool GetHttp2HeaderData(DetectEngineThreadCtx *det_ctx, const void *txv,
|
||||
} else {
|
||||
kw_thread_id = g_h2_response_header_thread_id;
|
||||
}
|
||||
void *hdr_td = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, kw_thread_id);
|
||||
void *hdr_td = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, kw_thread_id);
|
||||
if (unlikely(hdr_td == NULL)) {
|
||||
return false;
|
||||
}
|
||||
@@ -491,7 +491,7 @@ static bool GetHttp1HeaderData(DetectEngineThreadCtx *det_ctx, const void *txv,
|
||||
kw_thread_id = g_response_header_thread_id;
|
||||
}
|
||||
HttpMultiBufHeaderThreadData *hdr_td =
|
||||
DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, kw_thread_id);
|
||||
SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, kw_thread_id);
|
||||
if (unlikely(hdr_td == NULL)) {
|
||||
return false;
|
||||
}
|
||||
@@ -582,9 +582,9 @@ void DetectHttpRequestHeaderRegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_request_header", "HTTP header name and value");
|
||||
g_http_request_header_buffer_id = DetectBufferTypeGetByName("http_request_header");
|
||||
DetectBufferTypeSupportsMultiInstance("http_request_header");
|
||||
g_request_header_thread_id = DetectRegisterThreadCtxGlobalFuncs("http_request_header",
|
||||
g_request_header_thread_id = SCDetectRegisterThreadCtxGlobalFuncs("http_request_header",
|
||||
HttpMultiBufHeaderThreadDataInit, NULL, HttpMultiBufHeaderThreadDataFree);
|
||||
g_h2_request_header_thread_id = DetectRegisterThreadCtxGlobalFuncs("http2_request_header",
|
||||
g_h2_request_header_thread_id = SCDetectRegisterThreadCtxGlobalFuncs("http2_request_header",
|
||||
SCHttp2ThreadMultiBufDataInit, NULL, SCHttp2ThreadMultiBufDataFree);
|
||||
}
|
||||
|
||||
@@ -618,9 +618,9 @@ void DetectHttpResponseHeaderRegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_response_header", "HTTP header name and value");
|
||||
g_http_response_header_buffer_id = DetectBufferTypeGetByName("http_response_header");
|
||||
DetectBufferTypeSupportsMultiInstance("http_response_header");
|
||||
g_response_header_thread_id = DetectRegisterThreadCtxGlobalFuncs("http_response_header",
|
||||
g_response_header_thread_id = SCDetectRegisterThreadCtxGlobalFuncs("http_response_header",
|
||||
HttpMultiBufHeaderThreadDataInit, NULL, HttpMultiBufHeaderThreadDataFree);
|
||||
g_h2_response_header_thread_id = DetectRegisterThreadCtxGlobalFuncs("http2_response_header",
|
||||
g_h2_response_header_thread_id = SCDetectRegisterThreadCtxGlobalFuncs("http2_response_header",
|
||||
SCHttp2ThreadMultiBufDataInit, NULL, SCHttp2ThreadMultiBufDataFree);
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ static InspectionBuffer *GetRequestData2(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetHeaderValue(txv, STREAM_TOSERVER, HEADER_NAME, &b, &b_len, thread_buf) != 1)
|
||||
@@ -143,7 +143,7 @@ static InspectionBuffer *GetResponseData2(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetHeaderValue(txv, STREAM_TOCLIENT, HEADER_NAME, &b, &b_len, thread_buf) != 1)
|
||||
@@ -221,7 +221,7 @@ static void DetectHttpHeadersRegisterStub(void)
|
||||
|
||||
DetectBufferTypeSetDescriptionByName(BUFFER_NAME, BUFFER_DESC);
|
||||
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
BUFFER_NAME, SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_buffer_id = DetectBufferTypeGetByName(BUFFER_NAME);
|
||||
|
||||
@@ -127,7 +127,7 @@ void DetectHttpHHRegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_host",
|
||||
"http host");
|
||||
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http_host", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_http_host_buffer_id = DetectBufferTypeGetByName("http_host");
|
||||
@@ -163,7 +163,7 @@ void DetectHttpHHRegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_raw_host",
|
||||
"http raw host header");
|
||||
|
||||
g_http2_raw_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_raw_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http_raw_host", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_http_raw_host_buffer_id = DetectBufferTypeGetByName("http_raw_host");
|
||||
@@ -275,7 +275,7 @@ static InspectionBuffer *GetData2(DetectEngineThreadCtx *det_ctx,
|
||||
if (buffer->inspect == NULL) {
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetHostNorm(txv, &b, &b_len, thread_buf) != 1)
|
||||
@@ -297,7 +297,8 @@ static InspectionBuffer *GetRawData2(DetectEngineThreadCtx *det_ctx,
|
||||
if (buffer->inspect == NULL) {
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_raw_thread_id);
|
||||
void *thread_buf =
|
||||
SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_raw_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ void DetectHttpRawHeaderRegister(void)
|
||||
|
||||
DetectBufferTypeRegisterValidateCallback("http_raw_header",
|
||||
DetectHttpRawHeaderValidateCallback);
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http2.raw_header", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_http_raw_header_buffer_id = DetectBufferTypeGetByName("http_raw_header");
|
||||
@@ -220,7 +220,7 @@ static InspectionBuffer *GetData2(DetectEngineThreadCtx *det_ctx,
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetHeadersRaw(txv, flow_flags, &b, &b_len, thread_buf) != 1)
|
||||
|
||||
@@ -203,8 +203,8 @@ void DetectHttpStartRegister(void)
|
||||
|
||||
g_buffer_id = DetectBufferTypeGetByName(BUFFER_NAME);
|
||||
|
||||
g_keyword_thread_id = DetectRegisterThreadCtxGlobalFuncs(KEYWORD_NAME,
|
||||
HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
g_keyword_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
KEYWORD_NAME, HttpHeaderThreadDataInit, &g_td_config, HttpHeaderThreadDataFree);
|
||||
|
||||
SCLogDebug("keyword %s registered. Thread id %d. "
|
||||
"Buffer %s registered. Buffer id %d",
|
||||
|
||||
@@ -116,7 +116,7 @@ void DetectHttpUARegister(void)
|
||||
DetectBufferTypeSetDescriptionByName("http_user_agent",
|
||||
"http user agent");
|
||||
|
||||
g_http2_thread_id = DetectRegisterThreadCtxGlobalFuncs(
|
||||
g_http2_thread_id = SCDetectRegisterThreadCtxGlobalFuncs(
|
||||
"http_user_agent", SCDetectThreadBufDataInit, NULL, SCDetectThreadBufDataFree);
|
||||
|
||||
g_http_ua_buffer_id = DetectBufferTypeGetByName("http_user_agent");
|
||||
@@ -196,7 +196,7 @@ static InspectionBuffer *GetData2(DetectEngineThreadCtx *det_ctx,
|
||||
if (buffer->inspect == NULL) {
|
||||
uint32_t b_len = 0;
|
||||
const uint8_t *b = NULL;
|
||||
void *thread_buf = DetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
void *thread_buf = SCDetectThreadCtxGetGlobalKeywordThreadCtx(det_ctx, g_http2_thread_id);
|
||||
if (thread_buf == NULL)
|
||||
return NULL;
|
||||
if (SCHttp2TxGetUserAgent(txv, &b, &b_len, thread_buf) != 1)
|
||||
|
||||
Reference in New Issue
Block a user