suricata
app-layer-parser.h
Go to the documentation of this file.
1 /* Copyright (C) 2007-2025 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 /**
19  * \file
20  *
21  * \author Victor Julien <victor@inliniac.net>
22  * \author Anoop Saldanha <anoopsaldanha@gmail.com>
23  */
24 
25 #ifndef SURICATA_APP_LAYER_PARSER_H
26 #define SURICATA_APP_LAYER_PARSER_H
27 
28 #include "app-layer-protos.h"
29 #include "app-layer-events.h"
30 #include "detect-engine-state.h"
31 // Forward declarations for bindgen
32 enum ConfigAction;
33 typedef struct Flow_ Flow;
36 typedef struct ThreadVars_ ThreadVars;
37 typedef struct File_ File;
38 typedef enum LoggerId LoggerId;
39 // Forward declarations from util-file.h
41 
42 #define APP_LAYER_PARSER_INT_STREAM_DEPTH_SET BIT_U32(0)
43 
44 /* for use with the detect_progress_ts|detect_progress_tc fields */
45 
46 /** should inspection be skipped in that direction */
47 // defined in rust
48 // #define APP_LAYER_TX_SKIP_INSPECT_TS BIT_U8(0)
49 // #define APP_LAYER_TX_SKIP_INSPECT_TC BIT_U8(1)
50 /** is tx fully inspected? */
51 #define APP_LAYER_TX_INSPECTED_TS BIT_U8(2)
52 #define APP_LAYER_TX_INSPECTED_TC BIT_U8(3)
53 /** accept is applied to entire tx */
54 #define APP_LAYER_TX_ACCEPT BIT_U8(4)
55 
56 /** parser has successfully processed in the input, and has consumed
57  * all of it. */
58 #define APP_LAYER_OK (AppLayerResult) { 0, 0, 0 }
59 
60 /** parser has hit an unrecoverable error. Returning this to the API
61  * leads to no further calls to the parser. */
62 #define APP_LAYER_ERROR (AppLayerResult) { -1, 0, 0 }
63 
64 /** parser needs more data. Through 'c' it will indicate how many
65  * of the input bytes it has consumed. Through 'n' it will indicate
66  * how many more bytes it needs before getting called again.
67  * \note consumed (c) should never be more than the input len
68  * needed (n) + consumed (c) should be more than the input len
69  */
70 #define APP_LAYER_INCOMPLETE(c,n) (AppLayerResult) { 1, (c), (n) }
71 
72 int AppLayerParserProtoIsRegistered(uint8_t ipproto, AppProto alproto);
73 
74 /** progress values need to stay under this. */
75 #define APP_LAYER_MAX_PROGRESS 48
76 
77 /***** transaction handling *****/
78 
79 int AppLayerParserSetup(void);
82 
84 
85 /**
86  * \brief Gets a new app layer protocol's parser thread context.
87  *
88  * \retval Non-NULL pointer on success.
89  * NULL pointer on failure.
90  */
92 
93 /**
94  * \brief Destroys the app layer parser thread context obtained
95  * using AppLayerParserThreadCtxAlloc().
96  *
97  * \param tctx Pointer to the thread context to be destroyed.
98  */
100 
101 /**
102  * \brief Given a protocol name, checks if the parser is enabled in
103  * the conf file.
104  *
105  * \param alproto_name Name of the app layer protocol.
106  *
107  * \retval 1 If enabled.
108  * \retval 0 If disabled.
109  */
110 int SCAppLayerParserConfParserEnabled(const char *ipproto, const char *alproto_name);
111 
113 
114 typedef struct AppLayerResult {
115  int32_t status;
116  uint32_t consumed;
117  uint32_t needed;
119 
120 typedef struct StreamSlice {
121  const uint8_t *input;
122  uint32_t input_len;
123  /// STREAM_* flags
124  uint8_t flags;
125  uint64_t offset;
127 
128 static inline const uint8_t *StreamSliceGetData(const StreamSlice *stream_slice)
129 {
130  return stream_slice->input;
131 }
132 
133 static inline uint32_t StreamSliceGetDataLen(const StreamSlice *stream_slice)
134 {
135  return stream_slice->input_len;
136 }
137 
138 /** \brief Prototype for parsing functions */
139 typedef AppLayerResult (*AppLayerParserFPtr)(Flow *f, void *protocol_state,
140  AppLayerParserState *pstate, StreamSlice stream_slice, void *local_storage);
141 
142 typedef struct AppLayerGetTxIterState {
143  union {
144  void *ptr;
145  uint64_t u64;
146  } un;
148 
149 typedef struct AppLayerStateData {
150  uint16_t file_flags;
152 
153 typedef struct AppLayerGetTxIterTuple {
154  void *tx_ptr;
155  uint64_t tx_id;
156  bool has_next;
158 
159 typedef struct AppLayerTxConfig {
160  /// config: log flags
161  uint8_t log_flags;
163 
164 typedef struct GenericVar_ GenericVar;
165 
166 typedef struct AppLayerTxData {
167  /// config: log flags
169 
170  /// The tx has been updated and needs to be processed : detection, logging, cleaning
171  /// It can then be skipped until new data arrives.
172  /// There is a boolean for both directions : to server and to client
175 
176  uint8_t flags;
177 
178  /// logger flags for tx logging api
179  uint32_t logged;
180 
181  /// track file open/logs so we can know how long to keep the tx
182  uint32_t files_opened;
183  uint32_t files_logged;
184  uint32_t files_stored;
185 
186  uint16_t file_flags;
187 
188  /// Indicated if a file tracking tx, and if so in which direction:
189  /// 0: not a file tx
190  /// STREAM_TOSERVER: file tx, files only in toserver dir
191  /// STREAM_TOCLIENT: file tx , files only in toclient dir
192  /// STREAM_TOSERVER|STREAM_TOCLIENT: files possible in both dirs
193  uint8_t file_tx;
194  /// Number of times this tx data has already been logged for signatures
195  /// not using application layer keywords
197 
198  /// detection engine progress tracking for use by detection engine
199  /// Reflects the "progress" of prefilter engines into this TX, where
200  /// the value is offset by 1. So if for progress state 0 the engines
201  /// are done, the value here will be 1. So a value of 0 means, no
202  /// progress tracked yet.
203  ///
206 
207  /// Type of transaction. Meaning is defined by the parser. Used to
208  /// select a state machine. 0 means it is not used.
209  uint8_t tx_type;
210  /// End of TX progress values
211  ///
212  /// toserver end of tx progress value
213  uint8_t tx_type_eop_ts;
214  /// toclient end of tx progress value
215  uint8_t tx_type_eop_tc;
216 
221 
223 
224 /** \brief tx iterator prototype */
226  (const uint8_t ipproto, const AppProto alproto,
227  void *alstate, uint64_t min_tx_id, uint64_t max_tx_id,
228  AppLayerGetTxIterState *state);
229 
230 /***** Parser related registration *****/
231 
232 /**
233  * \param name progress name to get the id for
234  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
235  */
236 typedef int (*AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction);
237 /**
238  * \param id progress value id to get the name for
239  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
240  */
241 typedef const char *(*AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction);
242 
243 typedef int (*AppLayerParserGetFrameIdByNameFn)(const char *frame_name);
244 typedef const char *(*AppLayerParserGetFrameNameByIdFn)(const uint8_t id);
245 
247 int AppLayerParserPreRegister(void (*Register)(void));
248 /**
249  * \brief Register app layer parser for the protocol.
250  *
251  * \retval 0 On success.
252  * \retval -1 On failure.
253  */
254 int AppLayerParserRegisterParser(uint8_t ipproto, AppProto alproto,
255  uint8_t direction,
256  AppLayerParserFPtr Parser);
258  uint8_t ipproto, AppProto alproto, uint8_t direction);
259 void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto,
260  uint32_t flags);
261 void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto,
262  void *(*StateAlloc)(void *, AppProto), void (*StateFree)(void *));
264  void *(*LocalStorageAlloc)(void), void (*LocalStorageFree)(void *));
265 // void AppLayerParserRegisterGetEventsFunc(uint8_t ipproto, AppProto proto,
266 // AppLayerDecoderEvents *(*StateGetEvents)(void *) __attribute__((nonnull)));
268  uint8_t ipproto, AppProto alproto, AppLayerGetFileState (*GetTxFiles)(void *, uint8_t));
269 void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto);
270 void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits);
271 void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto,
272  int (*StateGetStateProgress)(void *alstate, uint8_t direction));
273 void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto,
274  void (*StateTransactionFree)(void *, uint64_t));
275 void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto,
276  uint64_t (*StateGetTxCnt)(void *alstate));
277 void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto,
278  void *(StateGetTx)(void *alstate, uint64_t tx_id));
279 void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto,
282  AppProto alproto, const int ts, const int tc);
283 void AppLayerParserRegisterGetEventInfo(uint8_t ipproto, AppProto alproto,
284  int (*StateGetEventInfo)(
285  const char *event_name, uint8_t *event_id, AppLayerEventType *event_type));
286 void AppLayerParserRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto,
287  int (*StateGetEventInfoById)(
288  uint8_t event_id, const char **event_name, AppLayerEventType *event_type));
289 void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto,
290  AppLayerParserGetFrameIdByNameFn GetFrameIdByName,
291  AppLayerParserGetFrameNameByIdFn GetFrameNameById);
292 void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto,
293  void (*SetStreamDepthFlag)(void *tx, uint8_t flags));
294 void AppLayerParserRegisterGetStateFuncs(uint8_t ipproto, AppProto alproto,
295  AppLayerParserGetStateIdByNameFn GetStateIdByName,
296  AppLayerParserGetStateNameByIdFn GetStateNameById);
297 
298 /** \brief register state<>name funcs for a substate */
299 void SCAppLayerParserRegisterGetTxSubStateFuncs(AppProto alproto, const uint8_t sub_state,
300  AppLayerParserGetStateIdByNameFn GetIdByNameFunc,
301  AppLayerParserGetStateNameByIdFn GetNameByIdFunc);
302 
303 void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto,
304  AppLayerTxData *(*GetTxData)(void *tx));
305 void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto,
306  void (*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig));
308  uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state));
309 
310 /***** Get and transaction functions *****/
311 
313  const AppProto alproto);
314 
315 void *AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto);
316 void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto,
317  void *local_data);
318 
319 
322 void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id);
323 
324 uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction);
326  void *alstate, const uint8_t flags, bool tag_txs_as_inspected);
327 
329 AppLayerDecoderEvents *AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx);
330 AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction);
331 int AppLayerParserGetStateProgress(uint8_t ipproto, AppProto alproto,
332  void *alstate, uint8_t direction);
333 uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate);
334 void *AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id);
336  const AppProto alproto, const uint8_t sub_state, const char *state, const uint8_t dir_flag);
337 const char *AppLayerParserGetSubStateProgressName(const AppProto alproto, const uint8_t sub_state,
338  const uint8_t state, const uint8_t dir_flag);
339 uint8_t AppLayerParserGetSubStateCompletion(const AppProto alproto, const uint8_t sub_state);
340 uint8_t AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction);
341 const char *AppLayerParserGetSubStateName(const AppProto alproto, const uint8_t sub_state);
342 uint8_t AppLayerParserGetMaxSubState(const AppProto alproto);
343 bool AppLayerParserSupportsSubStates(const AppProto alproto);
344 int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name,
345  uint8_t *event_id, AppLayerEventType *event_type);
346 int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id,
347  const char **event_name, AppLayerEventType *event_type);
348 
349 uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction);
350 
351 uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto);
352 
353 bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto);
354 
355 AppLayerTxData *AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx);
356 uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir);
357 AppLayerStateData *AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state);
358 void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto,
359  void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig);
360 
361 /** \brief check if tx (possibly) has files in this tx for the direction */
362 #define AppLayerParserHasFilesInDir(txd, direction) \
363  ((txd)->files_opened && ((txd)->file_tx & (direction)) != 0)
364 
365 /***** General *****/
366 
368  uint8_t flags, const uint8_t *input, uint32_t input_len);
371 int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto);
372 LoggerId AppLayerParserProtocolGetLoggerBits(uint8_t ipproto, AppProto alproto);
373 void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction);
374 void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth);
375 uint32_t AppLayerParserGetStreamDepth(const Flow *f);
376 void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags);
377 int AppLayerParserIsEnabled(AppProto alproto);
378 int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name);
379 const char *AppLayerParserGetFrameNameById(uint8_t ipproto, AppProto alproto, const uint8_t id);
380 /**
381  * \param name progress name to get the id for
382  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
383  */
385  uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction);
386 /**
387  * \param id progress value id to get the name for
388  * \param direction STREAM_TOSERVER/STREAM_TOCLIENT
389  */
391  uint8_t ipproto, AppProto alproto, const int id, uint8_t direction);
392 
393 /***** Cleanup *****/
394 
396  uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate);
397 void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate);
398 
400 
401 void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
402 uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
403 
406 
407 void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir);
408 
409 /***** Unittests *****/
410 
411 #ifdef UNITTESTS
412 void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
413  void (*RegisterUnittests)(void));
415 void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min);
416 #endif
417 
419 void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file);
420 
421 #endif /* SURICATA_APP_LAYER_PARSER_H */
AppLayerParserGetStateProgress
int AppLayerParserGetStateProgress(uint8_t ipproto, AppProto alproto, void *alstate, uint8_t direction)
get the progress value for a tx/protocol
Definition: app-layer-parser.c:1225
AppLayerParserThreadCtxFree
void AppLayerParserThreadCtxFree(AppLayerParserThreadCtx *tctx)
Destroys the app layer parser thread context obtained using AppLayerParserThreadCtxAlloc().
Definition: app-layer-parser.c:356
AppLayerParserGetTx
void * AppLayerParserGetTx(uint8_t ipproto, AppProto alproto, void *alstate, uint64_t tx_id)
Definition: app-layer-parser.c:1245
StreamSlice
Definition: app-layer-parser.h:120
AppLayerParserPostStreamSetup
void AppLayerParserPostStreamSetup(void)
Definition: app-layer-parser.c:289
AppLayerParserGetDecoderEvents
AppLayerDecoderEvents * AppLayerParserGetDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:934
AppLayerTxConfig
Definition: app-layer-parser.h:159
AppLayerParserRegisterGetTx
void AppLayerParserRegisterGetTx(uint8_t ipproto, AppProto alproto, void *(StateGetTx)(void *alstate, uint64_t tx_id))
Definition: app-layer-parser.c:566
ts
uint64_t ts
Definition: source-erf-file.c:55
AppLayerTxData::flags
uint8_t flags
Definition: app-layer-parser.h:176
AppLayerParserRegisterLoggerBits
void AppLayerParserRegisterLoggerBits(uint8_t ipproto, AppProto alproto, LoggerId bits)
Definition: app-layer-parser.c:518
AppLayerGetTxIterState::ptr
void * ptr
Definition: app-layer-parser.h:144
AppLayerParserStateAlloc
AppLayerParserState * AppLayerParserStateAlloc(void)
Definition: app-layer-parser.c:252
AppLayerParserRegisterApplyTxConfigFunc
void AppLayerParserRegisterApplyTxConfigFunc(uint8_t ipproto, AppProto alproto, void(*ApplyTxConfig)(void *state, void *tx, int mode, AppLayerTxConfig))
Definition: app-layer-parser.c:694
AppLayerParserSetEOF
void AppLayerParserSetEOF(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1762
AppLayerParserRegisterGetTxCnt
void AppLayerParserRegisterGetTxCnt(uint8_t ipproto, AppProto alproto, uint64_t(*StateGetTxCnt)(void *alstate))
Definition: app-layer-parser.c:556
DetectEngineState_
Definition: detect-engine-state.h:95
StreamSlice
struct StreamSlice StreamSlice
AppLayerParserGetMaxSubState
uint8_t AppLayerParserGetMaxSubState(const AppProto alproto)
Definition: app-layer-parser.c:1375
AppLayerTxData::tx_type
uint8_t tx_type
Definition: app-layer-parser.h:209
AppLayerParserSupportsSubStates
bool AppLayerParserSupportsSubStates(const AppProto alproto)
Definition: app-layer-parser.c:1382
AppLayerParserRegisterGetFrameFuncs
void AppLayerParserRegisterGetFrameFuncs(uint8_t ipproto, AppProto alproto, AppLayerParserGetFrameIdByNameFn GetFrameIdByName, AppLayerParserGetFrameNameByIdFn GetFrameNameById)
Definition: app-layer-parser.c:653
AppLayerTxData::de_state
DetectEngineState * de_state
Definition: app-layer-parser.h:217
AppLayerParserGetStreamDepth
uint32_t AppLayerParserGetStreamDepth(const Flow *f)
Definition: app-layer-parser.c:1835
SCAppLayerParserReallocCtx
int SCAppLayerParserReallocCtx(AppProto alproto)
Definition: app-layer-parser.c:2009
name
const char * name
Definition: detect-engine-proto.c:48
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:87
AppLayerParserGetSubStateCompletion
uint8_t AppLayerParserGetSubStateCompletion(const AppProto alproto, const uint8_t sub_state)
Definition: app-layer-parser.c:1329
AppLayerParserRegisterSetStreamDepthFlag
void AppLayerParserRegisterSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void(*SetStreamDepthFlag)(void *tx, uint8_t flags))
Definition: app-layer-parser.c:704
AppLayerStateData
Definition: app-layer-parser.h:149
Flow_
Flow data structure.
Definition: flow.h:354
LoggerId
LoggerId
Definition: suricata-common.h:485
SCAppLayerParserConfParserEnabled
int SCAppLayerParserConfParserEnabled(const char *ipproto, const char *alproto_name)
Given a protocol name, checks if the parser is enabled in the conf file.
Definition: app-layer-parser.c:377
UTHAppLayerParserStateGetIds
void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min)
Definition: app-layer-parser.c:231
AppLayerTxData::files_stored
uint32_t files_stored
Definition: app-layer-parser.h:184
AppLayerErrorGetExceptionPolicy
enum ExceptionPolicy AppLayerErrorGetExceptionPolicy(void)
Definition: app-layer-parser.c:179
AppLayerResult::needed
uint32_t needed
Definition: app-layer-parser.h:117
AppLayerTxData
struct AppLayerTxData AppLayerTxData
proto
uint8_t proto
Definition: decode-template.h:0
AppLayerParserProtocolGetLoggerBits
LoggerId AppLayerParserProtocolGetLoggerBits(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1805
AppLayerParserGetFrameIdByName
int AppLayerParserGetFrameIdByName(uint8_t ipproto, AppProto alproto, const char *name)
Definition: app-layer-parser.c:1883
AppLayerParserRegisterGetEventInfoById
void AppLayerParserRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto, int(*StateGetEventInfoById)(uint8_t event_id, const char **event_name, AppLayerEventType *event_type))
Definition: app-layer-parser.c:599
AppLayerGetTxIterTuple::tx_ptr
void * tx_ptr
Definition: app-layer-parser.h:154
AppLayerGetTxIterState::u64
uint64_t u64
Definition: app-layer-parser.h:145
AppLayerParserSetup
int AppLayerParserSetup(void)
Definition: app-layer-parser.c:276
AppLayerTxData::tx_type_eop_ts
uint8_t tx_type_eop_ts
Definition: app-layer-parser.h:213
AppLayerParserRegisterProtocolUnittests
void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto, void(*RegisterUnittests)(void))
Definition: app-layer-parser.c:2116
StreamSlice::flags
uint8_t flags
STREAM_* flags.
Definition: app-layer-parser.h:124
LoggerId
enum LoggerId LoggerId
Definition: app-layer-parser.h:38
AppLayerDecoderEvents_
Data structure to store app layer decoder events.
Definition: app-layer-events.h:33
AppLayerTxConfig
struct AppLayerTxConfig AppLayerTxConfig
SCAppLayerParserRegisterGetTxSubStateFuncs
void SCAppLayerParserRegisterGetTxSubStateFuncs(AppProto alproto, const uint8_t sub_state, AppLayerParserGetStateIdByNameFn GetIdByNameFunc, AppLayerParserGetStateNameByIdFn GetNameByIdFunc)
register state<>name funcs for a substate
Definition: app-layer-parser.c:611
AppLayerParserGetProtocolParserLocalStorage
void * AppLayerParserGetProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:716
AppLayerParserRegisterGetTxFilesFunc
void AppLayerParserRegisterGetTxFilesFunc(uint8_t ipproto, AppProto alproto, AppLayerGetFileState(*GetTxFiles)(void *, uint8_t))
Definition: app-layer-parser.c:508
AppLayerResult
Definition: app-layer-parser.h:114
AppLayerParserFPtr
AppLayerResult(* AppLayerParserFPtr)(Flow *f, void *protocol_state, AppLayerParserState *pstate, StreamSlice stream_slice, void *local_storage)
Prototype for parsing functions.
Definition: app-layer-parser.h:139
AppLayerParserGetTxDetectProgress
uint8_t AppLayerParserGetTxDetectProgress(AppLayerTxData *txd, const uint8_t dir)
Definition: app-layer-parser.c:812
FileApplyTxFlags
void FileApplyTxFlags(const AppLayerTxData *txd, const uint8_t direction, File *file)
Definition: util-file.c:277
AppLayerResult
struct AppLayerResult AppLayerResult
AppLayerParserGetStateProgressCompletionStatus
uint8_t AppLayerParserGetStateProgressCompletionStatus(AppProto alproto, uint8_t direction)
Definition: app-layer-parser.c:1252
SCAppLayerParserStateSetFlag
void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
Definition: app-layer-parser.c:2097
StreamSlice::input_len
uint32_t input_len
Definition: app-layer-parser.h:122
AppLayerParserState_
Definition: app-layer-parser.c:148
StreamSlice::offset
uint64_t offset
Definition: app-layer-parser.h:125
AppLayerTxData
Definition: app-layer-parser.h:166
AppLayerParserGetTransactionLogId
uint64_t AppLayerParserGetTransactionLogId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:783
AppLayerParserRegisterLocalStorageFunc
void AppLayerParserRegisterLocalStorageFunc(uint8_t ipproto, AppProto proto, void *(*LocalStorageAlloc)(void), void(*LocalStorageFree)(void *))
Definition: app-layer-parser.c:496
AppLayerParserRegisterStateProgressCompletionStatus
void AppLayerParserRegisterStateProgressCompletionStatus(AppProto alproto, const int ts, const int tc)
Definition: app-layer-parser.c:584
AppLayerGetTxIterTuple
struct AppLayerGetTxIterTuple AppLayerGetTxIterTuple
AppLayerParserProtoIsRegistered
int AppLayerParserProtoIsRegistered(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:245
AppLayerEventType
AppLayerEventType
Definition: app-layer-events.h:54
AppLayerParserRegisterGetStateFuncs
void AppLayerParserRegisterGetStateFuncs(uint8_t ipproto, AppProto alproto, AppLayerParserGetStateIdByNameFn GetStateIdByName, AppLayerParserGetStateNameByIdFn GetStateNameById)
Definition: app-layer-parser.c:643
SCAppLayerParserStateIssetFlag
uint16_t SCAppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag)
Definition: app-layer-parser.c:2105
AppLayerGetTxIterTuple::tx_id
uint64_t tx_id
Definition: app-layer-parser.h:155
ThreadVars_
Per thread variable structure.
Definition: threadvars.h:58
SCAppLayerParserRegisterParserAcceptableDataDirection
void SCAppLayerParserRegisterParserAcceptableDataDirection(uint8_t ipproto, AppProto alproto, uint8_t direction)
Definition: app-layer-parser.c:464
AppLayerResult::consumed
uint32_t consumed
Definition: app-layer-parser.h:116
AppLayerParserRegisterOptionFlags
void AppLayerParserRegisterOptionFlags(uint8_t ipproto, AppProto alproto, uint32_t flags)
Definition: app-layer-parser.c:475
AppLayerParserRegisterStateDataFunc
void AppLayerParserRegisterStateDataFunc(uint8_t ipproto, AppProto alproto, AppLayerStateData *(*GetStateData)(void *state))
Definition: app-layer-parser.c:684
AppLayerParserGetSubStateProgressName
const char * AppLayerParserGetSubStateProgressName(const AppProto alproto, const uint8_t sub_state, const uint8_t state, const uint8_t dir_flag)
Definition: app-layer-parser.c:1303
AppLayerParserGetTxData
AppLayerTxData * AppLayerParserGetTxData(uint8_t ipproto, AppProto alproto, void *tx)
Definition: app-layer-parser.c:1446
AppLayerParserRegisterTxDataFunc
void AppLayerParserRegisterTxDataFunc(uint8_t ipproto, AppProto alproto, AppLayerTxData *(*GetTxData)(void *tx))
Definition: app-layer-parser.c:674
AppLayerParserGetMinId
uint64_t AppLayerParserGetMinId(AppLayerParserState *pstate)
Definition: app-layer-parser.c:790
AppLayerParserTransactionsCleanup
void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir)
remove obsolete (inspected and logged) transactions
Definition: app-layer-parser.c:988
AppLayerParserDestroyProtocolParserLocalStorage
void AppLayerParserDestroyProtocolParserLocalStorage(uint8_t ipproto, AppProto alproto, void *local_data)
Definition: app-layer-parser.c:728
AppLayerGetTxIterState
Definition: app-layer-parser.h:142
AppLayerParserGetTransactionInspectId
uint64_t AppLayerParserGetTransactionInspectId(AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:805
AppLayerParserHasDecoderEvents
bool AppLayerParserHasDecoderEvents(AppLayerParserState *pstate)
Definition: app-layer-parser.c:1773
AppLayerParserSetTransactionInspectId
void AppLayerParserSetTransactionInspectId(const Flow *f, AppLayerParserState *pstate, void *alstate, const uint8_t flags, bool tag_txs_as_inspected)
Definition: app-layer-parser.c:836
StreamSlice::input
const uint8_t * input
Definition: app-layer-parser.h:121
AppLayerParserRegisterGetTxIterator
void AppLayerParserRegisterGetTxIterator(uint8_t ipproto, AppProto alproto, AppLayerGetTxIteratorFunc Func)
Definition: app-layer-parser.c:576
AppLayerGetTxIterator
AppLayerGetTxIteratorFunc AppLayerGetTxIterator(const uint8_t ipproto, const AppProto alproto)
Definition: app-layer-parser.c:775
AppLayerTxData::guessed_applayer_logged
uint8_t guessed_applayer_logged
Definition: app-layer-parser.h:196
AppLayerParserGetStateNameById
const char * AppLayerParserGetStateNameById(uint8_t ipproto, AppProto alproto, const int id, uint8_t direction)
Definition: app-layer-parser.c:1873
AppLayerParserGetSubStateName
const char * AppLayerParserGetSubStateName(const AppProto alproto, const uint8_t sub_state)
Definition: app-layer-parser.c:1352
AppLayerTxData::txbits
GenericVar * txbits
Definition: app-layer-parser.h:219
AppLayerParserGetTxFiles
AppLayerGetFileState AppLayerParserGetTxFiles(const Flow *f, void *tx, const uint8_t direction)
Definition: app-layer-parser.c:958
AppLayerParserGetEventInfo
int AppLayerParserGetEventInfo(uint8_t ipproto, AppProto alproto, const char *event_name, uint8_t *event_id, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1387
detect-engine-state.h
Data structures and function prototypes for keeping state for the detection engine.
AppLayerGetTxIterTuple
Definition: app-layer-parser.h:153
SCAppLayerParserSetStreamDepth
void SCAppLayerParserSetStreamDepth(uint8_t ipproto, AppProto alproto, uint32_t stream_depth)
Definition: app-layer-parser.c:1824
AppLayerTxData::detect_progress_ts
uint8_t detect_progress_ts
Definition: app-layer-parser.h:204
AppLayerTxData::logged
uint32_t logged
logger flags for tx logging api
Definition: app-layer-parser.h:179
AppLayerGetTxIterState
struct AppLayerGetTxIterState AppLayerGetTxIterState
AppLayerParserRegisterTxFreeFunc
void AppLayerParserRegisterTxFreeFunc(uint8_t ipproto, AppProto alproto, void(*StateTransactionFree)(void *, uint64_t))
Definition: app-layer-parser.c:546
AppLayerParserDeSetup
int AppLayerParserDeSetup(void)
Definition: app-layer-parser.c:302
ConfigAction
ConfigAction
Definition: util-config.h:27
AppLayerParserGetFrameNameById
const char * AppLayerParserGetFrameNameById(uint8_t ipproto, AppProto alproto, const uint8_t id)
Definition: app-layer-parser.c:1892
AppLayerFramesFreeContainer
void AppLayerFramesFreeContainer(Flow *f)
Definition: app-layer-parser.c:193
File_
Definition: util-file.h:146
AppLayerParserIsEnabled
int AppLayerParserIsEnabled(AppProto alproto)
simple way to globally test if a alproto is registered and fully enabled in the configuration.
Definition: app-layer-parser.c:1787
flags
uint8_t flags
Definition: decode-gre.h:0
AppLayerGetFileState
Definition: util-file.h:44
AppLayerParserGetFrameNameByIdFn
const char *(* AppLayerParserGetFrameNameByIdFn)(const uint8_t id)
Definition: app-layer-parser.h:244
AppLayerParserGetStateData
AppLayerStateData * AppLayerParserGetStateData(uint8_t ipproto, AppProto alproto, void *state)
Definition: app-layer-parser.c:1453
AppLayerParserApplyTxConfig
void AppLayerParserApplyTxConfig(uint8_t ipproto, AppProto alproto, void *state, void *tx, enum ConfigAction mode, AppLayerTxConfig)
Definition: app-layer-parser.c:1464
AppLayerParserSetTransactionLogId
void AppLayerParserSetTransactionLogId(AppLayerParserState *pstate, uint64_t tx_id)
Definition: app-layer-parser.c:797
GenericVar_
Definition: util-var.h:53
AppLayerTxData::updated_tc
bool updated_tc
Definition: app-layer-parser.h:173
AppLayerTxData::files_opened
uint32_t files_opened
track file open/logs so we can know how long to keep the tx
Definition: app-layer-parser.h:182
AppLayerParserRegisterStateFuncs
void AppLayerParserRegisterStateFuncs(uint8_t ipproto, AppProto alproto, void *(*StateAlloc)(void *, AppProto), void(*StateFree)(void *))
Definition: app-layer-parser.c:485
AppLayerParserRegisterUnittests
void AppLayerParserRegisterUnittests(void)
Definition: app-layer-parser.c:2124
AppLayerParserGetStateNameByIdFn
const char *(* AppLayerParserGetStateNameByIdFn)(const int id, const uint8_t direction)
Definition: app-layer-parser.h:241
AppLayerParserStateCleanup
void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1920
AppLayerTxData::tx_type_eop_tc
uint8_t tx_type_eop_tc
toclient end of tx progress value
Definition: app-layer-parser.h:215
AppLayerTxData::detect_progress_tc
uint8_t detect_progress_tc
Definition: app-layer-parser.h:205
AppLayerParserRegisterGetStateProgressFunc
void AppLayerParserRegisterGetStateProgressFunc(uint8_t ipproto, AppProto alproto, int(*StateGetStateProgress)(void *alstate, uint8_t direction))
Definition: app-layer-parser.c:536
tv
ThreadVars * tv
Definition: fuzz_decodepcapfile.c:33
AppLayerStateData
struct AppLayerStateData AppLayerStateData
app-layer-events.h
AppLayerTxConfig::log_flags
uint8_t log_flags
config: log flags
Definition: app-layer-parser.h:161
AppLayerParserRegisterProtocolParsers
void AppLayerParserRegisterProtocolParsers(void)
Definition: app-layer-parser.c:2043
AppLayerResult::status
int32_t status
Definition: app-layer-parser.h:115
AppLayerParserGetFirstDataDir
uint8_t AppLayerParserGetFirstDataDir(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1412
AppLayerParserGetSubStateProgressId
int8_t AppLayerParserGetSubStateProgressId(const AppProto alproto, const uint8_t sub_state, const char *state, const uint8_t dir_flag)
Translate name to progress value for a substate sub_state. Calls the registered callbacks.
Definition: app-layer-parser.c:1270
AppLayerTxData::files_logged
uint32_t files_logged
Definition: app-layer-parser.h:183
AppLayerGetTxIterTuple::has_next
bool has_next
Definition: app-layer-parser.h:156
AppLayerParserGetStateIdByNameFn
int(* AppLayerParserGetStateIdByNameFn)(const char *name, const uint8_t direction)
Definition: app-layer-parser.h:236
AppLayerParserGetTxCnt
uint64_t AppLayerParserGetTxCnt(const Flow *, void *alstate)
Definition: app-layer-parser.c:1238
SCAppLayerParserRegisterLogger
void SCAppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:527
AppLayerParserRegisterParser
int AppLayerParserRegisterParser(uint8_t ipproto, AppProto alproto, uint8_t direction, AppLayerParserFPtr Parser)
Register app layer parser for the protocol.
Definition: app-layer-parser.c:452
AppLayerParserGetStateIdByName
int AppLayerParserGetStateIdByName(uint8_t ipproto, AppProto alproto, const char *name, uint8_t direction)
Definition: app-layer-parser.c:1858
AppLayerParserProtocolHasLogger
int AppLayerParserProtocolHasLogger(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1797
app-layer-protos.h
AppLayerParserThreadCtxAlloc
AppLayerParserThreadCtx * AppLayerParserThreadCtxAlloc(void)
Gets a new app layer protocol's parser thread context.
Definition: app-layer-parser.c:329
AppLayerParserSetStreamDepthFlag
void AppLayerParserSetStreamDepthFlag(uint8_t ipproto, AppProto alproto, void *state, uint64_t tx_id, uint8_t flags)
Definition: app-layer-parser.c:1840
AppLayerTxData::events
AppLayerDecoderEvents * events
Definition: app-layer-parser.h:218
AppLayerGetTxIteratorFunc
AppLayerGetTxIterTuple(* AppLayerGetTxIteratorFunc)(const uint8_t ipproto, const AppProto alproto, void *alstate, uint64_t min_tx_id, uint64_t max_tx_id, AppLayerGetTxIterState *state)
tx iterator prototype
Definition: app-layer-parser.h:226
AppLayerParserPreRegister
int AppLayerParserPreRegister(void(*Register)(void))
Definition: app-layer-parser.c:2027
AppLayerParserThreadCtx_
Definition: app-layer-parser.c:60
SCAppLayerTxDataCleanup
void SCAppLayerTxDataCleanup(AppLayerTxData *txd)
Definition: app-layer-parser.c:823
AppLayerParserStateFree
void AppLayerParserStateFree(AppLayerParserState *pstate)
Definition: app-layer-parser.c:264
AppLayerParserGetEventsByTx
AppLayerDecoderEvents * AppLayerParserGetEventsByTx(uint8_t ipproto, AppProto alproto, void *tx)
Definition: app-layer-parser.c:942
AppLayerTxData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:186
AppLayerParserRegisterGetEventInfo
void AppLayerParserRegisterGetEventInfo(uint8_t ipproto, AppProto alproto, int(*StateGetEventInfo)(const char *event_name, uint8_t *event_id, AppLayerEventType *event_type))
Definition: app-layer-parser.c:663
ExceptionPolicy
ExceptionPolicy
Definition: util-exception-policy-types.h:26
AppLayerParserParse
int AppLayerParserParse(ThreadVars *tv, AppLayerParserThreadCtx *tctx, Flow *f, AppProto alproto, uint8_t flags, const uint8_t *input, uint32_t input_len)
Definition: app-layer-parser.c:1554
AppLayerParserGetFrameIdByNameFn
int(* AppLayerParserGetFrameIdByNameFn)(const char *frame_name)
Definition: app-layer-parser.h:243
SCAppLayerParserTriggerRawStreamInspection
void SCAppLayerParserTriggerRawStreamInspection(Flow *f, int direction)
Definition: app-layer-parser.c:1813
AppLayerParserSupportsFiles
bool AppLayerParserSupportsFiles(uint8_t ipproto, AppProto alproto)
Definition: app-layer-parser.c:1436
AppLayerStateData::file_flags
uint16_t file_flags
Definition: app-layer-parser.h:150
AppLayerGetTxIterState::un
union AppLayerGetTxIterState::@7 un
AppLayerTxData::file_tx
uint8_t file_tx
Definition: app-layer-parser.h:193
AppLayerTxData::updated_ts
bool updated_ts
Definition: app-layer-parser.h:174
AppLayerTxData::config
AppLayerTxConfig config
config: log flags
Definition: app-layer-parser.h:168
AppLayerParserGetEventInfoById
int AppLayerParserGetEventInfoById(uint8_t ipproto, AppProto alproto, uint8_t event_id, const char **event_name, AppLayerEventType *event_type)
Definition: app-layer-parser.c:1399
AppLayerParserStateProtoCleanup
void AppLayerParserStateProtoCleanup(uint8_t protomap, AppProto alproto, void *alstate, AppLayerParserState *pstate)
Definition: app-layer-parser.c:1903
AppLayerParserGetTransactionActive
uint64_t AppLayerParserGetTransactionActive(const Flow *f, AppLayerParserState *pstate, uint8_t direction)
Definition: app-layer-parser.c:1419