return NULL;
}
-static void HTPStateSetTxLogged(void *alstate, void *vtx, LoggerId bits)
-{
- htp_tx_t *tx = (htp_tx_t *)vtx;
- HtpTxUserData *tx_ud = (HtpTxUserData *) htp_tx_get_user_data(tx);
- if (tx_ud)
- tx_ud->logged = bits;
-}
-
-static LoggerId HTPStateGetTxLogged(void *alstate, void *vtx)
-{
- htp_tx_t *tx = (htp_tx_t *)vtx;
- HtpTxUserData *tx_ud = (HtpTxUserData *) htp_tx_get_user_data(tx);
- if (tx_ud != NULL)
- return tx_ud->logged;
-
- return 0;
-}
-
static int HTPStateGetAlstateProgressCompletionStatus(uint8_t direction)
{
return (direction & STREAM_TOSERVER) ? HTP_REQUEST_COMPLETE : HTP_RESPONSE_COMPLETE;
return 0;
}
-static uint64_t HTPGetTxDetectFlags(void *vtx, uint8_t dir)
+static AppLayerTxData *HTPGetTxData(void *vtx)
{
htp_tx_t *tx = (htp_tx_t *)vtx;
HtpTxUserData *tx_ud = htp_tx_get_user_data(tx);
if (tx_ud) {
- if (dir & STREAM_TOSERVER) {
- return tx_ud->detect_flags_ts;
- } else {
- return tx_ud->detect_flags_tc;
- }
- }
- return 0;
-}
-
-static void HTPSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t detect_flags)
-{
- htp_tx_t *tx = (htp_tx_t *)vtx;
- HtpTxUserData *tx_ud = htp_tx_get_user_data(tx);
- if (tx_ud == NULL) {
- tx_ud = HTPMalloc(sizeof(*tx_ud));
- if (unlikely(tx_ud == NULL))
- return;
- memset(tx_ud, 0, sizeof(*tx_ud));
- htp_tx_set_user_data(tx, tx_ud);
+ return &tx_ud->tx_data;
}
- if (dir & STREAM_TOSERVER) {
- tx_ud->detect_flags_ts = detect_flags;
- } else {
- tx_ud->detect_flags_tc = detect_flags;
- }
- return;
+ return NULL;
}
static int HTPRegisterPatternsForProtocolDetection(void)
AppLayerParserRegisterGetStateProgressFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPStateGetAlstateProgress);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_HTTP, HTPStateGetTxCnt);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_HTTP, HTPStateGetTx);
- AppLayerParserRegisterLoggerFuncs(IPPROTO_TCP, ALPROTO_HTTP, HTPStateGetTxLogged,
- HTPStateSetTxLogged);
AppLayerParserRegisterGetStateProgressCompletionStatus(ALPROTO_HTTP,
HTPStateGetAlstateProgressCompletionStatus);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPGetEvents);
AppLayerParserRegisterTruncateFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPStateTruncate);
AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_HTTP,
HTPGetTxDetectState, HTPSetTxDetectState);
- AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_HTTP,
- HTPGetTxDetectFlags, HTPSetTxDetectFlags);
+ AppLayerParserRegisterTxDataFunc(IPPROTO_TCP, ALPROTO_HTTP, HTPGetTxData);
AppLayerParserRegisterSetStreamDepthFlag(IPPROTO_TCP, ALPROTO_HTTP,
AppLayerHtpSetStreamDepthFlag);
#include "app-layer-htp-mem.h"
#include "detect-engine-state.h"
#include "util-streaming-buffer.h"
+#include "rust.h"
#include <htp/htp.h>
/** Now the Body Chunks will be stored per transaction, at
* the tx user data */
typedef struct HtpTxUserData_ {
- /** detection engine flags */
- uint64_t detect_flags_ts;
- uint64_t detect_flags_tc;
-
/* Body of the request (if any) */
uint8_t request_body_init;
uint8_t response_body_init;
uint8_t request_has_trailers;
uint8_t response_has_trailers;
- /* indicates which loggers that have logged */
- uint32_t logged;
-
HtpBody request_body;
HtpBody response_body;
uint8_t request_body_type;
DetectEngineState *de_state;
+ AppLayerTxData tx_data;
} HtpTxUserData;
typedef struct HtpState_ {