From c98f597831bc957350387ec2425bb720bb77ca98 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Sun, 7 Jun 2020 16:06:01 +0200 Subject: [PATCH] ftp: support AppLayerTxData --- src/app-layer-ftp.c | 56 +++++---------------------------------------- src/app-layer-ftp.h | 9 ++------ 2 files changed, 8 insertions(+), 57 deletions(-) diff --git a/src/app-layer-ftp.c b/src/app-layer-ftp.c index e23b105657..cab6f7ac05 100644 --- a/src/app-layer-ftp.c +++ b/src/app-layer-ftp.c @@ -939,24 +939,10 @@ static DetectEngineState *FTPGetTxDetectState(void *vtx) } -static uint64_t FTPGetTxDetectFlags(void *vtx, uint8_t dir) +static AppLayerTxData *FTPGetTxData(void *vtx) { FTPTransaction *tx = (FTPTransaction *)vtx; - if (dir & STREAM_TOSERVER) { - return tx->detect_flags_ts; - } else { - return tx->detect_flags_tc; - } -} - -static void FTPSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags) -{ - FTPTransaction *tx = (FTPTransaction *)vtx; - if (dir & STREAM_TOSERVER) { - tx->detect_flags_ts = flags; - } else { - tx->detect_flags_tc = flags; - } + return &tx->tx_data; } static void FTPStateTransactionFree(void *state, uint64_t tx_id) @@ -1133,17 +1119,6 @@ out: SCReturnStruct(APP_LAYER_OK); } -static void FTPStateSetTxLogged(void *state, void *vtx, LoggerId logged) -{ - FTPTransaction *tx = vtx; - tx->logged = logged; -} - -static LoggerId FTPStateGetTxLogged(void *state, void *vtx) -{ - FTPTransaction *tx = vtx; - return tx->logged; -} static AppLayerResult FTPDataParseRequest(Flow *f, void *ftp_state, AppLayerParserState *pstate, const uint8_t *input, uint32_t input_len, @@ -1221,24 +1196,10 @@ static DetectEngineState *FTPDataGetTxDetectState(void *vtx) return ftp_state->de_state; } -static void FTPDataSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags) -{ - FtpDataState *ftp_state = (FtpDataState *)vtx; - if (dir & STREAM_TOSERVER) { - ftp_state->detect_flags_ts = flags; - } else { - ftp_state->detect_flags_tc = flags; - } -} - -static uint64_t FTPDataGetTxDetectFlags(void *vtx, uint8_t dir) +static AppLayerTxData *FTPDataGetTxData(void *vtx) { FtpDataState *ftp_state = (FtpDataState *)vtx; - if (dir & STREAM_TOSERVER) { - return ftp_state->detect_flags_ts; - } else { - return ftp_state->detect_flags_tc; - } + return &ftp_state->tx_data; } static void FTPDataStateTransactionFree(void *state, uint64_t tx_id) @@ -1340,12 +1301,8 @@ void RegisterFTPParsers(void) AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_FTP, FTPGetTxDetectState, FTPSetTxDetectState); - AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_FTP, - FTPGetTxDetectFlags, FTPSetTxDetectFlags); - AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_FTP, FTPGetTx); - AppLayerParserRegisterLoggerFuncs(IPPROTO_TCP, ALPROTO_FTP, FTPStateGetTxLogged, - FTPStateSetTxLogged); + AppLayerParserRegisterTxDataFunc(IPPROTO_TCP, ALPROTO_FTP, FTPGetTxData); AppLayerParserRegisterLocalStorageFunc(IPPROTO_TCP, ALPROTO_FTP, FTPLocalStorageAlloc, FTPLocalStorageFree); @@ -1367,12 +1324,11 @@ void RegisterFTPParsers(void) AppLayerParserRegisterTxFreeFunc(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataStateTransactionFree); AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataGetTxDetectState, FTPDataSetTxDetectState); - AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_FTPDATA, - FTPDataGetTxDetectFlags, FTPDataSetTxDetectFlags); AppLayerParserRegisterGetFilesFunc(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataStateGetFiles); AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataGetTx); + AppLayerParserRegisterTxDataFunc(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataGetTxData); AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_FTPDATA, FTPDataGetTxCnt); diff --git a/src/app-layer-ftp.h b/src/app-layer-ftp.h index 52e302c635..d535ce87c3 100644 --- a/src/app-layer-ftp.h +++ b/src/app-layer-ftp.h @@ -135,11 +135,7 @@ typedef struct FTPTransaction_ { /** id of this tx, starting at 0 */ uint64_t tx_id; - uint64_t detect_flags_ts; - uint64_t detect_flags_tc; - - /** indicates loggers done logging */ - uint32_t logged; + AppLayerTxData tx_data; /* for the request */ uint32_t request_length; @@ -211,8 +207,7 @@ typedef struct FtpDataState_ { FtpRequestCommand command; uint8_t state; uint8_t direction; - uint64_t detect_flags_ts; - uint64_t detect_flags_tc; + AppLayerTxData tx_data; } FtpDataState; void RegisterFTPParsers(void);